linux中实现灵活的特殊权限管理ACL,以及ACL权限判断顺序!

为什么要使用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

 

你可能感兴趣的:(linux中实现灵活的特殊权限管理ACL,以及ACL权限判断顺序!)