访问控制列表(Access Control List,ACL)其实就是一个框架结构,其目的是为了对某种访问进行控制。在我们Linux中FACL就是文件访问控制列表了,通过设置,我们可以使同一个文件,让不同的用户有不同的权限。例如我们可以让A用户对这个文件有读的权限,而让B用户对这个文件什么权限都没有。那么怎样在Linux中实现访问控制列表呢?下面就来看看吧!这里我们以前面创建的磁盘阵列/dev/md1这个文件系统。

    1、挂载文件系统

    文件系统在挂载的时候是不会自动启用acl功能的,需要在挂载的时候指定acl这个挂载选项。我们可以使用两种方法。一是永久性的:就是直接编辑配置文件了。另一种就是临时性的:就是使用命令重新挂载的时候指定acl选项了。
    临时性:
 
  
  1. [root@stu14 data]# mount –o remount,acl /dev/md1 /data 
    或 
 
  
  1. [root@stu14 data]# tune2fs –o acl /dev/md1 
    这种方式只要重启系统或重新挂载时不指定acl选项,就会失效的;
    永久性:
 
  
  1. [root@stu14 data]# vim /etc/fstab 
  2. /dev/md1 /data ext3 defaults,acl 0 0 
    编辑配置文件保存即可,可以重新挂载使其生效。

    2、设定ACL

    查看文件的acl列表的命令的使用格式: 
 
  
  1. # getfacl FIlENAME 
    例: 
 
  
  1. [root@stu14 data]# getfacl test  
  2. # file: test 
  3. # owner: root 
  4. # group: magedu 
  5. user::rw- 
  6. group::r-- 
  7. other::r-- 
    这里只有这个文件的默认权限,相信一看就可以看懂了;
    设置acl列表的命令的使用格式
 
 
  
  1. #setfacl <mx> <u:username:mode|g:groupname> FILE 
      -m:用来设定某项acl的;
      -x:取消某项acl的;
      u:对用户进行acl设定;
      g:对组进行acl设定;
    例:添加acl记录 
 
  
  1. [root@stu14 data]# setfacl -m u:gentoo:rw- test  
  2. [root@stu14 data]# getfacl test  
  3. # file: test 
  4. # owner: root 
  5. # group: magedu 
  6. user::rw- 
  7. user:gentoo:rw- 
  8. group::r-- 
  9. mask::rw- 
  10. other::r--  
    是不是看到多了一行,那一行就是我们加进来的,这是好gentoo用户就可以对这个文件进行读写了。对组设置无非就是把u改成g,用户改成组就ok了,很简单的。
需要注意一点的是只有文件的属主和root用户可以设置文件的访问控制列表;
    例:删除acl记录
 
  
  1. [root@stu14 data]# setfacl -x u:gentoo test  
  2. [root@stu14 data]# getfacl test  
  3. # file: test 
  4. # owner: root 
  5. # group: magedu 
  6. user::rw- 
  7. group::r-- 
  8. mask::r-- 
  9. other::r-- 
    取消一项记录直接-x,u加username就行了,不用再指定权限了。

    3、设置默认acl

 
 
  
  1. [root@stu14 data]# setfacl –m d:u:gentoo:rw- test1/ 
  2. [root@stu14 data]# setfacl –m d:u:gentoo:rw- test1/  
    所谓的默认acl就是我们为一个目添加acl记录,在这个目录下创建的所有文件都会自动添加这个acl记录,这个实现也很简单,只要在u或g前面加d:就ok了。不过这样不长用的。

    4、递归设置acl

 
 
  
  1. [root@stu14 data]# setfacl –R –m u:gentoo:rw- test1/ 
    这个所谓的递归就是这个目录中有文件有目录时,我们只为目录test1添加acl,这个目录下的所有文件都会添加这个acl记录的;

    5、权限的生效次序

    首先我们再对test文件添加用户和组的acl记录,再来看看acl记录的顺序;
 
  
  1. [root@stu14 data]# setfacl -m u:gentoo:rw- test  
  2. [root@stu14 data]# setfacl -m g:centos:rw- test  
  3. [root@stu14 data]# getfacl test  
  4. # file: test 
  5. # owner: root 
  6. # group: magedu 
  7. user::rw- 
  8. user:gentoo:rw- 
  9. group::r-- 
  10. group:centos:rw- 
  11. mask::rw- 
  12. other::r-- 
    从中我们就可以看出一些端倪了,我们添加的acl记录并不是添加在最后面的,而是有次序的。其实,从上到下就是权限的生效次序了:属主-->用户ACL-->属组-->组ACL-->其它用户。
    最后说下,如果我们想将这些添加好acl的文件归档且保留这些acl信息怎么办呢?这就需要我们在归档的时候使用--acls这个选项了,因为我们使用tar归档的时候默认是不会将acl信息归档的。我想tar的使用就不用多写了吧!呵呵
    一起努力!