为什么要使用ACL?在linux中,我们可以使用:”ll 文件名“来查看文件的权限。
[root@Centos6 ~]# ll 1.txt
---x-wxr-x. 1 zhangsan zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]# getent group zhangsan
zhangsan:x:522:
[root@Centos6 ~]# chmod 770 1.txt
[root@Centos6 ~]# ll 1.txt
-rwxrwx---. 1 zhangsan zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]#
我们可以看出对于1.txt这个文件只有owner:zhangsan以及zhangsan组里面的人可以访问该文件,其他人不能访问。如果这时有个普通用户李四想访问这个文件,我们有什么办法呢?
1:我们可以
[root@Centos6 ~]# chown lisi 1.txt
[root@Centos6 ~]# ll 1.txt
-rwxrwx---. 1 lisi zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]#
改变1.txt的owner,使zhangsan变为李四,这样李四属于文件owner自然可以切换到lisi用户下来访问1.txt
缺点:改变太大,对于很多重要文件,不能直接改变owner.
2:我们可以
[root@Centos6 ~]# gpasswd -a lisi zhangsan
Adding user lisi to group zhangsan
[root@Centos6 ~]# getent group zhangsan
zhangsan:x:522:lisi
将李四以附加组方式加入zhangsan组中,这样李四属于文件group自然可以切换到lisi用户下来访问1.txt
缺点:李四这时候属于zhangsan组里面的人,不仅能查看1.txt,所有属于zhangsan组里的其他文件,李四都拥有其相同权利。
3:我们可以
[root@Centos6 ~]# chmod 777 1.txt
[root@Centos6 ~]# ll 1.txt
-rwxrwxrwx. 1 lisi zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]#
改变1.txt的权限,使others都可以来访问这个文件,当然李四也可以。
缺点:任何人都可以拥有其other位的权利,重要文件毫无隐藏性。
4:我们可以
当1.txt为一个可执行的二进制文件时,我们也可以 chmod u+s ,使李四临时拥有张三(owner)的权利。
我们也可以chmod g+s 当对于一个可执行的二进制文件作用了sgid之后,任何人在执行该文件时,临时拥有其所有组的权限。这样,李四就临时属于张三组里面的人,可以对文件执行group的权利。
缺点:大部分文件都不是可执行的二进制文件。所以临时拥有其owner,或者group的权利也不可行。
所以最好的方法就是:我们可以让李四不属于任何一个组,只是以单用户的身份被赋予特定权限。这时我们就可以用ACL来帮助我们实现文件权限的灵活管理。
acl
开启acl的方式
centos7 默认支持acl
centos6及之前,操作系统安装时所创建的文件系统默认支持acl,而操作安装之后使用mkfs格式化的文件系统默认未开启
acl,需要手工开启,方法如下:
第一种.
tune2fs -o acl /dev/sda5
第二种.
mount -o acl /dev/sda5 /app
最常用的有以下2个命令:
getfacl: 获取文件或目录的ACL设置信息
命令: getfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
参数:-a , --access:显示文件或目录的访问控制列表
-d , --default:显示文件或目录的默认(缺省)的访问控制列表
-c , --omit-header:不显示默认的访问控制列表
-R , --recursive:操作递归到子目录
我们可以通过ACL来赋予李四r-x权利具体操作如下:
[root@Centos6 ~]# ll 1.txt
-rwxrwx---. 1 zhangsan zhangsan 9 Jul 19 13:47 1.txt
[root@Centos6 ~]# groups zhangsan
zhangsan : zhangsan
[root@Centos6 ~]# groups lisi
lisi : lisi
[root@Centos6 ~]#
1.txt的owner属于张三 group 属于张三组,且zhangsan组里只有张三,other位权限为空,
[lisi@Centos6 ~]$ ls /home/zhangsan/
ls: cannot open directory /home/zhangsan/: Permission denied
[lisi@Centos6 ~]$ exit
我们给李四加上ACL权限,
[zhangsan@Centos6 /home]$ setfacl -m u:lisi:rx /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ ll /home/zhangsan/
total 8
-rw-rwxr--+ 1 zhangsan zhangsan 0 Jul 18 12:10 1.txt
drwxrwxr-x. 2 zhangsan zhangsan 4096 Jul 18 13:13 qjc
[zhangsan@Centos6 ~]$
查看设置好的ACL
[zhangsan@Centos6 ~]$ getfacl /home/zhangsan/1.txt
getfacl: Removing leading '/' from absolute path names
# file: home/zhangsan/1.txt
# owner: zhangsan
# group: zhangsan
user::rw-
user:lisi:r-x
group::rw-
mask::rwx
other::r--
[zhangsan@Centos6 ~]$
退出切换lisi用户查看张三家目录中的1.txt,查看成功。
[lisi@Centos6 ~]$ cat /home//zhangsan/1.txt
ohello
[lisi@Centos6 ~]$
删除ACL进行验证
[zhangsan@Centos6 ~]$ setfacl -b /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ exit
logout
[root@Centos6 ~]# su - lisi
[lisi@Centos6 ~]$ cat /home/zhangsan/1.txt
cat: /home/zhangsan/1.txt: Permission denied
[lisi@Centos6 ~]$
验证成功。
接下来进行ACL的权限判断进行比较:
具体包括:user、ACL user、group、other
先来比较owner与ACL owner。
我们继续利用上面的例子,
[zhangsan@Centos6 ~]$ setfacl -m u:zhangsan:rx /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ ll /home/zhangsan/1.txt
----rwx---+ 1 zhangsan zhangsan 9 Jul 20 00:44 /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ getfacl /home/zhangsan/1.txt
getfacl: Removing leading '/' from absolute path names
# file: home/zhangsan/1.txt
# owner: zhangsan
# group: zhangsan
user::---
user:zhangsan:r-x
group::rwx
mask::rwx
other::---
[zhangsan@Centos6 ~]$ cat /home/zhangsan/1.txt
cat: /home/zhangsan/1.txt: Permission denied
[zhangsan@Centos6 ~]$
将user权限设为:---,ACL user权限设为:rx 表示长列出,结果发现被拒绝,说明user权限>ACL user
接下来看ACL user 与group 的比较:
[zhangsan@Centos6 ~]$ setfacl -m u:lisi:--- /home/zhangsan/1.txt
[zhangsan@Centos6 ~]$ getfacl /home/zhangsan/1.txt
getfacl: Removing leading '/' from absolute path names
# file: home/zhangsan/1.txt
# owner: zhangsan
# group: zhangsan
user::---
user:zhangsan:r-x
user:lisi:---
group::rwx
mask::rwx
other::---
[zhangsan@Centos6 ~]$ exit
logout
[root@Centos6 ~]# su - lisi
[lisi@Centos6 ~]$ cat /home/zhangsan/1.txt
cat: /home/zhangsan/1.txt: Permission denied
将lisi加入zhangsan组,将1.txt group权限设置为:rwx,将lisi加入 ACL user 权限设为 ---,切换到lisi用户,发现权限不够,表明,李四的ACL user 权限>lisi 所在的组张三的权限。
group 本来就大于 other的权限。所以它们的权限为:owner > acl user > group > other