【TLPI读书笔记】 十七、访问控制列表
概述
一个 ACL 由一系列 ACL 记录(简称ACE)组成,其中每条记录都针对单个用户或用户组定义了对文件的访问权限。
ACL记录,每条 ACE 都由3部分组成:
- 标记类型:表示该记录作用于一个用户、组,还是其他类别的用户。该值为一系列
ACL_
开头的常量 - 标记限定符(可选项)标识特定的用户或组(亦即,某个用户ID或组ID)
- 权限集合:本字段包含所授予的权限信息
Linux系统是以系统扩展属性来实现ACL的。
一个 ACL 由一系列 ACL 记录(简称ACE)组成,其中每条记录都针对单个用户或用户组定义了对文件的访问权限。
ACL记录,每条 ACE 都由3部分组成:
ACL_
开头的常量Linux系统是以系统扩展属性来实现ACL的。
EA可用于实现访问列表和文件能力。EA 需要有底层文件系统的支持。
EA 的命名格式为 namespace.name。其中 namespace 用来把 EA 从功能上划分为截然不同的几大类,而 name 则用来在既定命名空间内唯一标识某个 EA。
可供 namespace 使用的值有4个:
在shell中,可执行 setfattr(1)
和getfattr(1)
命令来设置和查看文件的 EA。
stat()
利用系统调用stat()
、lstat()
以及fstat
,可获取与文件有关的信息,其中大部分提取自文件i节点
#include <sys/stat.h>
int stat(const char *pathname, struct stat *statbuf);
int lstat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);
All return 0 on success, or -1 on error
设备专用文件与系统的某个设备相对应。在内核中,每种设备类型都有与之相对应的设备驱动程序,用来处理设备的所有I/O请求。如前面所讲,每个驱动程序所提供的接口一致,即通用I/O模型。
某些设备是实际存在的,比如鼠标、磁盘。而另一些设备则是虚拟的,亦即并不存在相应硬件,但内核会(通过设备驱动程序)提供一种抽象设备,其所携带API与真实设备无异。
可将设备划分为以下两种类型:
read()
和write()
系统调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区高速缓存之间复制数据。
Linux内核对缓冲区高速缓存对大小没有固定上限。内核会分配尽可能多的缓冲区高速缓存页,而仅受限于两个因素:可用的物理内存总量;以及出于其他目的对物理内存的需求。
如果与文件发生大量的数据传输,通过采用大块空间缓冲数据,以及执行更少的系统调用,可以极大地提高I/O性能。