此文章发布于30个月前,部分信息可能已经过时,请自行斟酌确认
Linux的chattr与lsattr命令详解
写作背景
- 某次服务器中的一个TP5的项目被利用漏洞攻击了,清理完木马文件后发现我无法修改项目有的配置文件,于是我想把配置文件删除后再重新上传,结果删除也删除不了,因为我用的宝塔面板,我以为是宝塔问题,于是我登陆了shell终端,root权限下的rm方式删除,系统提示我权限不足。经排查我发现文件设置了不可删除的属性,在这里记录一下解决办法。
关联知识
- 我们先使用
lsattr
命令查看文件被赋予的属性。 - 我们再使用
chattr
命令更改文件被赋予的属性。
这里可能会有小白同学疑惑了,修改文件属性不应该是 chown
, chmod
等命令做的么?
不熟悉 chown
, chmod
命令的同学可以先仔细阅读一下下面这篇文章。
chattr
和touch
、chown
、chmod
等命令的比较
chmod
只是改变文件的读写、执行权限。chown
是用来修改文件的属主和属组的。touch
只能修改文件的创建时间。- 而
chattr
是基于Linux内核的更底层的属性控制。
chattr
概述:
chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。
重点提示:
通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护 / 、 /dev 、 /tmp 、 /var目录。
属性参数详解
A
:即Atime,告诉系统不要修改对这个文件的最后访问时间。(可以有效预防例如手提电脑磁盘I/O错误的发生)S
:类似于Sync,一旦应用程序对这个文件执行了写的操作,使系统立刻把修改的结果写到磁盘。a
:即Append Only,系统只允许在这个文件中添加数据,不能删除,也不允许任何进程覆盖或者截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立文件和修改文件,而不允许删除任何文件。多用于服务器日志文 件安全,只有root才能设定这个属性。b
:不更新文件或目录的最后存取时间。c
:即compresse,将文件或目录压缩后存放。读取时需要自动解压操作。d
:即no dump,当dump程序执行时,该文件不会被dump备份。D
:检查压缩文件中的错误。i
:即Immutable,系统不允许对这个文件进行任何的修改,也不能删除、改名、设定链接关系等。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件不允许建立和删除文件。(i参数对于文件 系统的安全设置有很大帮助)j
:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。s
:彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。u
:与s相反,当一个程序请求删除这个文件时,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。t
:文件系统支持尾部合并(tail-merging)。X
:可以直接访问压缩文件的内容。
各参数选项中常用到的是a
和i
。a
选项强制只可添加不可删除,多用于日志系统的安全设定。而i
是更为严格的安全设定,只有superuser (root)或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。
chattr
与lsattr
命令的使用
lsattr
语法的使用
命令 | 参数一 (此参数为可选参数,非必填) | 参数二 |
---|---|---|
lsattr | -a -d -l -R -v -V | 文件或目录 |
参数一详解:
-a
:显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录与"." 与上层目录 ".."。-d
:显示目录名称,而不是其内容。-l
:此参数目前没任何作用。-R
:递归处理,将指定目录下的所有文件及子目录一并处理。-v
:显示文件或目录版本。-V
:显示版本信息。
写给纯小白的提示:命令、参数一、参数二之间都要用空格相隔开。。。。。
chattr
语法的使用
命令 | 参数一 (此参数为可选参数,非必填) | 参数二 | 参数三 | 参数四 |
---|---|---|---|---|
chattr | -R -V -f | - + = | a A c C d D e i j s S t T u | 文件或目录 |
参数一详解:
-R
:递归处理,将指定目录下的所有文件及子目录一并处理。-V
:显示指令的执行过程。-f
:忽略系统的一些提示(强制执行)。
示例:
如果我同时需要递归处理,又要显示指令执行过程。那么 参数一 写法就是: -RV
。
参数二详解
+
:开启文件或目录的该项属性。-
:关闭文件或目录的该项属性。=
:指定文件或该目录的属性。
重要提醒:
参数二与参数三之间不能有空格,它们之间是连在一起的参数四详解请查看文章上方的   [ 属性参数详解 ]  。
使用范例
给attrtest文件增加a
、i
、j
这三个属性。
[root@www ~]# chattr +aij attrtest
[root@www ~]# lsattr attrtest
----ia---j--- attrtest