在上一节中,我们回顾了Linux下文件的相关属性,其中包括权限内容。而文件的权限除了属主属组和其他用户的三位rwx外,还有一位特殊权限。
同时,对于文件访问也有更加细致的控制,也就是通过访问控制列表的方式来进行限制。
这一节,我们就来了解这两个内容。
文件特殊权限位
当我们通过chmod修改文件权限的时候,后面一般加上 644 或者 755 等这样代表权限的数值。其实,这里我们就默认忽略了特殊权限位,实际上 644 应该为 0644,而前面的 0 就代表了三位特殊权限位,他们分别是 SUID、SGID和Sticky。
SUID
一般在用户去运行文件的时候,使用的是当前用户的权限,比如user1用户在运行 ls 命令的时候,使用的就是文件 /bin/ls 的 other 用户的权限。
如果将 /bin/ls 文件的SUID权限置位为1,则在user1用户使用 /bin/ls 命令的时候,其权限就会做出临时调整,将其属主的临时修改为 root 来执行这个命令。
所以SUID置位时,在运行某程序的时候,相应进程的属主是程序文件自身的属主,而不是启动者的属主。
配置:chmod u+s FILE #如果该文件本身就具有执行权限,SUID就会显示为s,否则显示为S;
chmod u-s FILE #删除掉SUID的特殊权限;
如下图:DataWarning.sh具有执行权限,则SUID位置位为s,同时,文件JudgeFile1.sh没有执行权限,SUID位置位为S;
SGID
运行程序的时候,相应进程的属组是程序文件自身的属组,而不是启动该程序用户的属组权限;
配置:chmod g+s FILE
chmod g-s FILE
同样的,如果属组权限有执行权限,则显示为s,如果没有执行权限,则显示为S。
Sticky
粘贴位,在一个公共目录下,每个用户都可以创建文件,都可以删除自己所创建的文件,但是不能删除别人的文件,而 /tmp 目录默认就是具有这个权限的目录;
配置:chmod o+t DIR
chmod o-t DIR
同样的,如果other权限上拥有执行权限就显示为t,如果没有执行权限就显示为T;
SUID和SGID,以及Sticky位三位权限加起来就是我们所说的特殊权限位,如果用二进制表示则为:
000 | 无特殊权限 |
001 | 拥有sticky权限 |
010 | 拥有SGID权限 |
011 | 拥有sticky+SGID权限 |
100 | 拥有SUID权限 |
101 | 拥有SUID+sticky权限 |
110 | 拥有SUID+SGID权限 |
111 | 拥有SUIG+SGID+sticky权限 |
这里,如果我们想通过8进制数字添加相应的权限,则在原本权限前面去写这些特殊权限位即可,例如:chmod 7755 /path/somepath #给somepath文件添加了SUID+SGID+sticky权限;
添加遮罩码,则和普通权限相同。例如:umask 0022;
文件的访问控制列表
通过特殊权限位,我们可以调用文件的属主和属组的权限;同时,通过文件的访问控制列表,我们可以限制那些用户能够访问该文件,那些用户不能访问该文件。这样进一步控制文件的访问权限,提高文件的安全性。
例如,tom用户创建一个文件file1,则file1的属主和属组都是tom,当jerry用户去访问file1的时候,他就是用的是other权限;这样就会存在一个问题,为了让jerry用户访问file1,则tom需要将file1的other权限改为rw权限,此时,其他的用户也能通过other权限访问到该文件了。
所以,这时候,我们需要指定只有jerry能够访问这个file1文件的话,就需要使用文件的访问控制列表;
配置命令:setfacl和getfacl
setfacl
-m 设定facl
u:user:prem #给属主添加用户权限
g:group:prem #给属组添加用户权限
-x 取消facl
u:user #取消属主的用户权限
g:group #取消属组的用户权限
例如:setfacl -m u:hadoop:rw /etc/inittab #指定hadoop用户在访问/etc/inittab文件的时候,拥有rw权限;
setfacl -m g:hadoop:rw /etc/inittab
setfacl -x g:hadoop #取消用户组hadoop的权限;
getfacl
这个命令就是用来查看setfacl的配置情况;