内容概括:
1 、文件默认权限和umask
2 、可执行的特殊权限suid 、sgid 和sticky
3 、访问控制列表(ACL)
第一部分:文件默认权限和umask
linux下文件的权限表示方式:
r 可读(数字表示:4)、w 可写(数字表示:2)、x 可执行(数字表示:1)
目录最大权限是777,也用是rwx ;普通文件最大权限是666 。
下面我分别创建了一个目录和一个文件,可以看到目录的权限是755 文件的权限是644 。这里的755和644就是文件的默认权限,也就是默认创建文件时文件的权限。
下面就来讨论下这个默认权限是怎么得到的:
说到默认权限就不得不说umask
umask 就是权限掩码,做用umask命令可以查看系统设置的权限掩码。
部分人对umask的误解:(有些书上也这么认为:)
目录默认权限=777-umask=777-022=755
文件默认权限=666-umask=666-022=644
看上起好像是那么回事,其实并不是那样。看下面的例子就知道了:
现在用上面的公式好像就不行了吧。
那看看到底是怎么得出这个权限的。
如上图: umask是033 dir是744 file是644 目录的基数是777,文件的基数是666
umask 的033 写成二制数为:0000 0011 0011
首先对umask的值做NOT运算(求反运算)得:1111 1100 1100
目录基数777的转二进制数:0111 0111 0111
文件基数666的转二进制数:0110 0110 0110
那么默认权限就是基数权限数二进制数与取反的umask二进制数做位与运算得到的。
目录基数权限:777 0111 0111 0111
umask :033:~umask: 1111 1100 1100
按位与运算得: 0111 0100 0100
转十进制数得: 7 4 4
所得目录默认权限即为:744
文件基数权限:666 0110 0110 0110
~umask : 1111 1100 1100
按位运算得: 0110 0100 0100
转十进制得: 6 4 4
所得文件默认权限即为:644
umask的作用:如果没有umask的影响,全体创建的文件就会具备666权限,目录具备777权限。这样文件最基本的安全都将得不到保障。所以umask至关重要。
红帽企业版Linux系统的默认umask是002,root用户的umask是022
修改umask值,并在每次开机启动都生效。
第二部分:可执行的特殊权限suid 、sgid 和sticky
suid :应用于二进制可执行文件用户权限位上,执行该文件者可临时拥有该文件拥有人的权限。
当我们用umask查看权限掩码时如0022,前面第一个"0"的位置就是特殊权限位。
4代表suid;2代表sgid;1代表sticky。
/usr/bin/passwd这个命令是来修改用户密码的,然而修改用户密码就是对/etc/passwd这个文件进行操作。这个文件只对root用户有读写权限,普通用户是无法对这个文件进行操作的。所以suid就在这里应用上了,如图/usr/bin/passwd已经具有了suid权限,那么变通用户执行/usr/bin/passwd这个命令时就具有了该今天拥有人root的权限了,理所当然的就可以对/etc/passwd这个文件进行读写操作了。
去掉/usr/bin/passwd的suid权限,结果普通用户无法修改自己密码了。
改过来,普通用户可以修改自己密码了。
有suid却没有执行权限时显示的是" S "
sgid :应用文件组群权限位上,执行该文件者可临时拥有该文件群组的权限,应用目录上时,在此目录里创建文件/目录会继承该目录的组。
sticky:仅应用在其他人权限位的目录上面,在此应用目录下,仅root用户和文件拥有人才能删除文件。
suid应用于文件跟suid相似,没什么好说的,看下用在目录上的效果。
通常把sgid 与sticky 一起使用.
目录的sgid会继承
/tmp目录应用了stick
第三部分:访问控制列表(ACL)
安装系统时分的区默认是带有ACL选项的,只有带有ACL选项的设备才具备ACL的属性,这样就可以用ACL做更细致的权限控制.
编辑/etc/fstab 下次启动自动加载ACL选项.
重新挂载/opt,已经有acl属性了.
只对其他人做ACL,其ACL权限优先,但该文件本身拥有人的权限高于ACL
setfacl -m 设置acl属性. u 用户 g 组 (d 默认权限,只对目录做且只针对当前目录的下一级目录)
getfacl 查询ACL权限.(其他位上多了个"+" 号)
getfacl -b 文件/目录 清除所有ACL权限
getfacl -k 目录 去掉default 权限