八位数0权限的目的是什么

时间:2015-09-23 00:51:31

标签: linux shell unix

我更熟悉drwx权限,但我想了解0代表-的八进制权限吗?我了解r代表4代表2,x代表1。我不能正确理解0代表什么。

例如

的象征性表示

0774

将是

rwxrwxr

但我不明白0的目的。

3 个答案:

答案 0 :(得分:5)

http://man7.org/linux/man-pages/man2/stat.2.html

   S_ISUID     04000   set-user-ID bit
   S_ISGID     02000   set-group-ID bit (see below)
   S_ISVTX     01000   sticky bit (see below)

答案 1 :(得分:2)

在Linux权限中,权限有四个八进制数字。有3个人都知道,读,写和执行,但权限中还有3位:

  • 粘性位
  • 设置gid位
  • set uid bit

因此设置权限4755设置setuid位,以及`rwxrw-rw - '

同样2755设置setgid位,1755设置粘滞位。可以设置这些的任何组合:

  • 1个粘性位
  • 2 setgid bit
  • 3 setgid bit&粘性位
  • 4 setuid bit
  • 5 setuid bit&粘性位
  • 6 setuid bit& setgid bit
  • 7 setuid bit& setgid bit&粘性位

这些位对于文件与目录意味着不同。

在文件上,

  • sticky bit什么都不做(它用于告诉内核将该文件保留在缓存中)
  • setuid位如果文件是可执行文件,则执行时它将作为文件的所有者运行,而不是运行它的人(这是sudo的工作方式给你root权限 - 它运行为root,即使它是由像guest这样的用户调用的
  • setgid有点像setuid位,除了组所有者。

在文件夹上,

  • 777文件夹上的粘滞位将允许用户删除自己的文件,但允许用户删除其他用户文件。如果没有设置粘滞位,任何用户都可以删除此目录下的任何其他用户的文件。 (这是/tmp的工作方式)
  • 文件夹上的setuid位到目前为止我什么都不知道
  • 文件夹上的setgid位将强制在该目录中创建的所有新文件将继承该文件夹的组,而不是当时创建的用户的默认组。

虽然这些权限很重要,如果没有它们,UNIX就无法运行,一般来说最好避免使用它们(至少对文件来说),因为编写得不好的程序最终会给运行它的任何人提供免费的root权限。所以最好让它成为sudo的守门员。

答案 2 :(得分:1)

在Unix约定中,写入的数字被假定为十进制,除非它们以0x(或0X为前缀),在这种情况下它们是十六进制的或以0为前缀表示它们是八进制数。

chmod命令(可能是?)没有执行通用数字解析(简单的字符串解析会这样做),但编写示例和文档的程序员会在八进制数字前加0只是为了一定要清楚。