[RHEL7基础篇-7] 特殊权限

[RHEL7基础篇-7] 特殊权限

简介

在前面的章节当中([RHEL7基础篇-4] 用户和权限)已经说明过用户的普通权限(r:读权限,w:写权限,x:执行权限,并分别对应了用户权限、组权限和其他用户权限),想要详细回顾普通权限的全部内容,请看前面的 [RHEL7基础篇-4] 。而相对应的特殊权限就是SUID(特殊用户权限)、SGID(特殊组权限)、SBIT(特殊粘滞位权限)

特殊权限

  1. 特殊权限的存在
    下面用三个例子来演示特殊权限位的存在

    1)

    # ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    

    特殊用户权限
    在这里可以看到/usr/bin/passwd的用户位权限并不是常见的rwx,而是rws,而rws当中的s就是SUID(特殊用户权限);
    若这里把s当中的执行权限删掉,则会出现S(大写s)
    没有权限则表示为S

    2)

    # ls -l /usr/bin/wall
    -r-xr-sr-x. 1 root tty 15344 Jun 10  2014 /usr/bin/wall
    

    特殊组权限
    在这里可以看到/usr/bin/wall的组位权限并不是常见的r-x,而是r-s,而r-s当中的s就是SGID(特殊组权限);
    与1)相同这里删除组的执行权限后s也变为了S
    删除组执行权限后变为S

    3)

    # ls -ld /tmp/
    drwxrwxrwt. 15 root root 4096 Dec 27 13:34 /tmp/
    

    粘滞位表示为t
    在这里可以看到/tmp/的组位权限并不是常见的rwx,而是rwt,而rwt当中的t就是SBIT(特殊粘滞位权限);
    与1)相同这里删除执行权限后t也变为了T
    删除执行位权限后变为T

    注:这里 u-x或g-x或o-x后并不代表SUID或SGID或SBIT不存在

  2. SUID
    1)SUID是用于二进制的文件当中,但是对目录是无效的!
    2)让一般用户在执行某些二进制的文件的时候,能够暂时拥有该程序(二进制文件)所有者的权限
    3)使用该命令的所属用户的权限来运行,而不是命令执行者的权限。

    SUID作用:
    a:SUID权限仅对二进制程序(binary program)有效;
    b:执行者对于该程序需要具有x的可执行权限;
    c:本权限仅在执行该程序的过程中有效(run-time);
    d:执行者将具有该程序拥有者(owner)的权限。

    实验演示:
    在root用户的家目录下(在某一目录下执行ls命令时候,要看其目录对应的权限)

    # ls  -ld  /root
    ---------普通用户是在/root是没有权限的---------
    dr-xr-x---. 19 root root 4096 Jan  4 09:36 /root
    # ls  -l  /root/
    -----------能看到/root内的一系列文件-----------
    total 14312
    -rw-------.  1 root   root     1832 Jul  5  2019 anaconda-ks.cfg
    drwxrwxr-x  31 clamav 1005     4096 Dec 16  2020 clamav-0.103.0
    ...
    drwxr-xr-x.  2 root   root        6 Jul  5  2019 Templates
    drwxr-xr-x.  2 root   root        6 Jul  5  2019 Videos
    

    普通用户test 使用ls命令查看/root 文件夹下的文件时,提示权限不够
    其他用户无权查看

    当在root用户中给ls命令加个SUID权限时候,就能正常执行了
    /bin/ls 二进制文件添加特殊权限位

    注:通过 chmod 4755 /bin/ls 也能设置为特殊和权限为,这里前面加了4代表SUID的特殊权限位,如果要在group加SUID则是7455,想要取消特殊权限,使用755或u-s即可

    其他用户用特殊权限访问/root
    当test用户执行ls命令的时候是执行了root用户对 /bin/ls 文件的权限

    注:如果通过普通权限也能实现该功能(chmod o+rx /root),使用特殊权限时要谨慎,因为这样开放权限给普通用户是比普通权限来说是要开放得更大的

  3. SGID(Set GID)
    1)对于文件,使用该命令的组群权限来运行;
    2)对于目录,在设置了 SGID权限的目录中创建的文件会继承该目录的组群身份

    实验演示:
    在/tmp/test/下创建目录 a ,并查看对应的权限
    查看新创建的a目录的权限
    为 a 目录增加SGID权限
    为a目录增加SGID权限

    注:通过 chmod 2755 /tmp/test/a 也能设置为特殊和权限为,这里前面加了2代表SGID的特殊权限位,想要取消特殊权限,使用755或g-s即可

    修改 a 目录当前的所属用户和组,并在 a 目录下创建一个文件
    修改所属用户和组

    可以看得出新创建的文件的所属组是跟随了 a 目录所属组的
    当在 a 下创建目录时,不光会继承 a 目录的所属组,也会把SGID继承过来
    新创建的目录2获得了上级目录a的所属组和SGID

  4. SBIT
    粘滞位(Sticky Bit ):在带有粘滞位的目录中的文件只能被文件的所属用户和根用户删除,不管该目录的写入权限是如何设置的(“ t ” 代表粘滞位)

    实验演示:
    /tmp本身的权限为1777
    在具有sbit的目录下,用户若在该目录下具有w和x权限,则当用户在该目录下建立文件或目录时,只有文件的拥有者和root才有权利删除
    只有root才能删除
    注:通过 chmod 1777 /tmp 也能设置为特殊和权限为,这里前面加了1代表SBIT的特殊权限位,想要取消特殊权限,使用777或o-s即可

  5. SUID/SGID/SBIT权限设置
    和前面[RHEL7基础篇-4] 用户和权限说的rwx差不多,特殊权限的添加和删除也有两种方式,一种是字符方式,一种是数字方式

    参数备注
    4SUID = u+s
    2SGID = g+s
    1SBIT = o+t

    在权限设置使用数字设置示例:

    # SUID
    chmod 4755 /tmp/test
    # SGID
    chmod 2755 /tmp/test
    # SBIT
    chmod 1755 /tmp/test
    

    小s和大S的区别:
    小s和大S只出现在user位和group位上,小s代表既有特殊权限位SUID/SGID,又有执行位x,而大S则是仅有特殊权限位SUID/SGID,没有执行位x
    小t和大T的区别:
    小t和大T只出现在other位上,小t代表既有特殊权限位SBIT,又有执行位x,而大T则是仅有特殊权限位SBIT,没有执行位x

  6. SUID/SGID/SBIT权限删除

