Linux权限管理ACL权限,文件特殊权限,chattr权限,sudo权限
一 ACL权限
,我们来假设这么一种场景,在真实项目中有一个目录project,它的所属主的权限是rwx,它的所属组的权限也是rwx,其他人没有任何权限,我们的员工一般都会划分到所属组里,来完成日常工作,但是这个时候来了一个新员工,这个员工对linux操作不太熟悉,管理员只想给它分配读和执行的权限,不想给它写的权限,防止他误删文件或是其他,我们该怎么办呢,新建一个组?文件夹只能有一个所属组,把其他人的权限给读和执行,这样更不安全,所以这时ACL权限就有用武之地了,我们可以利用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 文件名
2 SetGID
SetGID针对文件的作用:
只有可执行的二进制文件可以设定SGID权限,命令执行者要对该命令具有x执行权限,在执行命令的过程中,组身份升级为该程序文件的属组,执行完恢复
举个例子,我们看下locate命令
我们知道在执行locate命令的时候,是去查询数据库
用户在执行locate命令的时候,组身份变为slocate组,而查询数据库时,slocate组具有读的权限,所有可以查询,查询完,恢复本身组的身份
SetGID针对目录的作用:
普通用户必须对此用户具有r和x权限,才能进入该目录,普通用户在此目录中的有效组会变成此名录的属组,若普通用户对此目录拥有w权限,那么新建的文件的默认属组是这个目录的数组
我们看到dtest目录的属组权限是r-s,这个s就是SGID权限,有了这个之后,新建的abc文件的属组就是root了,而不是st2
设定SetGID
2代表SGID
chmod 2755 文件名
chmod g+s 文件名
取消SetGID
chmod 755 文件名
chmod g-s 文件名
3 Sticky BIT
SBIT粘着位的作用:
SBIT只对目录有效,普通用户对该目录拥有W和X权限,如果没有SBIT,由于用户有W
权限,可以随便删除该目录下的文件,一旦有了SBIT,就算用户有W权限,也不能随便删除其他用户从黄金的文件
设置SBIT
chmod 1755 目录名
chmod o+t 目录名
取消SBIT
chmod 755 目录名
chmod o-t 目录名
三 chattr权限
命令格式
chattr [+-=] 选项 文件或目录名
+增加权限
- 删除权限
= 等于某权限
选项
i:如果对文件设置i选项,那么不允许对文件删除,改名,也不能添加和修改数据
lsattr是查看chattr属性
如果对目录设置i属性,那么只能修改该目录下的数据,不能新建和删除文件
a:如果对文件设置a属性,那么只能在文件中添加数据,不能修改也不能删除数据
如果对目录设置a属性,那么只允许在目录中建立和修改文件,不能删除文件。
四 sudo权限
把本来只有root可以执行的命令赋予普通用户
sudo的操作对象是系统命令
执行visudo命令
比如我现在想赋予st2用户重启服务器的命令
st2 ALL=/sbin/shutdown -r now
然后我们切换到st2
可以用sudo -l查看可用的命令
那么在执行的时候
sudo shutdown -r now即可
好了,Linux权限管理ACL权限,文件特殊权限,chattr权限和sudo权限就总结到这里,如有问题,欢迎指正,谢谢。