我正在寻找一个列表,该列表在应用 umask 之前指定所有不同文件类型的常规文件权限。
我读到man 1p touch
常规文件的默认值是:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
我还会冒险猜测目录和符号链接的默认值是:
S_IRWXU | S_IRWXG | S_IRWXO
stat.h
但是,我在手册页中找不到套接字、FIFO、块设备和 Char 设备的默认权限是什么mknod.h
。mknod
它们与普通文件相同吗?或者我错过了解释这一点的手册页?
答案1
看来你已经很清楚了;讨论得更多一些这里。您可能错过的一点是,您在手册页中找到了 fortouch(1)
和 not 的语句creat(2)
,因为(符号链接可能除外),没有系统级默认值——每个程序都有自己的默认值。碰巧大多数(如果不是全部)程序都遵循相同的规则。
答案2
文件的权限(受umask
)在open
第一次创建文件时调用。在fopen
,权限设置为 0666,但这涉及流 I/O。根据创建文件的应用程序,它们可能使用或不使用低级打开/读/写。
特殊设备将使用mknod
,再次让应用程序指定初始权限。例如,mkfifo
Linux 中使用的命令和操作系统X有设置权限的选项。同样,该[mknod][6]
命令有一个用于设置权限的选项。这些的手册没有指定初始权限。
有趣的是,POSIX 的描述mkfifo
也不指示任何特定的权限集(除了记录用于设置它们的选项之外)。
鉴于缺乏特异性,这些命令的某些实现可能不使用 0666 来获取权限,但尚不清楚该假设的实现是更宽松还是更严格。如果您检查 的内容/dev
,您通常不会找到全局可写的特殊设备。这可能由给定的实现来强制执行。例如,如果一个特殊设备有执行许可,这可能不是好东西,因为它们的内容(通常)不像常规文件,如果“执行”它,可能会发生意外的事情。
没有文档,任何关于传统的权限必须仅限于对具体实施的观察。 0666权限广泛用于非可执行文件,但不能保证这是普遍真理。
的权限符号链接另一方面,它们显然是特定于系统的。这symlink(7)
Linux 的手册页显示它们始终是 0777:
在Linux上,任何操作都不会使用符号链接的权限;权限始终为 0777(所有用户类别的读、写和执行),并且无法更改。
在其他系统上,这可能是可能的,例如 BSD,例如自由BSD和操作系统X记录-h
可用于修改权限的选项,尽管相应的symlink(2)
调用的文档(自由BSD,操作系统X)没有提及初始权限。
进一步阅读:
- 更改符号链接的权限
- 文件权限如何应用于符号链接?
- 12.3. 为什么 chmod 不能改变符号链接的权限?(FreeBSD 2.x 常见问题解答)
答案3
在大多数系统中,应用 umask 之前光盘文件的默认权限与常规文件相同。 (0666)