Linux权限管理之特殊权限

在进行Linux权限管理时会需要一些特殊权限,这部分权限与基本权限一同构成了Linux完整的权限管理体制。注意,以上课程是2017年Tony老师的视频课程,随着Linux技术的进步,Linux权限管理也会面临着更大的安全性挑战,不要一味的认为权限管理课程能够保证不出任何问题。

三、ACL权限(弥补用户对文件管理权限不足的缺陷)
    文件就三个管理身份:所有者、所属组、其他人,当有指定需要人员管理就没办法了
、ACL权限简介与开启
        ※、鉴于上述问题,ACL权限不考虑身份,直接赋予指定用户对文件的管理权限
        ※、查看分区ACL权限是否开启
            dumpe2fs -h /dev/sda5    #查询指定分区详细文件系统信息命令
            -h         #仅显示超级块中信息,不显示磁盘块组的详细信息
        ※、临时开启分区ACL权限
            mount -o remount,acl /
            #重新挂载根分区,并挂载加入ACL权限,-o 特殊挂载  / 根分区
        ※、永久开启分区ACL权限(/etc/fstab文件修改出一点错,会影响系统启动)
            vi /etc/fstab
            UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 11
            #加入ACL,默认defaults是开启ACL权限的,万一不起作用按上面方法
            mount -o remount /
            #重新挂载文件系统或重启系统,使修改生效
、查看与设定ACL权限
    ※、查看ACL命令语法:getfacl 文件名
    ※、设定ACL权限命令语法:setfacl 选项 文件名
                        选项:m      #设定ACL权限
                              x      #删除指定的ACL权限
                              b      #删除所有的ACL权限
                              d      #设定默认ACL权限
                              k      #删除默认ACL权限
                              R      #递归设定ACL权限
    例子:mkdir av            #创建文件夹
          useradd tony        #创建tony用户
          groupadd stu        #创建stu组
          chown tony:stu av   #更改文件所有者和所属组
          chmod 770 av        #更改文件权限
          useradd laowang     #创建老王用户
          passwd lw           #老王的密码
          mv av /home/        #更改文件路径,方便老王可以进入
          setfacl -m u:laowang:rx /av    #给老王赋予rx权限,使用"u:用户名:权限"格式;如果是给用户组设定ACL权限,使用"g:组名:权限"格式
          输入ll命令可以查看到drwxrex---+     .变成了+,证明有ACL权限
          getfacl av          #查看具体的ACL权限
    ※、给用户组设定ACL权限
        groupadd tgroup2      #创建用户组
        setfacl -m g:tgroup2:rwx /av    #为组分配ACL权限      
、最大有效权限与删除ACL权限
   ※、最大有效权限mask:是给用户赋予ACL权限,是需要和mask的权限作逻辑“相与”运算才能得到的用户真正权限
   关于逻辑与:假设有A和B,and是与出来的结果。r为读权限
 
 
Linux特殊权限
Linux特殊权限
 
    注释:比如上面的例子,老王的权限为r-x,mask 的权限为rwx,那么与出权限r-x就是老王的真正权限,因为mask目录默认为rwx最大值(文件的mask默认最大值是r-x),所以一般来说任何与mask相与的权限都是其自身,一般mask最大值,需要可自行更改。比如上述赋予老王权限以后,可以
    setfacl -m m:rx av     #getfacl查看即可看到后面会注释老王的真正权限
   ※、修改最大有效权限
       setfacl -m m:rx 文件名  #设定mask权限为r-x,使用"m:权限"格式
   ※、删除ACL权限
      setfacl -x u:用户名 文件名    #删除指定用户的ACL权限
      setfacl -x g:组名 文件名      #删除指定用户组的ACL权限
      setfacl -b 文件名             #删除文件的所有ACL权限
、默认ACL权限和递归ACL权限
   ※、递归ACL权限:设定目录ACL权限时,所有子文件子目录也有相同的ACL权限
   语法:setfacl -m u:用户名:权限 -R 文件目录     #仅能赋予目录,不能是文件
   注释:只要用递归ACL权限,就会导致权限溢出,即可以进入这个目录或者下级目录,但是目录下的文件也变成可执行的文件了,这就很危险,因此要注意使用。
   ※、默认ACL权限:设定了父目录的默认ACL权限,后续父目录中新建的子文件都会继承父目录的ACL权限。
   语法:setfacl -m d:u:用户名:权限 -R 文件名     #赋予文件不会报错
 注释:递归权限是对当前目录及已经存在的其子目录、子文件赋予ACL权限,而默认ACL权限是对当前目录及后续即将创建的子目录、子文件赋予ACL权限。递归权限赋予文件会报错,而默认权限赋予文件不会报错,但没有任何意义(文件下面不能创建子文件)
 
