什么时候可以或者我应该在文件或目录上使用chmod g + s?

Jor*_*lly 32 unix sysadmin

在最近部署到新的(Solaris 9)环境时,其中一个步骤是将一组文件和目录复制到新位置,然后将组UID位(使用"chmod -R g + s")应用于所有目录树中的文件给出了-rwxr-s的模式.结果是,除非单独打开并重新保存,否则我们的shell脚本都不会执行.我应该补充一点,我们之前在复制文件之前在目标父文件夹上设置了g + s; 这已经将所有新目录的初始模式设置为drwxr-s ---但文件的模式为-rwxr-x ---

在最终发现导致问题的步骤后,我们能够切断该步骤并继续进行.

但是,我想了解"s"位在应用于目录和文件时的含义,希望这能解释为什么我们首先遇到问题.

Pow*_*ord 76

设置目录g + s使得在所述目录中创建的所有新文件都将其组设置为目录的组.

如果您设置了umask以便默认情况下文件具有组写,那么这对于协作目的来说实际上非常方便.

注意:这是它在Linux中的工作方式,它可以在Solaris中完全不同地工作.

  • 这确实应该被OP标记为正确的答案. (3认同)
  • 重新'注意'; 它是POSIX行为,并且Solaris具有足够的POSIX兼容性,因此可以使用它. (2认同)

Spo*_*ser 12

对于可执行文件,这意味着在执行文件时,它将作为拥有该文件的组执行,而不是执行该文件的用户组.

如果您希望用户能够仅为运行一个命令而承担特定组的权限,这将非常有用.

但是,它也存在安全风险,因为它允许用户提升其权限.您必须知道具有此位设置的脚本不会执行任何会让用户滥用这些额外权限的操作.


Tom*_*icz 7

以下是SGID(chmod g + s)的非常方便的解释:http://www.linuxnix.com/sgid-set-sgid-linuxunix/

SGID(执行时设置组ID)是一种特殊类型的文件/文件夹文件权限.通常在Linux/Unix中运行程序时,它会从登录用户继承访问权限.SGID定义为为用户提供临时权限以运行具有文件组权限的程序/文件,以成为该组的成员以执行该文件.简单来说,用户在执行文件夹/文件/程序/命令时将获得文件组的权限.

  • 有趣的是,截至今天页面上写道:您无权访问此服务器上的/〜lso /workstation/docs/permissions/sgid.htm. (2认同)
  • 链接已经死了,但这有效:http://www.linuxnix.com/sgid-set-sgid-linuxunix/"SGID(执行时设置组ID)是一种特殊类型的文件/文件夹文件权限通常在程序运行的Linux/Unix中,它继承了登录用户的访问权限." (2认同)

eph*_*ent 5

对于可执行文件,g+s覆盖可执行文件将作为其运行的组 ID(它通常从父级继承)。

$ cp `which id` id-test
$ ./id-test
uid=1001(user1) gid=1001(group1) groups=1001(group1),2001(project1)
$ chgrp project1 id-test
$ chmod g+s id-test
$ ./id-test
uid=1001(user1) gid=1001(group1) egid=2001(project1) groups=1001(group1),2001(project1)

(egid 是“有效组 ID”——通常与 gid、“组 ID”相同,但这里不同。)

对于目录,g+s覆盖新文件和目录将具有的组 ID(通常从创建者继承)。

$ mkdir 项目
$ chgrp 项目 1 文件 1
$ umask
0022
$ 触摸项目/文件1
$ ls -l 项目/文件1
-rw-r--r-- 1 user1 group1 0 file1
$ chmod g+s 项目
$ 触摸项目/文件2
$ ls -l 项目/文件2
-rw-r--r-- 1 user1 project1 0 file2

您可能仍然需要摆弄以umask获得最佳效果;至少与0007共享写作所需的一样宽松,至少与0027共享阅读所需的一样宽松。

$ umask 0077
$ 触摸项目/文件3
$ ls -l 项目/文件3
-rw------- 1 user1 project1 0 file3
$ umask 0027
$ 触摸项目/文件4
$ ls -l 项目/文件4
-rw-r----- 1 user1 project1 0 file4
$ umask 0007
$ 触摸项目 1/文件 5
$ ls -l 项目1/文件5
-rw-rw---- 1 user1 project1 0 file5