[译] 如何在Linux下建立一个不可变动的文件

假如你想对Linux中的一些重要文件作写保护,这样它们就不能被删除或者被篡改为以前的版本或者其余东西,或者在其余状况下,你可能想避免某些配置文件被软件自动修改。使用chownchmod命令修改文件的归属关系或者权限位是处理这种状况的一个解决方法,但这并不完美,由于这样没法避免有root权限的操做。这时chattr就派上用场了。html

chattr是一个能够设置或取消文件的标志位的Linux命令,它和标准的文件权限(读、写、执行)是分离的。与此相关的另外一个命令是lsattr,它能够显示文件的哪些标志位被设置上了。最初只有EXT文件系统(EXT2/3/4)支持chattrlsattr所管理的标志位,但如今不少其余的原生的Linux文件系统都支持了,好比XFS、Btrfs、ReiserFS等等。linux

在这个教程中,我会示范若是使用chattr来让Linux中的文件不可变动。git

chattrlsattr命令是e2fsprogs包的一部分,它在全部现代Linux发行版都预装了。github

下面是chattr的基本语法。安全

$ chattr [-RVf] [操做符][标志位] 文件...

其中操做符能够是“+”(把选定的标志位添加到标志位列表)、“-”(从标志位列表中移除选定的标志位)、或者“=”(强制使用选定的标志位)。微信

下面是一些可用的标志位。spa

  • a: 只能以追加模式打开。
  • A: 不能更新atime(文件访问时间)。
  • c: 当被写入磁盘时被自动压缩。
  • C: 关掉“写时复制”。
  • i: 不可变动。
  • s: 经过自动归零来安全删除。(LCTT 译注:通常状况文件被删后内容不会被修改,改标志位会使得文件被删后原有内容被“0”取代)

“不可变动”标志位

为了让一个文件不可变动,你须要按照以下方法为这个文件添加“不可变动”标志位。例如,对/etc/passwd文件作写保护:翻译

$ sudo chattr +i /etc/passwd

注意设置或取消一个文件的“不可变动”标志位是须要root用户权限的。如今检查该文件“不可变动”标志位是否被添加上了。日志

$ lsattr /etc/passwd

一旦文件被设置为不可变动,任何用户都将没法修改该文件。即便是root用户也不能够修改、删除、覆盖、移动或者重命名这个文件。若是你想再次修改这个文件,须要先把“不可变动”标志位取消了。code

用以下命令取消“不可变动”标志位:

$ sudo chattr -i /etc/passwd

若是你想让一个目录(好比/etc)连同它下边的全部内容不可变动,使用“-R”选项:

$ sudo chattr -R +i /etc

“只可追加”标志位

另外一个有用的的标志位是“只可追加”,它只容许文件内容被追加的方式修改。你不能覆盖或者删除一个设置了“只可追加”标志位的文件。这个标志位在你想避免日志文件被意外清理掉的状况颇有用。

和“不可变动”标志位相似,你可使用以下命令让文件变成“只可追加”模式:

$ sudo chattr +a /var/log/syslog

注意当你复制一个“不可变动”或者“只可追加”的文件到其余地方后,新文件不会保留这些标志位!

结论

在这个教程中,我展现了如何使用chattrlsattr命令来管理额外的文件标志位,来避免文件被篡改(意外或者其余状况)的方法。注意你不能将chattr做为一个安全措施,由于“不可变动”标志位能够很容易被取消掉。解决这个问题的一个可能的方式是限制chattr命令自身的可用性,或者去掉CAP_LINUX_IMMUTABLE内核权能标志。关于chattr以及可用的标志位的更多细节,请参考它的man手册。


via: http://xmodulo.com/make-file-...

做者:Dan Nanni
译者:goreliu
校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

付费解决 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等领域相关问题,灵活订价,欢迎咨询,微信 ly50247。

相关文章
相关标签/搜索