RHCE-配置文件或目录的ACL权限

查看文件系统是否支持ACL

[root@foundation0 RHCE]# dmesg | grep -i acl

[    1.177048] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ)

[    2.622530] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled

 

通过ugo权限限制用户访问:

[root@foundation0 acl]# ll test.txt

-rw-r--r--. 1 root root 15 Nov 27 19:42 test.txt

[root@foundation0 acl]# chmod o-r test.txt

[root@foundation0 acl]# ll test.txt

-rw-r-----. 1 root root 20 Nov 28 09:51 test.txt

 

 

其它用户或组无法查看文件test.txt

[test@foundation0 acl]$ id

uid=1001(test) gid=1001(test) groups=1001(test) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[test@foundation0 acl]$ cat test.txt

cat: test.txt: Permission denied

 

Test用户属于其它的范围,其它现在没有任何权限,所有test无法访问文件,现在要实现的功能是,即使test用户在其它的范围内,也要能查看或执行test.txt文件:

解决方法:

使用ACL

配置acl选项参数:

setfacl

-m设定指定的acl参数

 

-x删除指定的ACL参数

-b删除所有的ACL设置条目

 

-d设置默认的default

-k删除defaultACL参数

 

-R递归设置acl

 

 

查看文件的ACL

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

group::r--

other::---

 

配置ACL用户权限 
[root@foundation0 acl]# setfacl -m u:test:rw- test.txt # u:指明要配置用户 rw-test这个用户拥有访问文件的权限

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw-

group::r--

mask::rw-

other::---

与没有配置ACL相比,多了user:test:rw-mask:rw-字段,这个字段的意思是允许test用户可以读写test.txt文件,即使test没有其它用户组的权限

 

配置ACL的文件,权限里多了一个+号,表示这个文件配置了ACL

[root@foundation0 acl]# ll test.txt

-rw-rw----+ 1 root root 15 Nov 27 19:45 test.txt

 

 

这样test用户就可以查看文件了

[test@foundation0 acl]$ cat test.txt

this is a test

 

 

配置ACL组权限:

将用户添加到组:

[root@foundation0 acl]# usermod -aG admins test

[root@foundation0 acl]# id test

uid=1001(test) gid=1001(test) groups=1001(test),1002(admins)

添加用户test001,默认情况下,这个用户不能访问test.txt文件

[root@foundation0 acl]# useradd test001

[test001@foundation0 acl]$ cat test.txt

cat: test.txt: Permission denied

 

test001添加到组admins

[root@foundation0 acl]# usermod -aG admins test001

[root@foundation0 acl]# id test001

uid=1002(test001) gid=1003(test001) groups=1003(test001),1002(admins)

[test001@foundation0 acl]$ grep admins /etc/group

admins:x:1002:test,test001

将组admins添加到test.txtacl权限中,这个属于这个组的所有成员都有权限访问test.txt文件了

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw-

group::r--

mask::rw-

other::---

将组admins添加到test.txtacl权限中:

[root@foundation0 acl]# setfacl -m g:admins:rw- test.txt

 

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw-

group::r--

group:admins:rw-

mask::rw-

other::---

与没有添加组acl权限相比,多了一个group:admins:rw-字段,这个字段表示属于admins组的所有成员都有读写test.txt文件的权限

[test001@foundation0 acl]$ cat test.txt

This is a test file

现在所有属于组admins的成员都可以访问test.txt文件了

 

mask定义facl所有权限的最大权限,文件所有者权限不受影响

[root@foundation0 acl]# chmod 600 test.txt

[root@foundation0 acl]# ll test.txt

-rw-------+ 1 root root 15 Nov 27 19:45 test.txt

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw-#effective:---

group::r--#effective:---

group:admins:rw-#effective:--- #有效权限为空

mask::---#相当于掩码,mask权限相当于所有权限的最大值,现在mask都没有权限,所有其它都没有权限了

other::---

Effective:表示有效的权限,如果为---,表示这个权限不生效,因为600表示只有文件所有者才有权限,所属组或其它用户没有权限。

 

