Linux lsattr 命令详解
🐧 Linux lsattr 命令详解
学习目标
- 理解
lsattr命令的基本功能及其与文件属性的关系 - 掌握如何查看和理解 Linux 文件系统的扩展属性(Extended Attributes)
- 能够结合
chattr命令进行文件保护、防篡改设置,适用于服务器安全加固场景
核心重点(Key Points)
| 主题 | 内容 |
|---|---|
| 命令名称 | lsattr |
| 功能 | 查看文件或目录的扩展属性(Immutable、Append Only 等) |
| 底层机制 | 依赖 ext2/ext3/ext4 文件系统支持 |
| 常见用途 | 安全防护、防止误删/修改关键文件、日志审计等 |
| 支持平台 | ext2/ext3/ext4 文件系统环境(Ubuntu/CentOS/EulerOS) |
| 典型命令 | lsattr filenamelsattr -R /etc |
详细讲解
🔍 一、什么是 lsattr 命令?
lsattr 是一个用于查看文件或目录的“扩展属性”的命令。这些属性不同于我们常见的权限(如 rwx),而是由文件系统提供的一组额外控制标志,可以对文件的行为进行更细粒度的控制。
⚠️ 注意:只有在 ext2/ext3/ext4 文件系统上才能使用
lsattr和chattr命令!
🛠 二、安装与查看版本
大多数 Linux 发行版默认已安装 e2fsprogs 工具包,其中包含 lsattr 和 chattr。
Ubuntu / Debian
sudo apt update
sudo apt install e2fsprogs
CentOS / RHEL
sudo yum install e2fsprogs
EulerOS / openEuler
sudo dnf install e2fsprogs
查看版本:
lsattr -V
# 输出示例:e2fsprogs 1.46.5 (30-Dec-2021)
📚 三、基本语法与常见参数
lsattr [OPTIONS]... [FILES]...
| 参数 | 含义说明 |
|---|---|
-a |
显示隐藏文件的属性(包括以 . 开头的文件) |
-d |
如果是目录,仅显示目录本身的属性,而不是其内容 |
-R |
递归显示子目录中的文件属性 |
-v |
显示文件的版本号(主要用于网络文件系统如 NFS) |
🎯 四、实战场景与案例解析
✅ 场景1:查看单个文件的扩展属性
lsattr /etc/passwd
输出示例:
---------------- /etc/passwd
表示该文件没有任何特殊属性。
✅ 场景2:设置不可变属性并验证(配合 chattr)
sudo chattr +i /etc/passwd
sudo lsattr /etc/passwd
输出示例:
----i----------- /etc/passwd
👀
i表示 immutable(不可变)属性,任何用户都无法修改、删除或重命名该文件,即使 root 也不行!
取消属性:
sudo chattr -i /etc/passwd
✅ 场景3:查看目录及其所有子文件的属性(递归模式)
lsattr -R /var/log/
输出示例:
---------------- /var/log/syslog
---------------- /var/log/auth.log
---------------- /var/log/apt/history.log
📁 可用于排查是否有关键日志文件被设置了只追加或不可变属性。
✅ 场景4:防止日志文件被覆盖(使用 a 属性)
sudo chattr +a /var/log/myapp.log
sudo lsattr /var/log/myapp.log
输出示例:
-------------a-- /var/log/myapp.log
📝
a表示 append-only(只允许追加写入),不能修改已有内容或删除文件,适合用于日志审计。
🧪 五、常用扩展属性标志详解(Flags)
| 标志 | 含义 | 示例 |
|---|---|---|
i |
Immutable(不可变) | 防止修改、删除、重命名 |
a |
Append only(只允许追加) | 日志文件保护 |
s |
Secure deletion(删除时清空数据) | 删除后无法恢复 |
u |
Undeletable(可恢复) | 删除后保留 inode 数据 |
c |
Compressed(压缩存储) | 文件自动压缩 |
d |
No dump(不参与备份) | 不被 dump 备份工具处理 |
S |
Synchronous updates(同步更新) | 每次写入都立即同步到磁盘 |
⚠️ 注意:不是所有属性在所有内核版本中都有效,部分需特定内核支持。
🧰 六、进阶技巧与应用场景
🔒 场景1:保护关键配置文件不被误操作
sudo chattr +i /etc/resolv.conf
sudo lsattr /etc/resolv.conf
输出:
----i----------- /etc/resolv.conf
🛡️ 即使是 root 用户也无法修改该文件,防止 DNS 设置被恶意更改。
🗂 场景2:限制日志文件只能追加(防止篡改)
sudo chattr +a /var/log/secure
📊 适合用于审计日志、安全日志等需要防篡改的场景。
🧹 场景3:设置文件删除后不可恢复(s 属性)
sudo chattr +s sensitive_data.txt
💣 当你删除该文件时,系统会将其内容全部用 0 填充,防止通过恢复工具找回。
📦 场景4:压缩文件节省空间(c 属性)
sudo chattr +c compressed_file.txt
🧩 在支持压缩的文件系统(如 ext4)中,系统会自动对该文件进行压缩存储。
🧠 七、不同发行版之间的差异与注意事项
| 发行版 | 特点 |
|---|---|
| Ubuntu | 默认使用 ext4 文件系统,完整支持 lsattr/chattr |
| CentOS 7/8 | 默认使用 ext4,但某些属性可能未启用(如压缩) |
| EulerOS/openEuler | 企业级系统,默认使用 ext4,适合用于安全加固 |
| 注意 | 若使用 Btrfs 或 XFS 等非 ext 文件系统,lsattr 和 chattr 将无效! |
📌 八、总结
lsattr 是 Linux 中一个非常实用的命令,尤其在安全加固、日志保护、防篡改等高级运维场景中尤为重要。它可以帮助你为关键文件添加额外的安全屏障,防止误操作或恶意攻击。
掌握 lsattr 和 chattr 的组合使用,不仅能够提升你的系统安全性意识,还能让你在面对真实生产问题时更加从容应对。
💡 提示:你可以将
lsattr加入日常巡检脚本中,定期检查/etc、/boot、/root等关键目录是否被设置了异常属性。示例脚本:
#!/bin/bash echo "Checking system files attributes..." lsattr -R /etc /boot /root > /tmp/attrs_report.txt grep 'i\|a' /tmp/attrs_report.txt

浙公网安备 33010602011771号