在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. Django REST框架中处理JWT令牌的认证的源码解析

    想了解`JWTAuthentication`这个类的源码解析.`JWTAuthentication`是来自`rest_framework_simplejwt.authentication`模块的,它用 ...

  2. Vmware workstation安装部署微软WSUS服务应用系统

    简介 WSUS全称‌Windows Server Update Services‌,是微软开发的免费服务器角色,用于在企业内网中集中管理Windows系统及微软产品的更新分发.其前身为Windows ...

  3. 高德API获取省市区---python3实现

    # -*- coding: utf-8 -*- """ Created on Thu Nov 4 15:40:25 2021 @author: 何双新 "&qu ...

  4. java springboot项目启动脚本,指定jdk、指定yml配置文件

    start.bat @echo off rem 设置Java路径,根据你的实际情况修改 set JAVA_PATH="./jdk-17.0.6/bin/java.exe" rem ...

  5. PicGo使用简明教程及踩坑记录

    PicGo使用简明教程及踩坑记录 PicGo使用 我现在用的博客的记录方式是Typora+PicGo+阿里云oss,这一套配置好后就非常方便了,可以快捷上传图片到云服务器,并且阿里云的速度也是我试过的 ...

  6. umijs中简单使用umi-request

    在umi.js4中使用umi-request进行网络请求,查看官网后还是没明白,便自己摸索一遍,如下把简单使用的过程记录下来,以便共享给其他需要的小伙伴做参考,如有不对的地方,烦请指出. 第一步:安装 ...

  7. 数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效

    表单是B端产品中最常见的组件之一,主要⽤于数据收集.校验和提交.比如登陆流程的账号密码填写,注册流程的邮箱.用户名等信息填写,都是表单应用的常见案例,在数栈产品中也是出现频率⾮常⾼的组件. 尽管表单应 ...

  8. springBoot启动 Error running Application. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun.

    1. 打开SpringBoot启动配置 2.选择shorten command line 3.apply保存就行了

  9. javascript中IIFE(立即执行函数表达式)到底是咋来的?

    介绍 IIFE(Immediately Invoked Function Expression),中文名称:立即执行函数表达式,其实IIFE最早并不叫这个名字,而是叫做Self-Executing A ...

  10. MySQL 02 日志系统:一条SQL更新语句是如何执行的?

    比如执行一条更新语句: update T set c=c+1 where ID=2; 首先,更新语句也会走一遍查询语句的流程.除此以外,更新还涉及两个日志模块,分别是redo log和binlog. ...