从零开始学习Linux(二十五):文件特殊权限之SetUID

文件的特殊权限主要分为SetUID、SetGID、Sticky BIT三种。
本章节主要是学习SetUID。

1、SetUID的功能

  • 只有可以执行的二进制程序才能设定SetUID权限(非可执行二进制文件并非不能设定,而是设定了也无意义);
  • 命令执行者要对该二进制程序拥有x(可执行)权限;
  • 命令执行者在执行该二进制程序时获得程序文件的所属者身份;
  • SetUID权限只在改程序执行过程中有效(身份改变只是在程序执行过程中,执行结束后自动变化原来的身份);

以用户修改密码举例说明:

在前面章节 从零开始学习Linux(二十):用户配置文件 中,我们学习了用户使用passwd命令修改密码,会修改 /etc/shadow 文件。/etc/shadow 文件的权限是000,如下图所示:

shadow文件权限

继续查看ACL权限,也没有ACL权限,如下图所示:

shadow文件ACL权限

按照之前我们学习到的知识,没有写权限,普通用户是不能够写入文件的。但是Linux系统中非root用户是可以修改密码的,即能够编辑 /etc/shadow 文件。这个就是通过本节SetUID权限实现的。

查看passwd文件的位置,并查看passwd文件的详细信息。如下图所示:

从图中我们可以看到2个比较怪异的地方:
(1)passwd命令背景是红色标记(Linux红色表示危险或错误);
(2)passwd所属者权限是rws(以前都是rwx);

权限s是以前没有看到的,s表示是SetGID权限。

使用cat命令查看shadow文件,整个执行过程如下图所示:

使用cat命令查看/etc/shadow文件和使用passwd命令修改/etc/shadow文件,整个过程对比如下图所示:

到这我们已经说清楚了SetUID权限的功能(类似于Windows系统中的以管理员身份运行,不尽相同)。

2、设定SetUID的方法

2.1、方法一

命令格式:chmod -R 4755 文件名(-R 也可以不加);

说明:4表示SetUID权限,权限可以理解为有4位,之前我们一直设置为三位,是因为首位我们几乎不会用到。首位4表示SetUID权限,首位2表示SetGID权限,首位1表示Sticky BIT权限。

执行命令:

chmod -R 4755 neimenggu

执行过程如下图所示:

可以看到以前的权限是 -rwxr-xr-x+,执行命令后权限是 -rwsr-xr-x+ 。

2.2、方法二

命令格式:chmod -R u+s 文件名(-R 也可以不加);

3、取消SetUID的方法

3.1、方法一

命令格式:chmod -R 755 文件名(-R 也可以不加);

去除首位权限,只保留三位权限位。

3.2、方法二

命令格式:chmod -R u-s 文件名(-R 也可以不加);

执行命令:

chmod -R u-s neimenggu

可以看到,执行命令后,权限从 -rwsr-xr-x+ 又变回 -rwxr-xr-x+。

再次为neimenggu文件赋予rw-r--r--(4644)权限,然后再次查看文件详细信息:

从图中可以看到权限为既不是rwx也不是rws,是rwS。我们说过Linux是严格区分大小写的,所以这显示S不是显示错误。

S表示错误的SetUID权限,要想设置SetUID权限的前提是文件具有执行权限。我们对文件设置rw-r--r--权限,没有执行权限,所以会报错!!!

4、危险的SetUID

SetUID权限非常危险,没有特殊需求不要设置SetUID权限。

对系统中默认具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限。

你可能感兴趣的:(从零开始学习Linux(二十五):文件特殊权限之SetUID)