本文为Ubuntu Linux操作系统- 第二十一 期~~
上期回顾: 【ACL权限控制详解】
更多Linux 相关内容请点击👉【Linux专栏】~
主页:【练小杰的CSDN】
文章目录
- 项目
-
- 项目要求
- 具体的设置命令如下
- 问题2
- 问题3
-
- 第一步:设置默认ACL前,在project目录下新建一个文件testfile和一个目录testdir,测试是否具有前面设置的ACL权限
- [第二步: 设定 project组 访问project 目录的rwx 的默认 ACL 权限](#第二步: 设定 project组 访问project 目录的rwx 的默认 ACL 权限)
- 第三步:用户com_user对project下的所有已有的子目录都有rx权限
- 第四步:删除project目录的所有ACL权限
项目
问题1:
有一个项目project,项目经理为 root 用户,为了协作工作创建一个工程目录
/project
,项目经理是这个目录的所有者,对/project
目录拥有rwx
权限;
项目要求
- 新建project群组,并作为 /project 目录的所属组,项目组有两个成员jobA,jobB做为project组成员,拥有对 project 的 rwx 权限;
- 其他用户访问 /project 目录设定为没有任何权限。
- 要求通过对目录project设置SGID,使jobA和jobB所创建的文件或目录属组也是project;
- 项目合作方的一个用户com_user希望能进入和看到/project目录,即对用户com_user设定 ACL 权限,令该用户对 project 拥有 rx 权限。
具体的设置命令如下
- 新建用户jobA、jobB、com_user,新建组project
powershell
[root@localhost /]# useradd jobA
[root@localhost /]# useradd jobB
[root@localhost /]# useradd com_user
[root@localhost /]# groupadd project
- 将jobA用户 和 jobB用户添加到组project中
powershell
[root@localhost /]# gpasswd -a jobA project
[root@localhost /]# gpasswd -a jobB project
- 新建目录
/project
并查看该目录权限
powershell
[root@localhost /]# mkdir project
[root@localhost /]# ll | grep project
drwxr-xr-x. 2 root root 6 Jan 4 09:47 project
- 指定目录
project
所属组为project
,并对目录project设置SGID权限
powershell
[root@localhost /]# chgrp project project
[root@localhost /]# chmod 2770 project
- 设置完后,查看目录project的权限
powershell
[root@localhost /]# ll | grep project
drwxrws---. 2 root project 6 Jan 4 09:47 project
- 对用户com_user设定 ACL 权限
powershell
[root@localhost /]# setfacl -m u:com_user:rx project
[root@localhost /]# ll |grep project
drwxrwx---+ 2 root project 6 Jul 4 09:47 project
可以看到, 权限位多了一个"+"号!!!
- 查看/prpject目录的ACL权限
powershell
[root@localhost /]# getfacl project
#file:project <--文件名
# owner: root <--文件所有者
# group: project <--文件所属组
user::rwx <--用户名栏是空的,表示所有者的权限
user:com_user:r-x <--用户com_user的权限
group::rwx <--组名栏是空的,表示所属组权限
mask::rwx <--mask权限
other::--- <--其他人权限
如上所示,通过设定 ACL 权限,在没有改变用户
com_user
任何身份的前提下,可以单独给他分配r-x
权限。
问题2
若还有另一个项目组projectA也希望对project目录拥有
rwx
权限,这样,只要对projectA设置ACL权限即可。
- 新建项目组 projectA,对project目录拥有
rwx
权限
powershell
[root@localhost /]# groupadd projectA
[root@localhost /]# setfacl -m g:projectA:rwx project
- 查看目录project 的权限 和 目录 /project的ACL权限
powershell
[root@localhost /]# ll | grep project
drwxrws---+ 4 root project 67 Jan 5 00:24 project
[root@localhost /]# getfacl project
# file: project
# owner: root
# group: project
# flags: -s-
user::rwx
user:com_user:r-x
group::rwx
group:projectA:rwx <-用户组 projectA 拥有了rwx权限
mask::rwx
other::---
问题3
前面已经对 project 目录设定了 ACL 权限,那么,如果
jobA
和jobB
要在这个目录中新建文件和子目录,要求这些文件继承父目录project的 ACL 权限,利用命令setfacl -d
设定默认 ACL 权限实现上述要求。
命令操作如下:
第一步:设置默认ACL前,在project目录下新建一个文件testfile和一个目录testdir,测试是否具有前面设置的ACL权限
powershell
[root@localhost project]# mkdir testdir
[root@localhost project]# touch testfile
[root@localhost project]# ls -l | grep test
drwxr-sr-x. 2 root project 6 Jul 5 02:08 testdir
-rw-r--r--. 1 root project 0 Jul 5 02:12 testfile
可以看到,两个新建立的文件testfile和目录testdir的权限位后面并没有 "
+
",说明它们没有继承前面设置的 ACL 权限,表示设置ACL权限后在project目录下创建的文件或子目录,并不会继承父目录project的 ACL 权限。
第二步: 设定 project组 访问project 目录的rwx 的默认 ACL 权限
powershell
[root@localhost /]# setfacl -m d:g:project:rwx project
[root@localhost /]# getfacl project
# file: project
# owner: root
# group: project
# flags: -s-
user::rwx
user:com_user:r-x
group::rwx
group:projectA:rwx
mask::rwx
other::---
default:user::rwx <--多了default
default:group::rwx
default:group:project:rwx
default:mask::rwx
default:other::---
- 切换普通用户jobA 创建文件filetest 和目录 dirtest
powershell
[root@localhost project]# su jobA
[jobA@localhost project]$ touch filetest
[jobA@localhost project]$ mkdir dirtest
[jobA@localhost project]$ exit
- 查看相关目录和文件的权限
powershell
[root@localhost project]# ll
drwxrws---+ 2 jobA project 6 Jul 5 02:32 dirtest
-rw-rw----+ 1 root project 0 Jul 5 02:32 filetest
drwxr-sr-x. 2 root project 6 Jul 5 02:08 testdir
-rw-r--r--. 1 root project 0 Jul 5 02:12 testfile
可以发现,原先的创建目录testdir 和 文件testfile没有 ACL 权限,说明默认 ACL 权限对新建立的文件生效。
- 目录dirtest的ACL 权限
powershell
[root@localhost project]# getfacl dirtest
# file: dirtest
# owner: jobA
# group: project
# flags: -s-
user::rwx
group::rwx
group:project:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:project:rwx
default:mask::rwx
default:other::---
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:project:rwx
default:mask::rwx
default:other::---
如此,目录
dirtest
继承了父目录project的默认ACL权限。
- 查看文件 filetest 的ACL权限
powershell
[root@localhost project]# getfacl filetest
# file: filetest
# owner: root
# group: project
user::rw-
group::rwx
group:project:rwx
mask::rw-
other::---
第三步:用户com_user对project下的所有已有的子目录都有rx权限
命令详细过程:
- 检查用户com_user对目录project的rx权限
powershell
[root@localhost /]# getfacl project
# file: project
# owner: root
# group: project
# flags: -s-
user::rwx
user:com_user:r-x <--com_user对目录project有rx权限
group::rwx
group:projectA:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:project:rwx
default:mask::rwx
default:other::---
- 在目录
project
下 新建目录comdir
,并查看目录的ACL 权限
powershell
[root@localhost project]# mkdir comdir
[root@localhost project]# getfacl comdir
# file: comdir
# owner: root
# group: project
# flags: -s-
user::rwx
group::rwx
group:project:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:project:rwx
default:mask::rwx
default:other::---
可以发现,用户
com_user
对目录/project/comdir
没有rx
权限
- 设置用户
com_user
对project下的所有已有的子目录都有rx权限并 查看目录/project/comdir
的ACL权限
powershell
[root@localhost /]# setfacl -m u:com_user:rx -R project
[root@localhost /]# getfacl ./project/comdir
# file: project/comdir
# owner: root
# group: project
# flags: -s-
user::rwx
user:com_user:r-x <--com_user对目录/project/comdir有rx权限
group::rwx
group:project:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:project:rwx
default:mask::rwx
default:other::---
第四步:删除project目录的所有ACL权限
- 删除project目录的所有ACL权限,查看目录project 的权限
powershell
[root@localhost /]# setfacl -b project
[root@localhost /]# ll | grep project
drwxrws---. 4 root project 67 Jul 5 07:52 project
可以看到,这时没有ACL权限了!!!
- 进入目录project 并查看该目录下的各种权限
shell
[root@localhost /]# cd project
[root@localhost project]# ll
drwxrws---+ 2 root project 6 Jul 5 07:52 comdir
drwxrws---+ 2 jobA project 6 Jul 5 02:32 dirtest
-rw-rwx---+ 1 root project 0 Jul 5 02:32 filetest
-rw-r-xr--+ 1 root project 0 Jul 5 02:12 testfile
- 要删除父目录
project
下所有子目录和文件的ACL权限,则必须使用以下命令:
shell
setfacl -b -R project
至此,Linux系统的ACL权限控制所有内容已经讲完了😆
后续如果有更多相关内容我会补充,查看主页【练小杰的CSDN】!!!
明天再见,各位🧍♂️大佬们~~