mask控制  user:test:rw-  group::r--   group:admins:rw- 的权限

 

[root@foundation0 acl]# chmod 640 test.txt

[root@foundation0 acl]# ll test.txt

-rw-r-----+ 1 root root 20 Nov 28 10:18 test.txt

 

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw-#effective:r--

group::r--

group:admins:rw-#effective:r--

mask::r--

other::---

现在所属组有只读权限,mask的权限也为只读权限。

 

可以通过修改mask的权限来提升acl其它用户和其它组的权限

[root@foundation0 acl]# setfacl -m m:rw test.txt

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw-

group::r--

group:admins:rw-

mask::rw-#这里修改了

other::---

这个修改maskrw权限,所以用户test和组admins都有rw权限,mask表示所属用户或组的最大权限

 

 

对目录配置acl默认值:

-d 表示配置ACL目录的默认值:

[root@foundation0 acl]# ll -d /acl#未配置前的值

drwxr-xr-x. 2 root root 21 Nov 28 10:18 /acl

[root@foundation0 acl]# setfacl -m d:g:admins:rwx /acl#配置目录/acl的默认ACL

[root@foundation0 acl]# ll -d /acl

drwxr-xr-x+ 2 root root 21 Nov 28 10:18 /acl#会在权限最后一位添加一个+

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:admins:rwx

default:mask::rwx

default:other::r-x

与一般权限相比,多了以default开头的字段,表示这个目录默认值ACL权限

 

修改acl目录权限的default:other的权限配置为空:

[root@foundation0 acl]# setfacl -m d:o::-- /acl

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:admins:rwx

default:mask::rwx

default:other::---

 

修改目录acl default权限的mask权限配置为rw-:

[root@foundation0 acl]# setfacl -m d:m::rw- /acl

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x#effective:r--

default:group:admins:rwx#effective:rw-

default:mask::rw-

default:other::---

 

修改目录acl default组的admins的权限为r--
[root@foundation0 acl]# setfacl -m d:g:admins:r-- /acl

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:admins:r--

default:mask::r-x

default:other::---

[root@foundation0 acl]# setfacl -m d:g:admins:r-- /acl

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:admins:r--

default:mask::r-x

default:other::---

 

总结:

由以上修改实例可以看出,default权限所有的权限位都可以修改,修改格式为:

Default  缩写为d

Group缩写为g#d:g::r-xd:g:admins:r--

Mask缩写为m#d:m::rw-

Other缩写为o#d:o::rw-

User缩写为u#d:u::rw-

: ::   按原样写

其它按原样写

 

 

删除acl权限

-x删除指定的ACL参数

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

user:test:rw- #删除这个权限

group::r--

group:admins:rw-

mask::rw-

other::---

 

[root@foundation0 acl]# setfacl -x u:test test.txt#直接到用户就可以了,不要指定详细的权限值

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

group::r--

group:admins:rw-

mask::rw-

other::---

 

删除默认的权限:

-k删除defaultACL参数

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

default:user::rwx

default:group::r-x

default:group:admins:rwx

default:mask::rwx

default:other::---#加粗为默认权限

 

[root@foundation0 acl]# setfacl -k /acl

[root@foundation0 acl]# getfacl /acl

getfacl: Removing leading '/' from absolute path names

# file: acl

# owner: root

# group: root

user::rwx

group::r-x

other::r-x#目录所有的默认权限已删除

 

 

删除所有的ACL

-b删除所有的ACL设置条目

[root@foundation0 acl]# ls

test.txt

[root@foundation0 acl]# ll

total 8

-rw-rw----+ 1 root root 20 Nov 28 10:18 test.txt

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

group::r--

group:admins:rw-

mask::rw-#因添加ACL而添加的字段

other::---

 

[root@foundation0 acl]# setfacl -b test.txt

[root@foundation0 acl]# getfacl test.txt

# file: test.txt

# owner: root

# group: root

user::rw-

group::r--

other::---

[root@foundation0 acl]# ls -al test.txt

-rw-r-----. 1 root root 20 Nov 28 10:18 test.txt#现在没有ACL字段,是普通的UGO权限

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS