ACL(访问控制列表)权限管理
内容介绍
一、ACL权限
二、rwx权限
三、mask权限
四、ACL备份和恢复
一、ACL权限
传统权限是根据所有者,所属者和其它人这三种进行设置的,这时存在缺陷,当在一个文件中设置权限时,只能根据这三种人进行设置。权限位有九个位,前三个所有者,中间所属者,最后三个时其它人。这种设置方法导致设置非常不灵活。
1.ACL概念
(1).ACL:Access Control List, 实现灵活的权限管理
(2).除了文件的所有者,所属者和其它人,可以对更多的用户设置权限
(3).CentOS7默认创建的 xfs和 ext 文件系统具有ACL功能
(4).CentOS7之前版本,默认手工创建的ext文件系统无ACL功能,需手动增加
Tune2fs -o acl /dev/sdb1
Mount -oacl /dev/sdb1 /mnt/test
(5).ACL生效顺序:所有者,自定义用户,自定义组,其他人
(6).访问控制列表可以实现灵活的权限管理,打破传统权限只能针对三种人设置权限的局限,可以加任何希望指定的用户和所有者。
(7).使用ACL之前要确认当前的文件系统支持ACL
2.确定文件系统
[root@centos6 ~]#df -T
/dev/sda3 ext4
[root@centos7 ~]#df -T
/dev/sda2 xfs
3.设置ACL权限:
[root@centos7 ~]#cd /data
[root@centos7 data]#11
total o
-rw-r--r-- 1 root root0 sep 28 10:44f1
[root@centos7 data]#su wang
[wang@centos7 data]$ cat f1
[wang@centos7 data] $ exit
exit
[root@centos7 data]#setfacl -m u : wang: - f1
[root@centos7 data]#11
total o
-rw-r--r--+ 1 root_root 0 sep 28 10:44 f1
[root@centos7 data]#su wang
[wang@centos7 data]$cat f1
cat:f1:Permission denied
[wang@centos7 data]$exit
Exit
[root@centos7 data]#11 f1
-rw-r--r--+ 1 rootroot 0 sep 28 10:44f1
[root@centos7 data]#setfacl -m u: mage : rw f1
[root@centos7 data]#11 f1
-rw- rw-r--+ 1 root root 0 sep 28 10:44f1
[root@centos7 data]#su mage
[root@centos7 data]$cat f1
[root@centos7 data]$ echo xx >> f1
[root@centos7 data]$ exit
Exit
[root@centos7 data]#useradd zhang
[ root@centos7 data]#su zhang
[ zhang@centos7 data]$ 11
total 4
- rw- rw-r--+ 1 root root 3 Sep 28 10:51 f1
[zhang@centos7 data]$ cat f1
XX
[zhang@centos7 data]$ echo xxx >> f1
bash: f1: Permission deni ed
[zhang@centos7 data] $ exit
exit
[ root@centos7 data]#11
total 4
- rw- rw-r--+ 1 root root 3 Sep 28 10:51 f1
[ root@centos7 data]#getfacl f1
# file: f1
# owner: root
# group: root
user: : rw-
user :wang:---
user :mage: rW-
group: :r—
mask: : rw-
other: : r—
[ root@centos7 data ]#usermod -aG webs zhang
[ root@centos7 data] #SU zhang
[ zhang@centos7 data]$ cat f1
XX
[ zhang@centos7 data]$ echo xX > f1
[ zhang@centos7 data]$ exit
Exit
[ root@centos7 data]#11
total 4
-rw- rw-r--+ 1 root root 6 sep 28 10:53 f1
[root@centos7 data]#id wang
uid=1000(wang) gid=1000(wang) groups=1000(wang)
[root@centos7 data]#usermod -aG webs wang
[root@centos7 data]#getfaclf1
#file: f1
#owner: root
# group: root
user: : rw-
user: wang : ---
user:mage : rw-
group: : r—
group : webs : rw-
mask : : rw-
other: : r—
4.生效顺序判断
[root@centos7 data]#su wang
[wang@centos7 data]$cat fi
cat: f1:Permission denied
[wang@centos7 data]$ echo >> f1
bash:f1:Permission denied
[wang@centos7 data]$ exit
exit
[root@centos7 data]#11 f1
-rw-rw-r--+ 1 root_root 6 sep 28 10:53 f1
[root@centos7 data]#chown wang f1
Xx
Xx
[wang@centos7data]$echo xxX>>f1
[wang@centos7 data]$ getfaclf1
#fiie:f1
#owner: wang
#group: root
user: : rw-
user : wang : ---,
user: mage : rw-
group : :r—
group : webs : rw-
mask : : rw-
other : : r—
[wang@centos7 data]$ exit
5.针对多个组设置权限
-rw-rw-r--+ 1 wang_root_10_sep 2810:55 f1
[root@centos7 data]#setfacl-mg :C
[root@centos7 data]#groupadd dbs
[root@centos7 dataj#setfac1-m g :dbs : w f1
[root@centos7 data]#setfacl -m g:webs :r f1
[root@centos7 data]#getfaclf1
#file:f1
#owner: wang
#group:root
user: : rw-
user: wang:---
user: mage : rw-
group: :r—
group : webs : r—
group : dbs :-w-
mask: : rw-
other: : r—
[root@centos7 data]#id zhang
uid=1002(zhang)gid=1003(zhang)groups=1003(zhang),1002(webs)
[root@centos7data]#11 f1
-rw-rw-r--+ 1 _wang root 10 sep 28 10:55f1
[zhang@centos7 data]$cat f1
Xx
Xx
Xxx
[zhang@centos7 data]$echo xxx>>f1
bash: f1:Permission denied
[zhang@centos7 data]$ exit
Exit
[root@centos7 data]#usermod -aG db2 zhang
usermod: group ' db2'does not exist
[root@centos7 data]#usermod -aG dbs zhang
[root@centos7 data]#id zhang
uid=1002(zhang)gid=1003(zhang)groups=1003(zhang),1002(webs),1004(dbs)
[root@centos7data]#su zhang_
zhana@centos7 data]$ getfa2lf1
#file: f1
#owner: wang
# group: root
user: : rw-
user : wang : ---
user: mage : rw-
group: : r—
other: : r—
[zhang@centos7 data]$.
6.ACL权限的删除
[root@centos7 data]#setfac1 -x u:wang f1
[root@centos7 data]#getfacf1
#file:f1
#owner: wang
# group:root
user: : rw-
group : webs : r—
group : dbs : -w-
mask: : rw-
other: : r—
删除组
[root@centos7 data]#setfacl -x g:webs f1
[root@centos7 data]#getfaclf1
#file:f1
#owner: wang
#group: root
user: : rw-
user:mage : rw-
group : :r—
group : dbs : -w-
mask: : rw-
other: : r—
7.chmod命令
[root@centos7~]#which chmod
/usr/bin/chmod
[root@centos7 ~]#11/usr/bin/chmod
-rwxr-xr-x. 1 root root 58584 Apr 1112:35 /usr/bin/chmod
[root@centos7 ~]#chmod -x/usr/bin/chmod
-rw-r--r--. 1 root_root 58584 Apr 11 12:35 /usr/bin/chmod
[root@centos7 ~]#11/ data
total4
drwxr-xr-x 2root root 26 sep 28 11:02 dir
-rw-r--r-- 1 wang root14 sep 2811:00f1
[root@centos7 ~]#chmod600 /data/f1
-bash:/usr/ bin/chmod:Permission denied
[root@centos7 ~]#chmod +x /usr/bin/chmod
-bash:/usr/bin/chmod:Permission denied
[root@centos7 ~]#chmod 600/data/f1
-bash:/usr/bin/chmod: Permission denied
[root@centos7 ~]#setfacl -m u:root: rwx /usr/bin/chmod
[root@centos7 ~]#getfac1 /usr/bin/chmod
getfacl: Removing leading '/ ' from absolute path names
#file: usr / bin/chmod
#owner:root
# group:root
user: : rw-
user : root : rwx
group : : r—
mask: : rwx
other : : r—
二、rwx命令
1.为多用户或者组的文件和目录赋予访问权限rwx
(1).mount -o acl /directory
(2).getfacl file |directory
(3).setfacl -m u:wang:rwx file|directory
(4).setfacl -Rm g:sales:rwX directory
(5).setfacl -M file.acl file|directory
(6).setfacl -m g:salesgroup:rw file|directory
(7).setfacl -m d:u:wang:rx directory
(8).setfacl -x u:wang file |directory.
(9).setfacl -X file.acl directory
2.setfacl -M file.acl file|directory
[root@centos7 ~]#cat > ac1.txt
u : wang : rwx
g : webs : rw^C
[root@centos7 ~]#cat ac1.txt
u : wang : rwx
g : webs : rw
[ root@centos7~]#11/ data/f1
-rw-r--r-- 1 wang root 14 sep 28 11:00/data/f1
[root@centos7 ~]#setfacl-Mac1.txt /data/f1
[root@centos7 ~]#getfacl /data/f1,
getfacl: Removing leading ' / ' from absolute path names
#file: data/f1
#owner: wang
#group : root
user: : rw-
user : wang : rwx
group : :r—
group : webs : rw-
mask : : rwx
other : : r—
3.删除权限
删除王账号
[rootcentos7 ~]#setfacl -x u : wang /data/f1
全部删除
[ root@centos7 ~]#cat > noacl.txt
u : wang
g: webs
^c
[root@centos7~]#cat noac1 .txt
u : wang
g: webs
[root@centos7 ~]#setfacl -X noacl.txt /data/f1
[root@centos7 ~]#getfacl/data/f1
getfacl : Removing leading ' / ' from absolute path names
3.setfacl -m d:u:wang:rx directory
[root@centos7~]#cd /data
[root@centos7 data]#11
total 4
drwxr-xr-x2root root 26 sep 28 11:02 dir
- rw-r--r--+ 1 wang root 14 sep 28 11:00 f1
[root@centos7 data]#setfac1 -R -mu:wang : rwx dir1
新建的文件
[root@centos7 data]#setfacl -R-m d:u:mage: rw dir
[root@centos7 data]#getfacl dir
#file: dir
#owner: root
#group:root
user: : rwx
user:wang : rwx
group: :r-x
mask: : rwx
other: : r-x
default: user: : rwx
default:user: mage : rw-
default: group: : r-x
defauTt: mask: : rwx
default:other: :r-x
三.mask权限
1.概念
ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
getfacl可看到特殊权限:flags
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限base ACL不能删除
setfacl -k dir 删除默认ACL权限
setfacl -b file1清除所有ACL权限
getfacl file1 | setfacl --set-file=- file2复制file1的acl权限给file2
2.Mask
[root@centos7 dir]#setfacl -m u:wang : rw f1
[root@centos7 dir]#getfacl f1
#file:f1
#owner: root
#group: root
user : : rw-
user:wang : rw-
group : :r—
[root@centos7 dir]#11f1
-rw-rwr--+ 1 root root 595 sep 28 11:02 f1
[root@centos7 dir]#chomd o= f1
[root@centos7 dir]#11f1
-rw-rw--—-+ 1 root root 595 sep 28 11:02 f1
[root@centos7 dir]#getfaclf1
#file:f1
#owner: root#
group: root
user: : rw-
user:wang : rw-
group : :r—
mask : : rw-
other : :---
「root@centos7 dir]#id mage
uid=1001(maae)qid=1001(mage)groups=1001(mage),1002(webs)
[root@centos7 dir]#usermod -G "" mage
[root@centos7 dir]#id mage
uid=1001(mage) gid=1001(mage) groups=1001(mage)
[root@centos7 dir]#11f1
rw-rw----+1 root root_595 sep 28 11:02 f1
[root@centos7 dir]#getfal f1
#file:f1
#owner: root#
group: root
user: : rw-
user:wang : rw-
group : :r—
mask : : rw-
other : :---
mask权限
[root@centos7 dir]#setfacl -m u : mage : rwx f1
[root@centos7 dir]#11f1
-rw- rwx-—-+ 1 root root 595 sep 28 11:02 f1
[root@centos7 dir]#getfacl f1
# file:f1
#owner:root#
group: root
user: : rw-
user: wang : rw-
user:mage : rwx
group: :r--
other::---
[ root@centos7 dir]#id mage
id-1001(maae) aid=1001(mage) groups=1001(mage) ,0(root)
[ root@centos7 dir]#
此时到底是root组权限生效,还是mage权限生效,此时能看到也能写进东西,说明此时是mage权限生效了。相当于所属者权限不起作用。
3.Mask的用法
由于wang用户,mage用户以及添加的新组权限都比较大,所以可以通过mask命令将其变小。
[root@centos7 dir]#setfacl -m g: webs : rwx f1
[root@centos7 dir]#getfacl f1
#file: f1
#owner: root
#group: root
user : : rw-
user:wang : rw-
user:mage : rwx
group: :r—
group : webs : rwx
mask : : rwx
other : :---
[root@centos7 dir]#setfacl -m mask : : r f1[root@centos7 dir]#getfacl f1
#file: f1
#owner: root
#group: root
user: : rw-
user:wang : rw- #effective: r—
user:mage : rwx #effective: r—
group: :r—
group : webs : rwx入 #effective:r—
mask: : r—
other : : ---
#effective: r—为限高线,调高限高线
[root@centos7 dir]#chmod g=rw f1
[root@centos7 dir]#getfac1f1
#file: f1
#owner: root
# group: roo
tuser: : rw-
user:wang : rw-
user:mage : rwx #effective : rw-
group : :r—
group : webs : rwx #effective : rw-
mask: :rw-
other : :---
4.getfacl file1 | setfacl --set-file=- file2复制file1的acl权限给file2
[root@centos7 dir]#11f2
-rw-r--r-- 1 root_root 595 sep 28 11:02f2
[root@centos7 dir]#getfaclf1
[root@centos7 dir]#getfacl f1 >f1.acl
[root@centos7 dirj#cat f1.acl
[root@centos7 dir]#setfacl --set-file=f1.acl f2
[root@centos7 dirj#cat f1.acl
5.应用
mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(EffectivePermission)
用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask:rx file
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
示例:setfacl --set u::rw,u:wang:rw,gr,o:-file1
6.--set选项
[root@centos7 dir]#setfacl --set u::r,g::0,0::-,u:zhang:rwf1
[root@centos7 dir]#getfacl f1
四、ACL备份和恢复
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 > acl.txt
setfacl -Rrb /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1
1.ACL操作中遇到的问题
ACL权限丢失
[root@centos7 dir]#cp f1 f11
[root@centos7 dir]#getfaclf11
#fi1e: f11
#owner: root
#group: root
user: : r—
group: : r—
other: :---
2.解决
采用备份和还原ACL
[root@centos7 data]#getfacl -R dir > /root/dir.ac1
[root@centos7 dataj#setfacl-Rb dir
[root@centos7 dataj#getfacl -R
还原
[root@centos7 data]#getfacl --restore/root/dir.ac1
[root@centos7 dataj#getfacl dir
命令
Getfal
Setfacl
Mask
Chatter
Lsatter