Linux的chattr与lsattr命令详解

此文章发布于30个月前,部分信息可能已经过时,请自行斟酌确认

Linux的chattr与lsattr命令详解

写作背景

  • 某次服务器中的一个TP5的项目被利用漏洞攻击了,清理完木马文件后发现我无法修改项目有的配置文件,于是我想把配置文件删除后再重新上传,结果删除也删除不了,因为我用的宝塔面板,我以为是宝塔问题,于是我登陆了shell终端,root权限下的rm方式删除,系统提示我权限不足。经排查我发现文件设置了不可删除的属性,在这里记录一下解决办法。

关联知识

  • 我们先使用 lsattr 命令查看文件被赋予的属性。
  • 我们再使用 chattr 命令更改文件被赋予的属性。

这里可能会有小白同学疑惑了,修改文件属性不应该是 chown , chmod 等命令做的么?
不熟悉 chown , chmod 命令的同学可以先仔细阅读一下下面这篇文章。


chattrtouchchownchmod等命令的比较

  • 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:可以直接访问压缩文件的内容。

各参数选项中常用到的是aia选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root)或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

chattrlsattr命令的使用

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文件增加aij这三个属性。

[root@www ~]# chattr +aij attrtest
[root@www ~]# lsattr attrtest
----ia---j---    attrtest
最后修改:2021 年 03 月 31 日 05 : 25 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论