Linux访问控制列表(ACL)

发表于:2007-06-09来源:作者:点击数: 标签:
传统UNIX系统的访问控制方法是非常简单的,它把用户分成三类:文件的拥有者、组成员和其他用户。很显然,这种访问控制模型过于简陋了。随着对 Linux系统 安全 性要求的提高,需要一种更细粒度的访问控制模型来代替传统UNIX系统的访问控制模型。使用ACL(Access
传统UNIX系统的访问控制方法是非常简单的,它把用户分成三类:文件的拥有者、组成员和其他用户。很显然,这种访问控制模型过于简陋了。随着对Linux系统安全性要求的提高,需要一种更细粒度的访问控制模型来代替传统UNIX系统的访问控制模型。使用ACL(Aclearcase/" target="_blank" >ccess Control List,访问控制列表)系统,系统管理员能够为每个用户(包括root用户在内)对文件和目录的访问提供更好的访问控制。在POSIX中定义了一种访问控制叫做POSIX ACL,可以实现基于单独用户的控制,目前的大多数Linux访问控制工程都是以此为基础

Linux访问控制列表(ACL)- -

                                      

相关链接:
一、Extended attributes and access control lists
http://acl.bestbits.at
http://acl.bestbits.at/about-acl.html

二、Linux Trustees ACL project
http://trustees.sourceforge.net/

三、ea/acl访问控制系统介绍
http://www.linuxaid.com.cn/articles/7/9/794686264.shtml

四、Grsecurity ACL系统(一)
http://www.chinalinuxpub.com/read.htm?id=1261
http://linuxaid.com.cn/articles/1/1/118781745.shtml

Red Hat Linux 9 发行注记 写到:

特殊备注:在前两个公开 beta 发行版本中添加到内核的ACL 支持被证明尚不稳定,并导致了内核退化。因此,Red Hat在 Red Hat Linux 9 中将 ACL 支持从内核中删除了。内核工程师将会继续致力于提供 ACL 支持的工作,它将会在未来的发行版本中提供。为方便那些希望测试 ACL 的用户和开发者,ACL 支持所需的 attr 和 acl 软件包仍被包括了。若未来的测试演示了 ACL 支持质量有显著提高,Red Hat 可能会自行决定通过升级方式为本次发行的Red Hat Linux 提供 ACL 支持。

Red Hat Linux 8.0.94 发行注记 写到:

用于 ext3 的 EA(扩展属性)和 ACL(访问控制列表)

Red Hat Linux 8.0.94 包含为 ext3 文件系统提供 EA 和 ACL 支持的内核。它根据的补丁和用户级别工具来自:

http://acl.bestbits.at/

为了在文件系统上启用 ACL,这个文件系统必须使用 -o acl 挂载选项来被挂载。

从本质上讲,EA 用于 ACL 支持。为了要分开使用 EA,文件系统必须使用 -o user_xattr 挂载选项被挂载。

对它的支持分散在几个软件包中:

- kernel — 提供在磁盘上为 ext3 文件系统贮存 EA 和 ACL 的支持,以及对操作 EA 和 ACL 的系统调用的支持。内核软件包终于提供了强化文件访问上的 ACL 的机制。

- e2fsprogs — 包括了对新添的在磁盘上的扩展属性格式的知识,因此 fsck 能够使用新特性来检查文件系统。

- attr, libattr — 提供对文件附属的扩展属性的访问。

- acl, libacl — 提供设置、修改、和查询文件上 ACL 设置的工具。

- libattr-devel, libacl-devel — 使用 acl 和 attr 库来建构文件所需的库和包含文件。

- star — 一种归档工具。它可以创建和拆开tar 和 pax 格式的归档,还可以备份并恢复 EA 和 ACL。

- samba — 在本次发行版本中,Samba 能够导出 ACL 功能。关于如何在你的配置中启用这项功能的信息,请参阅 samba 的文档。

除此之外,coreutils 软件包已被更新。因此 cp 和 mv 命令将会复制文件附属的 ACL 和 EA。

关于设置和读取 ACL 的更多信息,请参阅 setfacl 和 getfacl 的说明书(man)页。关于ACL 的常规信息可以在 acl 的说明书(man)页找到。你还可以在前面提到的 bestbits 网站上找到更多关于 EA 和 ACL 的常规信息。

注意:普通的 tar 和 dump 命令不能备份 ACL 和 EA。

与较老系统的兼容性

没有设置 ACL 或 EA 的任何 ext3 文件系统在较老的内核上将与从前的运行方式相同,并可以使用较老的 e2fsprogs 工具来检查。

一旦某个在任一给定文件系统上的文件被设置了 EA 或 ACL,那个文件系统将会得到 ext_attr 属性。你可以看到该属性使用以下命令:

tune2fs -l

已得到 ext_attr 属性的文件系统可以使用老内核来挂载,但是很明显,那些内核将不会强制对已被设置的 ACL 的使用。

注意:文件系统检查程序 e2fsck 的较老版本将会拒绝检查这样的文件系统。

Red Hat Linux 7.3.93 发行注记 写到:

该 beta 版本包括为 ext3 文件系统提供 EA 和 ACL 支持 的内核,它以 http://acl.bestbits.at/ 中的补丁和用户级别工具为 基础。

对 EA 和 ACL 的支持包括在几个软件包中:


kernel — 提供对在 ext3 文件 系统磁盘上贮存 EA 和 ACL 的支持;提供操作 EA 和ACL 的系统 调用程序;提供在文件访问上实施 ACL 的机制。


e2fsprogs — 包括新添的 on-disk 扩展属性格式的知识,因此 fsck 可以使用这项新功能来检查 文件系统。


attr — 提供到连接在 libattr 文件 的扩展属性的访问。


acl — 提供设置、修改和查询文件上 的 ACLs libacl 集合的工具


libattr-devel — 使用 libacl-devel、acl、 和 attr 库来建构程序所需的库和标头文件。


star — 可以创建和解包以 .tar 和 .pax 格式归档的归档工具,它们可以备份并 恢复 EA 和 ACL。


samba — samba 软件包带有 ACL 支持。在 Samba 中配置 ACL 支持的选项 有许多种,你需要阅读 Samba 文档来利用这项功能。


另外,fileutils 软件包已被更新, 因此,cp 和 mv 可以复制与文件相关的 ACL 和 EA。

参阅 setfacl 和 getfacl 的说明书页(在 shell 提示下键入 man setfacl 和 man getfacl 来阅读)可获取设置和读取 ACL 的信息。 在 shell 提示下键入 man 5 acl 来阅读关于 ACL 的 常规信息。你还可以在前面提到的 bestbits 网站中找到关于 EA 和 ACL 的 一般信息。

注记:普通的 tar 和 dump 命令将 不会 备份 ACL 和 EA。

和老系统的兼容性:

任何没有 ACL 或 EA 的 ext3 文件系统会在老内核 上照常运行,可以使用旧有的 e2fsprogs 工具来检查。

一旦 EA 或 ACL 被设置在给定文件系统上的任何一个文件 上,该文件系统将会有 ext_attr 属性,你可以使用“tune2fs -l” 在文件系统设备上看到。这样的文件系统可以使用老版本 的内核挂载,但是这些老内核将不会实施任何已设置的 ACL。 可是,老版本的 e2fsprogs 中的 e2fsck 将会拒绝检查这样的文件系统。

Samba(need re-compile)+XFS Filesystem(need patck), Samba将允许像 NT 的 ACL(访问控制列表)那样的 Windows 文件共享。

参考:

一、

http://www-900.ibm.com/developerWorks/cn/linux/server/samba/samba2.2/index.shtml

Samba 2.2 内幕 写到:

ACL 支持
Samba 2.2 另一个不可思议的绝妙特性是对访问控制表 (ACL) 的新支持。你们当中许多人都知道,Windows NT 和 2000 使用 ACL 来设置对文件和目录的许可权,与大多数 UNIX 系统所使用的传统“一个用户一个组”的解决方案相比,它们提供的对许可权的控制更为细密。以前,Samba 没有办法直接将 ACL 存储在文件系统上,因为那时还没有可用的 Linux 的 ACL 支持。 但现在,我们开始看到了 ACL 支持的开端 -- 当前有 Linux 内核 2.4.3 的 ACL 内核补丁可用(请参阅下面的参考资料),以及一些用户空间工具。ACL 支持目前在 Samba 2.2.0 中得到了完全支持。

尽管 Samba 2.2.0 支持 ACL,但目前在内核和文件系统中启用 ACL 支持时还是需要许多棘手的步骤。因为标准 ext2 文件系统无法存储 ACL 信息,所以需要首先安装支持 ACL 的特殊 ext2 版本;这将对内核进行修补和重新编译,并升级系统上的所有 ext2 实用程序。

不过,如果您执行了所有这些操作,将可以在 Linux 上使用 Samba 的 ACL 支持。设置完毕后,Samba 将保留 NTFS ACL,而不是将 ACL 许可权映射成不太灵活的标准 UNIX 许可权方案。这是件好事。设想一下:与 winbind 结合在一起的 ACL 支持将允许基于 Linux 的系统“吸收”Windows NT 用户、组和 ACL 许可权。非常惊人的成就!

但现在,Linux 下的 ACL 支持还处于初级阶段。几乎每个备份程序都不备份 ACL 信息,意味着除非采取一些特殊手段,否则将很容易丢失 ACL。当然,ACL 支持在文件系统级别上几乎不存在(只有修补过的 ext2 版本和当前提供 ACL 支持的 SGI 的 XFS -- 请参阅下面的参考资料)这一事实使得用 ACL 支持 Linux 系统成为一项非常艰难的任务。 不过,因为 Linux 发行版最终在缺省情况下将启用 ACL,这一过程也将变得越发容易。

二、

http://listas.conectiva.com.br/listas/linuxisp-br/arquivo/2002/11/msg00009.html

三、

http://linux-xfs.sgi.com/projects/xfs/mail_archive/200208/msg00477.html

本文出自http://www.linuxfans.org/nuke/modules.php?file=viewtopic&name=Forums&p=3960551

原文转自:http://www.ltesting.net