📅  最后修改于: 2023-12-03 15:32:42.120000             🧑  作者: Mango
在 Linux 中,s 权限位代表 SUID 和 SGID。
设置了 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 位的可执行文件,当用户执行它时,程序将调用文件所属组的权限来执行。
例如,假设我们创建了一个名为 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 是两种常见的 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 位时,它们也将以文件所有者的身份运行。这些权限位在提高程序的安全性方面非常有用。