特殊权限set_uid、set__gid、stick_bit

特殊权限平常用的不多,但也是需要了解的。

 

1、set_uid 权限

 

先看一下,下图例子,

150255_H9Gj_3867265.png

文件名称显示为红色,文件权限中出现了 s ,这个 s 就是 set_uid 权限,可以实现普通用户自己更改 passwd 密码。改密码的文件在 /etc/shadow 中,来看一下这个文件的权限,见下图,

150302_pa3B_3867265.png

可以看到 /etc/shadow 这个文件的权限是 000 ,非常安全的一个文件。但是 root 用户是超级用户,有着很高的权力,它就可以更改这个文件的权限。而普通用户就没有办法实现这个功能,所以才有了 set_uid 这个 s 权限。

下面来介绍 set_uid 的用法。

passwd 有 set_uid 权限,当普通用户执行这个命令的时候,就会临时拥有 root 的身份,此时就可以更改密码。给一个文件设置 set_uid 权限的前提是,这个文件是一个二进制文件并且是可执行的文件。怎么样给一个文件授权 set_uid 权限?先来看一下普通用户的权限,重新打开一个 Xshell 窗口来查看,

150308_OQLV_3867265.png

上图中,su 命令是切换当前用户的命令,下次再详细说明。先进入普通用户 lys 里面,再打开 root 目录,就会发现普通用户是没有权限进入 root 目录的。

回到原来的 Xshell 窗口,现在可以通过给 ls 命令设置 set_uid 权限,就可以使普通用户 lys 临时拥有 root 用户的权限。见下图,

150315_EmpC_3867265.png

执行完命令 chmod u+s /usr/bin/ls 之后,再用命令 ls -l /usr/bin/ls 查看,可以看到 ls 有了 set_uid 权限,而且文件 /usr/bin/ls 也变成了红色,说明 ls 命令现在拥有了 root 权限,可以更改密码了。

再到另一个 Xshell 窗口上来看一下 root 目录,

150323_13Xp_3867265.png

上图说明命令 ls 拥有了 set_uid 权限之后,可以进入 root 目录。再重新查看用户权限,发现权限没有变,还是 550 ,普通用户还是没有查看 root 的权限,说明这是 ls 命令有了 set_uid 权限的结果。

要去掉 set_uid 权限也是很简单的,输入命令 chmod u-s /usr/bin/ls 即可。

我们现在更改一下命令的写法,来讨论一下,

150333_2KIj_3867265.png

上图可以看出,第一个红色框框里面是一个大写的 S ,为什么会有大写的 S 出现呢?这是因为所有者没有 x 权限,后面给所有者加上 x 权限之后大写的 S 就变成 小写的 s 了。实际上大写的 S 和小写的 s ,是没有什么影响的。见下图,

150341_MLCK_3867265.png

150346_6Aah_3867265.png

ls 命令还是可以进入 root 目录的。

150354_QF0l_3867265.png

root 用户也是可以执行。

 

目录也是可以加上 set_uid 权限的,但是没有什么意义。

 

2、set_gid 权限

 

set_gid 权限和 set_uid 权限挺像的,只不过 set_gid 权限是作用在所属组上面的,同样也是一个小写的 s 。还是用命令 ls 来做实验,见下图,

150403_E2Gq_3867265.png

先将所有者上的 s 权限还原,输入命令 chmod u=rwx /usr/bin/ls ,回车,再在所属组上加入 s 权限,输入命令 chmod g+s /usr/bin/ls ,然后用命令 ls -l /usr/bin/ls 查看,可以发现用户权限上,所属组上有一个小 s ,而且文件的颜色变成黄色了。

set_gid 权限和 set_uid 权限作用在文件上的功能是相像的,set_uid 是作用在所有者上,临时拥有了所有者的身份。而 set_gid 是作用在所属组上,临时拥有的是所属组的身份。

来看一下,加上了 set_gid 权限,还是可以查看 root 目录的,

150410_Av7m_3867265.png

root 目录对于所属组来讲,权限是 r-x ,有读和打开的权限,所以设置 set_gid 权限的时候,是可以查看 /root/ 目录的。

 

set_gid 权限也是可以作用在目录上,见下图,

150418_oNWH_3867265.png

目录的颜色没有变化,所属组上的权限有了小 s 。现在来更改一下当前的所属组为 user1,见下图,

150425_3p44_3867265.png

可以看出,set_gid 命令作用所属组 user1 上,之后创建的子目录和子文件上所属组的用户全部是 user1 ,然后去掉所属组上的 set_gid 权限之后,再次创建的子目录和子文件上所属组的用户全部是 root 。

以上说明, root 用户创建的目录和文件,不仅所有者是 root ,所属组也是 root 。只有在所属组上增加 set_gid 权限之后,接下来创建的子目录和子文件,会跟随所属组,而不是默认 root 。

 

3、stick_bit 权限

 

系统上的目录 /tmp/ ,是有这个 stick_bit 权限的。见下图,

150439_uFC1_3867265.png

可以看到文件的颜色是绿色,其他用户的权限上有个 t ,这个 t 就是 stick_bit ,也可以叫做防删除位。

150443_7Pes_3867265.png

/tmp/ 这个目录的权限是 777 ,即所有的用户都可以对这个目录进行读取、编辑和执行。其中,其他用户权限上 t 是包含了 x 权限的。

来做一个实验,见下图,

150450_sSy1_3867265.png

在 lys 用户下,进入目录 /tmp/ ,再创建一个文件 lys ,可以看到 lys 所有者和所属组都是 lys 用户。接着输入命令 vi lys ,来随便写一些文件内容,见下图,

150459_h73J_3867265.png

保存退出后,再更改一下 lys 目录的权限,见下图,

150504_YJEA_3867265.png

再回到原来的 Xshell 窗口,切换当前的用户为 user1 ,

150511_IhOI_3867265.png

再看一下,是否可以更改 lys 这个文件,

150521_el7m_3867265.png

保存退出后,发现可以更改。再看看能不能删除?

150526_41Pm_3867265.png

不能删除,所以 t 这个权限位置叫防删除位,只有有权限的用户才能删除,比如 root 用户。

总结一下,stick_bit 这个权限的命令就是防止别人删除自己的文件,root 用户除外。

 

还有一个知识点,见下图,

150537_N3tl_3867265.png

150541_EpBH_3867265.png

创建一个新的目录 user1 ,然后设置用户权限为 777 。进入另一个 Xshell 窗口,查看一下,

150545_oXpO_3867265.png

进入目录 user1 ,新建一个文件 1.txt ,再新建一个目录 234 ,发现都可以执行,且所有者和所属组都是 lys 用户。再回到原来的 Xshell 窗口,见下图,

150550_4FJv_3867265.png

进入目录 user1 ,查看该目录下有一个子目录 234 和一个子文件 1.txt ,再查看一下这两者的用户权限,然后执行删除命令,发现都可以被删除。这时候就会有疑问了,普通用户对 234 和 1.txt 根本就没有 w 权限,为什么可以删除这两者?

这是因为,关键在于我们删除的这个文件所在的目录有没有 w 权限,而不是看删除的文件本身有没有 w 权限。这两者所在的目录是 user1 ,而 user1 目录刚才设置的权限是 777 ,即任何用户都有可读、可写和可执行命令。但是,我们如果在这边加上 stick_bit 权限,防删除位,就不可以删除了。

 

这三个权限都不太容易理解,好在我们在工作中几乎用不到,做个了解就可以了。

转载于:https://my.oschina.net/u/3867265/blog/1825252

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值