在应用 umask 之前,每种文件类型的常规文件权限是什么

在应用 umask 之前,每种文件类型的常规文件权限是什么

我正在寻找一个列表,该列表在应用 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.hmknod它们与普通文件相同吗?或者我错过了解释这一点的手册页?

答案1

看来你已经很清楚了;讨论得更多一些这里。您可能错过的一点是,您在手册页中找到了 fortouch(1)和 not 的语句creat(2),因为(符号链接可能除外),没有系统级默认值——每个程序都有自己的默认值。碰巧大多数(如果不是全部)程序都遵循相同的规则。

答案2

文件的权限(受umask)在open第一次创建文件时调用。在fopen,权限设置为 0666,但这涉及流 I/O。根据创建文件的应用程序,它们可能使用或不使用低级打开/读/写。

特殊设备将使用mknod,再次让应用程序指定初始权限。例如,mkfifoLinux 中使用的命令和操作系统X有设置权限的选项。同样,该[mknod][6]命令有一个用于设置权限的选项。这些的手册没有指定初始权限。

有趣的是,POSIX 的描述mkfifo也不指示任何特定的权限集(除了记录用于设置它们的选项之外)。

鉴于缺乏特异性,这些命令的某些实现可能不使用 0666 来获取权限,但尚不清楚该假设的实现是更宽松还是更严格。如果您检查 的内容/dev,您通常不会找到全局可写的特殊设备。这可能由给定的实现来强制执行。例如,如果一个特殊设备有执行许可,这可能不是好东西,因为它们的内容(通常)不像常规文件,如果“执行”它,可能会发生意外的事情。

没有文档,任何关于传统的权限必须仅限于对具体实施的观察。 0666权限广泛用于非可执行文件,但不能保证这是普遍真理。

的权限符号链接另一方面,它们显然是特定于系统的。这symlink(7)Linux 的手册页显示它们始终是 0777:

在Linux上,任何操作都不会使用符号链接的权限;权限始终为 0777(所有用户类别的读、写和执行),并且无法更改。

在其他系统上,这可能是可能的,例如 BSD,例如自由BSD操作系统X记录-h可用于修改权限的选项,尽管相应的symlink(2)调用的文档(自由BSD,操作系统X)没有提及初始权限。

进一步阅读:

答案3

在大多数系统中,应用 umask 之前光盘文件的默认权限与常规文件相同。 (0666)

相关内容