Centos setfacl和getfacl核心命令
在CentOS系统中,setfacl和getfacl是管理文件系统访问控制列表(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/ |
关键操作示例
为用户/组添加权限
# 用户alice对file.txt拥有读写权限
setfacl -m u:alice:rw- file.txt
# 组dev对目录project拥有读和执行权限
setfacl -m g:dev:r-x project/
执行后文件权限末尾显示
+(如-rw-rw-r--+),表示已启用ACL。设置目录默认ACL(自动继承)
# 新文件自动继承:用户alice拥有rwx权限
setfacl -d -m u:alice:rwx shared_dir/
继承验证:在
shared_dir/下创建新文件,getfacl查看其自动包含user:alice:rwx。递归设置目录权限
# 目录data/及其子内容均允许组backup读取
setfacl -R -m g:backup:r-- data/
删除权限
# 删除用户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_USER或ACL_GROUP条目时生成。 - 动态限制:所有非所有者的ACL用户/组权限均受
mask约束。# 设置mask为r--,限制alice的实际权限
setfacl -m mask::r-- file.txt
getfacl file.txt
# 输出:user:alice:rw- #effective:r--
- 自动创建:当添加首个
五、最佳实践与注意事项
文件系统支持
ACL需文件系统支持(如ext4/xfs),且挂载时启用acl选项:# 检查是否支持
mount | grep acl
# 若无输出,编辑/etc/fstab添加挂载选项:defaults,acl
权限冲突处理
- ACL规则优先级高于传统权限。
- 用户权限累加:若用户同时属于多个授权组,取权限并集。
备份与恢复ACL
# 备份ACL规则
getfacl -R /data > acl_backup.txt
# 从备份恢复
setfacl --restore acl_backup.txt
避免递归权限泛滥
慎用-R,尤其对大型目录。可先测试:# 测试模式(不实际修改)
setfacl -R --test -m u:user:rw /large_dir
总结
setfacl:通过细粒度规则扩展权限控制,突破传统模型的用户/组数量限制。
getfacl:透视复杂权限结构的核心工具,尤其需关注mask和effective权限。适用场景:共享目录(如团队项目)、日志目录(多服务写入)、需继承权限的层级结构。
执行前建议用
getfacl验证现有权限,避免冲突。完整选项可通过man setfacl或man getfacl查看。
Centos setfacl和getfacl核心命令的更多相关文章
- ACL权限设置命令setfacl和getfacl命令
ACL权限设置命令setfacl和getfacl命令 setfacl命令是用来在命令行里设置ACL(访问控制列表).在命令行里,一系列的命令跟随以一系列的文件名. [TOC] 选项 |参数|说明| ...
- 快速上手Linux核心命令(八):网络相关命令
目录 前言 测试主机之间网络是否联通 ifconfig 配置或显示网络信息 route 显示或管理路由表 netstat 查看网络状况 telnet 远程登录主机 ssh 安全的远程登录主机 wget ...
- Centos screen远程会话管理命令
screen参数 -A 将所有的视窗都调整为目前终端机的大小. -d<作业名称> 将指定的screen作业离线. -h<行数> 指定视窗的缓冲区行数. -m 即使目前已在作业中 ...
- Centos硬盘IO性能检测命令iostat[转]
Centos硬盘IO性能检测命令iostat[转] 在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都 ...
- Linux学习之CentOS(七)---常用基本操命令1
cd pwd mkdir rmdir ls cp rm mv cat tac nl more less head tail touch ①目录管理:ls.cd. ...
- Centos 7 安装 ifconfig 管理命令
1. 安装的需求背景 我们知道ifconfig 命令可以用于查看.配置.启用或禁用指定网络接口,如配置网卡的IP地址.掩码.广播地址.网关等,功能不可谓不丰富. 此命令的功能和windows系统的ip ...
- Linux核心命令
Linux核心命令 strace(查看系统调用的一个过程) 例:strace cat /test.txt netstat perf top pidstat mpstat dstat vmstat sl ...
- centos执行-查看,复制,删除-命令的脚本
==================================================================================================== ...
- CentOS 7 开放防火墙端口命令
CentOS 7 开放防火墙端口 命令 最近公司新的server要求用CentOS7, 发现以前CentOS 6 系列中的 iptables 相关命令不能用了,查了下,发现Centos 7使用fire ...
- CentOS 6.5 下利用命令行截图及设置快捷键截图
CentOS 6.5 下利用命令行截图及设置快捷键截图 1.利用命令模式 捕获整个屏幕 : $ gnome-screenshot 截完屏之后我们可以设置自定义图片存储位置,如图: 捕获当前终端Term ...
随机推荐
- Django REST框架中处理JWT令牌的认证的源码解析
想了解`JWTAuthentication`这个类的源码解析.`JWTAuthentication`是来自`rest_framework_simplejwt.authentication`模块的,它用 ...
- Vmware workstation安装部署微软WSUS服务应用系统
简介 WSUS全称Windows Server Update Services,是微软开发的免费服务器角色,用于在企业内网中集中管理Windows系统及微软产品的更新分发.其前身为Windows ...
- 高德API获取省市区---python3实现
# -*- coding: utf-8 -*- """ Created on Thu Nov 4 15:40:25 2021 @author: 何双新 "&qu ...
- java springboot项目启动脚本,指定jdk、指定yml配置文件
start.bat @echo off rem 设置Java路径,根据你的实际情况修改 set JAVA_PATH="./jdk-17.0.6/bin/java.exe" rem ...
- PicGo使用简明教程及踩坑记录
PicGo使用简明教程及踩坑记录 PicGo使用 我现在用的博客的记录方式是Typora+PicGo+阿里云oss,这一套配置好后就非常方便了,可以快捷上传图片到云服务器,并且阿里云的速度也是我试过的 ...
- umijs中简单使用umi-request
在umi.js4中使用umi-request进行网络请求,查看官网后还是没明白,便自己摸索一遍,如下把简单使用的过程记录下来,以便共享给其他需要的小伙伴做参考,如有不对的地方,烦请指出. 第一步:安装 ...
- 数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效
表单是B端产品中最常见的组件之一,主要⽤于数据收集.校验和提交.比如登陆流程的账号密码填写,注册流程的邮箱.用户名等信息填写,都是表单应用的常见案例,在数栈产品中也是出现频率⾮常⾼的组件. 尽管表单应 ...
- 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保存就行了
- javascript中IIFE(立即执行函数表达式)到底是咋来的?
介绍 IIFE(Immediately Invoked Function Expression),中文名称:立即执行函数表达式,其实IIFE最早并不叫这个名字,而是叫做Self-Executing A ...
- MySQL 02 日志系统:一条SQL更新语句是如何执行的?
比如执行一条更新语句: update T set c=c+1 where ID=2; 首先,更新语句也会走一遍查询语句的流程.除此以外,更新还涉及两个日志模块,分别是redo log和binlog. ...