Linux权限管理之ACL权限详解 – 作者:凯信特安全团队

“很多初学 Linux 的人都会有这样的疑惑,限有什么作用呢?我什么需要配置和修改限呢?因为绝大多数初学者使用的都是个人算机,个人算机主要使用管理身份登,而且不会有多个用存在。但是在服器上,需要 root 和普通用存在、同管理服器,所以合理的限分配是保器安全与定的前提。”

 

在普通限中,用户对文件只有三种身份,就是所属主、所属和其他人;每种用身份read)、写(write)和行(execute)三种限。但是在实际工作中,三种身份在是不用,个例子来看看。

图片.png

根目中有一个 /item是班目目。班中的每个学都可以访问和修改个目,老也需要对这个目录拥访问和修改限,其他班的学当然不能访问这个目。需要怎么个目限呢?应该这样:老使用root ,作为这个目的所属主, rwx;班所有的学都加入 group 组,使 group 组作为 /item的属限是 rwx;其他人的 0这样这个目限就可以符合我目开要求了。

有一天,班里来了一位听的学 st,她必须能够访问 /item,所以必须对这个目录拥 r x 权限;但是她又没有学习过以前的课程,所以不能赋予她 w 权限,怕她改错了目录中的内容,所以学员 st限就是 r-x。可是如何分配她的身份呢?变为属主?当然不行,要不 root 该放哪里?加入 group 组?也不行,因为 group 组的权限是 rwx,而我要求学 st 限是 r-x。如果把其他人的限改 r-x 呢?这样一来,其他班的所有学都可以访问 /item了。
当出现这种情况,普通限中的三种身份就不用了。ACL 权限就是为了解决这个问题的。在使用 ACL 权限给用户 st 陚予权限时,st 既不是 /item 的所属主,也不是属仅仅赋予用 st 针对此目录的 r-x 权限。这有些类似于 Windows 中分配限的方式,独指定用独分配限,这样就解决了用身份不足的问题

开启ACL

CentOS 6.x ACL 权限默认是开启的,不需要手工开启。不过,如果你的操作系统不是 CentOS 6.x,那如何 ACL权限是否开启了呢?可以这样查看

#mount(查看挂载的分区情况)

图片.png

/dev/sda1 on /boottype xfs 

图片.png

#dumpe2fs –h /dev/sda3(查询指定分区文件系统详细信息)

-h:仅显示超级块中的信息,而不显示磁盘块组的详细信息

使用mount 命令可以査看到系中已的分区,而使用 dumpe2fs 命令可以査看到个分区文件系详细信息。大家可以看到,我 ACL 权限是 /dev/sda3 分区的默载选项,所以不需要手工挂
我的 Linux 如果没有默可以手工挂载吗?当然可以,行如下命令:

#mount –o remount,acl /(重新挂载根分区,并加入ACL权限)

使用mount 命令重新挂,并加入 ACL 权限。不过使用此命令是临时生效的。要想永久生效,需要修改 /etc/fstab 文件,命令如下:

#vi /etc/fstab

UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2/ext4 defaults,acl 1 1(加入ACL权限)

#mount –o remount(重新挂载文件系统或重启系统,使其生效)

在你需要开启 ACL 权限的分区行上(也就是说 ACL 权限针对的是分区),手工在 defaults 后面加入acl”即可永久在此分区中开启 ACL 权限

1:ACL

1:ACL权限管理命令

知道了 ACL 权限的作用,也知道了如何开启 ACL 权限,接下来学习如何査看和设定 ACL 权限。命令如下

#getfacle filename(查看ACL权限)

#setfacl option filename(设定ACL权限)

选项:

m ACL 权限。如果是给予用户 ACL 权限,则使用“u:名:格式予;如果是 ACL 权限,则使用“g:组名:权限格式予;

-x除指定的 ACL 权限

-b除所有的 ACL 权限

-d定默 ACL权限。只对目录生效,指目录中新建立的文件有此默认权限;

-k除默 ACL权限

-R递归设 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生

2和用户组添加ACL

