📜  linux 权限 s - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:32:42.120000             🧑  作者: Mango

Linux 权限 s - Shell-Bash

在 Linux 中,s 权限位代表 SUID 和 SGID。

SUID(Set User ID)

设置了 SUID 位的可执行文件,当用户执行它时,程序将调用文件所有者的权限来执行,而不是当前用户的权限。这通常用于提高程序的安全性。

例如,让我们创建一个可执行文件 test_suid,并设置 SUID 位:

$ touch test_suid
$ chmod u+x test_suid
$ chmod u+s test_suid
$ ls -l test_suid
-rwsr-xr-x 1 user user 0 Aug 10 10:00 test_suid

现在,我们让另一个用户执行它:

$ sudo -u other_user ./test_suid

此时,test_suid 运行的权限是文件所有者 user 的权限。

SGID(Set Group ID)

设置了 SGID 位的可执行文件,当用户执行它时,程序将调用文件所属组的权限来执行。

例如,假设我们创建了一个名为 test_sgid 的可执行文件,并将其加入一个组 testgroup

$ touch test_sgid
$ chmod u+x test_sgid
$ chmod g+s test_sgid
$ sudo chown user:testgroup test_sgid
$ ls -l test_sgid
-rwxr-sr-x 1 user testgroup 0 Aug 10 10:00 test_sgid

现在,我们让一个普通用户执行它:

$ ./test_sgid

此时,test_sgid 运行的权限是文件所属组 testgroup 的权限。

Shell 和 Bash

Shell 和 Bash 是两种常见的 Unix Shell,也支持 s 权限位。

当 Shell 或 Bash 设置了 SUID 位时,任何用户都可以以该 Shell 或 Bash 的文件所有者的身份运行它。

例如,让我们创建一个名为 myshell 的 Shell 脚本,并设置 SUID 位:

$ echo "whoami" > myshell
$ chmod u+x myshell
$ chmod u+s myshell
$ ls -l myshell
-rwsr-xr-x 1 user user 7 Aug 10 10:00 myshell

现在,让我们运行这个 Shell 脚本:

$ ./myshell

此时,myshell 运行的权限是文件所有者 user 的权限。

总结

在 Linux 中,s 权限位代表 SUID 和 SGID。设置了 SUID 位的可执行文件将以文件所有者的权限来执行,而设置了 SGID 位的可执行文件将以文件所属组的权限来执行。Shell 或 Bash 设置了 SUID 位时,它们也将以文件所有者的身份运行。这些权限位在提高程序的安全性方面非常有用。