在《第08课:理解文件系统设计思想,站在巨人肩上》一节课中,我们了解到文件通用和固定的属性信息是保存在索引节点中的。为了保持索引节点结构紧凑的同时,能够实现对文件属性的灵活扩展,Linux 内核从 2.6 开始添加了对扩展属性的支持。
在本节课中,我们就来详细了解一下文件的扩展属性,包括它的使用和实现方式,同时还将讨论其在访问控制中的应用,以及其他可能的应用场景,主要包括以下几方面内容:
- 文件扩展属性概述
- 操作扩展属性的系统调用
- 文件扩展属性的实现方式
- 访问控制列表(ACL)
- 扩展属性的其他应用
- 注意事项
15.1 文件扩展属性概述
文件扩展属性的设计目标是允许用户灵活地为文件设置自定义属性。
在 Linux 中,它是以键—值对的形式与文件索引节点(inode)关联起来的,其中键值可以是任意的自定义格式,键名需要符合 namespace.name 的命名规范。
在当前的 Linux 实现中,name 可以是长度不超过 256 字节的任意字符串,而 namespace 可在如下四种中选择,它们具有不同的访问控制规则。
- user:对于该命名空间下的扩展属性,需要拥有文件的读权限来执行读取,需要写权限来执行属性的修改。
- trusted:需要特权进程才能存取该命名空间下的扩展属性。
- system:仅供操作系统内核使用,当前内核中用它实现了访问控制列表 ACL。
- security