四、文件特殊权限
   ❶、sudo权限(root用户太忙,日常中需要普通用户执行系统命令操作)
       root把本来只能超级用户执行的命令赋予普通用户执行;
       sudo的操作对象是系统命令  
   ❷、sudo使用(超级用户赋予普通用户)
      visudo         #实际修改的是 /etc/sudoers文件
      root       ALL            =    (ALL)          ALL
      #用户名  被管理主机的地址=(可使用的身份)授权命令(绝对路径)
      #%wheel    ALL          =     (ALL)          ALL
      #%组名  被管理主机的地址=(可使用的身份)授权命令(绝对路径)
      例子1:授权普通用户重启服务器
      visudo
  user1 ALL=/sbin/shutdown -r now
  :wq
(在文档中写入user1 ALL=(ALL) /sbin/shutdown -r now,绝对路径写的越详细,普通用户可执行的其他权限就越小,因为很多命令都带有选项)
  授权的普通用户执行命令方法
  sudu /sbin/shutdown -r now
  在系统上切换用户  su - user1
                    sudo -l           #查看可用的sudo命令
  例子2:授权普通用户可以添加其他用户(查找命令路径whereis 命令名)
  visudo
  user1 ALL=/usr/sbin/useradd     (没有加(ALL)详单与root)
  user1 ALL=/usr/bin/passwd        #授予用户设定密码权限
  授权的普通用户执行命令方法
  sudo /usr/sbin/useradd cangls
  sudo /usr/bin/passwd cangls
  注意:这样写是可以更改root的密码的,所以问题就大了。因此按照下面写:
  user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd " ", !/usr/bin/passwd root
  同样不能赋予 user1 ALL=/bin/vi
               sudo /bin/vi /etc/shadow     #这样就打开了只有root才能打开修改密码的文件
 
五、文件特殊权限(危险权限,禁止使用,只使用系统默认的文件权限)
①、SETUID(简称SUID:u+s)(umask 出来的0022中的第一个数字就是特殊权限位)
     、SetUID的功能(SUID权限格式:-rwsr-xr-x.  u+s:用户+s权限,SUID只对文件)
         ※、条件:
         只有可以执行的二进制程序才能设定SUID权限(小s权限能正常使用,而大S不行,即相当于s=S+x)
         命令执行者要对该程序拥有x权限
         ※、命令执行者在执行该程序时获得程序文件属主身份
         注释:ll /etc/shadow   这个文件权限0000,只有root用户才可以进行更改,而我们知道普通用户是可以更改自己的用户密码的,相对来说也是更改了这个文件。原因在于ll /usr/bin/passwd 这个文件上面:/usr/bin/passwd默认拥有s权限,而且拥有x权限,本身passwd就是可执行的正确命令,满足以上条件的普通用户在更改密码的时候会获得这个文件root的所有者属主身份;
         ※、SUID权限只在该程序执行过程中有效,即身份改变只在执行过程中有效
     、设定SUDI的方法
         4代表SUID:chmod 4755 文件名
                     chmod u+s 文件名
         例如:chmod u+s abc    chmod u-s abc
     、取消SUID的方法
         chmod 0755 文件名
         chmod u-s 文件名
     注意:危险的SUID
         关键目录应严格控制权限。比如/ 根下、/usr 下
         用户的密码设置要严格遵守密码三原则
         对系统中默认应该具有的SUID权限的文件作一列表,定时检查
     检查的shell编好的脚本文件如下
         #!/bin/bash
         find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
         #搜索系统中所有拥有SUID和SGID的文件,并保存到临时目录中
         for i in $(cat /tmp/setuid.check)
         #做循环,每次循环取出临时文件中的文件名
         do
               grep $i /root/suid.log > /dev/null
               #比对这个文件名是否存在模板中
                      if [ "$?" != "0"]
                      #检测上一个命令返回值,如果不为0,证明上一个命令报错
                      then
                           echo "$i isn't in listfile!" >> /root/sui_log_$(date +%F)
                           #不存在模板中,报错并写入报错到日志中
                      fi
          done
          rm -rf /tmp/setuid.check
          #删除临时文件
     运行设置:vi suid_check.sh
               将上述代码去除中文注释粘贴到文件中保存
               chmod 755 suid_check.sh
               chmod u+s abc                #新建测试文件abc
               ./sudi_check.sh                #执行脚本文件
               ls                            #查看列表
               cat suid_log_时间               #查看文件
               rm -rf abc                     #查询测试文件不合法,删除该文件
     危险例子:chmod 4755 /bin/vi
               ll /bin/vi
               /bin/vi /etc/shadow      #就可以修改密码了
