'chmod g+s' 命令

'chmod g+s' 命令

chmod g+s你好我想了解一下Unix中命令的作用。

我还想知道它在这种特定情况下的作用:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

我了解除 之外的所有命令角色chmod g+s,并且我想知道文件之间的差异un以及deux这一系列命令产生的结果。

答案1

chmod g+s .;

该命令设置当前目录的“设置组 ID”(setgid) 模式位,写为.

这意味着所有新的在当前目录中创建的文件和子目录继承该目录的组 ID,而不是创建该文件的用户的主组 ID。这也将传递到在当前目录中创建的新子目录。

g+s影响文件的组 ID,但不影响所有者 ID。

请注意,这仅适用于新创建的文件。文件是 搬家了 ( mv) 进入目录不受 setgid 设置的影响。复制的文件cp -p也不受影响。

例子

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

在这种情况下,deux将属于组canard,但un将属于创建它的用户组,无论该组是什么。

关于在 Shell 命令中使用分号的小注意事项

与 C 或 Perl 不同,如果 shell 命令后面有另一个 shell 命令,则只需在该命令后面跟一个分号即可。相同的命令行。因此,考虑以下命令行:

chgrp canard .; chmod g+s .;

最后的分号是多余的,可以删除:

chgrp canard .; chmod g+s .

此外,如果我们将两个命令放在不同的行上,则不需要剩余的分号:

chgrp canard .
chmod g+s .

文档

有关更多信息,请参阅手动chmod。另外,维基百科有桌子总结chmod命令选项。

答案2

您可以使用 chmod 命令更改文件权限。在 Unix 中,文件权限确定谁可以对文件具有不同类型的访问权限,由访问类别和访问类型指定。访问类别是用户组,每个用户组都可以分配特定的访问类型

Unix/Linux 具有可分配文件访问权限的用户和用户组

选项g+s如下:

g - 文件组中的其他用户对其拥有的权限

s - 在执行时设置用户或组 ID

这是一个示例用法:

chmod =rwx,g+s filename

(允许每个人读取、写入和执行特定文件并打开设置的组ID)

要设置/修改文件的权限,您需要使用 chmod 程序。当然,只有文件的所有者可以使用 chmod 来更改文件的权限。 chmod 具有以下语法: chmod [options] mode file(s) “mode”部分指定后面作为参数的文件的新权限。模式指定应更改哪个用户的权限,以及随后应更改哪些访问类型。举例来说: chmod ax socktest.pl

这意味着应该为所有用户清除执行位 (-)。 (所有者、组和世界其他部分)权限以字母开头,指定哪些用户应受到更改的影响,这可能是以下任何一种:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

接下来是更改指令,该指令由+(设置位)或-(清除位)以及与应更改的位相对应的字母组成。让我们看一些例子:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

奇怪的数字...您可能遇到过诸如 chmod 755 somefile 之类的东西,当然您会想知道这是什么。问题是,您可以使用一个数字(如本示例中的数字)一次性更改文件的整个权限模式。每种模式都有一个相应的代码编号,正如我们将看到的,有一种非常简单的方法可以找出对应于任何模式的编号。模式号上的三位数字中的每一位都对应于三个权限三元组之一。 (u、g 和 o) 三元组中的每个权限位对应一个值:4 表示 r、2 表示 w、1 表示 x。如果权限位,则将此值添加到权限三元组的编号中。如果它被清除,那么您就什么也不添加。 (有些人可能会注意到,实际上,三元组的数字是与三位模式对应的八进制值 - 如果您不知道八进制值是什么,也没关系,只需按照说明操作即可)因此,如果文件具有 rwxr-xr-x 权限,我们将进行以下计算:

你的三胞胎:rwx => 4 + 2 + 1 = 7

g 的三元组:r-x => 4 + 0 + 1 = 5

o 的三元组:r-x => 4 + 0 + 1 = 5

这使得:755

因此,755 是一种简洁的方式,表示“我不介意其他人读取或运行此文件,但只有我应该能够修改它”,777 表示“每个人都可以完全访问此文件”

完美参考

答案3

我只想在这里添加我的答案,因为这个主题通常没有被清楚地理解。 Linux文件/文件夹权限位总共由16位组成,细分如下:

  • 4 位描述文件(常规、文件夹、套接字、fifo、链接等)
  • 12位(用户4位,组4位,其他4位)

文件或文件夹具有此user,groupother属性。该属性中的每个属性都包含readwriteexecutemodifier属性。

user有三位对应于rwx我们看到的东西。该group可能也有rwx,所以是other也有自己的rwx。但实际上,在它的下面是is 修饰符rwx??。因此,我们有三个修饰符位,通常根据它是否是user,group或 的第 4 位来命名other

  • 用户修饰符位(又名 setuid)
  • 组修饰符位(又名 setgid)
  • 其他修饰位(粘性位)

然后,这些位的隐含系统语义根据它是文件、文件夹还是可执行文件而变化。最终的效果是,某些文件变成只读,或者可执行的二进制文件在RAM中长期保留,或者文件执行时进程的有效用户/组ID发生变化。

因此,以下命令将是无效且没有效果的:

  • chmod u+t
  • chmod o+s

userand修饰符group位可以通过 and 进行设置+s,出于某种原因或约定,修饰符可以通过或 simpleother设置。o+t+t

答案4

ls 命令的结果将取决于 umask。

g+s 会将 sgid 设置为该文件。查看这里有关 SUID SGID 的更多深入信息

因此,如果您的 umask 是 022,则结果将类似于:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un

相关内容