文件可访问性
每个文件都以一种访问方式创建。 每种访问方式都授予用户、用户组和所有其他用户读、写或执行许可权。
新创建文件的访问位是 umask 位取反后与创建进程所设置的文件创建方式位进行“与”操作的结果。 进程创建新文件时,操作系统执行下列操作:
- 确定创建进程的许可权
- 检索合适的 umask 值
- 反转 umask 值
- 使用“与”操作将创建进程的许可权与 umask 值的取反组合
例如,如果现有文件设置了 027 许可权位,那么用户不被允许任何许可权。 写许可权被授予组。 为所有其他用户设置读、写和执行访问权。 027 许可权方式的 umask 值将是 750(源许可权的取反)。 当 750 与 666(由创建文件的系统调用设置的文件创建方式位)进行“与”操作时,文件的实际许可权为 640。 此实例的另一种表示是:
027 = _ _ _ _ W _ R W X Existing file access mode
750 = R W X R _ X _ _ _ Reverse (umask) of original
permissions
666 = R W _ R W _ R W _ File creation access mode
ANDED TO
750 = R W X R _ X _ _ _ The umask value
640 = R W _ R _ _ _ _ _ Resulting file access mode| 子例程 | 描述 |
|---|---|
| access 子例程 | 调查和报告 Pathname 参数中所命名文件的可访问性方式。 此子例程使用实用户标识和实组标识,而不是有效用户和组标识。 使用实用户标识和实组标识允许具有 set-user-ID 和 set-group-ID 访问方式的程序限制只能由具有正确权限的用户进行访问。 |
| chmod 和 fchmod 子例程 | 更改文件访问许可权。 |
| chown 子例程 | 复位文件索引节点的所有权字段并清除前一个所有者。 新的信息被写到索引节点,进程结束。 chmod 子例程以类似的方式工作,但许可权方式标志被更改而不是文件所有权。 |
| umask | 设置和获取文件创建掩码的值。 |
在以下示例中,用户无权访问该文件secrets. 但是,当程序special运行,程序的访问模式为set-uIDroot,程序可以访问文件。 程序必须使用 access 子例程防止破坏系统安全性。
$ ls -l
total 0
-r-s--x--x 1 root system 8290 Jun 09 17:07 special
-rw------- 1 root system 1833 Jun 09 17:07 secrets
$ cat secrets
cat: cannot open secrets任何 set-uID 或 set-gID 程序都必须使用 access 子例程来防止这种类型的侵入。 更改文件所有权和访问方式的操作影响索引节点,而不影响文件中的数据。 要进行这些更改,进程的所有者必须具有 root 用户权限或拥有文件。