Linux 文件的特殊权限—ACL项目练习

本文为Ubuntu Linux操作系统- 第二十一 期~~

上期回顾: 【ACL权限控制详解

更多Linux 相关内容请点击👉【Linux专栏】~

主页:【练小杰的CSDN

文章目录

项目

问题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 权限,那么,如果jobAjobB要在这个目录中新建文件和子目录,要求这些文件继承父目录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】!!!

明天再见,各位🧍‍♂️大佬们~~

相关推荐
Kazefuku7 分钟前
python文件打包成exe文件
python·学习
江畔独步15 分钟前
vim中的查找
linux·编辑器·vim
赵谨言35 分钟前
基于单片机的视力保护仪设计与实现
经验分享·毕业设计
threelab38 分钟前
08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习
学习
Web极客码39 分钟前
虚拟主机与独立服务器:哪个更好?
运维·服务器·虚拟主机
小突突突39 分钟前
个人博客系统测试报告
运维·网络·功能测试
水银嘻嘻1 小时前
web 自动化之 Unittest 四大组件
运维·前端·自动化
爆肝疯学大模型1 小时前
SQL server数据库实现远程跨服务器定时同步传输数据
运维·服务器·数据库
嵌入式仿真实验教学平台1 小时前
「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具
人工智能·学习·proteus·无人机·低空经济·嵌入式仿真·实验教学
飞猿_SIR1 小时前
Android Exoplayer 实现多个音视频文件混合播放以及音轨切换
android·音视频