为什么要进行acl权限管理
一个文件可被操作的用户我们一般分为三类: root ,组用户,其他人
但是我们可能会遇到第四种情况,我们想分配一个权限给新来的用户,这个用户不能拥有组用户的权限,但是权限也要和其他人的不同。
场景:
一家培训机构的管理人员可以看做 root(所有的权限), 组用户相当于学员该有的权限(所有的权限),什么都不是的用户不能进入该机构(没有权限),但是试听人员可以进来听课(听课的权限)
这样就遇到一个问题,对于这类权限的管理对不同的用户该如何分配,
linux只将用户分为三种,这就需要acl权限的管理。
查看acl命令
getfacl 文件
设定acl权限的命令
setfacl 选项 文件名
选型 :
- -m 设定acl权限
- -x 删除指定的acl权限
- -b 删除所有的acl权限
- -d 设置默认的acl权限
- -k 删除默认的acl权限
- -R 递归设定acl权限
zhangsan 和lisi是组用户因此添加到组用户里面,st用户的权限只有r和x,因此最后一条命令就设置了st用户的权利setfacl -m u:用户:权利 文件
setfacl -m g:用户组:权利 文件
查看文件的acl权限getfacl project
最大有效权限mask
设置mask最大有效权限setfacl -m m:权限 文件
setfacl -m m:rx /tmp/project
因为你设定的权限实际是和mask进行相与后得到的权限
mask的默认值是rwx
group里面的所有用户的权限要和mask相与之后得到的是真正的权限
切换到组用户后对a.txt进行修改
无法强制修改退出
将mask的权限改为rwx之后,切换到组用户再对a.txt进行写
可以进行修改
删除acl权限
setfacl -x u:用户名 文件名 删除指定用户的acl权限
删除test用户前
删除后
setfacl -x g:组名 文件名 删除指定用户组的acl权限
同理
删除该文件的所有acl权限setfacl -b /tmp/project
删除之后恢复成默认的权限
递归acl权限setfacl -m u:test:rx -R /project/
不设-R的话只会对该文件设置acl的权限
加上-R的话会对文件下的的子文件设置acl权限
但是在该文件下重新添加文件的话,新创建的文件没有acl权限。
因此要想让新添加的用户也拥有acl权限的话
需要设置默认权限setfacl -m d:u:用户名:权限 -R 文件名
文件特殊权限setUid
- 只有可以执行的二进制文件程序才能设置suid权限
- 命令执行者要对该程序拥有x权限
- 命令执行者在执行该程序的时候获得该程序文件属主的身份
- suid只在该程序执行过程中有效。
passwd命令在执行是就是暂时使用了root的身份进行执行程序的。
设置suid
4代表suid
chmod 4755 文件名
chmod u+s 文件名
去掉uid
chmod 755 文件名
chmod u-s 文件名
SGID针对文件的作用
- 只有可执行的二进制程序才能设置sgid权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行在执行程序的时候,组身份升级为该程序文件的属组。
- sgid只有在命令执行时有效
例如locate命令
其他的所有用户都可以执行locate命令,但是在执行locate的时候会将组身份升级为slocate ,而slocate 组队/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令
在linux中我们会遇到这样的情况,不同的用户会公用一个目录进行存储文件,恰好对这个目录也有写的权利.就比如/tmp
那么其他的用户可能会误删你创建的文件,因此需要设置sbit
先看下/tmp
的权限,可以看出任何用户都可以在该目录下操作,但是后面的t
确保了在tmp里面创建的目录只能删除自己创建的
chattr权限
chattr [+,-,=] 选项 文件
选项
- i 如果对文件设置i属性,那么不允许对文件进行删除,改名,也不能添加和修改数据,如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许创建和删除文件。
- a, 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
只能在命令行使用echo 内容 >> 文件进行追加,使用vi不能进行添加。
查看权限命令
lsattr [-d,-a] 文件
来源:CSDN
作者:sofency
链接:https://blog.csdn.net/qq_43079376/article/details/104074337