Linux ACL访问控制权限完全攻略(超详细)

您所在的位置:网站首页 linux怎么设置用户权限 Linux ACL访问控制权限完全攻略(超详细)

Linux ACL访问控制权限完全攻略(超详细)

2024-07-06 02:18| 来源: 网络整理| 查看: 265

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

图 1 ACL权限简介

图 1 的根目录中有一个 /project 目录,这是班级的项目目录。班级中的每个学员都可以访问和修改这个目录,老师也需要对这个目录拥有访问和修改权限,其他班级的学员当然不能访问这个目录。需要怎么规划这个目录的权限呢?应该这样:老师使用 root 用户,作为这个目录的属主,权限为 rwx;班级所有的学员都加入 tgroup 组,使 tgroup 组作为 /project 目录的属组,权限是 rwx;其他人的权限设定为 0。这样这个目录的权限就可以符合我们的项目开发要求了。 有一天,班里来了一位试听的学员 st,她必须能够访问 /project 目录,所以必须对这个目录拥有 r 和 x 权限;但是她又没有学习过以前的课程,所以不能赋予她 w 权限,怕她改错了目录中的内容,所以学员 st 的权限就是 r-x。可是如何分配她的身份呢?变为属主?当然不行,要不 root 该放哪里?加入 tgroup 组?也不行,因为 tgroup 组的权限是 rwx,而我们要求学员 st 的权限是 r-x。如果把其他人的权限改为 r-x 呢?这样一来,其他班级的所有学员都可以访问 /project 目录了。 当出现这种情况时,普通权限中的三种身份就不够用了。ACL 权限就是为了解决这个问题的。在使用 ACL 权限给用户 st 陚予权限时,st 既不是 /project 目录的属主,也不是属组,仅仅赋予用户 st 针对此目录的 r-x 权限。这有些类似于 Windows 系统中分配权限的方式,单独指定用户并单独分配权限,这样就解决了用户身份不足的问题。 ACL是Access Control List(访问控制列表)的缩写,不过在Linux系统中,ACL用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。

开启ACL权限

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

[root@localhost ~]# mount /dev/sda1 on /boot type ext4 (rw) /dev/sda3 on I type ext4 (rw) …省略部分输出… #使用mount命令可以看到系统中已经挂载的分区,但是并没有看到ACL权限的设置 [root@localhost ~]# dumpe2fs -h /dev/sda3 #dumpe2fs是查询指定分区文件系统详细信息的命令 …省略部分输出… Default mount options: user_xattr acl …省略部分输出…

其中,dumpe2fs 命令可选的选项及其含义如下:

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

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

[root@localhost ~]# mount -o remount, acl / #重新挂载根分区,并加入ACL权限

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

[root@localhost ~]#vi /etc/fstab UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults, acl 1 1 #加入ACL权限 [root@localhost ~]# mount -o remount / #重新挂载文件系统或重启系统,使修改生效

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

ACL权限设置

1) ACL权限管理命令

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

[root@localhost ~]# getfacle 文件名 #查看ACL权限 [root@localhost ~]# setfacl 选项 文件名 #设定ACL权限

选项:

-m:设定 ACL 权限。如果是给予用户 ACL 权限,则使用"u:用户名:权限"格式赋予;如果是给予组 ACL 权限,则使用"g:组名:权限" 格式赋予;-x:删除指定的 ACL 权限;-b:删除所有的 ACL 权限;-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;-k:删除默认 ACL 权限;-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;

2) 给用户和用户组添加ACL权限

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

[root@localhost ~]# useradd zhangsan [root@localhost ~]# useradd lisi [root@localhost ~]# useradd st [root@localhost ~]# groupadd tgroup #添加需要试验的用户和用户组,省略设定密码的过程 [root@localhost ~]# mkdir /project #建立需要分配权限的目录 [root@localhost ~]# chown root:tgroup /project/ #改变/project目录的属主和属组 [root@localhost ~]# chmod 770 /project/ #指定/project目录的权限 [root@localhost ~]# ll -d /project/ drwxrwx--- 2 root tgroup 4096 1月19 04:21 /project/ #查看一下权限,已经符合要求了 #这时st学员来试听了,如何给她分配权限 [root@localhost ~]# setfacl -m u:st:rx /project/ #给用户st赋予r-x权限,使用"u:用户名:权限" 格式 [root@localhost /]# cd / [root@localhost /]# ll -d project/ drwxrwx---+ 3 root tgroup 4096 1月19 05:20 project/ #使用ls-l査询时会发现,在权限位后面多了一个"+",表示此目录拥有ACL权限 [root@localhost /]# getfacl project #查看/prpject目录的ACL权限 #file: project



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3