4位八进制Unix文件许可符号的第一位是多少?


40

3位数:

644
ugo (user group other)

4位数:

0644
?ugo (??? user group other)

4位八进制Unix文件许可标记中的第一位八进制数字是什么?

Answers:


48

来自man chmod

数字模式是一到四个八进制数字(0-7),通过将值4、2和1的位相加而得出。任何省略的数字都假定为前导零。第一位选择设置的用户ID(4),设置的组ID(2)和粘性(1)属性。

您问什么是“设置用户ID”,“设置组ID”和“粘性”?

setuid / setgid

setuid和setgid(分别是“在执行时设置用户ID”和“在执行时设置组ID”的缩写)是Unix访问权限标志,允许用户在可执行文件的所有者或组的许可下运行可执行文件。它们通常用于允许计算机系统上的用户以临时提升的特权运行程序,以执行特定任务。虽然提供的假定用户ID或组ID特权并不总是得到提高,但至少它们是特定的。

同样,当应用于目录时,setuid / setgid会导致在目录中创建的新文件分别继承父目录的uid或gid。此行为因Unix的风格而异。例如,Linux尊重setgid,但忽略目录上的setuid。

粘性

即时贴最常见的用途是在目录上。设置粘滞位后,只有项目的所有者,目录的所有者或超级用户才能重命名或删除文件。如果没有设置sticky位,则任何拥有目录写和执行权限的用户都可以重命名或删除所包含的文件,而不必考虑所有者。通常,此设置在/ tmp目录上,以防止普通用户删除或移动其他用户的文件。


12

Setgid还有另一个非常重要的功能,我每天都要依靠它,但是Handyman5的摘录中没有包含它(引自上面链接的同一页面):

将setuid和setgid标志设置在目录上时,它们的含义完全不同。

在目录(chmod g + s)上设置setgid权限会导致在其中创建的新文件和子目录继承其组ID,而不是继承创建该文件的用户的主要组ID(所有者ID从不受影响,只有组ID)。新创建的子目录继承了setgid位。

因此,这为组提供了一个共享的工作空间,而又不要求组成员在创建新文件或目录之前显式更改其当前组。请注意,在目录上设置setgid权限仅影响设置setgid位后创建的新文件和子目录的组ID,而不应用于现有实体。必须使用以下命令手动设置现有子目录上的setgid位:

[root@foo]# find /path/to/directory -type d -exec chmod g+s {} \;

chmod g+s表示在八进制值的前面加上2,将具有775权限(drwxrwxr-x)的目录添加到2775(drwxrwsr-x)中。


2
仅供参考:MacOS X的行为就像目录中的SGID位始终为开。
乔纳森·莱夫勒

4

除其他答案外,前导0是用于告知数字八进制的约定。这里不需要,因为文件许可权始终以八进制表示,但这仍然是存在文件许可权的另一个原因。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.