②、SETGID(简称SGID:g+s)
    ❶SGID对文件的作用(类似SUID,只是一个针对用户,一个针对组)
        ※、条件:只有可执行的二进制程序才能设置SGID权限
                  命令执行者要对该程序拥有x权限
        ※、命令执行程序时,组身份会升级为该程序文件的属组
        ※、SGID权限同样只在程序执行过程中有效,执行完成即失效
        例子:touch abc
              ll
              chmod g+s abc
              ll
        例子:ll /usr/bin/locate                 #显示搜索命令权限
              显示wx--s--x  ,而实际locate搜索的是下面的数据库
              ll /var/lib/mlocate/mlocate.db     #显示这个数据库权限
              显示w-r-----. SGID对文件的作用应用不广泛,locate是典型
    ❷SEGID针对目录的作用
        ※、条件:普通用户必须对此目录拥有r和x权限才能进入此目录
        ※、普通用户在此目录中的有效组会变成此目录的属组(就是下面的意思)
        ※、 若普通用户对此目录拥有w权限,新建文件的默认属组是这个目录的属组,而不是这个文件本身创立者的所属组 
    ❸、设定SGID
        2代表SGID:chmod 2755 文件名
                    chmod g+s 文件名
    ❹、取消SGID
        CHMOD 0755 文件名
        chmod g-s 文件名
③、sticky BIT(简称SBIT:o+s)(不建议手工建立拥有粘着位的目录)
    ⑴、SBIT粘着位作用
      ※、粘着位目前只对目录有效
      ※、普通用户对该目录拥有rwx权限,即普通用户可以在此目录拥有写入权限
      ※、如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
    ⑵、设置与取消粘着位(drwxrwxrwt)
      ※、设置粘着位    chmod 1755 目录名 或者 chmod o+t 目录名
      ※、取消粘着位    chmod 0777 目录名 或者 chmod o-t 目录名
    ⑶、例如:  ll -d /tmp/   就是一个具有粘着位权限的目录
    注意:虽然不可以删除文件,但是可以更改删除文件里面的内容!!!
六、不可改变位权限(charttr)
⑴、chattr命令格式
    chattr [+ - =] [选项] 文件或目录名   #+增加权限;-删除权限;= 等于某权限
                   a     等价于append(追加)
                   i     等价于insert(插入)
     i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但是不允许建立和删除文件。
     例如:root下文件:chattr +i abc
                        lsattr abc
                   显示:----i--------e- abc         e代表ext4文件
                   注释:上述就想当于对文件进行锁定,文件是只读的,哪怕是root都不能修改、删除。但是可以chattr -i abc 解除锁定
     例如:root下目录:chattr +i 123
                        lsattr 123        #显示-------------------e- 123/ABC
                        lsattr -d 123     #需要加-d才可以显示
                    显示:----i--------e- 123
                    注释:对目录进行锁定,不能删除、创建、改名目录下的文件
     a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性吗,那么只能允许在目录中建立和修改文件,但是不允许删除;
     例如:root下文件:chattr +a dt
                        lsattr dt
                  显示:----a--------e- dt
                  注释:因为系统不能直接判断是对数据增加还是修改,因此vi dt命令执行修改后仍是不能保存的,只能通过echo 数据 >> dt     输出重定向方式保存
     例如:root下目录:chattr +a lw
                        lsattr -d lw/
                   显示:----a--------e- lw/
                   注释:
⑵、查看文件系统属性
    lsattr 选项 文件名
           -a            #显示所有文件和目录
           -d            #若目标是目录,仅列出目录本身的属性,而不是子文件
七、Pam和selinux(大多数用不到的权限)

请按F5,刷新后再评论
  • 全部评论(0
    还没有评论,快来抢沙发吧!