linux之权限管理

为什么要进行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:用户:权利 文件
linux之权限管理
setfacl -m g:用户组:权利 文件
linux之权限管理

查看文件的acl权限
getfacl project
linux之权限管理

最大有效权限mask

设置mask最大有效权限
setfacl -m m:权限 文件
setfacl -m m:rx /tmp/project
linux之权限管理
因为你设定的权限实际是和mask进行相与后得到的权限
mask的默认值是rwx
group里面的所有用户的权限要和mask相与之后得到的是真正的权限
切换到组用户后对a.txt进行修改
linux之权限管理
无法强制修改退出
linux之权限管理
将mask的权限改为rwx之后,切换到组用户再对a.txt进行写
linux之权限管理
可以进行修改
linux之权限管理

删除acl权限

setfacl -x u:用户名 文件名 删除指定用户的acl权限
删除test用户前
linux之权限管理
删除后
linux之权限管理

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

  1. 只有可以执行的二进制文件程序才能设置suid权限
  2. 命令执行者要对该程序拥有x权限
  3. 命令执行者在执行该程序的时候获得该程序文件属主的身份
  4. suid只在该程序执行过程中有效。
    linux之权限管理
    passwd命令在执行是就是暂时使用了root的身份进行执行程序的。
    设置suid
    4代表suid
    chmod 4755 文件名
    chmod u+s 文件名
    去掉uid
    chmod 755 文件名
    chmod u-s 文件名

SGID针对文件的作用

  1. 只有可执行的二进制程序才能设置sgid权限
  2. 命令执行者要对该程序拥有x(执行)权限
  3. 命令执行在执行程序的时候,组身份升级为该程序文件的属组。
  4. sgid只有在命令执行时有效

例如locate命令
linux之权限管理
其他的所有用户都可以执行locate命令,但是在执行locate的时候会将组身份升级为slocate ,而slocate 组队/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令
linux之权限管理

在linux中我们会遇到这样的情况,不同的用户会公用一个目录进行存储文件,恰好对这个目录也有写的权利.就比如/tmp 那么其他的用户可能会误删你创建的文件,因此需要设置sbit
先看下/tmp的权限,可以看出任何用户都可以在该目录下操作,但是后面的t确保了在tmp里面创建的目录只能删除自己创建的
linux之权限管理
linux之权限管理

chattr权限

chattr [+,-,=] 选项 文件
选项

  • i 如果对文件设置i属性,那么不允许对文件进行删除,改名,也不能添加和修改数据,如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许创建和删除文件。
  • a, 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
    只能在命令行使用echo 内容 >> 文件进行追加,使用vi不能进行添加。
    查看权限命令
    lsattr [-d,-a] 文件