当前位置: 首页 > article >正文

Linux 文件的特殊权限—ACL权限控制

本文为Ubuntu Linux操作系统- 第二十期~~
其他特殊权限: 【SUID 权限】,【SGID 权限】,【SBIT权限】
更多Linux 相关内容请点击👉【Linux专栏】~
主页:【练小杰的CSDN】

在这里插入图片描述

文章目录

  • ACL权限的概念
    • ACL权限作用
    • ACL 特点
      • ⚠️注意
  • ACL 设置文件操作权限的具体方法
    • ACL的基本操作命令
    • `setfacl` 的参数
      • 选项`-m`
      • 选项 `-x`
      • 选项`-b`
      • 选项`-k`
      • 选项 `-d`
      • 选项 `-R`
  • 实例1
  • 实例2
  • 实例3
  • 实例4

在这里插入图片描述

ACL权限的概念

  • Linux 系统传统的权限控制方式就是前面所讲的基本权限,利用 3 种用户身份(文件所有者、所属群组、其他用户)配合 3 种文件操作权限(读 r,写 w,访问 x)实现。
  • 在实际应用中,以上这 3 种身份根本不够用。
    例如:有一个文件file,它的基本权限是“-rwx--w--w-. lxj lxj”,lxj是文件file的属主,对file有rwx权限,file的组属主和其它人则只有w权限 ,GEM可能是lxj群组成员也可能是其他用户,但GEMlxj关系比较铁,他跟lxj商量能不能搞搞特殊,让他对file也有rwx权限,问题是GEM不是file的属主,他只有w权限的,那么这个问题如何解决呢?这样,GEM的问题就可以通过文件的ACL解决!

ACL权限作用

  • ACL 权限是Access Control List 的缩写。
  • 主要作用:在提供文件基本权限rwx之外更细部权限的设置, 为了解决个别用户对某一文件或目录权限不足的情况。
  • ACL 权限可以针对单一使用者、单一文件或目录进行设置, 有了ACL权限,使组外的用户和非所有者用户也能对某个文件或目录拥有指定的权限。

ACL 特点

  • ACL用于linux复杂的用户权限控制当中。文件的基本权限包括文件属主、属组、其他用户三种设置方式,除了文件属主外,对于其他用户则通过文件属组和其他用户的方式指定权限。
  • 文件的基本权限不能精确控制每个用户的权限,如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的ACL。
  • 使用者 (user):可以针对使用者来设置权限
  • 群组 (group):针对群组为对象来设置其权限
  • 默认属性(mask):还可以针对在该目录下在建立新文件/目录时,规范新数据的默认权限,这个内容我们会安排在后续节学习。
  • ACL生效优先级别:所有者,自定义用户,自定义组,其他人。
  • Centos 7系统后,不管文件系统是否在安装系统时被建立都支持ACL。
  • acl权限不能超过mask的值。

⚠️注意

  • ACL可以对普通文件和目录进行设置,也可以对目录设置了 ACL,此时目录中的文件会继承其 ACL权限
  • 当这个目录中的文件已经设置了 ACL,那么这个文件不再继承其所在目录的 ACL。

ACL 设置文件操作权限的具体方法

操作 ACl 权限,常用 setfaclgetfacl 这2 个命令,前者用于设置文件或目录 ACL 权限,后者用于查看ACL权限是否配置成功。

ACL的基本操作命令

  • 设置ACL权限之前,查看文件或目录是否设置了ACL
 ls -l

如果权限一栏后面有个加号,说明文件被设置了ACL规则。如:-rw-rw-r--+ 1 root root 0 Jan 6 11:01 testfile

  • 查看ACL权限的详细信息,命令格式:
getfacl 文件/目录名
  • 举例
[root@localhost user1]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r—

可以看到,用户user1与文件属主root有相同的权限,其它用户则只有r权限。
getfacl 命令用于查看文件或目录当前设置的 ACL 权限信息,getfacl 命令的使用非常简单,且常和 setfacl 命令一起搭配使用。

  • 设置ACL权限:setfacl
    命令格式如下:
setfacl  [参数]   权限  文件/目录名

setfacl 的参数

选项-m

  • 设置 myuser 用户对文件test具有 rx 权限
setfacl -m u:myuser1:rx test
  • 设置组projectcom_ project 目录具有 rx 权限
 setfacl -m g:project:rx /user/com_project 

功能:修改或设置acl权限,包括
1.给用户设置 ACL 权限,参数使用 “u:用户名:权限” 的格式
2.给组设置 ACL 权限,参数使用 “g:组名:权限” 格式

选项 -x

  • 删除 myuser1 用户对文件test的 ACL 权限
setfacl -x u:myuser1 test
  • 删除群组project对 com_project 目录的 ACL 权限
setfacl –x  g:project  /user/com_project

功能:
1.删除指定用户(参数格式 u:用户名)的 ACL 权限
2.删除指定群组(参数格式 g:群组名)的 ACL 权限

选项-b

  • 删除有关 com_project 目录的所有 ACL 权限
setfacl –b  /user/com_project

功能:删除所有的acl权限

选项-k

  • 删除文件test中缺省的acl规则。如果没有缺省规则,将不提示。
setfacl -k test

选项 -d

  • 设定默认 ACL 权限,命令格式:

1.对用户: setfacl -m d:u:用户名:权限 文件名
2.对群组:setfacl –m d:g:群组名:权限

⚠️注意:本参数只对目录生效,指目录中新建立的文件拥有此默认权限

  • 表示myuser1用户对com_project 目录中新建立的文件拥有 rx 权限
setfacl –m  d:u:myuser1:rx  /user/com_project

选项 -R

  • 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为:

