一 ACL权限
1 查看和设置ACL权限
好了,我们现在模拟这种情况,首先创建一个工作目录/project,然后给它赋予770权限,创建3个用户,zhangsan,lisi,st,创建一个tgroup组,把zhangsan和lisi添加到tgroup组里,改变project的所属组为tgroup
现在我们这个st用户,我们想特别对待,只给他rx权限,那么就设置ACL权限,我们在设置之前,先查看下ACL权限,用getfacl project
这里没有看到任何特殊权限
下面设置ACL权限
setfacl -m u:st:rx /project/
-m就是添加一个ACL权限,使用u:用户名:权限的格式,给st设置rx权限
我们再来查看下
我们看到多了两行
user:st:r-x,表明st这个用户有了rx权限,mask:rwx,其实用户st真正有的权限,是r-x和mask默认权限相与的结果,下面我们来验证下,比如我在project目录下创建一个文件,然后切换到st用户,看能否删除
,我们发现一开始我们假设的目的达到了,st这个用户只有rx权限,没有w权限,不能随便删除文件。
接下来看下给用户组设定ACL权限,格式是setfacl -m g:tgroup2:rx /project/
比如我们新建一个tgroup2的组,给它rx权限,然后新建一个st2,把st2加入tgroup2组中,给tgroup2组设置ACL权限rx,我们看下st2是不是一样不能删除文件
好了,所有属于这个组的用户有一样的rx权限,注意,组的acl权限同样是跟mask权限与的结果。
2 最大有效权限和删除ACL权限
我们上面说了,ACL权限的最终结果是跟mask权限与的结果,那如果我们想修改这个最大有效权限呢
setfacl -m m:rx 文件名
这样就可以了,这里就不演示了
那刚才我们添加了几个acl权限,如果想删除st1和tgroup2的acl权限
setfacl -x u:st1 文件名
setfacl -x g:tgroup2 文件名
如果想全部删除
setfacl -b 文件名 这样就全都删除了
3 递归ACL权限和默认ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会有相同的ACL权限
setfacl -m u:用户名:权限 -R 父目录
默认ACL权限的作用是,如果给父目录设定了ACL权限,那么父目录中所有新建的子文件都会有默认的ACL权限
setfacl -m d:u:用户名:权限 文件名
二 文件特殊权限
1 SetUID
只有可以执行的二进制程序才能设定SUID权限,命令执行者要对该命令有x执行权限,
命令执行者在执行程序时,可以灵魂附体为文件的属主,SUID权限只在程序的执行过程中有效
举个例子:
我们来看下可执行文件passwd的详细信息
我们看到该可执行文件的 所有者是root,并且权限的用户权限是rws,表明passwd文件具有SUID权限,所以普通用户可以修改自己的密码,普通用户修改自己密码的过程,是灵魂附体为root,然后执行passwd,修改完又恢复自己的身份
我们再来看下cat命令的详细信息
cat命令就没用SUID权限,所以普通用户不能查看/etc/shadow 的内容
设定SUID的方法:
4代表SUID
chmod 4755 文件名
chmod u+x 文件名
取消SUID的方法:
chmod 755 文件名
chmod u-x 文件名