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

本文为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】!!!
明天再见,各位🧍‍♂️大佬们~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950484.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统日志优化---自定义springboot-starter日志组件供各个服务使用

在优化项目时发现各个微服务都有各自的接口调用日志逻辑&#xff0c;比如每个服务都定义一个aop类拦截&#xff0c;十分冗余&#xff0c;其实是可以做成starter被各个服务引用使用&#xff0c;前提要先了解一下springboot自动装配原理 创建springboot工程&#xff0c;如果是jdk…

Matlab贝叶斯估计MCMC分析药物对不同种群生物生理指标数据评估可视化

全文链接&#xff1a;https://tecdat.cn/?p38756 摘要&#xff1a;本文着重探讨了如何利用Matlab实现贝叶斯估计。阐述了具体的实现流程&#xff0c;涵盖数据加载、先验常数设定、马尔可夫链蒙特卡洛&#xff08;MCMC&#xff09;属性指定、模型构建、运行链条以及结果查看等环…

js:日期对象和dom节点

日期对象 事件对象在前端开发里经常用来表示日期&#xff1a; 可以获取当前系统的时间 实例化 使用new关键字来实例化一个对象&#xff1a; const date new Date()console.log(date); 获取当前时间 const date new Date(2008-8-8)console.log(date); 获取指定时间 写得…

Ⅱ.INTRODUCTION TO CUDA C (CUDA C 入门)

前言 上一节环境配置好了&#xff0c;我们开始吧&#xff01; 一、A First Program 1. Hello, World! 我们先写一个C语言的 Hello, World! 作为对比 int main(void){printf("Hello, World!\n");return 0; }大家应该知道这个代码运行在CPU上吧&#xff0c;我们CP…

rsync如何实时同步

一、准备rsyncd服务环境 backup服务器&#xff08;rsync服务端&#xff09; 1、恢复了快照&#xff0c;重新安装rsync服务端 2、快速的部署rsyncd服务端 #!/bin/bash yum install rsync -ycat > /etc/rsyncd.conf << EOF uid www gid www port 873 fake supe…

Python的Matplotlib库应用(超详细教程)

目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线&#xff08;直线&#xff09;可视化 2.2 曲线&#xff08;虚线&#xff09;可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…

vue之element-ui文件上传(二)

一、点击上传&#xff0c;使用默认的action上传&#xff0c;添加校验&#xff0c;上传成功后&#xff0c;去除校验&#xff1a; <el-form-item label"文件md5" prop"fileMd5"><el-uploadv-if"!form.fileMd5"v-model"form.fileMd5&…

java项目之旅游网站的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的旅游网站的设计与实现。 项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于SpringBoot的…

IOS开发如何从入门进阶到高级

针对iOS开发的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍. 一、学习社区 iOS开源中国社区 这个社区专注于iOS开发的开源项目分享与协作&#xff0c;汇集了大量开…

ubuntu编译ijkplayer,支持rmvb以及mkv

1. 准备环境 sudo apt-get update apt install gcc yasm cmake python p7zip-full vim pkg-config autoconf automake build-essential dos2unix mercurial cmake-curse-gui -y apt-get -y --force-yes install libass-dev libtheora-dev libtool libva-dev libvdpau-dev libv…

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

Linux初识——基本指令

我们在linux下输入各种指令&#xff0c;其实就相当于在windows中的相关操作&#xff0c;比如双击&#xff0c;新建文件夹等。 以下是相关基本指令基本用法 一.ls&#xff08;显示当前目录下的所有文件和目录&#xff09; 那如何显示当前目录&#xff08;我们所在的位置&…

小程序开发-页面事件之上拉触底实战案例

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

医疗可视化大屏 UI 设计新风向

智能化交互 借助人工智能与机器学习技术&#xff0c;实现更智能的交互功能。如通过语音指令或手势控制来操作大屏&#xff0c;医护人员无需手动输入&#xff0c;可更便捷地获取和处理信息。同时&#xff0c;系统能根据用户的操作习惯和数据分析&#xff0c;自动推荐相关的医疗…

IT面试求职系列主题-Jenkins

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统&#xff0c;并在发生更改时启动和监视构建系统。 2&#xff09;Maven、Ant和Jenkins有什么区别…

力扣刷题:数组OJ篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.消失的数字&#xff08;1&#xff09;题目描…

2024 高级爬虫笔记(六)scrapy框架基础知识

目录 一、Scrapy框架基础知识1.1、什么是scrapy&#xff1f;1.2、scrapy的工作流程1.3、scrapy中每个模块的作用&#xff1a;1.4、scrapy的入门使用1.4.1 安装scrapy1.4.2、scrapy项目实现流程1.4.3、创建scrapy项目1.4.4、创建爬虫1.4.5、完善spider1.4.6、配置settings文件1.…

每日一题-两个链表的第一个公共结点

文章目录 两个链表的第一个公共结点问题描述示例说明示例 1示例 2 方法及实现方法描述代码实现 复杂度分析示例运行过程示例 1示例 2 总结备注 两个链表的第一个公共结点 问题描述 给定两个无环的单向链表&#xff0c;找到它们的第一个公共节点。如果没有公共节点&#xff0c…

Elasticsearch:在 HNSW 中提前终止以实现更快的近似 KNN 搜索

作者&#xff1a;来自 Elastic Tommaso Teofili 了解如何使用智能提前终止策略让 HNSW 加快 KNN 搜索速度。 在高维空间中高效地找到最近邻的挑战是向量搜索中最重要的挑战之一&#xff0c;特别是当数据集规模增长时。正如我们之前的博客文章中所讨论的&#xff0c;当数据集规模…