SUID

这是设置用户 ID(Set User ID) 的缩写,这意味着我们正在为任何特定文件或者目录的用户所有者分配特殊权限。

现在SUID是什么意思,为什么我们要使用 SUID?

分配一个用户 SUID 意味着你给他另外的权限,例如:用户所有者权限超过正常权限,他已经使用 suid 运行某个目录中的任何可执行文件。

让我通过一个例子更清楚地了解上面的语句:
默认情况下,Linux 中有许多可执行的二进制文件,我们将它们用作必须以超级用户身份运行的命令,例如:root 用户,但如果允许普通用户运行这些命令会怎样。
现在在这种情况下,即使我们给了他 sudo 访问权限,他也将无法运行这些命令,因为这些命令被预定义为只能以 root 身份运行,而不能以其他人身份运行。

例如 :

mount, umount,ping, passwd, chage etc.

现在上面提到的命令只能以超级用户身份运行。
所以当你检查这些命令的权限时

# ls -l /bin/ping
-rwsr-xr-x. 1 root root 36892 Jan 19 2011 /bin/ping
# ls -l /bin/mount
-rwsr-xr-x. 1 root root 73996 Dec 8 2011 /bin/mount
# ls -l /bin/ping
-rwsr-xr-x. 1 root root 36892 Jan 19 2011 /bin/ping

现在,正如我们在用户权限部分所看到的,在执行权限的地方有另外的小(s)

这意味着所有这些命令都设置了 SUID,如果普通用户被授予 sudo 权限来运行这些命令,他们将以用户所有者的权限运行它,在上述所有情况下都是 root。

分配SUID权限

有两种方法可以分配suid

  • 八进制 (4)
  • 符号 (u+s)

八进制法

# chmod 4744 /myscrip.sh
# ls -l
-rwsr--r--. 1 root root 0 Oct 16 11:33 /myscript.sh

符号方法

# chmod u+s /myscript.sh
# ls -l
-rwsr--r--. 1 root root 0 Oct 16 11:34 /myscript.sh
Linux 中的特殊权限 SUID

我们为什么要使用 SUID?

  • 我希望我已经在上面解释了这部分,但仍然让我用另一个例子添加描述。
  • 现在有一些可执行文件的所有者是 jack,它只能由 jack 运行,但我们仍然希望 cherry 运行该文件,因此在这种情况下,我将为其分配一个 SUID,而不是更改该文件的所有者,以便 cherry 可以还使用 jack 的权限运行该文件。
  • 因此,这将消除复杂性部分,而且不仅允许任何其他被允许运行该文件的随机用户将使用 jack 的所有权运行相同的文件,因为我不需要每次都更改所有者来运行相同的文件可执行文件。

理解SUID中大写S和小写s的区别

在任何文件或者目录上应用 SUID 后,我们可能有时会看到大写的 S 和小写的 s
现在它对其工作没有太大影响,而是告诉我们有关当前应用于文件的权限的一些信息。

如果我们分配 SUID 的文件具有用户可执行权限,那么在应用 SUID 后,我们将获得一个小写(s),但如果用户在应用 SUID 之前没有执行权限,那么我们将在应用 SUID 后以大写(S)结束.

在用户所有者没有可执行权限的情况下应用 SUID 之前

# chmod 644 /myscript.sh
# ls -l-rw-r--r--. 1 root root 0 Oct 16 11:35 /myscript.sh

在用户所有者没有可执行权限的情况下应用 SUID 后

# chmod 4644 /myscript.sh
# ls -l
-rwSr--r--. 1 root root 0 Oct 16 11:35 /myscript.sh

在对用户所有者应用具有可执行权限的 SUID 之前

# chmod 744 /myscript.sh
# ls -l
-rwxr--r--. 1 root root 0 Oct 16 11:36 /myscript.sh

对用户所有者应用具有可执行权限的 SUID 后

# chmod 4744 /myscript.sh
# ls -l
-rwsr--r--. 1 root root 0 Oct 16 11:36 /myscript.sh

相信你已经理解了大写S和小写s的区别

使用 SUID 查找所有可执行文件

# find/-perm +4000

其中 +4000 是我们在八进制方法中用于分配权限的 ID。

删除 SUID 权限

八进制法

# chmod 0744 /myscript.sh
# ls -l
-rwxr--r--. 1 root root 0 Oct 16 11:35 /myscript.sh

符号方法

# chmod u-s /myscript.sh
# ls -l
-rwxrw-rw-. 1 root root 0 Oct 16 11:36 /myscript.sh
日期:2020-06-02 22:17:35 来源:oir作者:oir