1. 文件默认权限: umask
umask
0022
umask -S #Symbolic, 以符号类型的方式显示权限
u=rwx,g=rx,o=rx
#设置当前用户的umask:
umask 0002
#整体配置文件为/etc/bashrc
2. 文件隐藏属性: chattr, lsattr
- chattr只能在Ext2/Ext3的文件系统上面生效
#chattr (设置文件或目录的隐藏属性, 较多选项需要root来设置)
chattr [+-=] [ASacdistu] filename
+: 新增一个特殊参数
-: 删除一个特殊参数
=: 仅有后面接的参数
A: 当你访问此文件(或目录)时, 他的访问时间不会被修改, 可避免I/O较慢的过度访问磁盘
S: 进行文件修改时, "同步"写入磁盘
* a: 文件只能增加数据(不能通过编辑器追加), 不能删除和修改, 包括文件的重命名, 移动
c: 自动将文件压缩, 读取时自动解压, 存储时也是先压缩再存储(对大文件特别有效) #compress v.压缩
d: 当dump程序被执行时,它可以让一个文件(或目录)"不会被备份"
* i: 一个文件"不可被删除, 修改, 移动, 设置连接也无法写入或添加数据" #immutable a.不可变的
s: 若这个文件被删除, 则此文件会被完全从磁盘中删除 (srcure deletion)
u: 与s相反, 若这个文件被删除, 其实数据内容还在磁盘中, 可以使用来找回该文件 #undelete a.复原
#lsattr (显示文件或目录的特殊属性)
lsattr [-adR] filename
-a: 将隐藏文件的属性也秀出来
-d: 若后面接的是目录, 仅列出目录本身的属性
-R: 连子目录的属性一并显示
#实例:
chattr +aij /home/alex/
lsattr -d /home/alex/
SUID, SGID, SBIT
文件特殊权限
1. SUID
Set UID, # -rwsrwxr-x
限制:
#1. 仅对二进制程序(binary program)有效, 对目录无效
#2. 执行者对该程序具备 x 权限
#3. 本权限仅在执行过程(running time)中有效
功能:
#1. 执行者在执行过程中将具有所有者(owner)的权限
#2. SUID仅可用在二进制程序上, 不能用在shell script上.
#3. 因为shell script只是将很多二进制文件调进来执行而已. 所以SUID的权限部分, 还是要看shell
# script中调用的程序的设置, 而不是看shell script本身.
2. SGID
Set GID, # -rwxrwsr-x
文件:
#1. 对二进制程序有效
#2. 执行者对该程序具备 x 权限
#3. 执行者在执行程序时会暂时获得程序用户组的支持
目录:
#1. 用户对此目录具备 rx 权限, 则可进入该目录
#2. 用户在此目录下的有效用户组(effective group)将变成此目录的用户组
#3. 若用户在此目录下具备 w 权限, 则在此目录下创建的文件的用户组为此目录的用户组
#注: 一般用户对此目录具有 rwx 权限时, 在此目录中创建的新文件的用户组为一般用户的私有组.
3. SBIT
Set Bit, 只对目录有效.
功能:
#1. 用户对此目录具有 wx 权限
#2. 当用户在此目录下创建文件时, 仅自己和root才有权对该文件进行删除, 重命名, 移动等操作
4. SUID, SGID, SBIT权限设置
4 SUID
2 SGID
1 SBIT
chmod 5775 /home/alex
chmod ug=rwxs,o+t /home/alex/permission_test.sh
#注: 大写的S和T, 表示原本位置上无此权限.
ACL
access contral list, 访问控制列表
是系统附加的特殊属性, 因此与文件系统有关.
1. setfacl
set file access control list.
#用法
#setfacl [-bkRd] [{-m|-x} acl参数] filename
# -m --modify
# -x --remore
# -d 设置默认的aclcanshu,只对目录有效, 在该目录新建的数据会引用此默认值.
# -b 删除所有的ACL设置参数.
#如何使ACL权限设置能被子目录(包括文件)所"继承"?
# d:[ug]:用户列表:[rwx]
#实例:
# 使alex在/tmp/grouptest下面一直具有默认的rx权限
# setfacl d:u:alex:rx /tmp/grouptest
2. getfacl
get file access control list.
#用法
#getfacl filename
ln
make links between files.
1. 硬连接
hard link
多个文件对应到同一个inode号码, 只是在某个目录下新建一条文件名连接到某inode号码的关联记录.
#用法:
# ln 源文件 目标文件
# ln /etc/contab /root/crontab
#真正多出来的只是block块中的一条实际数据block块对应的inode记录.
限制:
# 1. 不能跨文件系统
# 2. 不能连接到目录
# 因为如果使用硬连接连接到目录时, 连接的数据需要连同被连接目录下的所有数据都建立连接.
# 举例:
# 比如你要将/etc使用硬连接创建一个/etc_hd的目录时, 那么在/etc_hd下的所有文件名都需要
# 与/etc下的文件建立硬连接, 而不仅是/etc_hd与/etc建立硬连接而已. 同时/etc_hd内部创建一个
# 新文件时, 连带的, /etc内的数据有得要创建一次hard link, ==> 因此造成环境相当大的复杂度.
2. 软连接
symboilc link, 符号连接, 即快捷方式.
软连接就是创建一个新文件, 这个新文件会让数据的读取指向目标文件的文件名.
新文件的block中记录的不是实际文件的inode号, 而是中间文件的inode号.
#用法:
# ln [-sf] 源文件 目标文件
# -s 建立symbolic link
# -f --force, remove existing destination files后创建连接文件
手工创建用户
不要创建纯数字用户, 系统会搞不清楚那是 "UID" 还是 "账号".
#1. 手工创建用户组(vi /etc/group)
#2. 用户组同步(grpconv)
#3. 手工创建用户(vi /etc/passwd)
#4. 密码同步(pwconv) 注: 此时/etc/passwd和/etc/shadow文件内均无密码
#5. 创建密码(passwd normal_user)
#6. cp -a /etc/skel/ /home/normal_user/
#7. 修改文件权限(chown -R normal_user:normal_user /home/normal_user)
本文基于<鸟哥的Linux私房菜>, 归纳整理, 在此致谢鸟哥.