rhce8-acl设置

acl介绍及基本用法

前面讲权限的时候是对u、u、o来设置权限的。假如有如下的需求:

rhce8-acl设置 

有一个目录aa,要求tom、bob、mary具有不同的权限如上图所示,利用前面讲过的只是是完全可以实现的:

所有者设置为tom,把所有者权限设置为rw

所属组设置为bob,把所属组权限设置为r

mary使用o的权限,把o权限设置为rx

 

但是如果如果有4个或者更多个用户,要求不同的权限如下图:

rhce8-acl设置 

按照前面讲的知识点就没法实现了,要实现对具体用户设置权限的话,我们可以考虑ACL。

 

acl的用法

setfacl  -m  u:用户名:rw-   file/dir   --对用户设置ACL

setfacl  -m  g:组名:rw-   file/dir     --对组设置ACL

 

在/opt下创建一个文件/opt/aa.txt文件:

rhce8-acl设置 

对于lduan用户来说只能使用o权限,所以lduan是不能往此aa.txt里写内容,打开一个新标签使用lduan登录,然后aa.txt里测试写:

rhce8-acl设置 

此时是写不进去的。使用root用户对aa.txt设置acl权限,首先查看aa.txt是否具有acl权限,查看的命令为getfacl:

rhce8-acl设置 

设置aa.txt的acl权限,使得用户lduan对aa.txt只具有写权限没有r权限:

rhce8-acl设置 

查看aa.txt的acl权限:

rhce8-acl设置 

使用lduan用户进行测试:

rhce8-acl设置 

为aa.txt设置acl权限,让lduan用户能写:

rhce8-acl设置 

可以看到lduan对aa.txt具有rw权限了,然后使用lduan用户往aa.txt里写数据试试:

rhce8-acl设置 

已经成功的新进去了。

如果对组设置acl权限,比如设置aa.txt的acl权限,让tom组的用户能写:

rhce8-acl设置 

此后凡是tom组的用户对aa.txt都具有rw权限。

注意:假设一个用户bob已经登录系统但是不属于tom组,然后把bob加入到tom组后,bob需要退出重新登录才能使用权限。

acl的mask权限

首先介绍几个名词

[root@server opt]# getfacl -c aa.txt  #这里-c可以去除前几行的注释行

user::rw-                   ## ACL_USER_OBJ

user:lduan:rw-          ## ACL_USER

group::r--                ## ACL_GROUP_OBJ

group:tom:rw-        ## ACL_GROUP

mask::rw-               ## ACL_MASK

other::r--

[root@server opt]#

名词解释:

ACL_USER_OBJ-------文件的所有者

ACL_USER ------------通过acl授权的用户

ACL_GROUP_OBJ ---文件所属组

ACL_GROUP----------通过acl授权的组

ACL_MASK-----------ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限

如果没有手动的配置ACL_MASK的权限,则ACL_MASK的权限会随着ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的变化而变化,始终是这几个权限的最大值

假设把tom组(ACL_GROUP)的的权限改成r:

rhce8-acl设置 

这里因为ACL_USER(lduan用户)的权限是rw,是这几者里最高的,所以ACL_MASK的权限并没改变。现在把lduan的acl权限改成---:

rhce8-acl设置 

因为这几者里,最高权限为r,所以ACL_MASK的权限是r。

如果把lduan的acl权限设置为rwx:

rhce8-acl设置 

lduan的acl权限现在是最高的,所以mask也跟着变成了rwx。

当然,我们也可以手动设置ACL_MASK的权限,语法如下:

setfacl  -m  m::rw-   file/dir   --对用户设置ACL

rhce8-acl设置 

刚才讲mask设置的是ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限,所以即使lduan用户的权限有rwx,但是生效的只有r权限,如上图里#effective:r--显示的,因为最大权限被限定在r了。

如果把mask的权限设置为---呢?

rhce8-acl设置 

因为mask是最高权限,所以上图显示的ACL_USER, ACL_GROUP_OBJ和ACL_GROUP实际能使用的的权限均为---。下面测试lduan用户是否能读和写aa.txt的内容:

rhce8-acl设置 

可以看到可以读但是不能写,但这个和mask的权限---相悖啊,因为这里又涉及到了other的权限,前面可以看到o的权限为r,所以lduan是可以读但是不可以写的。

如果给o设置一个写权限:

rhce8-acl设置 

则lduan用户是可以往aa.txt里写东西:

rhce8-acl设置 

 

结论:如果没有手动的设置acl的mask权限,则对用户/组 设置的acl权限生效,不用考虑o的权限。如果手动设置了mask的权限,则用户最终的权限是acl最终权限+other权限的集合。

重新给任一用户设置acl权限,则自动取消手动设置的mask权限。

要取消acl用

setfacl  -x u:用户名  file/dir

或者

setfacl  -x u:用户名  file/dir

要取消用户tom和lduan的acl,及取消tom的acl权限:

rhce8-acl设置 

上面练习的都是对文件设置acl权限,对目录设置acl权限是一样的,请大家自行练习。

设置默认权限

当我们对目录设置acl的时候,还可以设置默认acl权限,语法如下:

setfacl  -m  d:u:user1:rwx   dir   

意思是,不管谁在目录dir里 新建的目录或者文件,对user1 会自动设置acl权限rwx。注意,这里的默认权限是对dir里新建的目录或者文件,并非对dir本身设置权限。

上图的d的意思是默认的意思,为了好解释我们看如下的例子:

创建目录/opt/xx,为了下面测试方便给设置acl权限让tom具有rwx权限:

rhce8-acl设置 

现在设置lduan对目录xx的默认acl权限为rwx:

rhce8-acl设置 

不管任何人在xx目录里新创建的文件或目录,对lduan都会有默认的rwx

测试:使用tom用户在/opt/xx下创建一个目录test1,然后查看此目录的acl权限:

rhce8-acl设置 

可以看到lduan对/opt/xx/test1具有默认acl权限rwx,然后用lduan用户往/opt/xx/test1写点东西试试:

rhce8-acl设置 

可以看到lduan具备相关权限。

然后lduan用户往/opt/xx里写东西:

rhce8-acl设置 

写不进去,说明了默认权限是对/opt/xx里新建的目录或者文件,并非对/opt/xx本身设置权限。

取消默认权限:

rhce8-acl设置 

取消默认权限之后,以后在/opt/xx里新建的文件对lduan用户不会有默认acl权限,但是已经存在的文件的默认权限 也不会取消。

相关新闻

发表回复

Please Login to Comment

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

                                                                                                                                    RHCE9学习指南全部更新完成,点击阅读