主页 >> 程序猿的东西 >> Linux扩展权限控制ACL

Linux扩展权限控制ACL

Linux基本都权限控制一定不陌生,每个文件/文件夹基于 user group other 三种用户身份分别具有读、写、执行的权限,我们可以用chmod命令来修改。但是这种设置方式比较比较简单暴力。比如我某个密码文件我需要能被执行程序读取但不希望被同一主机的其他用户读取。如果单通过群组、用户的方式授权,就有诸多不便。于是Linux提供了一个扩展的权限控制方式——ACL ( Access Control List )。

ACL也是一种用户和组的授权方式,特别之处就是对于不同用户和不同组可以设置不同的权限。而Linux默认情况只属于一个用户和组,设置权限也就只能针对这个用户和组。

ACL主要有两个操作命令

setfacl设置ACL

[root@study ~]# setfacl [-bkRd] [{-m|-x} acl參數] 目標檔名
選項與參數:
-m :設定後續的 acl 參數給檔案使用,包括授权和禁止都用这个参数,不可與 -x 合用;
-x :刪除後續的 acl 參數,比如删除test用户的所有ACL信息,不可與 -m 合用;
-b :移除『所有的』 ACL 設定參數,相当于关闭ACL;
-R :递归设置 acl ,亦即包括次目錄都會被設定起來;

看一个授权的例子

[root@VM_0_10_centos test]# ll
total 4
-rw-rw---- 1 root www-exe 5 Jan 24 19:17 test.txt
[root@VM_0_10_centos test]# su test
[test@VM_0_10_centos test]$ id
uid=1002(test) gid=1002(test) groups=1002(test)
[test@VM_0_10_centos test]$ cat test.txt
cat: test.txt: Permission denied

有个test.txt的拥有者是root,test用户身份属于other,没有任何权限,用test用户身份读取文件被拒绝。

[root@VM_0_10_centos test]# setfacl -m u:test:r test.txt
[root@VM_0_10_centos test]# ll
total 4
-rw-rw----+ 1 root www-exe 5 Jan 24 19:17 test.txt
[root@VM_0_10_centos test]# su test
[test@VM_0_10_centos test]$ cat test.txt
succ

setfacl设置test用户具有r权限,然后我们看到test.txt文件的权限部分前面没有任何变化,但是最后面多了一个+,意思就是这里启用了扩展权限。这时我切换为test用户后读取文件返回了正确的结果。

getfacl查看文件的ACL信息

有set就有get,所以这个命令就是用来查看设置结果的。

[test@VM_0_10_centos test]$ getfacl test.txt
# file: test.txt
# owner: root
# group: www-exe
user::rw-
user:test:r--
group::rw-
mask::rw-
other::---

应该不难看懂,但是下面有个mask需要特别解释一下,可以翻译为掩码,通常是与权限做位与运算。也可以理解为权限范围,mask里面没有的权限即使设置了也是不生效的。

[test@VM_0_10_centos test]$ getfacl test.txt
# file: test.txt
# owner: root
# group: www-exe
user::rw-
user:test:rwx
group::rw-
mask::rwx
other::---
[root@VM_0_10_centos test]# setfacl -m mask::r test.txt
[root@VM_0_10_centos test]# getfacl test.txt
# file: test.txt
# owner: root
# group: www-exe
user::rw-
user:test:rwx			#effective:r--
group::rw-			#effective:r--
mask::r--
other::---

看上面例子,test用户的权限是rwx,mask也是rwx,我们设置mask为r后发现上面test和group的权限后面写了一个注释写名有效权限是r就是mask的作用。

发表评论