Linux 中的特殊权限 SGID

SGID:

这是设置组ID(Set Group ID) 的缩写。
这是分配给任何文件或者目录的权限,以授予普通组成员以组所有者特权运行该文件的另外权限。

这与我在此处为 SUID 解释的非常相似,但有一点不同,这次我们将权限分配给一个完整的组及其组成员,而不是将权限分配给一个特定用户。

例如,我们有一些可执行文件,我们希望 sysadmin 的所有组成员都能够执行它,但该文件只能以 root 身份运行,因此我们为该文件分配了一个 SGID,现在 sysadmin 团队的所有成员都可以以root权限运行文件。

分配 SGID 权限:

分配SGID有两种方式

  • 八进制 (2)
  • 符号 (g+s)

八进制 (2) :

# chmod 2755 /myscript.sh
# ls -l
-rwxr-sr-x. 1 root root      0 Oct 16 11:33 /myscript.sh

符号 (g+s) :

# chmod g+s /myscript.sh
# ls -l
-rwxr-sr-x. 1 root root      0 Oct 16 11:33 /myscript.sh

删除 SGID 权限

八进制 (2) :

# chmod 0755 /myscript.sh
# ls -l
-rwxr-xr-x. 1 root root      0 Oct 16 11:33 /myscript.sh

符号 (g-s) :

# chmod g-s /myscript.sh
# ls -l
-rwxr-xr-x. 1 root root      0 Oct 16 11:33 /myscript.sh

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

现在,当我们分配 SGID 权限时,我们有时可能会在组权限部分看到大写 (S) 而不是小 (s)。
如果该文件是否具有组可执行权限,则如果为我们提供添加信息,则这没有太大区别。
如果我们获得大写 S,则表示没有可执行权限,如果我们获得小 s,则表示该文件具有组可执行权限。

例如:
在没有用户所有者可执行权限的情况下应用 SGID 之前

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

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

# chmod 2655 /myscript.sh
# ls -l
-rwxrwSrw-. 1 root root 0 Oct 16 11:35 /myscript.sh

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

# chmod 755 /myscript.sh
# ls -l
-rwxrwxrw-. 1 root root 0 Oct 16 11:36 /myscript.sh

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

# chmod 2755 /myscript.sh
# ls -l
-rwxrwsrw-. 1 root root 0 Oct 16 11:36 /myscript.sh

相信你已经知道我的意思,并且知道大写S和小写s的区别了。

查找所有带有 SGID 的可执行文件

# find/-perm +2000

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

日期:2020-06-02 22:17:34 来源:oir作者:oir