首页 > 系统相关 >Linux ACL 访问控制

Linux ACL 访问控制

时间:2024-08-18 09:54:59浏览次数:9  
标签:setfacl 访问控制 edenluo ACL com Linux rwx 权限 root

今天给伙伴们分享一下Linux ACL 访问控制,希望看了有所收获。

我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!

如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。

一、ACL访问控制概述

  • 基础权限UGO、特殊权限,所有的权限是针对某一类用户设置的, 如果希望对文件进行自定义权限控制,就需要用到文件的访问控制列表ACL

  • UGO设置基本权限: 只能一个用户,一个组和其他人

  • ACL设置基本权限: r、w、x 设定acl只能是root管理员用户. 相关命令: getfacl , setfacl

  • getfacl 命令用于查看文件或目录当前设定的 ACL 权限信息。该命令的基本格式为:

[[email protected] ~]# getfacl 文件名
  • setfacl 命令可直接设定用户或群组对指定文件的访问权限。此命令的基本格式为:
[[email protected] ~]# setfacl 选项 文件名
  • 命令可以使用的所用选项及功能
选项功能
-m设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 “u:用户名:权限” 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 “g:组名:权限” 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。
-x删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。
-b删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限。
-d设定默认 ACL 权限,命令格式为 “setfacl -m d:u:用户名:权限 文件名”(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:st:rx /project 表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。
-R递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 “setfacl -m u:用户名:权限 -R 文件名”(群组使用 g:群组名:权限),例如 setfacl -m u:st:rx -R /project 表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。
-k删除默认 ACL 权限。
  • acl基本使用方式
环境准备
[[email protected] ~]# cp /etc/passwd /root/passwd

文件在没有设定acl, 看到的和传统权限是一样
[[email protected] ~]# ll passwd
-rw-r--r-- 1 root root 0 10-26 13:59 /home/test.txt
使用getacl查看权限
[[email protected] ~]# getfacl passwd 
# file: passwd
# owner: root
# group: root
user::rw-   //文件owner权限
group::r--  //文件拥有组权限
other::r--  //其他人权限

1、设定acl权限案例

要求
-rw-r--r-- 1 root root 1380 Feb 27 11:25 passwd
alice  拥有读写权限     rw
edenluo  没有任何权限     -
jack   组拥有读权限     r
匿名用户拥有读写权限     rw
1、建立相关用户
[[email protected] ~]# useradd alice
[[email protected] ~]# useradd edenluo
[[email protected] ~]# useradd jack
增加用户 alice 权限
[[email protected] ~]# setfacl -m u:alice:rw passwd
增加用户 edenluo 权限
[[email protected] ~]# setfacl -m u:edenluo:- passwd
增加匿名用户权限
[[email protected] ~]# setfacl -m o::rw passwd
增加组权限
[[email protected] ~]# setfacl -m g:jack:r passwd

注意: 如果用户同时属于不同的两个组,并且两个组设定了acl访问控制
1、根据acl访问控制优先级进行匹配规则
2、如有用户拥有多个组的权限不同的权限,优先使用最高权限(模糊匹配)

2、查看acl权限

[[email protected] ~]# ll passwd
-rw-rw-rw-+ 1 root root 1531 Jan 26 07:52 passwd
[[email protected] ~]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw-
user:edenluo:---
user:alice:rw-
group::r--
group:jack:r--
mask::rw-
other::rw-

3、移除acl权限

移除jack组的acl权限
[[email protected] ~]# setfacl -x g:jack passwd
移除edenluo.com用户的acl权限
[[email protected] ~]# setfacl -x u:edenluo passwd
移除文件和目录所有acl权限
[[email protected] ~]# setfacl -b passwd//移除默认的acl
[[email protected] ~]# setfacl -k dir

4、查看acl帮助

EXAMPLES 示例
[[email protected] ~]# man setfacl
复制 file1 的 ACL 权限给 file2
[[email protected] ~]# setfacl -m u:alice:rw,u:edenluo:r,g:jack:rw file1
[[email protected] ~]# getfacl file1 |setfacl --set-file=- file2

二、ACL高级特性MASK

  • mask用于临时降低用户或组的权限,但不包括文件的所有者和其他人。
  • mask最主要的作用是用来决定用户的最高权限。
  • mask默认不会对匿名用户降低权限,所以为了便于管理文件的访问控制,建议匿名用户的权限置为空
临时降低用户或组权限
[[email protected] ~]# setfacl -m mask::rw filename

小结

​ 1、mask会影响哪些用户,除了所有者和其他人。

​ 2、mask权限决定了用户访问文件时的最高权限。(如何影响)

​ 3、mask用于临时降低用户访问文件的权限。(mask做什么)

​ 4、任何重新设置acl访问控制会清理mask所设定的权限。

三、ACL高级特性Default

  • default: 继承(默认)

  • alice能够对/opt目录以及以后在/opt目录下新建的文件有读、写、执行权限

赋予 alice 对/home 读写执行权限 
[[email protected] ~]# setfacl -R -m u:alice:rwX /opt
赋予 alice 对以后在/home 下新建的文件有读写执行权限(使 alice 的权限继承) 
[[email protected] ~]# setfacl -m d:u:alice:rwX /opt
检查对应的权限
[[email protected] ~]# getfacl /opt/
getfacl: Removing leading '/' from absolute path names
# file: opt/
# owner: root
# group: edenluo.com
user::rwx
user:alice:rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:user:alice:rwx
default:group::rwx
default:mask::rwx
default:other::rwx

四、ACL访问控制实践案例

  • 案例1: 将新建文件的属性修改tom:admin, 权限默认为644要求: tom对该文件有所有的权限, mary可以读写该文件, admin组可以读写执行该文件, jack只读该文件, 其他人一律不能访问该文件
实验前, 建立几个普通用户
[[email protected] ~]# useradd tom
[[email protected] ~]# useradd bean
[[email protected] ~]# useradd mary
[[email protected] ~]# useradd jack
[[email protected] ~]# useradd sutdent
[[email protected] ~]# groupadd admin
[[email protected] ~]# gpasswd -a mary admin
[[email protected] ~]# gpasswd -a bean admin//检查用户属性
[[email protected] ~]# id tom
uid=1004(tom) gid=1004(tom) groups=1004(tom)
[[email protected] ~]# id mary
uid=1006(mary) gid=1006(mary) groups=1006(mary),1007(admin)
[[email protected] ~]# id bean
uid=1005(bean) gid=1005(bean) groups=1005(bean),1007(admin)
[[email protected] ~]# id jack
uid=1002(jack) gid=1002(jack) groups=1002(jack)
[[email protected] ~]# id sutdent
uid=1007(sutdent) gid=1008(sutdent) groups=1008(sutdent)//准备相关文件
[[email protected] ~]# cp /etc/passwd /root/
[[email protected] ~]# chown tom:admin passwd
[[email protected] ~]# chmod 644 passwd//检查设定前的acl列表
[[email protected] ~]# getfacl passwd
# file: passwd
# owner: tom
# group: admin
user::rw-
group::r--
other::r--//设定acl权限
[[email protected] ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd//检查acl权限
[[email protected] ~]# getfacl passwd
# file: passwd
# owner: tom
# group: admin
user::rwx
user:jack:r--
user:mary:rw-
group::r--
group:admin:rwx
mask::rwx
other::---
  • acl的控制规则是从上往下匹配

    • 1.tom由于是文件的拥有者,所以直接按照user::rwx指定的权限去操作

    • 2.mary用户从上往下寻找匹配规则,发现user:mary:rw-能够精确匹配mary用户,尽管mary属于admin组,同时admin组有rwx的权限,但是由于mary用户的规则在前面,所有优先生效。

    • 3.bean由于找不到精确匹配的规则,而bean是属于admin组,根据文件的定义,该文件是属于admin组,所以bean的权限是按照group:admin:rwx的权限去操作。

    • 4.jack用户从上往下寻找匹配规则,发现user:jack:r--能够精确匹配jack用户。

    • 5.student用户找不到精确匹配的user定义规则, 也找不到相关组的定义规则,最后属于other

  • 案例2: lab acl setup

controller组成员有:student
sodor组成员有:thomas,james
目录: /shares/steamies
文件: /shares/steamies/file
脚本: /shares/steamies/test.sh
controller属于该目录的所属组, 新建文件必须属于controller组
sodor组的成员对该目录拥有rwx权限
sodor组成员james对该目录及子目录(包括以后新建立的文件)没有任何权限
  • 实际操作
准备用户
[[email protected] ~]# groupadd controller
[[email protected] ~]# groupadd sodor
[[email protected] ~]# useradd student -G controller
[[email protected] ~]# useradd thomas -G sodor
[[email protected] ~]# useradd james -G sodor
准备目录
[[email protected] ~]# mkdir /shares/steamies -p
[[email protected] ~]# echo "file" >> /shares/steamies/file
[[email protected] ~]# echo "echo 123" >> /shares/steamies/test.sh
[[email protected] ~]# chmod 755 /shares/steamies/test.sh
[[email protected] ~]# chown -R  :controller /shares/steamies/
[[email protected] ~]# chmod g+s /shares/steamies/
设定权限(X表示,如果原本有执行权限就保留,如果没有则不添加)
[[email protected] ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies/
设定继承规则
[[email protected] ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/
[[email protected] steamies]# getfacl /shares/steamies/
getfacl: Removing leading '/' from absolute path names
# file: shares/steamies/
# owner: root
# group: controller
# flags: -s-
user::rwx
user:james:---
group::r-x
group:sodor:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:sodor:rwx
default:mask::rwx
default:other::r-x

如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。

标签:setfacl,访问控制,edenluo,ACL,com,Linux,rwx,权限,root
From: https://blog.csdn.net/mohuanfenghuang/article/details/141292488

相关文章

  • Linux 文件系统目录结构介绍和文件管理
    今天给伙伴们分享一下Linux文件系统目录结构介绍和文件管理,希望看了有所收获。我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!如果伙伴们看了文档觉得有用,欢迎大家关......
  • RocketMQ集群ACL设置
    一、概述因安全需求,需要对RocketMQ添加ACL设置注意:ACL功能需要高版本支持,低版本不行,本文使用的版本为4.9.4 关于搭建RocketMQ集群,请参考链接:https://www.cnblogs.com/xiao987334176/p/16771899.html 二、配置修改配置文件broker-a/broker-a.conf,broker-b/broker-b.conf最......
  • C#实现国产Linux视频录制生成mp4(附源码,银河麒麟、统信UOS)
    随着信创国产化浪潮的来临,在国产操作系统上的应用开发的需求越来越多,最近有个客户需要在银河麒麟或统信UOS上实现录制摄像头视频和麦克风声音,将它们录制成一个mp4文件。那么这样的功能要如何实现了?一.技术方案要完成这些功能,具体来说,需要解决如下几个技术问题:(1)麦克风数据采集......
  • 你知道Windows下的linux的神器WSL吗?
    我们在开发项目的时候经常需要部署,几乎都是部署在linux系统比较多,不知道你是否有遇到过部署到环境上会出现一些奇怪的问题,但是在本地却无法复现,然而我们的本地开发电脑大多数都是window系统,我们想要模拟对应的场景去调试,此时我们需要模拟对应的环境,这时候要怎么模拟呢?如果要是......
  • JetBrains Aqua 2024.2 (macOS, Linux, Windows) - 测试自动化 IDE
    JetBrainsAqua2024.2(macOS,Linux,Windows)-测试自动化IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-aqua/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAqua测试自动化IDE享受更高效的测试体验为什么选择Aqua......
  • JetBrains CLion 2024.2 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE
    JetBrainsCLion2024.2(macOS,Linux,Windows)-C和C++跨平台IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-clion/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsCLion-C和C++跨平台IDE用于强大语言的......
  • D1-H Tinalinux 开发板 挂载U盘
    将U盘格式化成NFS格式 插入U盘到开发板HostUSB,会显示信息[4060.109026]usb1-1:USBdisconnect,devicenumber7[4139.330081]sunxi-ehci4200000.ehci1-controller:ehci_irq:highspeeddeviceconnect[4139.600007]usb1-1:newhigh-speedUSBdevicenumber8......
  • Linux基本指令:掌握日常操作的必备技能
    ......
  • Linux系统编程
    1.文件操作    1.1open打开文件导入库文件#include<unistd.h>#include<sys/types.h>#include<fcntl.h>intfd=open(pathname,flags)        pathname:文件路径。flags:打开方式,可以是以下选项的组合:O_RDONLY:只读打开。O_WRONLY:只写打开。O_RDWR......
  • Linux基础知识学习(一)
    一.简介Linux内核最初只是由芬兰人林纳斯·托瓦兹(LinusTorvalds)在赫尔辛基大学上学时出于个人爱好而编写的。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(可移植操作系统接口)和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运......