本文最后更新于 2024-07-09,文章内容可能已经过时。

Linux lsattr与chattr命令

Linux系统下的文件有一些隐藏(扩展)属性,这些属性对文件提供额外的保护功能,方便我们可以更好的管理文件和控制权限。

在Linux中,lsattrchattr是用于管理和查看文件扩展属性的命令,它们与传统的文件权限(如使用 ls -al查看的权限)不同,主要用于增强文件系统安全性和控制。

lsattr和chattr需要ext2、ext3、ext4等文件系统上适用,不过Linux 内核2.6以后的版本,基本都是支持的。

有些Linux发型版本并未默认安装lsattr和chattr,可以使用下面的命令手动安装:

#Debian
apt-get install e2fsprogs
 
#Ubuntu
apt-get install e2fsprogs
 
#Arch Linux
pacman -S e2fsprogs
 
#CentOS
yum install e2fsprogs

lsattr (list attributes)

lsattr命令用于列出文件或目录的扩展属性。它显示了与 chattr相关的属性信息,通常与 chattr命令配合使用,以检查文件或目录上设置的扩展属性。

命令格式

lsattr [-adlRvV] [文件或目录...]

参数

-a 显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。
-d 显示,目录名称,而非其内容。
-l 此参数目前没有任何作用。
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v 显示文件或目录版本。
-V 显示版本信息。

chattr (change attributes)

chattr 命令来自于英文词组“change attribute”的缩写,其功能是用于更改文件隐藏属性。

chattr 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

chattr命令语法

chattr [+-=][ASacDdIijsTtu] [文件或目录名]
  • +:增加某个属性
  • -:移除某个属性
  • =:设置指定的属性,其他未指定的属性将被移除

常用的属性选项

  • a:只能向文件中追加数据,而不能删除或修改已存在的数据。
  • A:文件或目录的访问时间atime不可被修改,可防止通过atime猜测文件使用情况。
  • c:将文件或目录压缩后存储,读取时自动解压。
  • d:当目录被删除时,其下的文件也会被自动删除。
  • i:文件或目录不可被修改;不可被删除;不可被重命名;不可被创建链接;不可被写入或新增内容。
  • j:当目录所在的文件系统被卸载时,目录会被记录。
  • s:彻底从磁盘上删除数据,在有些情况下可以用来覆盖已删除文件的数据。
  • S:在文件被修改时,将修改同步写入磁盘。
  • t:禁止文件或目录被dump备份。
  • u:当删除该文件后依然保留其在磁盘上的数据,以便于以后恢复。

示例

  • 设置文件为只追加模式

假设我们有一个名为 log.txt的文件,我们想要确保只有追加数据到文件末尾的操作是被允许的,可以使用以下命令:

chattr +a log.txt

之后,任何尝试修改或删除 log.txt文件内容的操作都会失败。

  • 设置目录为不可修改模式

如果我们有一个名为 protected_dir的目录,并且我们想要防止其被修改(包括添加、删除或重命名其中的文件或子目录),可以使用以下命令:

chattr +i protected_dir

请注意,一旦设置了 i属性,即使是root用户也不能修改该目录或其中的内容(除了使用 chattr命令本身来移除该属性)。

  • 查看文件和目录的扩展属性

虽然 chattr命令本身不直接提供查看文件和目录扩展属性的功能,但我们可以使用 lsattr命令来查看:

 /root lsattr -d protected_dir
----i---------e----- protected_dir

👀️ 需要注意的是,chattrlsattr命令不适用于所有的文件,比如它们对 //dev/tmp/var等目录的保护是无效的,因为这些目录需要经常被修改以保证系统的正常运行。

使用 chattrlsattr命令可以增强系统安全性,但同时也需要谨慎使用,避免因错误设置而造成数据不可访问或其他问题。