我比较熟悉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
,以确保和清楚。