潇's profile老肖的地盘PhotosBlogListsMore ![]() | Help |
|
July 17 Linux ACL1.甚么是ACL ACL就是Access Control List,一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。Linux在2.6版内核开始支持ACL。 2.ACL条目 一个ACL包括了一个ACL条目的集合,一个ACL条目为一个用户或者一个组对某个对象的访问权限,包括读、写、执行。一个ACL条目包括了一个条目标签类型,一个可选的条目标签的准入者以及一个权限(permission)的集合。 条目标签类型如下: ACL_USER_OBJ ACL_USER_OBJ 条目标签表示文件所有者的访问权限。 ACL_USER ACL_USER条目标签表示该条目下准入者的访问权限。 ACL_GROUP_OBJ ACL_GROUP_OBJ条目标签表示文件所在组的访问权限。 ACL_GROUP ACL_GROUP条目标签表示该条目下准入者(特定的组组)的访问权限。 ACL_MASK ACL_MASK条目标签表示能给ACL_USER,ACL_GROUP,ACL_GROUP分配的最大权限。 ACL_OTHER ACL_OTHER条目标签表示不能满足其它条目中的准入者的访问权限。 3.合法的ACL 一个ACL必须符合以下规则才能叫做合法的ACL。 一个ACL必须包含一条且仅有一条ACL_USER_OBJ,ACL_GROUP_OBJ,ACL_OTHER标签类型。 一个ACL可以包含0个或者多个ACL_USER以及ACL_GROUP,如果有这样的条目,那么ACL中必须包含一个且仅有一个ACL_MASK标签类型。否则 ACL_MASK可以不出现 所有ACL_USER准入者中出现的user ID必须唯一,同样,在ACL_GROUP中出现的group ID必须唯一。 4.ACL与文件权限的联系 在昨天6点钟之前,肖囧同学只知道文件的权限用chmod管理,这对个人用户来说足够,然而对一些系统管理员来说,只用文件权限来管理访问安全性足够可以让他/她/它无语到极点,为了实现一些比较复杂的权限管理,往往不得不创建很多的组,并加以详细的记录和区分。所以ACL的出现让管理员看到了曙光,然而ACL不能够和已有的权限系统冲突,所以和文件权限就有如下联系: 1.ACL所规定的权限是文件权限的超集。 2.文件权限中的用户对应ACL中的ACL_USER_OBJ条目 3.如果木有ACL_MASK条目,则文件权限中的组权限对应ACL_GROUP_OBJ条目。反之,文件中的组权限对应ACL_MASK条目。 4.文件权限中的其他权限对应ACL_OTHER_OBJ条目, 5.文件权限中的任何改动将映射到ACL上,反之亦然。 5.对象的创建以及缺省ACL 当使用create() mkdir() mknod() mkfifo() open()等函数创建对象时,这些对象的ACL初始化。如果某一目录关联一个缺省的ACL,那末这些函数的mode参数以及该目录的缺省ACL决定了该对象的ACL。 1.新对象将继承该目录的缺省ACL。 2.修改文件权限相关的ACL条目,使得ACL中不存在mode参数中未指定的访问权限。 如果该目录没有缺省的ACL,那么mode参数以及文件创建的mask(这个东西我有讲过的,文件创建的掩码,不记得请上我公司网站查询)决定该对象的ACL 1.新建对象的ACL包括ACL_USER_OBJ,ACL_GROUP_OBJ以及ACL_OTHER,这些条目的权限又文件创建掩码决定。 2.与mode参数中指定的权限进行同步。 6.通过ACL访问的检查算法 每当一个进程要访问指定的对象时,ACL会进行如下检查: 1.If进程的有效uid与对象所有者一致,则。 if ACL_USER_OBJ中有相应的权限,那么允许访问。 else 拒绝访问。 2.else if如果进程的有效uid与某条ACL_USER条目中的准入者uid一致 if 满足ACL_USER条目以及ACL_MASK中有相应的权限,那么允许访问。 else 拒绝访问。 3.else if如果有效的gid与某条ACL_GROUP的准入者gid一致,则 if ACL中有ACL_MASK条目。则 if ACL_MASK或者ACL_GROUP_OBJ或者ACL_GROUP含有指定的访问权限,则允许访问。 else 拒绝访问。 else if ACL_GROUP_OBJ条目中有相应的权限,则允许访问。 else 拒绝访问 else 拒绝访问 4.else if ACL_OTHER条目中有相应的权限,则运行访问。 5.else拒绝访问。 7.查看ACL 查看一个对象的ACL,可以使用getfacl命令,比如getfacl ./somedir,其结果如下 1.# file: somedir/ 8.设置ACL 设置一个对象的ACL,要通过setfacl命令。不过我目前没有试验成功,需要ROOT权限,残念啊……请各位用man setfacl开传送门去看看。 9总结 ACL大大的方便了管理员对文件对象的管理,可以利用ACL的条目,轻松的添加一些访问例外,而用chmod实现同样的功能,则要添加很多组,然后把用户添加到组中间。无论多么复杂的系统中,文件系统的权限管理都是最基础的内容。而 Linux 对 ACL的支持,无疑是一把管理海量用户系统的利器,对 Linux 在大规模的企业级应用中更方便的发挥更大的作用添了一把火。注意:在单个文件的 ACL 条目的数量上,不同的文件系统有不同的限制。Ext2 和 Ext3 只能支持每个文件 25 个 ACL 条目。ReiserFS 和 JFS 可以支持超过 8,000 个条目。这个方面 Ext* 文件系统还需要加强。 TrackbacksThe trackback URL for this entry is: http://seanxiaoxiao.spaces.live.com/blog/cns!7677365E5B9342DE!688.trak Weblogs that reference this entry
|
|
|