1.对用户:setfacl -m u:用户名:权限 -R 文件名
2.对群组:sefacl –m g:群组名:权限

  • 表示 myuser1用户对已存在com_project目录中的文件和子目录都拥有 rx 权限
setfacl -m u:myuser1:rx  -R  /user/com_project

⚠️注意:区分-d参数指新建立的文件或目录可以继承父目录的ACL,-R指已有的文件或目录!

实例1

前面已创建 /user/com_project目录,现在将这个目录给用户user1递归设置默认的ACL权限。

[root@localhost user]# ll
drwxrws---. 4 root project 84 Jul  2 22:14 com_project
[root@localhost user]# id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@localhost user]# setfacl -m d:u:user1:rwx -R ./com_project
  • 设置ACL权限后,查看目录com_project的权限
[root@localhost user]# getfacl com_project
# file: com_project
# owner: root
# group: project
# flags: -s-
user::rwx
group::rwx
other::---
default:user::rwx
default:user:user1:rwx
default:group::rwx
default:mask::rwx
default:other::---
  • 查看上级目录user的权限,可以看到多了一个“+”号!
[root@localhost user]# ll
drwxrws---+ 4 root project 84 Jul  2 22:14 com_project
  • 删除默认acl
[root@localhost user]# setfacl -k com_project
  • 再次查看目录user的权限,这时,“+”号没有了!
[root@localhost user]# ll
drwxrws---. 4 root project 84 Jul  2 22:14 com_project

实例2

  • 设置文件的ACL :
    创建目录/user1和用户user1,在这个目录下创建文件testfile,只有文件属主root具有w权限。
    然后设置用户user1对文件testfile 的ACL的w权限,测试用户user1是否具有w权限。
[root@localhost user1]# touch testfile
-rw-r--r--. 1 root root 0 Jun 11 00:24 testfile

[root@localhost user1]# setfacl -m u:user1:rw testfile

[root@localhost user1]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--
[root@localhost user1]# chmod u+s /usr/bin/vim
[root@localhost user1]# su user1
[user1@localhost user1]$ vim testfile

可以发现,用户user1可以编辑修改文件testfile了

实例3

  • 普通用户设置文件的ACL:

创建文件testfile1和用户user2,将其属主改为user1,属组改为user1,只有文件属主user1具有w权限,将系统切换到user1用户,然后对user2设置ACL的w权限,将系统切换到user2用户后测试是否可以编辑testfile1文件。

[root@localhost user1]# touch testfile1
-rw-r--r--. 1 root root 0 Jun 11 02:48 testfile1
[root@localhost user1]# chown user1:user1 testfile1
-rw-r--r--. 1 user1 user1 0 Jun 11 02:48 testfile1
[root@localhost user1]# su user1
[user1@localhost user1]$ setfacl -m u:user2:w testfile1
[user1@localhost user1]$exit
[root@localhost user1]# su user2
[user2@localhost user1]$ vim testfile1

这时,用户user2 有w权限(写权限),可以修改文件内容,即 user2 可以成功使用 vim 打开并编辑这个文件。

实例4

  • 设置目录的ACL

创建目录/user2,将权限设置为drwx------,切换到用户user1后,观察是否可以进入这个目录。
然后对用户user1设置目录/user2的ACL的x权限,再观察用户user1是否可以进入这个目录。

  • 如下所示,切换到普通用户user1时,可以进入目录/user2
[root@localhost /]# mkdir user2
drwxr-xr-x.   2 root root    6 Jun 11 03:26 user2
[root@localhost /]# chmod 600 user2
drw-------.   2 root root    6 Jun 11 03:26 user2
[root@localhost /]# su user1
[user1@localhost /]$ cd user2
bash: cd: user2: Permission denied(禁止进入/user2)
[root@localhost /]# setfacl -m u:user1:x user2
[root@localhost /]# su user1
[user1@localhost /]$ cd user2

至此,Linux系统的特殊用户文件权限之ACL权限控制已经讲完了😆
如果还想了解更多,查看主页【练小杰的CSDN】!!!
明天再见,各位🧍‍♂️大佬们~~


http://www.kler.cn/a/488417.html

相关文章:

  • 基于Springboot+Vue的仓库管理系统
  • Linux第一课:c语言 学习记录day06
  • 针对数据库系统安全的漏洞扫描加固工具【WebSocket + MySQL】
  • 【Java项目】基于SpringBoot的【校园交友系统】
  • css出现边框
  • mysql中查询json的技巧
  • JavaScript Chrome 中的运行
  • Android 12.0 mtk平板camera2横屏预览旋转90度横屏保存录像旋转90度功能实现
  • Python对象的序列化和反序列化工具:Joblib与Pickle
  • Linux 系统 PWM 风扇驱动框架学习记录
  • 【比较乱,如果遇到相同问题可以看】Autoware.universe的绕障线路的参数修改
  • CSS——39. 文本修饰(文本属性)
  • 用 Python 绘制可爱的招财猫
  • 新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解
  • Uniapp仿ChatGPT Stream流式输出(非Websocket)
  • UML(统一建模语言)
  • VUE3 VITE项目在 npm 中,关于 Vue 的常用命令有一些基础命令
  • clickhouse 离线包安装(ubuntu)
  • SOLIDWORKS 或 AutoCAD:选择CAD 解决方案时应考虑哪些问题?
  • TR-069协议学习--Soap报文、事件、RPC方法
  • ubuntu报错:没有在该文件夹中粘贴文件的权限
  • 【Unity功能集】TextureShop纹理工坊(十二)画笔工具、橡皮擦工具
  • 初学stm32 --- DAC输出
  • 谷歌浏览器的文件管理与上传功能
  • 【C++】22.AVL树实现
  • Excel中SUM求和为0?难道是Excel有Bug!