命令功能
chmod u-s /tmp/test删除/tmp/test的SUID权限
chmod g-s /tmp/test删除/tmp/test的SGID权限
chmod o-t /tmp/test删除/tmp/test的SBIT权限

特殊权限练习

  1. 练习
    公司有一台文件共享服务器,有个公共目录/common,属于pub组;公司有3个部门sales、markets和techs;user1属于sales部门,user2属于markets部门,user3属于techs部门;要求:user1、user2、user3有访问/common目录的权限,并且在/common目录中创建的文件及目录的属组为pub组,而且不能删除其他用户创建的文件及目录,只有自己有权限删除
    新建目录/common,并将他加入pub组,同时保证pub组的人都能在该目录下进行读和写
    # mkdir /common
    # groupadd  pub
    # chgrp  pub /common
    # chmod    g=rwx  /common
    
    新建三个用户并加入对应组,同时都加入pub这个附加组中
    # groupadd sales
    # groupadd   markets
    # groupadd   techs
    # useradd user1  -g  sales
    # echo 123456 |passwd  --stdin user1
    # useradd user2 -g markets
    # echo 123456 |passwd  --stdin user2
    # useradd user3 -g techs
    # echo  123456|passwd  --stdin user3
    # usermod  -G  pub  user1
    # usermod  -G  pub  user2
    # usermod  -G  pub  user3
    # chmod  g+s  /common
    # chmod  o+t /common
    
    验证测试新建对象是否属于pub组
    # su - user1
    # cd   /common
    # touch  user1_file
    # mkdir   user1_d
    # ls  -l    *
    确认user1_file和user1_d是否都属于pub组
    
    验证测试普通用户能否删除其他用户建立的对象
    # exit
    # su  - user2
    # cd  /common
    # rm  -rvf    user1_file
    确认user2能否删除之前user1创建的两个对象
    
    备注:user1\user2\user3都可以进行类似的测试
    

隐藏属性

  1. 隐藏属性的设置
    修改隐藏属性的命令格式:chattr [+=-] [Asacdistu] 文件或目录名

    参数备注
    i不能增删改
    a只能累加

    i
    ![a](https://img-blog.csdnimg.cn/8cc9f3ce10024522a28dfdee83d79899.png
    注:lsattr为查看隐藏属性的命令

    设置隐藏属性 a:

    增加隐藏属性 a
    # chattr +a file2
    覆盖隐藏属性为 a
    # chattr =a file2
    删除隐藏属性 a
    # chattr -a file2
    

    设置隐藏属性 i

    增加隐藏属性 i
    # chattr +i file2
    覆盖隐藏属性为 i
    # chattr =i file2
    删除隐藏属性 i
    # chattr -i file2
    

    查看隐藏属性:

    查看文件的隐藏属性
    # lsattr file2
    查看目录的隐藏属性
    # lsattr /tmp/test
    
  2. 隐藏属性的性质

    1)隐藏属性 a 的性质
    在这里插入图片描述
    无法用vim修改file2的内容
    当加了隐藏属性 a 后,连root也无法删除和无法用vim进行修改,
    可以通过echo数据流将数据累加写入(累加例:echo “456” >> file2),但是如果不是通过累加的方式(>>)而是通过覆盖(>)的方式写入的话是不允许的操作(覆盖例:echo “456” > file2)
    后面讲述标准数据流会介绍 >> 和 > 相关的内容
    无法通过echo覆盖带有隐藏属性a的file2

    2)隐藏属性 i 的性质
    在这里插入图片描述
    :wq!时
    当加了隐藏属性 i 后root也不能再进行增加、修改、删除,比 a 属性更加严格,文件变为了只读文件
    在这里插入图片描述
    甚至连改名都是不行的,基本上对该文件无法做任何操作,如果想要删除只能乖乖的去掉隐藏属性 i 后再删除

    后话:在实际的应用环境当中有时候黑客入侵后对二进制命令(二进制文件)的隐藏属性的修改后会造成连root都无法删除文件的现象,甚至有的情况更加会结合剥夺chattr使用内核的能力导致无法对隐藏属性删除,这时重启可以恢复chattr的内核使用能力。
    当然,存在既有它的道理,隐藏属性可以防止root权限的泛滥,换句话说就算你是root你也不能无法无天,隐藏属性还可以和CAP概念的结合利用来提高系统的容错和安全系数。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JovaZou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值