CentOS系统中chattr和getfattr命令的详细解析
以下是针对CentOS系统中chattr和getfattr命令的详细解析,结合功能、用法、场景及注意事项进行说明:
一、chattr命令:文件属性管理
功能
修改文件或目录的扩展属性(Extended Attributes),控制文件行为(如防删除、防修改),常用于系统安全加固。
核心属性与作用
| 属性 | 功能 | 典型场景 |
|---|---|---|
+i |
文件不可修改、删除、重命名(root用户也无法操作) | 保护系统关键文件(如/etc/passwd) |
+a |
仅允许追加内容(不可修改或删除已有内容) | 日志文件保护(如/var/log/syslog) |
+A |
禁止更新访问时间(atime),减少磁盘I/O | 优化大文件性能 |
+s |
安全删除:文件删除后数据清零 | 敏感数据清理 |
+u |
可恢复删除:保留文件内容以便恢复 | 防误删 |
常用参数
-R:递归操作目录及子内容(如chattr -R +i /etc/secure)-V:显示详细执行过程-f:忽略错误信息
示例
# 保护系统配置文件不可修改
sudo chattr +i /etc/shadow
# 日志文件仅允许追加
sudo chattr +a /var/log/audit.log
# 递归锁定目录(防篡改)
sudo chattr -R +i /etc/nginx
注意事项
权限要求:
+i/+a属性需root权限设置或取消。文件系统支持:仅限
ext2/3/4、XFS、Btrfs等支持扩展属性的文件系统。风险:误用
+i可能导致系统更新或服务失败(如锁死/usr/bin目录)。
二、getfattr命令:扩展属性查看
功能
查看文件或目录的扩展属性(xattr),以键值对形式存储元数据(如SELinux上下文、ACL等)。
核心参数
| 参数 | 功能 | 示例 |
|---|---|---|
-d |
显示所有扩展属性及值 | getfattr -d /etc/selinux/config |
-n 属性名 |
查看指定属性 | getfattr -n security.selinux /etc/passwd |
-R |
递归查看目录下所有文件的属性 | getfattr -Rd /var/log |
-e hex |
以十六进制显示属性值(适用于二进制) | getfattr -e hex -n user.key secret.bin |
典型应用场景
检查SELinux上下文:
getfattr -n security.selinux /etc/shadow
# 输出: security.selinux="system_u:object_r:shadow_t:s0"
查看ACL权限:
getfattr -n system.acl_access /home/user1
查找自定义属性:
getfattr -Rd /data | grep "user.custom_tag"
注意事项
权限限制:部分属性(如
security.*)需root权限查看。字符编码:非文本属性建议用
-e hex避免乱码。与
chattr区别:getfattr查看的是键值对元数据,而chattr操作的是文件系统级标志(如i_flags)。
三、命令对比与协作
| 特性 | chattr |
getfattr |
|---|---|---|
| 功能层级 | 文件系统行为控制(防删/改) | 元数据查看(SELinux、ACL等) |
| 操作对象 | inode标志(如i_flags) |
扩展属性(xattr键值对) |
| 依赖权限 | 必须root | 部分属性需root |
| 典型输出 | lsattr显示属性标志(如----i------) |
键值对(如user.version="1.0") |
协作示例:
用
chattr +a保护日志 → 通过getfattr检查日志的SELinux上下文是否合规。用
chattr +i锁定配置文件 → 用getfattr验证ACL是否被篡改。
️ 四、常见问题
chattr +i后仍能修改文件?
→ 检查文件系统是否支持(如NTFS不支持),或是否有更高权限进程(如内核)操作。
getfattr无输出?
→ 文件可能无扩展属性,或文件系统不支持(如FAT32)。误设
+i导致系统故障?
→ 重启至救援模式,用chattr -i解除属性。
总结
chattr:系统安全的“锁”,通过+i/+a防止文件被篡改或删除。
getfattr:元数据的“显微镜”,查看SELinux、ACL等深层属性。
最佳实践:敏感文件用chattr加固后,定期用getfattr审计属性状态,实现双重防护。
CentOS系统中chattr和getfattr命令的详细解析的更多相关文章
- 【转】CentOS系统中常用查看日志命令
来源:http://www.centoscn.com/CentOS/help/2014/0310/2540.html Linux IDE RedHat 防火墙活动 .cat tail -f 日 志 文 ...
- CentOS系统中常用查看日志命令
cat tail -f 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安 ...
- CentOS系统中last命令的作用
CentOS系统中last命令的作用是显示近期用户或终端的登录情况,它的使用权限是所有用户.通过last命令查看该程序的log,管理员可以获知谁曾经或企图连接系统. 格式 last [—R] [—n] ...
- CentOS系统操作mysql的常用命令
MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了 ...
- CentOS系统找不到setup命令工具的解决方法
如果你的CentOS系统中没有setup命令,很有可能是因为你安装CentOS系统时采用了最小化安装(minimal).这时,你执行setup命令时,就会报错: 错误信息: 1[root@localh ...
- 如何在CentOS系统中安装配置SNMP服务
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,现在有一大部分服务器在使用此操作系统:SNMP(简单网络 ...
- 在Centos系统中基于PowerDNS和Poweradmin自建域名解析服务器替代DnsPod
本文讲述了我在Centos 7系统(其他版本的Centos未尝试)中基于PowerDNS和poweradmin自建域名解析服务器替代DnsPod的过程.通过本文所述方法,可以建立权威域名解析服务器的m ...
- Systemd初始化进程/RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比
Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程.初始化进程作为Linux系统的第一个进程,它需要完成Li ...
- PHP中使用CURL之php curl详细解析和常见大坑
这篇文章主要介绍了PHP中使用CURL之php curl详细解析和常见大坑 ,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 七夕啦,作为开发,妹子没得撩就“撩”下服务器吧,妹子有得撩的同学 ...
- CentOS系统中的passwd命令实用技巧小结
这篇文章主要介绍了Linux系统中的passwd命令实用技巧小结,是Linux入门学习中的基础知识,需要的朋友可以参考下 先来回顾一下passwd命令的基本用法: Linux passwd命令用来 ...
随机推荐
- Flutter图片组件的定制开发与配置实践
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- TVM图级优化了解
TVM图级优化按照优化范围,可分为局部优化和全局优化 局部优化是TVM图级优化的重点,其中算子融合是AI编译器必不可少的优化方法. 算子融合核心思想就是将多个算子合并成一个内核,因而无需将中间结果写回 ...
- 从一个例子看tvm执行流程
TVM整体流程(参考:TVM介绍) 机器学习模型在用TVM优化编译器框架进行变换时的步骤: 从Tensorflow/pytorch或ONNX等框架导入模型 import层是TVM从其他框架中导入模型的 ...
- footer固定在页面底部的几种方法(转载)
几种非常不错的方法,收藏学习:原文见https://blog.csdn.net/m0_37070714/article/details/77587753 方法一:footer高度固定+绝对定位 < ...
- 服务器操作SCP命令使用
一.将本地代码上传服务器scp命令操作 命令是:scp dtcloud-master.zip root@10.14.22.141:/opt/dtcloud/ 将本地的scp dtcloud-maste ...
- sqlite:No module named _sqlite3
执行代码报错:"sqlite:No module named _sqlite3" 执行环境说明 某台服务器上执行DrissionPage相关程序报错,本机没有问题. 解决说明 本机 ...
- 使用HttpServletRequest获取POST提交的JSON
说明 一般用于拦截器中,重写preHandle方法中 代码如下 拦截器中 @Override public boolean preHandle(HttpServletRequest request, ...
- docker部署mysql5.7后登录时出现Access denied for user 'root'@'localhost' (using password: YES)的解决方法
1.先进去容器中安装vim工具 docker exec -it mysql bash apt-get update apt-get -y install vim 2.修改/etc/mysql/conf ...
- Spring扩展接口-BeanFactoryPostProcessor
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- PHP安全防御需注意点的点
本文由 ChatMoney团队出品 sql注入 漏洞描述 当应用程序将用户输入直接拼接到sql语句中时,攻击者可以插入恶意sql代码来篡改原始查询,获取或破坏数据库信息. 防御措施 预处理语句 使用预 ...