八进制数字0权限的目的是什么?



我比较熟悉drwx权限,但是我想了解一下八进制权限0代表-吗?我理解r代表4 w代表2 x代表1我不太明白0代表什么。

例如

的符号表示0774年

等于

rwxrwxr

,但我不明白0的目的。

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)

在Linux的权限中,有四个八进制数字表示权限。每个人都知道读、写和执行,但是在权限中有额外的3位:

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

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

同样,

2755设置setgid位,1755设置sticky位。

  • 1个固定位
  • 2 setgid位
  • 3 setgid位&粘贴位
  • 4设置位
  • 5固定位&粘贴位
  • 6固定位&setgid位
  • 7设置位&设置位&粘贴位

这些位对于文件和目录来说意味着不同的东西。

对于文件,

  • sticky bit不做任何事情(它用来告诉内核将该文件保留在缓存中)
  • setuid位如果文件是可执行文件,在执行时,它将作为文件的所有者运行,而不是作为运行它的人运行(这就是sudo为您提供root权限的方式—它以root的身份运行,即使它是由guest这样的用户调用)
  • setgid位与setuid位相似,只是组的所有者不同。

在文件夹中,

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

尽管这些权限很重要,没有它们UNIX就不能工作,但通常避免使用它们(至少对于文件)是好的,因为编写得不好的程序最终可能会给任何运行它的人提供免费的root权限。所以最好还是让sudo来做root的看门人。

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

chmod命令(可能?)不执行一般的数字解析(简单的字符串解析可以),但是编写示例和文档的程序员会在八进制数前加上0,以确保和清楚。

最新更新