一、ACL使用介绍

        ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。


二、getfacl、setfacl两个命令的介绍和常用选项

1、ACL使用两个命令来对其进行控制

    getfacl:取得某个文件/目录的ACL设置项目

    setfacl:设置某个文件/目录的ACL设置项目


2、setfacl 参数

  -m:设置后续acl参数

  -x:删除后续acl参数  

  -b:删除全部的acl参数

  -k:删除默认的acl参数

  -R:递归设置acl,包括子目录

  -d:设置默认acl


三、使用举例

        在linux系统中我们在用普通用户(cangls)编辑文本文件时,可能要编辑别的普通用户(bols)的文件,通常情况下我们会想到下面两个解决方法:1、用root用户把普通用户(cangls)添加到要编辑文件的所属组(bols)中,然后可以更加属组的写权限就可以编辑文件。2、若我们不想用root用户更改权限则可以让被编辑文件所属主(bols)在文本的other权限中添加写权限。上面的两个解决方法虽然都能可以解决问题但是root权限在生产服务器上一般不会随便登录的,而第二种虽然能解决问题但由于其他用户也有写权限,若被有心人利用就得不偿失了,今天就向大家介绍个能同时避免上面两个问题的解决方法即使用setfacl命令。

1、使用环境列举

[bols@hpf-linux test]$ whoami
 bols
[bols@hpf-linux test]$ touch bols.txt
[bols@hpf-linux test]$ ls -l bols.txt
 -rw-rw-r-- 1 bols bols 0 7月   9 08:00 bols.txt
[cangls@hpf-linux test]$ whoami
 cangls
[cangls@hpf-linux test]$ echo "cangls" > bols.txt 
 -bash: bols.txt: 权限不够


2、使用setfacl命令赋予的属主的权限进行更改文件

[bols@hpf-linux test]$ getfacl bols.txt 
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
other::r--
[bols@hpf-linux test]$ setfacl -m u:cangls:rw- /tmp/test/bols.txt 
Try `getfacl --help' for more information.
[bols@hpf-linux test]$ getfacl bols.txt 
# file: bols.txt
# owner: bols
# group: bols
user::rw-
user:cangls:rw-
group::rw-
mask::rw-
other::r--
[bols@hpf-linux test]$ ls -l bols.txt 
-rw-rw-r--+ 1 bols bols 12 7月   9 08:33 bols.txt
[cangls@hpf-linux test]$ echo "cangls" > bols.txt 
[cangls@hpf-linux test]$ cat bols.txt
cangls
[bols@hpf-linux test]$ setfacl -x u:cangls bols.txt    //取消权限
[bols@hpf-linux test]$ getfacl bols.txt 
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
mask::rw-
other::r--
[cangls@hpf-linux test]$ echo "bols" > bols.txt 
-bash: bols.txt: 权限不够


3、使用setfacl命令赋予的属组的权限进行更改文件

[bols@hpf-linux test]$ setfacl -m g:cangls:rwx bols.txt 
[bols@hpf-linux test]$ getfacl bols.txt 
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
group:cangls:rwx
mask::rwx
other::r--
[bols@hpf-linux test]$ ls -l bols.txt 
-rw-rwxr--+ 1 bols bols 12 7月   9 08:33 bols.txt
[cangls@hpf-linux test]$ echo "bols" >> bols.txt 
[cangls@hpf-linux test]$ cat bols.txt
cangls
bols
[bols@hpf-linux test]$ setfacl -x g:cangls bols.txt 
[bols@hpf-linux test]$ getfacl bols.txt 
# file: bols.txt
# owner: bols
# group: bols
user::rw-
group::rw-
mask::rw-
other::r--
[cangls@hpf-linux test]$ echo "bols" > bols.txt 
-bash: bols.txt: 权限不够


4、-R递归目录用法举例

[bols@hpf-linux tmp]$ setfacl -R -m  u:cangls:rwx /tmp/test/
[bols@hpf-linux tmp]$ getfacl /tmp/test/bols.txt 
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/bols.txt
# owner: bols
# group: bols
user::rw-
user:cangls:rwx
group::rw-
mask::rwx
other::r--
[bols@hpf-linux tmp]$ getfacl /tmp/test/
getfacl: Removing leading '/' from absolute path names
# file: tmp/test/
# owner: bols
# group: bols
user::rwx
user:cangls:rwx
group::rwx
mask::rwx
other::r-x

[bols@hpf-linux tmp]$ ls -ld test/
drwxrwxr-x+ 2 bols bols 4096 7月   9 08:00 test/
[cangls@hpf-linux test]$ echo "cangls" >> bols.txt 
[cangls@hpf-linux test]$ cat bols.txt 
cangls
bols
cangls


        通过上面三个简单的小例子可以看出通过setfacl命令可以很好的解决文件权限的问题,希望通过此例子技巧的学习能给你的学习工作带来便利。