在CentOS系统中,setfaclgetfacl是管理文件系统访问控制列表(ACL)的核心命令,提供比传统权限模型(用户/组/其他)更精细的权限控制。以下是详细解析及操作指南:


⚙️ ​​一、ACL与传统权限模型的区别​

​特性​ ​传统权限模型​ ​ACL权限模型​
​控制粒度​ 仅所有者、组、其他三类 可为​​多个用户/组​​独立设置权限
​灵活性​ 无法为特定用户单独授权 支持为不同用户/组分配差异化权限(如userA:rw-
​继承机制​ 无目录权限继承 支持​​默认ACL​​,子文件/目录自动继承权限
​权限优先级​ 组权限统一生效 ACL权限​​高于传统权限​​,且可通过mask限制
​适用场景​ 简单权限控制 共享目录、多团队协作等复杂场景

​ACL核心概念​​:

  • ​Access ACL​​:直接作用于文件/目录的权限规则。
  • ​Default ACL​​:仅适用于目录,新创建的子项自动继承其规则。

​二、setfacl命令详解:设置ACL权限​

​基本语法​

setfacl [选项] 规则 文件/目录

​常用选项​

​选项​ ​说明​ ​示例​
-m 添加/修改ACL规则 setfacl -m u:alice:rwx file.txt
-x 删除指定ACL规则 setfacl -x u:alice file.txt
-b ​清除所有扩展ACL​​,恢复传统权限 setfacl -b dir/
-d 设置默认ACL(仅目录有效) setfacl -d -m g:dev:r-x project/
-R ​递归操作​​目录及子内容 setfacl -R -m u:bob:rw logs/
-k 删除目录的默认ACL setfacl -k project/

​关键操作示例​

  1. ​为用户/组添加权限​

    # 用户alice对file.txt拥有读写权限
    setfacl -m u:alice:rw- file.txt
    # 组dev对目录project拥有读和执行权限
    setfacl -m g:dev:r-x project/

    执行后文件权限末尾显示+(如-rw-rw-r--+),表示已启用ACL。

  2. ​设置目录默认ACL(自动继承)​

    # 新文件自动继承:用户alice拥有rwx权限
    setfacl -d -m u:alice:rwx shared_dir/

    继承验证:在shared_dir/下创建新文件,getfacl查看其自动包含user:alice:rwx

  3. ​递归设置目录权限​

    # 目录data/及其子内容均允许组backup读取
    setfacl -R -m g:backup:r-- data/
  4. ​删除权限​

    # 删除用户alice的ACL条目
    setfacl -x u:alice file.txt
    # 清除目录所有ACL规则
    setfacl -b project/

​三、getfacl命令详解:查看ACL权限​

​基本语法​

getfacl [选项] 文件/目录

​常用选项​

​选项​ ​说明​ ​示例​
-c 省略注释头(所有者/组信息) getfacl -c file.txt
-d 仅显示默认ACL(针对目录) getfacl -d project/
-R 递归列出子目录ACL getfacl -R data/
-n 显示数字UID/GID(避免解析用户名) getfacl -n /etc/shadow

​输出解析示例​

$ getfacl file.txt
# file: file.txt # 文件名
# owner: root # 所有者
# group: staff # 所属组
user::rw- # 所有者权限
user:alice:rw- # 用户alice的ACL权限
group::r-- # 所属组权限
mask::rw- # 有效权限掩码
other::r-- # 其他用户权限

️ ​mask的作用​​:限制所有ACL用户/组的最大权限(如mask::r--时,即使alice有rw-,实际仅r--生效)。


⚖️ ​​四、ACL权限的优先级与掩码机制​

  • ​权限生效顺序​​:

    ACL_USER > ACL_GROUP > ​​传统组权限​​ > ACL_OTHER

  • ​掩码(mask)​​:

    • 自动创建:当添加首个ACL_USERACL_GROUP条目时生成。
    • 动态限制:所有非所有者的ACL用户/组权限均受mask约束。
      # 设置mask为r--,限制alice的实际权限
      setfacl -m mask::r-- file.txt
      getfacl file.txt
      # 输出:user:alice:rw- #effective:r--

​五、最佳实践与注意事项​

  1. ​文件系统支持​

    ACL需文件系统支持(如ext4/xfs),且挂载时启用acl选项:

    # 检查是否支持
    mount | grep acl
    # 若无输出,编辑/etc/fstab添加挂载选项:defaults,acl
  2. ​权限冲突处理​

    • ACL规则优先级高于传统权限。
    • 用户权限累加:若用户同时属于多个授权组,取权限并集。
  3. ​备份与恢复ACL​

    # 备份ACL规则
    getfacl -R /data > acl_backup.txt
    # 从备份恢复
    setfacl --restore acl_backup.txt
  4. ​避免递归权限泛滥​

    慎用-R,尤其对大型目录。可先测试:

    # 测试模式(不实际修改)
    setfacl -R --test -m u:user:rw /large_dir

​总结​

  • setfacl​:通过细粒度规则扩展权限控制,突破传统模型的用户/组数量限制。

  • getfacl​:透视复杂权限结构的核心工具,尤其需关注maskeffective权限。

  • ​适用场景​​:共享目录(如团队项目)、日志目录(多服务写入)、需继承权限的层级结构。

执行前建议用getfacl验证现有权限,避免冲突。完整选项可通过man setfaclman getfacl查看。

Centos setfacl和getfacl核心命令的更多相关文章

  1. ACL权限设置命令setfacl和getfacl命令

    ACL权限设置命令setfacl和getfacl命令 setfacl命令是用来在命令行里设置ACL(访问控制列表).在命令行里,一系列的命令跟随以一系列的文件名. [TOC] 选项 |参数|说明|   ...

  2. 快速上手Linux核心命令(八):网络相关命令

    目录 前言 测试主机之间网络是否联通 ifconfig 配置或显示网络信息 route 显示或管理路由表 netstat 查看网络状况 telnet 远程登录主机 ssh 安全的远程登录主机 wget ...

  3. Centos screen远程会话管理命令

    screen参数 -A 将所有的视窗都调整为目前终端机的大小. -d<作业名称> 将指定的screen作业离线. -h<行数> 指定视窗的缓冲区行数. -m 即使目前已在作业中 ...

  4. Centos硬盘IO性能检测命令iostat[转]

    Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...

  5. Linux学习之CentOS(七)---常用基本操命令1

    cd   pwd  mkdir  rmdir  ls  cp  rm  mv  cat  tac  nl  more   less   head   tail   touch ①目录管理:ls.cd. ...

  6. Centos 7 安装 ifconfig 管理命令

    1. 安装的需求背景 我们知道ifconfig 命令可以用于查看.配置.启用或禁用指定网络接口,如配置网卡的IP地址.掩码.广播地址.网关等,功能不可谓不丰富. 此命令的功能和windows系统的ip ...

  7. Linux核心命令

    Linux核心命令 strace(查看系统调用的一个过程) 例:strace cat /test.txt netstat perf top pidstat mpstat dstat vmstat sl ...

  8. centos执行-查看,复制,删除-命令的脚本

    ==================================================================================================== ...

  9. CentOS 7 开放防火墙端口命令

    CentOS 7 开放防火墙端口 命令 最近公司新的server要求用CentOS7, 发现以前CentOS 6 系列中的 iptables 相关命令不能用了,查了下,发现Centos 7使用fire ...

  10. CentOS 6.5 下利用命令行截图及设置快捷键截图

    CentOS 6.5 下利用命令行截图及设置快捷键截图 1.利用命令模式 捕获整个屏幕 : $ gnome-screenshot 截完屏之后我们可以设置自定义图片存储位置,如图: 捕获当前终端Term ...

随机推荐

  1. Web前端入门第 49 问:CSS offset 路径动画演示

    什么是路径动画? 随手画一条不规则的线,让元素按照这条不规则的线运动起来,这就是所谓的路径动画. 前面说过的动画都只能针对某一个 CSS 属性,要想实现路径动画可没办法,路径动画必须借助 CSS3 的 ...

  2. 操作系统:Linux如何实现进程与进程调度

    Linux如何表示进程 在Cosmos中,设计了一个thread_t数据结构来代表一个进程,Linux也同样是用一个数据结构表示进程. Linux进程的数据结构 在Linux系统下,把运行中的应用程序 ...

  3. PC端自动化测试实战教程-6-pywinauto 打印和保存控件菜单树结构之ElementNotFoundError(详细教程)

    1.简介 其实前边的文章宏哥已经在控制台打印过控件菜单树结构,只是没有将其保存到文件中.只需要一个方法即可.在pywinauto中可以使用 print_control_identifiers() 方法 ...

  4. 鸿蒙next 定位开发全场景实践

    一.开场白 在智能设备普及的今天,位置服务已成为移动应用的基础设施.无论是外卖配送的实时轨迹追踪.导航应用的路径规划,还是运动健康类App的卡路里计算,精准的位置定位都是用户体验的关键支撑.鸿蒙nex ...

  5. 一个 Bean 就这样走完了它的一生之 Bean 的出生

    生命周期流程 Spring 中的一个 Bean 从被创建到被销毁,需要经历很多个阶段的生命周期,下图是一个 Bean 从创建到销毁的生命周期流程: 在 Bean 的各个生命周期流程点,Spring 都 ...

  6. File与IO流之File练习

    创建文件夹,并在其中创建文件 package Java_test; import java.io.*; public class Test { public static void main(Stri ...

  7. Dify搭建AI图片生成助手中的坑!

    使用 Dify 搭建 AI 图片生成助手并不是什么难事,而且不需要你会编程知识,也能轻松实现. 但是,Dify 在搭建 AI 图片生成助手的过程中会遇到很多坑,例如以下这些: 有些组件随着时间的推移, ...

  8. 使用IntelliJ IDEA 比对文件内容差异

    摘要:使用IntelliJ IDEA 比对文件内容差异部分,迅速定位修改点.   在敲代码的过程中,经常需要比较两个代码文件的内容差异,很多人会去网上找文件比较工具来处理,其实 IntelliJ ID ...

  9. MyBatis常见面试题:说说MyBatis的工作原理

      本文转自参考文献3.   SSM风靡当前的Java世界,面试官不经意间就会甩出一道必杀题:请你说一下MyBatis的工作原理.虽然大家每天都在使用MyBatis做增删改查的工作,但是面对这个问题往 ...

  10. java springboot api接口导出xlsx(不使用easyexcle)

    说明 在上一个文章里说了,用了阿里巴巴的easyexcle会导致项目build后的jar包体积增大20MB左右,所以想了个曲线救国的方式 其中的\t是制表符,即tab键,\n是回车 你可以自己试着这样 ...