zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Shell初学(八)linux下的ACL,linux特殊权限set uid

Linuxsetshell权限 特殊 初学 ACL UID
2023-09-11 14:21:09 时间

【1】ACL的作用

  简单直接解释一下ACL的作用,即把权限的个别化额外添加。

  可以解决如下问题~~比如:

  【1.1】基于用户

    我有10个用户a1-a10,我有一个文件夹/tmp/test,我想给a1-a2 rw的权限,其他人只想给r的权限。

    我们这里就不能通过改变other来实现,因为它改变的是所有用户。

  【1.2】基于用户组

    同理,我有10个用户组b1~b10,我想把一个文件/文件夹额外让b1~b2拥有,但不想给b3~b10拥有。

  主要实现,基于3个命令

  (1)setfacl  (2)getfacl   (3)chacl

 

【2】具体命令之 setfacl、getfack

  (案例看不懂可以先往下看)

  案例1:特定的用户权限添加设置

     setfacl -m u:test:rw /tmp/test  #给test用户添加  /tmp/test 文件夹的 rw权限

  案例2:特定的用户组权限添加设置

     setfacl -m g:test:rx /tmp/test  #给test用户组添加 /tmp/test 文件夹的 rx权限

  案例3:设置所有ACL的有效权限为 r

     setfacl -m m:r  /tmp/test    #设置 /tmp/test 文件夹的ACL有效权限为 r,(mask权限指的是最大,比如该参数m就是 mask的意思,意思是该文件acl权限最大只能是r权限,其余的设置都不生效)即案例1/2中的非mask权限都无效,这里mask只有r,所以acl的权限效用最多只有r 

  

  

 

 

 

  【2.1】我们如何确认文件/文件夹是否有设置ACL权限?

    输入 ll ,未加ACL前

      

 

 

     setfacl -m u:test:rw test  (命令的意思是,让用户test 对当前目录下的test文件夹拥有rw权限)  ,加了ACL后,目录/文件权限列表最后面有个+号

      

 

 

   【2.2】命令中u、g、m的作用与体现

    我们查看我们刚刚运行的

      

 

    这里意思说明引用鸟哥的私房菜中的说明了;

 

       

 

 

     顾名思义,setfacl中的

      【u为 user】  【g为 group】  【m为 mask】: mask要特别说明一下,意思是有效权限(即如果mask只有r权限,那么你给user 用户 rwx权限也没用,user只有r权限有效)

      注意:如果设置MASK权限前,先设置了,user与group,那么会与user/group权限冲突,当以mask权限为准,最终有效权限会以Effective显示。

      $ setfacl -m u:user_name:rwx,g:user_name:rwx   文件/文件名   ,用户组与用户同时授权,以用户为主。

      $ setfacl -m m::r 文件/文件名  mask优先级最高。

      优先级从高到低为  mask/default->user->group

 

    所以,我们刚刚分析的这一句,setfacl -m u:test:rw test

      是设置u:test:rw   即,给与test用户rw的权限。综合起来就是给 test用户 对于当前目录下test文件夹 rw权限。

   【2.3】添加了多个user下的getfacl是什么样子?

      会分别列出来

      

 

 

   【2.4】设置mask 之后,如何查看有效ACL的权限?

      setfacl -m m:r test

      会告诉你,这个组合这些用户的有效权限只有r

      

 

   【2.5】如何给文件夹下所有的文件夹、文件都设置好ACL权限?

    用 setfacl -R 参数即可

   【2.6】如何删除所有的ACL权限?

    用 setfacl -b 即可

      为什么不用-x呢?

        你即使用了setfacl -x删除了所有文件的ACL属性,那个+号还是会出现在文件的末尾.

        所以正确的删除方法应该是用setfacl -b 或者 使用 chacl -B 

   【2.7】如果要同时使用u、g、m 应该怎么写?

    用逗号分隔,比如这样:setfacl -m u:test:rw,m:rwx test

 

   【2.8】d 即 default ,预设ACL 权限

  如果我们想要给一个目录设置,其下所有文件和新建的文件都具有相同属性的ACL权限,我们就要用到default 预设权限。

  案例4:给 /tmp/test 目录加预设权限,给test用户加rw预设权限

      setfacl -m d:u:test:rw /tmp/test

      

 

 

     如图,新建的文件有了预设权限,但原本存在的文件是没有的。

    如果我们想要设置文件夹及下所有的文件夹、文件都具有我们设置的ACL权限,那么应该使用 setfacl -R 参数

【3】特殊权限 

(3.1)set uid 的概念(设置完后显示为s)

即给某一个可执行文件以某一个用户的身份执行,无论谁操作这个文件最后都会以那个用户的身份去运行。

案例:给 vim 任何人执行都以 root 的身份运行vim

# 设置前
-rwxr-xr-x. 1 root root 4025784 Jun 13  2022 /usr/bin/vim

# 设置命令
chmod
u+s /usr/bin/vim

# 设置后
-rwsr-xr-x. 1 root root 4025784 Jun 13  2022 /usr/bin/vim
# 如何是小写s,则表示之前有x权限,如果是 S 则表示之前没有X权限
  

----------. 1 root root 0 Apr 5 15:11 123  # 文件123 修改为不能操作

然后可以用 vim 强制修改 123 文件.

(3.2)set gid(限制完后显示为 s)

 对某个目录设置 gid后,可以使得后续该目录下所有新建文件、目录均继承该目录的 group

touch xyz

chmod g+s xyz

(3.3)t权限(粘滞位)(设置完后显示为 t)

当有一个目录 abc,给了  o+w 权限,所有人都可以在里面创建文件

创建的文件只能创建人修改写入,但A不能修改B创建的文件,但可以删除B创建的文件。同理B也可以删B的权限

这个时候,t 权限就可以解决这个问题,用户之前不能随意删除拥有该权限目录下的其他人的文件

chmod o+t dir

(3.4)chmod 4755,这里的第一位 4表示 uid,2 表示 gid,1表示 t 权限。