资讯专栏INFORMATION COLUMN

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

glumes / 2402人阅读

摘要:不能更新文件访问时间。现在检查该文件不可变更标志位是否被添加上了。一旦文件被设置为不可变更,任何用户都将无法修改该文件。注意你不能将作为一个安全措施,因为不可变更标志位可以很容易被取消掉。

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

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

在这个教程中,我会示范如果使用chattr来让Linux中的文件不可变更。

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

下面是chattr的基本语法。

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

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

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

a: 只能以追加模式打开。

A: 不能更新atime(文件访问时间)。

c: 当被写入磁盘时被自动压缩。

C: 关掉“写时复制”。

i: 不可变更。

s: 通过自动归零来安全删除。(LCTT 译注:一般情况文件被删后内容不会被修改,改标志位会使得文件被删后原有内容被“0”取代)

“不可变更”标志位

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

$ sudo chattr +i /etc/passwd

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

$ lsattr /etc/passwd

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

用如下命令取消“不可变更”标志位:

$ 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。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15115.html

相关文章

  • [] 如何Linux创建一个不可变更文件

    摘要:不能更新文件访问时间。现在检查该文件不可变更标志位是否被添加上了。一旦文件被设置为不可变更,任何用户都将无法修改该文件。注意你不能将作为一个安全措施,因为不可变更标志位可以很容易被取消掉。 假如你想对Linux中的一些重要文件做写保护,这样它们就不能被删除或者被篡改成之前的版本或者其他东西,或者在其他情况下,你可能想避免某些配置文件被软件自动修改。使用chown和chmod命令修改文件...

    fobnn 评论0 收藏0
  • []JavaScript中不可变性(Immutability)

    摘要:整个这个雷区面板都是由的和组成的,最后由的方法对其进行不可变化处理剩下的主要逻辑部分就是扫雷了,传入扫雷游戏对象一个不可变结构做为第一个参数,以及要扫的那个雷区块对象,最后返回新的扫雷游戏实例。 不可变性(Immutability)是函数式编程的核心原则,在面向对象编程里也有大量应用。在这篇文章里,我会给大家秀一下到底什么是不可变性(Immutability)、她为什么还这么屌、以及在...

    clasnake 评论0 收藏0
  • [] $digest Angular 中重生

    摘要:但如果一个组件在生命周期钩子里改变父组件属性,却是可以的,因为这个钩子函数是在更新父组件属性变化之前调用的注即第步,在第步之前调用。 原文链接:Angular.js’ $digest is reborn in the newer version of Angular showImg(https://segmentfault.com/img/remote/146000001468785...

    incredible 评论0 收藏0
  • Linux 文件系统介绍

    摘要:每个文件系统类型都使用自己的元数据结构来定义如何存储和访问数据。设备驱动程序将文件系统命令的标准集根据特定分区或逻辑卷上的文件系统类型做转换和解释。这不是根文件系统。 原文地址:https://opensource.com/life/1...原翻译地址:http://www.tony-yin.top/2017/... 本文旨在对Linux文件系统概念进行深层次的讨论。本文既不准备对某...

    Alan 评论0 收藏0
  • [] 关于 `ExpressionChangedAfterItHasBeenCheckedErro

    摘要:本文将解释引起这个错误的内在原因,检测机制的内部原理,提供导致这个错误的共同行为,并给出修复这个错误的解决方案。这一次过程称为。这个程序设计为子组件抛出一个事件,而父组件监听这个事件,而这个事件会引起父组件属性值发生改变。 原文链接:Everything you need to know about the ExpressionChangedAfterItHasBeenCheckedE...

    andong777 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<