acl权限介绍
规定有一个权限,在一个班级内,有老师、学生、试听学生、其他班级四个角色。
acl权限用来处理特殊的权限设置,比如在规定情境中,老师是所有者,可以有讲课文件的所有权限、学生需要进行课堂练习,也有讲课文件的所有权限,其他班级的人没有任何权限,但是试听学生只有读的权限,像这种除了所有者,所属组,其他人的权限外,还需要额外进行其他单个用户或者组的权限设置,这个时候需要用到acl权限。情况有点类似于windows中的权限设置!
acl权限开启
acl权限设置能否设置取决于分区是否支持acl权限。
df -h
命令查看系统有哪些分区。
dumpe2fs -h /dev/sda2
查看分区详情,Default mount options
项可以查看分区是否支持acl,如果不支持可以执行 mount -o remount,acl
来临时重新挂载分区支持acl权限,如需要永久开启acl权限,可以修改/etc/fstab
(开机自动挂载文件)文件中的关于要操作的分区后的defaults加入,acl
权限,现在一般defaults都支持acl,所以不需要手动修改来进行配置!这个文件如果改错可能会导致开机启动不了,所以谨慎修改
[root@bogon root]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.8G 1.3G 8.0G 14% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 190M 25M 156M 14% /boot
/dev/sda5 8.6G 20M 8.1G 1% /home
[root@bogon root]# dumpe2fs -h /dev/sda2
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 80d8544a-26c6-49cd-84ab-0062346744d0
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
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 655360
Block count: 2621440
Reserved block count: 131072
Free blocks: 2220564
Free inodes: 586151
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 639
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Tue Sep 29 09:59:24 2015
Last mount time: Fri Oct 2 17:47:41 2015
Last write time: Tue Sep 29 10:05:17 2015
Mount count: 4
Maximum mount count: -1
Last checked: Tue Sep 29 09:59:24 2015
Check interval: 0 (<none>)
Lifetime writes: 3459 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: 1c89aeeb-d785-42a4-8017-46edd0ec88ea
Journal backup: inode blocks
Journal features: journal_incompat_revoke
日志大小: 128M
Journal length: 32768
Journal sequence: 0x00002242
Journal start: 1
查看和设定acl权限
getfacle 文件名
可以查看acl权限。setfacl 选项 文件名
设定acl权限。
选项 | 说明 |
---|---|
-m | 设定acl权限 |
-x | 删除指定的acl权限 |
-b | 删除所有的acl权限 |
-d | 设定默认的acl权限 |
-k | 删除默认acl权限 |
-R | 递归设定acl权限 |
#假定添加用户
[root@bogon root]# useradd zhangsan
us[root@bogon root]# useradd lisi
[root@bogon root]# useradd st
[root@bogon root]# groupadd tgroup
[root@bogon root]# gpasswd -a zhangsan tgroup
Adding user zhangsan to group tgroup
[root@bogon root]# gpasswd -a lisi tgroup
Adding user lisi to group tgroup
#创建项目目录并设定权限
[root@bogon root]# mkdir project
[root@bogon root]# chown root:tgroup project/
[root@bogon root]# chmod 770 project/
[root@bogon root]# ll -d project/
drwxrwx---. 2 root tgroup 4096 10月 3 06:56 project/
[root@bogon root]# echo 设定acl权限
设定acl权限(u:st:rx分别是给user st 设定 rx权限,u 也可以换成g表示给组分配)
[root@bogon root]# setfacl -m u:st:rx project/
[root@bogon root]# ll -d project/
drwxrwx---+ 2 root tgroup 4096 10月 3 06:56 project/
[root@bogon root]# echo 查看acl权限
查看acl权限
[root@bogon root]# getfacl project
# file: project
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---
[root@bogon root]#
最大有效权限
代码解析:
上面的mask就是最大有效权限,在acl权限设定的权限跟mask相与后得到的值才是真正最大的权限。默认mask是rwx最大权限,我们可以通过setfacl -m:[rx]
修改mask。
删除acl权限
serfacl -x u:用户名 文件名
删除指定用户的acl权限。
setfacl -x g:组名 文件名
删除指定组的acl权限。
setfacl -b 文件名
删除文件所有的acl权限。
递归权限
serfacl -x u:用户名 -R 文件名
用于给目录下已经存在的子文件和目录一起设置权限
默认权限
serfacl -x d:u:用户名 -R 文件名
用于给目录下新建存在的子文件和目录一起设置权限
以上两个权限需要注意的是,如果在设置递归权限之后新建了一个文件后又执行默认权限,那么在这之两个命令之间创建的文件不会有权限,因为它在地柜权限设置后,又在默认权限设置前,所以两种权限都没有生效。