1、什么是ACL权限
ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的局部权限设定。ACL可以针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于需要特殊权限的使用情况。
ACL主要针对用户(user)、用户组(group)、以及掩码(mask)方面来控制权限。
简单地来说,ACL就是可以设置特定用户或用户组对于一个文件/目录的操作权限。
例如 :
下图中老王用户要拥有文件夹av的rx权限,如何配置?使用ACL权限配置即可完成老王用户权限的配置。
2、查看分区上ACL权限是否开启
dumpe2fs命令是查询指定分区(例如根分区)详细文件系统信息的命令
[root@localhost ~]#dumpe2fs -h /dev/sda6
选项
-h 仅显示超级块中信息,而不显示磁盘块组的详细信息
查看系统分区情况
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 6147204 1181308 4646972 21% /
tmpfs 502068 0 502068 0% /dev/shm
/dev/sda1 194241 54381 129620 30% /boot
/dev/sda2 9948012 22600 9413412 1% /home
/dev/sda5 1983056 3132 1877524 1% /usr/local
查看根分区是否开启ACL权限
[root@localhost ~]# dumpe2fs -h /dev/sda6
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 808d6d71-c17c-4859-b308-8fa4089fae7b
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl #含有acl,说明开启acl权限
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 399056
Block count: 1594624
Reserved block count: 79731
Free blocks: 1241511
Free inodes: 364713
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 389
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8144
Inode blocks per group: 509
Flex block group size: 16
Filesystem created: Mon Jun 13 22:43:35 2016
Last mount time: Thu Jun 23 07:45:21 2016
Last write time: Mon Jun 13 22:51:07 2016
Mount count: 13
Maximum mount count: -1
Last checked: Mon Jun 13 22:43:35 2016
Check interval: 0 (<none>)
Lifetime writes: 2816 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 7b237614-6612-4ac2-bd54-634c99f690fb
Journal backup: inode blocks
Journal features: journal_incompat_revoke
日志大小: 128M
Journal length: 32768
Journal sequence: 0x00001ec2
Journal start: 1
3、临时开启分区ACL权限
重新挂载根分区,并挂载加入ACL权限
[root@localhost ~]#mount -o remount,acl /
说明:
-o 特殊挂载
remount 重新挂载
acl 挂载acl权限
4、永久开启分区ACL权限
通过修改配置文件/etc/fstab,一般defaults默认包括acl权限。
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Jun 13 22:43:41 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
###加入acl权限(修改时一定要慎重,否则可能导致无法启动系统)
UUID=808d6d71-c17c-4859-b308-8fa4089fae7b / ext4 defaults,acl 1 1
UUID=7c7f9a9a-7818-4515-83e3-a0b5a640d754 /boot ext4 defaults 1 2
UUID=14e6a7e0-8887-4a1a-a6d8-3a63facbc1f9 /home ext4 defaults 1 2
UUID=8ac04e92-9e7d-4d54-840b-37411417df72 /usr/local ext4 defaults 1 2
UUID=77b0f506-ffb3-4a8c-af31-5f1ab2a76ba9 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
修改后,保存退出,并重启系统或者重新挂载文件系统,使修改生效。
5、查看分区ACL权限
[root@localhost ~]# getfacl test
# file: test
# owner: root
# group: root
user::rw-
group::r--
other::r--
6、设置分区ACL权限
[root@localhost ~]# setfacl 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
创建av文件夹
[root@localhost ~]# mkdir av
查看文件属性,av文件夹所属用户和用户组是root和root,权限drwxr-xr-x
[root@localhost ~]# ll
总用量 44
-rw-------. 1 root root 983 6月 13 22:47 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 6月 23 11:05 av
-rwxr-xr-x. 1 root root 110 6月 14 08:17 hello.sh
-rw-r--r--. 1 root root 8015 6月 13 22:47 install.log
-rw-r--r--. 1 root root 3384 6月 13 22:45 install.log.syslog
-rw-r--r--. 1 root root 12640 3月 20 2013 rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
-rw-r--r--. 1 root root 240 6月 16 07:33 test
添加用户tony,并创建分组stu,将av文件夹所属用户和用户组修改为tony用户和stu用户组
[root@localhost ~]# useradd tony
[root@localhost ~]# groupadd stu
[root@localhost ~]# chown tony:stu av
查看修改后的av文件夹的详细信息
[root@localhost ~]# ll
总用量 44
-rw-------. 1 root root 983 6月 13 22:47 anaconda-ks.cfg
drwxr-xr-x. 2 tony stu 4096 6月 23 11:05 av
-rwxr-xr-x. 1 root root 110 6月 14 08:17 hello.sh
-rw-r--r--. 1 root root 8015 6月 13 22:47 install.log
-rw-r--r--. 1 root root 3384 6月 13 22:45 install.log.syslog
-rw-r--r--. 1 root root 12640 3月 20 2013 rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
-rw-r--r--. 1 root root 240 6月 16 07:33 test
修改av文件夹权限为770
[root@localhost ~]# chmod 770 av
查看av文件夹详细信息
[root@localhost ~]# ll
总用量 44
-rw-------. 1 root root 983 6月 13 22:47 anaconda-ks.cfg
drwxrwx---. 2 tony stu 4096 6月 23 11:05 av
-rwxr-xr-x. 1 root root 110 6月 14 08:17 hello.sh
-rw-r--r--. 1 root root 8015 6月 13 22:47 install.log
-rw-r--r--. 1 root root 3384 6月 13 22:45 install.log.syslog
-rw-r--r--. 1 root root 12640 3月 20 2013 rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
-rw-r--r--. 1 root root 240 6月 16 07:33 test
添加老王用户,并设置密码123
[root@localhost ~]# useradd lw
[root@localhost ~]# passwd lw
更改用户 lw 的密码 。
新的 密码:
无效的密码: WAY 过短
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
[root@localhost ~]#
查看av文件夹路径,在/root/下,普通用户无法操作。因此mv到/home文件夹下
[root@localhost ~]# mv av /home/
查看av文件夹的详细信息,并且使用lw用户尝试查看和进入av文件夹,无法查看和进入,因为lw不属于无权限,因此需要尝试使用acl权限进行设置lw用户的权限。
[lw@localhost root]$ cd /home/
[lw@localhost home]$ ls
av jzmb lost+found lw sdf tony user1 xxx
[lw@localhost home]$ ll
总用量 44
drwxrwx---. 2 tony stu 4096 6月 23 11:05 av
drwx------. 3 501 sexy 4096 6月 16 09:25 jzmb
drwx------. 2 root root 16384 6月 13 22:43 lost+found
drwx------. 3 lw lw 4096 6月 23 11:06 lw
drwx------. 3 cls sexy 4096 6月 16 09:25 sdf
drwx------. 3 tony tony 4096 6月 23 11:05 tony
drwx------. 3 user1 user1 4096 6月 23 09:56 user1
drwx------. 3 imooc imooc 4096 6月 16 09:26 xxx
[lw@localhost home]$ cd av
bash: cd: av: 权限不够
[lw@localhost home]$ ls
av jzmb lost+found lw sdf tony user1 xxx
[lw@localhost home]$ ls av
ls: 无法打开目录av: 权限不够
[lw@localhost home]$
设置用户lw拥有rw权限
[root@localhost home]# setfacl -m u:lw:rx /home/av
查看acl权限,ll命令显示多了一个“+”
[root@localhost home]# ll
总用量 48
drwxrwx---+ 2 tony stu 4096 6月 23 11:05 av
drwx------. 3 501 sexy 4096 6月 16 09:25 jzmb
drwx------. 2 root root 16384 6月 13 22:43 lost+found
drwx------. 3 lw lw 4096 6月 23 11:06 lw
drwx------. 3 cls sexy 4096 6月 16 09:25 sdf
drwx------. 3 tony tony 4096 6月 23 11:05 tony
drwx------. 3 user1 user1 4096 6月 23 09:56 user1
drwx------. 3 imooc imooc 4096 6月 16 09:26 xxx
[root@localhost home]#
[root@localhost home]# getfacl /home/av
getfacl: Removing leading '/' from absolute path names
# file: home/av
# owner: tony
# group: stu
user::rwx
user:lw:r-x
group::rwx
mask::rwx
other::---
切换到lw用户,使用ls和cd测试可以正常进入和查看。
[lw@localhost home]$ ll av
总用量 0
[lw@localhost home]$ cd av
[lw@localhost av]$
给用户组设定ACL权限
为组tgroup2分配acl权限。使用“g:组名:权限”格式
[root@localhost home]# groupadd tgroup2
[root@localhost home]# setfacl -m g:tgroup2:rwx /home/av
7、最大有效权限mask
mask是指用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到的用户的真正权限。
[root@localhost home]# getfacl /home/av
getfacl: Removing leading '/' from absolute path names
# file: home/av
# owner: tony
# group: stu
user::rwx
user:lw:r-x
group::rwx
group:tgroup2:rwx
mask::rwx
other::---
lw用户权限与mask相与之后的权限才是lw用户真正的权限
例如上述lw用户拥有rx权限
修改最大有效权限
[root@localhost home]# setfacl -m m:rx /home/av
修改最大有效权限后,lw用户拥有av文件夹的真正权限是rx(说明mask:rx和lw相与之后的结果)
测试:
首先设定lw用户拥有rwx权限,再修改mask权限为rx权限,实际用户lw仅仅拥有rx权限。操作如下:
[root@localhost home]# setfacl -m u:lw:rwx av
[root@localhost home]# getfacl /home/av
getfacl: Removing leading '/' from absolute path names
# file: home/av
# owner: tony
# group: stu
user::rwx
user:lw:rwx
group::rwx
group:tgroup2:rwx
mask::rwx
other::---
[root@localhost home]# setfacl -m m:rx /home/av
[root@localhost home]# getfacl /home/av
getfacl: Removing leading '/' from absolute path names
# file: home/av
# owner: tony
# group: stu
user::rwx
user:lw:rwx #effective:r-x
group::rwx #effective:r-x
group:tgroup2:rwx #effective:r-x
mask::r-x
other::---
8、删除用户ACL权限
[root@localhost home]# setfacl -x u:lw /home/av
[root@localhost home]# getfacl /home/av
getfacl: Removing leading '/' from absolute path names
# file: home/av
# owner: tony
# group: stu
user::rwx
group::rwx
group:tgroup2:rwx
mask::rwx
other::---
9、删除文件所有的ACL权限
[root@localhost home]# setfacl -b /home/av
[root@localhost home]# getfacl /home/av
getfacl: Removing leading '/' from absolute path names
# file: home/av
# owner: tony
# group: stu
user::rwx
group::rwx
other::---