三、ACL高级权限
UGO权限模型基于所属用户、组的,一个文件只能设置一个组,并对改组有权限控制,如果该文件需要有多个组有访问控制权限的话,UGO是无法满足需求的。使用ACL权限,必须先对这个文件系统添加ACL属性。
格式:setfacl -m u/g:用户/组:权限
1、mount -o remount,acl /dev/sdb1 /data #为/dev/sdb1添加ACL属性
2、mount | grep /dev/sdb1 #看到已经启用了acl
/dev/sdb1 on /data type ext4 (rw,acl)
3、/data目录现在对其他用户是没有写入权限的,现在我们给user1设置ACL
getfacl /data #查看/data目录的具体权限
可以看到文件的属主和属组都是root,user的权限是rwx,group的权限也r-x,other的权限是r-x。而且最重要的是user:user1:rwx,也就是user1这个用户对该目录也有rwx的权限。
现在su - user1,就有写入权限了。
4、对组使用ACL权限
setfacl-mg:user1:rwx/data #添加user1组对/data权限
usermod -g user1 user2 #将user2加入user1组
su - user2,现在就可以有写入权限了。
但是/data目录下的其他文件是没有写入权限的,ACL功能只对当前目录生效,不能对其子目录生效。
可以使用d参数对子目录设置ACL权限,但不对当前目录生效,只对所有子目录,以后不管任何用户对/data添加数据,user2都会继承它们的权限。
5、对当前目录所有子目录设置ACL,使user2对子目录有写入权限
setfacl -m d:u:user2:rwx /data/
现在user2可以对/data目录下子目录有写入权限了。
如果文件的属主和属组和文件的ACL权限发生冲突的时候,以属主和属组为准,其实文件的ACL功能只对other人有意义。
6、移除文件系统的ACL权限
setfacl -k /data #移除文件系统的默认ACL属性
setfacl -b /data #移除文件系统的所有ACL权限
setfacl -x u:user1 /data #移除user1对文件系统的ACL权限
7、一个项目需求:项目组需要名为/opt/research目录,用于存储他们的项目文档。只有组profs和grads中的成员能够在该目录中创建新文件,并且新文件应具有以下属性:
1.>目录应归root用户所有;
2>.新文件应归grads组所有;
3>.profs中的成员应自动拥有对新文件读写权限;
4>.组interns应自动拥有对新文件的只读权限;
5>.其他用户(不是组profs、grads、interns的成员)不能对该目录及其内容拥有任何权限。
前三行创建三个组,中间三行创建了/opt/research目录,并确保其归用户root、组grads所有,所拥有用户和组具有读、写、和执行权行权限,并且grads将拥有该目录中创建的文件的sgid权限。
最后四行则通过使用acl为组profs和interns授予对目录的适当权限,通过默认acl为组profs和interns授予对该目录中新创建文件的适当权限。
用getfacl显示最后权限: