1. ACL访问控制列表的功能
早期Linux系统的权限控制主要依赖于UGO (user, group, others) 模型,然而这种权限控制由于灵活度不高具有一定的局限性,由于存在业务需求,为了实现更加灵活和精确的权限控制,后续开源组织推出了ACL(Access Control List)权限控制模块作为传统UGO模型的补充。
ACL的功能是给文件设置特权用户,即允许特定用户访问。
例如,f1文件权限644,属主root,属组root,则用户zhang无权写入,可给zhang设定特权,仅允许zhang写入。若使用o+w的操作,则不仅是用户zhang,其他用户也具备了写入权限。为了满足这样的业务需求,我们可以使用ACL提供的相关命令来实现。
2. ACL访问控制列表的常用命令
设置ACL命令的常用方式如下。
①getfacl f1:查看文件f1的ACL信息。
②setfacl -m u:zhang:rw f1:针对文件f1,f1文件的所属者和所属组均为root,普通用户zhang没有w权限,可以用setfacl给单独普通用户zhang添加文件f1的rw权限,让用户zhang也能像用户root一样读写f1文件,这个过程称为设置用户zhang的ACL。setfacl命令的-m选项表示设置状态为“修改”,u:zhang:rw表示设置用户zhang的ACL为rw,如下面操作所示,用户zhang对f1有rw权限,可尝试切换到zhang用户并编辑f1文件加以验证。
[root@jump ~]# cd /mnt [root@jump mnt]# echo aaaaaa > f1 [root@jump mnt]# getfacl f1 # file: f1 # owner: zhang # group: zhang user::rw- group::rw- other::r-- [root@jump mnt]# setfacl -m u:zhang:rw f1 [root@jump mnt]# getfacl f1 # file: f1 # owner: zhang # group: zhang user::rw- user:zhang:rw- group::rw- mask::rw- other::r-- [root@jump mnt]# su - zhang [zhang@jump ~]$ cd /mnt [zhang@jump mnt]$ ls -l f1 -rw-rw-r--+ 1 zhang zhang 7 Feb 26 15:42 f1 [zhang@jump mnt]$ echo bbbbbb > f1 [zhang@jump mnt]$ cat f1 bbbbbb |
④setfacl -x u:zhang f1:撤销单个ACL。
⑤setfacl -b f1:撤销文件的所有ACL。
3. CentOS7文件属性设置
属性,即文件所具有的某些特性,可使用lsattr命令查看,举例如下。
lsattr -aR /root:查看/root下的文件及目录权限。-a用于显示指定目录下的文件及目录的属性,-R用于递归显示,即查看/root下的所有文件包括子目录文件的文件属性。
文件的常用属性如下表所示。
可以用chattr命令,使用+、-号来给文件增加或删除属性,如下操作所示。
[root@jump ~]# cd /mnt [root@jump mnt]# lsattr -aR f1 ---------------- f1 [root@jump mnt]# echo bbbbbb >> f1 [root@jump mnt]# chattr +i f1 [root@jump mnt]# lsattr -aR f1 ----i----------- f1 [root@jump mnt]# echo cccccc >> f1 -bash: f1: Permission denied [root@jump mnt]# chattr -i f1 [root@jump mnt]# lsattr -aR f1 ---------------- f1 [root@jump mnt]# echo cccccc >> f1 [root@jump mnt]# cat f1 bbbbbb bbbbbb cccccc |
可知在给f1增加i属性前,f1可写入,给f1增加了i属性后,f1处于只读状态,可使用lsattr命令查看,但不可再写入,之后去除i属性,f1又可写入。