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

news/2025/1/9 20:45:54 标签: linux, 运维, 学习, 服务器, 经验分享, android

本文为Ubuntu Linux操作系统- 第二十一期~~
上期回顾: 【ACL权限控制详解】
更多Linux 相关内容请点击👉【Linux专栏】~
主页:【练小杰的CSDN】

在这里插入图片描述

文章目录

  • 项目
    • 项目要求
    • 具体的设置命令如下
    • 问题2
    • 问题3
      • 第一步:设置默认ACL前,在project目录下新建一个文件testfile和一个目录testdir,测试是否具有前面设置的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
[root@localhost /]# useradd jobA
[root@localhost /]# useradd jobB
[root@localhost /]# useradd com_user
[root@localhost /]# groupadd project
  • 将jobA用户 和 jobB用户添加到组project中
[root@localhost /]# gpasswd -a jobA project
[root@localhost /]# gpasswd -a jobB project
  • 新建目录 /project 并查看该目录权限
[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权限
[root@localhost /]# chgrp project project
[root@localhost /]# chmod 2770 project
  • 设置完后,查看目录project的权限
[root@localhost /]# ll | grep project
drwxrws---.   2 root project    6 Jan  4 09:47 project
  • 对用户com_user设定 ACL 权限
[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权限
[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权限
[root@localhost /]# groupadd projectA
[root@localhost /]# setfacl -m g:projectA:rwx project
  • 查看目录project 的权限 和 目录 /project的ACL权限
[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权限

[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 权限

[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
[root@localhost project]# su jobA
[jobA@localhost project]$ touch filetest
[jobA@localhost project]$ mkdir dirtest
[jobA@localhost project]$ exit
  • 查看相关目录和文件的权限
[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 权限
[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权限
[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权限
[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 权限
[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权限
[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 的权限
[root@localhost /]# setfacl -b project
[root@localhost /]# ll | grep project
drwxrws---.   4 root project   67 Jul  5 07:52 project

可以看到,这时没有ACL权限了!!!

  • 进入目录project 并查看该目录下的各种权限
[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权限,则必须使用以下命令:
setfacl -b -R project

至此,Linux系统的ACL权限控制所有内容已经讲完了😆
后续如果有更多相关内容我会补充,查看主页【练小杰的CSDN】!!!
明天再见,各位🧍‍♂️大佬们~~


http://www.niftyadmin.cn/n/5817963.html

相关文章

深入学习RabbitMQ的Direct Exchange(直连交换机)

RabbitMQ作为一种高性能的消息中间件&#xff0c;在分布式系统中扮演着重要角色。它提供了多种消息传递模式&#xff0c;其中Direct Exchange&#xff08;直连交换机&#xff09;是最基础且常用的一种。本文将深入介绍Direct Exchange的原理、应用场景、配置方法以及实践案例&a…

HarmonyOS Next系列之华为账号一键登录功能实现(十四)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

创建型模式-工厂模式

工厂模式是一种创建型的设计模式&#xff0c;原理是父类提供一个创建对象的方法&#xff0c;允许子类去实现具体的实例化对象。通过此模式可减少创建和具体的产品之间的耦合关系。 适用场景&#xff1a; 1、当需求中无法预估对象确切类别及个别的依赖关系。例如&#xff1a; …

HTML课堂之搜索工具箱/讲师duluo

目录&#xff1a; 源码在最后 小提示&#xff1a; 1.养成打卡习惯没日多加练习即可提什能力 2.源码在最后&#xff0c;请先看完代码讲解&#xff0c;在尝试自己写&#xff0c;这样容易掌握 3.请勿复制粘贴&#xff0c;因为你没掌握&#xff0c;即使复制粘贴也学不会 课堂重点笔…

B-tree 数据结构详解

1. 引言 1.1 什么是 B-tree&#xff1f; B-tree&#xff08;Balanced Tree&#xff0c;平衡树&#xff09;是一种自平衡的多路搜索树数据结构&#xff0c;其核心特性包括&#xff1a; 多路性&#xff1a; 每个节点可以包含多个关键字和子节点&#xff0c;而非仅二分。平衡性…

策略模式(Stragety Pattern)

文章目录 1.定义2.结构3.代码实现 1.定义 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 2.结构 上下文 &#xff08;Context&#xff09; &#xff1a;维护指向具体…

基于html5实现音乐录音播放动画源码

源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI&#xff0c;点击按钮后&#xff0c;会变成为一个监听按钮。旁边会有音符飞入这个监听按钮&#xff0c;最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码

如何将某两个提交去掉父提交的合并

q&#xff1a; 在一个两个月前的分支&#xff0c;我想保持纯净&#xff0c;但是需要把另一个变化很大的分支只将某两个提交的变更同步过来&#xff0c;基于idea的git操作该怎么做 a: 其实很多人会一下想到cherry pick&#xff0c;这个确实方便&#xff0c;但是会将父提交连带合…