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】!!!

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

相关推荐
Bytebase8 分钟前
MySQL 如何赶上 PostgreSQL 的势头?
运维·数据库·dba·开发者·数据库管理·devops
孑么14 分钟前
GDPU Android移动应用 重点习题集
android·xml·java·okhttp·kotlin·android studio·webview
9命怪猫16 分钟前
AI大模型-提示工程学习笔记5-零提示
人工智能·笔记·学习·ai·提示工程
MonkeyKing_sunyuhua1 小时前
在 Ubuntu 22.04 上从 Wayland 切换到 X11的详细步骤
linux·运维·ubuntu
xchenhao2 小时前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
生如夏花℡2 小时前
JAVA学习记录3
java·学习·idea
凡人的AI工具箱2 小时前
每天40分玩转Django:Django DevOps实践指南
运维·后端·python·django·devops
shaxin观yin2 小时前
python反序列化+沙箱逃逸++js+redis
python·学习·https
running thunderbolt2 小时前
Linux : Linux环境开发工具vim / gcc / makefile / gdb / git的使用
linux·git·vim
高 朗2 小时前
【GO基础学习】项目日志zap Logger使用
服务器·学习·golang·日志·zap