详解Linux chattr 命令,超越权限任性修改

人盡茶涼 提交于 2020-02-28 23:40:42
导读 很多时候,Linux机器被不同的用户使用。因此,这些用户有机会访问一组共同的文件。这就为一些问题打开了大门,比如意外删除或编辑重要文件,而作为管理员,你肯定不希望发生这样的事情。值得庆幸的是,存在一个名为“chattr”的命令,它可以在上述场景中帮助到你。下面,我们使用一些容易理解的示例来讨论这个工具。本页面所有的例子都在Ubuntu 16.04 LTS上进行了测试。

Linux chattr 命令

一般,“chattr”命令用于更改Linux文件上属性。以下是它的语法:

chattr [ -RVf ] [ -v version ] [ mode ] files...

下面是man手册对它的描述:

chattr 改变一个Linux文件系统上的文件属性。

一个通用格式是:+-=[aAcCdDeijsStTu]

‘+’选项,将给文件添加属性;‘-’选项,移除文件中的属性;‘=’选项,使得文件只有这些属性。

字母 'aAcCdDeijsStTu' 可以赋予文件的新属性:

a:只能附加数据A:不修改访问时间c:压缩文件,C:不执行写入时复制(COW) 。多个调用者获取同一个资源,这时,另一个调用者对这资源进行了修改,不生成一个副本给d:不 dump D: 同步更新目录e:extent格式(一种文件系统格式)i:不能修改。不能删除或重命名,不能创建到该文件的链接,也不能向该文件写入数据。只有超级用户或拥有 CAP_LINUX_IMMUTABLE 能力的进程才能设置或清除此属性。j:数据日志s:安全删除S:同步更新t:不知道文件尾部合并T:目录层次的顶部u:文件被删除时,其内容会被保存,后面可以请求恢复

下面的只读属性,可以使用 lsattr列出,但不能被 chattr 修改:

E:压缩错误h:巨大的文件I:索引目录N:内联数据X:压缩原始访问Z:压缩文件是脏的

并不是所有文件系统都支持所有标志;参考文件系统手册了解如btrfs(5), ext4(5), 和 xfs(5)文件格式的更多详情。

下面是一些问答式的例子,这些例子应该能让你对chattr命令的工作原理有一个很好的了解。

Q1. chattr 命令如何使用?

假设您想要使一个文件成为只读的。因此,您所要做的就是使用+i选项和文件的名称作为参数来运行chattr命令。

如:

chattr +i test.txt

下面的截图显示,一旦使用chattr成为只读文件,就不会有其他操作在文件上取得成功。

注意:正如您已经观察到的,您需要拥有使用chattr命令的root权限。

Q2. chattr 命令如何取消只读属性?

这很简单--你所要做的就是使用-i选项替换+i。例如:

chattr -i test.txt

Q3. chattr 命令如何给一个文件添加只能追加(append-only)的权限?

有时,您可能不希望对文件进行完全限制。我的意思是,您可能想要为用户提供对文件的追加的访问,这样就可以添加新的内容,但是现有的内容不能被删除或编辑。这也可以通过+a选项。

chattr +a test.txt

现在可以附加内容到文件中,但是不能编辑文件中的现有信息,也不能删除文件。要取消这种行为,只需使用-a选项。

chattr -a test.txt

Q4. chattr 命令如何对一个目录中的所有文件添加限制?

这可以使用标记-R来完成,它允许您递归地改变目录及其内容的属性。例如,如果您想让test-dir目录中的所有文件都是只读的,那么请使用以下方式:

chattr -R +i ./test-dir/

下面的截图显示了只读限制被成功地应用到目录中的所有文件中。

Q5. 如何查看 chattr 命令赋予文件上的属性?

到目前为止,为了检查是否成功执行了chattr目录,我们尝试执行一些操作,如编辑文件或删除它。但是有一个单独的命令,可以让您轻松地查看文件是否有某个属性。这个命令是lsattr。

lsattr [FILENAME]

例如,下面的截图显示了lsattr的输出,清楚地表明“i”属性被应用到目录中的所有文件中。

再确认一下,这是使用-i选项后的输出。

您可以在上面的截图中看到,只读属性从所有文件中删除了。

总结

如果您是一个系统管理员,或者在Linux机器上管理用户,那么您现在明白了,chattr是一个必须知道的命令行工具。有效地使用这个命令可以避免很多麻烦。

原文来自: https://www.linuxprobe.com/linux-chattr-root.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!