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 ...
随机推荐
- Web前端入门第 49 问:CSS offset 路径动画演示
什么是路径动画? 随手画一条不规则的线,让元素按照这条不规则的线运动起来,这就是所谓的路径动画. 前面说过的动画都只能针对某一个 CSS 属性,要想实现路径动画可没办法,路径动画必须借助 CSS3 的 ...
- 操作系统:Linux如何实现进程与进程调度
Linux如何表示进程 在Cosmos中,设计了一个thread_t数据结构来代表一个进程,Linux也同样是用一个数据结构表示进程. Linux进程的数据结构 在Linux系统下,把运行中的应用程序 ...
- PC端自动化测试实战教程-6-pywinauto 打印和保存控件菜单树结构之ElementNotFoundError(详细教程)
1.简介 其实前边的文章宏哥已经在控制台打印过控件菜单树结构,只是没有将其保存到文件中.只需要一个方法即可.在pywinauto中可以使用 print_control_identifiers() 方法 ...
- 鸿蒙next 定位开发全场景实践
一.开场白 在智能设备普及的今天,位置服务已成为移动应用的基础设施.无论是外卖配送的实时轨迹追踪.导航应用的路径规划,还是运动健康类App的卡路里计算,精准的位置定位都是用户体验的关键支撑.鸿蒙nex ...
- 一个 Bean 就这样走完了它的一生之 Bean 的出生
生命周期流程 Spring 中的一个 Bean 从被创建到被销毁,需要经历很多个阶段的生命周期,下图是一个 Bean 从创建到销毁的生命周期流程: 在 Bean 的各个生命周期流程点,Spring 都 ...
- File与IO流之File练习
创建文件夹,并在其中创建文件 package Java_test; import java.io.*; public class Test { public static void main(Stri ...
- Dify搭建AI图片生成助手中的坑!
使用 Dify 搭建 AI 图片生成助手并不是什么难事,而且不需要你会编程知识,也能轻松实现. 但是,Dify 在搭建 AI 图片生成助手的过程中会遇到很多坑,例如以下这些: 有些组件随着时间的推移, ...
- 使用IntelliJ IDEA 比对文件内容差异
摘要:使用IntelliJ IDEA 比对文件内容差异部分,迅速定位修改点. 在敲代码的过程中,经常需要比较两个代码文件的内容差异,很多人会去网上找文件比较工具来处理,其实 IntelliJ ID ...
- MyBatis常见面试题:说说MyBatis的工作原理
本文转自参考文献3. SSM风靡当前的Java世界,面试官不经意间就会甩出一道必杀题:请你说一下MyBatis的工作原理.虽然大家每天都在使用MyBatis做增删改查的工作,但是面对这个问题往 ...
- java springboot api接口导出xlsx(不使用easyexcle)
说明 在上一个文章里说了,用了阿里巴巴的easyexcle会导致项目build后的jar包体积增大20MB左右,所以想了个曲线救国的方式 其中的\t是制表符,即tab键,\n是回车 你可以自己试着这样 ...