当前位置:嗨网首页>书籍在线阅读

02-概述

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

16.1 概述

EA可用于实现访问列表(第17章)和文件能力(第39章)。但就设计而论,其能力绝不仅限于此。例如,还可利用EA去记录文件的版本号、与文件的MIME类型/字符集有关的信息,或是指向图符的指针。

SUSv3并未对EA加以规范。但少数其他UNIX实现却提供了类似的特性,其中知名的有现代BSD(详见extattr(2))系列和Solaris 9 及其后续版本(详见fsattr(5))。

EA需要有底层文件系统来提供支撑,Btrfs、ext2、ext3、ext4、JFS、Reiserfs以及XFS等文件系统都支持EA。

各类文件系统对EA的支持都属可选项,受内核配置选项中的“File systems”菜单控制。Reiserfs文件系统自Linux 2.6.7开始支持EA。

EA命名空间

EA的命名格式为namespace.name。其中namespace用来把EA从功能上划分为截然不同的几大类,而name则用来在既定命名空间内唯一标识某个EA。

可供namespace使用的值有4个:user、trusted、system以及security。这4类EA的用途如下所示。

  • user EA将在文件权限检查的制约下由非特权级进程操控。欲获取user EA值,需要有文件的读权限;欲改变user EA值,则需要写权限。(若无所需权限,将会导致EACCES错误。)在ext2、ext3、ext4或Reiserfs文件系统上,如欲将user EA与一文件关联,在装配底层文件系统时需带有user_xattr选项。
  • trusted EA也可由用户进程“驱使”,这点与user EA相似。而区别则在于,要操纵trusted EA,进程必须具有特权(CAP_SYS_ADMIN)。
  • system EA供内核使用,将系统对象与一文件关联。目前仅支持访问控制列表(第17章)。
  • security EA的作用有二:其一,用来存储服务于操作系统安全模块的文件安全标签;其二,将可执行文件与能力关联起来(39.9.2节)。而发明security EA的初衷是为了支持安全强化版的Linux(SELinux,http://www.nsa.gov/research/selinux/)。

一个i节点可以拥有多个相关EA,其所从属的命名空间可以相同,也可不同。在各命名空间内的EA名均自成一体。在user和trusted命名空间内,EA名可以为任意字符串。而在system命名空间内,只有经内核明确认可的(例如,用于访问控制列表的)命名方可使用。

JFS支持另一种命名空间——os2,其他文件系统均未实现。提供这一命名空间是为了支持传统的OS/2文件系统EA。进程无需特权,就能创建OS2 EA。

通过shell创建并查看EA

在shell中,可执行setfattr(1)和getfattr(1)命令来设置和查看文件的EA。

以上shell会话所展示的要点之一是,EA值可以为空字符串,这不同于未定义的EA值。(由shell会话结尾处的例子可知,user.x的值为空字符串,user.y的值为未定义。)

默认情况下,getfattr只会列出user EA值。还可利用-m选项来指定一正则表达式,来筛选想要显示的EA名:

372.png pattern的默认值为“^user.”。可执行如下命令,列出一个文件的所有EA值。

373.png