如何限制root用户在Linux中访问或者修改文件和目录
在本文中,将介绍防止或者限制root用户访问某些文件或者目录的步骤。
现在,默认情况下,root用户是有权访问Linux节点上所有可用文件和目录的超级用户,但是甚至可以限制root用户访问和修改文件或者目录的内容。
我们可以使用扩展文件属性限制root用户访问和修改文件或者目录。
我们将在演示中处理chattr
和lsattr
来实现这一点。
现在,"更改Linux文件系统上的文件更改文件属性"支持多个选项,但是我们将仅关注可以帮助限制root用户访问某些文件和目录的选项。
说明:
在本文中,我将使用参考术语,因为我们禁止对某些文件和目录的根访问,但这并不意味着将允许任何其他系统用户访问具有扩展属性的此类文件。
设置扩展属性以限制访问后,除非取消限制,否则系统用户都无法访问这些文件或者目录。
要获得chattr
支持的选项的完整列表,我们可以使用以下命令查看chattr
的手册页。
# man chattr
我们将使用两个属性a:
将文字添加到文件
无法覆盖
i:
使文件不可变
不能以任何方式删除或者更改
创建一个秘密文件和目录
现在,在我们开始之前,我们必须有一个最高机密文件,该文件需要受到root用户的保护。
我用下面的文字创建了一个secret_file
[root@node1 ~]# cat /tmp/hynman/secret_file This is a secret file
检查分配的属性
默认情况下,当我们创建文件或者目录时,除" e"外,它没有任何扩展属性,这意味着扩展区格式,即这些文件支持扩展属性
[root@node1 ~]# lsattr /tmp/ -------------e-- /tmp/tracker-extract-files.0 -------------e-- /tmp/yum_save_tx.2019-03-22.22-16.7ocUW8.yumtx -------------e-- /tmp/systemd-private-1ad03926d17f4de68a8fdfdd0449c980-chronyd.service-FhlC0B -------------e-- /tmp/systemd-private-1ad03926d17f4de68a8fdfdd0449c980-bolt.service-2Oomt7 -------------e-- /tmp/systemd-private-1ad03926d17f4de68a8fdfdd0449c980-rtkit-daemon.service-TEwKlB -------------e-- /tmp/hynman -------------e-- /tmp/systemd-private-1ad03926d17f4de68a8fdfdd0449c980-colord.service-cUfgTm -------------e-- /tmp/yum_save_tx.2019-03-22.22-16.ZCjaVi.yumtx -------------e-- /tmp/systemd-private-1ad03926d17f4de68a8fdfdd0449c980-cups.service-5yacYU
限制访问并仅允许添加内容
现在,我们将使用+ a允许root用户将一些数据添加到我们的秘密文件中,但不允许root用户覆盖该文件。
[root@node1 ~]# chattr +a /tmp/hynman/secret_file
检查分配的属性,正如我们现在看到的,我们还为我们的secret_file
指定了一个属性
[root@node1 ~]# lsattr /tmp/hynman/ -----a-------e-- /tmp/hynman/secret_file
接下来尝试将一些数据添加到此文件
[root@node1 ~]# echo "I am appending some more content" >> /tmp/hynman/secret_file
看起来像预期的那样工作,请验证相同
[root@node1 ~]# cat /tmp/hynman/secret_file This is a secret file I am appending some more content
因此,如我们所见,我们的秘密文件包含更多内容。
让我们尝试覆盖数据
[root@node1 ~]# echo "I am trying to overwrite the content" > /tmp/hynman/secret_file -bash: /tmp/hynman/secret_file: Operation not permitted
不出所料,扩展属性不允许我覆盖数据。
使文件不可变(限制所有活动)
现在,让我们使该文件不可变,这样就无法对该文件进行任何更改。
[root@node1 ~]# chattr +i /tmp/hynman/secret_file
检查应用的属性
[root@node1 ~]# lsattr /tmp/hynman/secret_file ----ia-------e-- /tmp/hynman/secret_file
如我们所见,a和i都应用于我们的机密文件,但是由于我已达到我们的目的,因此我们不需要其中因此我们将删除a属性
[root@node1 ~]# chattr -a /tmp/hynman/secret_file
接下来,再次验证应用的属性
[root@node1 ~]# lsattr /tmp/hynman/secret_file ----i--------e-- /tmp/hynman/secret_file
接下来,我将尝试覆盖此文件的数据,还将尝试删除此文件
[root@node1 ~]# echo "I am trying to overwrite the content" > /tmp/hynman/secret_file -bash: /tmp/hynman/secret_file: Permission denied [root@node1 ~]# rm -f /tmp/hynman/secret_file rm: cannot remove ‘/tmp/hynman/secret_file’: Operation not permitted
但是如我们所见,由于扩展属性,系统不允许root用户对该文件执行任何活动。
除了文件,我们还可以在目录级别应用这些属性,以保护相应目录下的所有文件。
删除扩展属性
如上一步所示,要删除扩展属性,请使用减号和选项
# chattr -a <file/directory> # chattr -i <file/directory>