举个例子,就来看看图 1 中的限怎么分配。我要求root /item 的属主,限是 rwxtgroup是此目的属tgroup 组中拥有班级学员 zhangsan lisi限是rwx;其他人的限是 0这时听学 st 来了,她的限是 r-x。我来看具体的分配命令。

图片.png

图片.png

图片.png

#useradd zhangsan

#useradd lisi

#useradd st

#groupadd tgroup

#mkdir /item

#chown root:tgroup /item/

#chmod 770 /item/

#ll –d /item/

#setfacl –m u:st:rx /item/

#cd /

#ll –d item/

drwxrwx—+ 3 root tgroup 4096 1月19日 05:20 item/

#getfacl item

大家可以看到,st 既不是 /item的属主、属,也不是其他人,我们单 st分配了r-x 权限。这样分配权限太方便了,完全不用先辛苦地规划用户身份了
我想户组赋 ACL 权限可以吗?当然可以,命令如下

图片.png

#groupadd tgroup2

#setfacl –m g:tgroup2:rwx item/

#ll –d item/

#getfacl item/

3: 最大有效mask

mask 是用来指定最大有效限的。mask的默认权限是 rwx,如果我 st 户赋予了 r-x ACL 权限,mj 需要和 mask rwx 权限相与才能得到 st 的真正限,也就是 r-x “相与“rwxtj出的 r-x,所以 st 户拥 r-x权限

如果把 mask 限改 r–,和 st 限相与,也就是 r–“相与“r-x得出的 r–st 限就会变为。大家可以么理解:用和用户组定的限必mask 权限设定的范围之内才能生效,mask权限就是最大有效权限。

一般不更改 mask 权限,只要给予 mask 最大 rwx,那么任何限和mask 权限相与,得出的值都是权限本身。也就是说,我们通过给用户和用户组直接赋予权限,就可以生效,这样做更直观。

补充:逻辑与运算的运算符是“and”。可以理解生活中所并且。也就是相与的两个真,果才真;有一个值为假,与的果就假。比如 A 相与 B果入表 2 所示。

A B and
true true true
true false false
false true false
false false false

 

Sheet2逻辑与运算

那么两个限相与和上面的似,我r例,果如表 3 所示。

A B And
r r r
r
r

所以,“rwx”相与“r-x”果是“r-x”“r–“相与“r-x”果是“r–“

修改最大有效限的命令如下:

图片.png

#setfacl –m m:rx item/

#getfacl item/

4: ACL权限和递归ACL

经给/item 录设定了ACL 权限,那么,在这个目录中新建一些子文件和子目录,这些文件是否会继承父目录的ACL 权限呢?Let’s go!

图片.png

#cd /item/

#touch abc

#mkdir d1

#ll

子文件 abc 和子目 d1 是后建立的,所以并没有承父目 ACL 权限。当然,我们可以手工给这两个文件分配 ACL 权限,但是如果在目录中再新建文件,都要手工指定,则显得过于麻烦。这时就需要用到默认ACL 权限

ACL 权限的作用是:如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL ACL 权限只对目录生效。命令如下

图片.png

setfacl –m d:u:st:rx /item/

#getfacl item/

#cd item/

#touch bcd

#mkdir d2

#ll

图片.png

原先的abc d1 还是没有ACL 权限,因为默认 ACL 权限是针对新建立的文件生效的
说说递归 ACL 权限递归是指父目ACL 权限时,所有的子文件和子目录也会拥有相同的 ACL 权限

图片.png

#setfacl –m u:st:rx –R/item/

-R:递归

#ll

默认 ACL权限指的是针对父目录中新建立的文件和目录会继承父目录的 ACL 权限,格式是“setfacl-m d:u:名: 文件名递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录继承父目录的 ACL 限,格式是“setfacl-m u:名: 权限 -R 文件名

5:删除ACL

来看看怎么 ACL 权限,命令如下
删除指定的ACL权限

图片.png

#setfacl –x u:st /item/删除指定用户和用户组的ACL权限

#getfacl item/

删除所有ACL权限

#setfacl –b item/(会删除文件的所有ACL权限)

#getfacl item/(所有ACL权限已被删除)


来源:freebuf.com 2019-02-14 15:49:49 by: 凯信特安全团队

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论