user256033 Asked: 2014-12-03 08:02:00 +0800 CST2014-12-03 08:02:00 +0800 CST 2014-12-03 08:02:00 +0800 CST Linux - 有没有办法防止/保护文件被 root 删除? 772 我有一个非常重要的文件,我的工作场所的应用程序使用它,我需要确保它不会被删除,我该怎么做? linux 9 个回答 Voted Best Answer Itai Ganot 2014-12-03T08:04:02+08:002014-12-03T08:04:02+08:00 是的,您可以将文件的属性更改为只读。 命令是: chattr +i filename 并禁用它: chattr -i filename 来自man chattr: 无法修改具有该i属性的文件:无法删除或重命名,无法创建指向该文件的链接,也无法向该文件写入数据。只有超级用户或拥有该CAP_LINUX_IMMUTABLE能力的进程才能设置或清除该属性。 Thorbjørn Ravn Andersen 2014-12-04T07:18:35+08:002014-12-04T07:18:35+08:00 将其刻录到 CD。将 CD 放入 CD-ROM 驱动器并从那里访问它。 Ken A 2014-12-04T12:33:40+08:002014-12-04T12:33:40+08:00 创建文件系统映像。 挂载镜像。 将文件复制到已安装的映像。 卸载映像并将其重新安装为只读。 现在你不能删除它。 例子: # dd if=/dev/zero of=readonly.img bs=1024 count=1024 # mkfs.ext2 readonly.img # mkdir readonlyfolder # mount readonly.img readonlyfolder/ # echo "can't delete this" > readonlyfolder/permanent.txt # umount readonlyfolder # mount -o ro readonly.img readonlyfolder # cat readonlyfolder/permanent.txt can't delete this # rm readonlyfolder/permanent.txt rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system andrew 2014-12-03T21:15:38+08:002014-12-03T21:15:38+08:00 您还应该为该文件创建多个硬链接。这些应该位于普通用户无法访问的各个位置。 这样,即使他们确实设法覆盖了您的 chattr 保护,数据仍将保留,您可以轻松地将其恢复到应用程序正在查找的位置。 poige 2014-12-07T15:40:00+08:002014-12-07T15:40:00+08:00 Linux 有所谓的绑定挂载选项,这是一个相当强大且有用的特性: % cd $TMP && mkdir usebindmountluke && cd usebindmountluke % echo usebindmountluke > preciousfile % sudo mount -B preciousfile preciousfile % sudo mount -oremount,ro preciousfile % echo sowhat > preciousfile zsh: read-only file system: preciousfile % rm preciousfile rm: cannot remove ‘preciousfile’: Read-only file system — 这里所做的是将文件绑定到自身(是的,您可以在 Linux 中这样做),然后在 R/O 模式下重新安装它。当然,这也可以对目录进行。 Kevin 2014-12-03T23:02:07+08:002014-12-03T23:02:07+08:00 其他人已按照您的要求回答了您的问题。正如@Sven 在评论中提到的那样,问题的一般解决方案是“我如何确保我永远不会丢失文件?” 是创建文件的备份。制作文件的副本并将其存储在多个位置。此外,如果该文件非常重要,并且您的公司有使用备份服务备份重要数据的政策,您可能会考虑将此文件包含在该服务中。 sch 2014-12-09T08:32:42+08:002014-12-09T08:32:42+08:00 在 Linux 上,不可变标志仅在某些类型的文件系统上受支持(大多数本地文件系统,如ext4, xfs, btrfs...) 在不支持的文件系统上,另一种选择是以只读模式将文件绑定挂载到自身之上。这必须分两步完成: mount --bind file file mount -o remount,bind,ro file 不过,这必须在每次启动时完成,例如通过/etc/fstab. Joe H. 2014-12-08T05:04:24+08:002014-12-08T05:04:24+08:00 在对Kevin 的回答的评论中,Jerry 提到: 好吧,当然该文件会定期备份,我只是想要另一层保护,以防止有时在具有 root 用户权限的机器上工作的用户。– 我假设你不能改变这种做法,因为这是一个非常非常糟糕的主意。 所有关于使用只读设备的建议都有同样的问题——它使它成为一个 PITA,供您在需要时进行合法更改。对于可锁定的驱动器,例如 SD 卡,当您解锁它以进行更改时,您会遇到突然容易受到攻击的问题。 相反,我建议将另一台机器设置为 NFS 服务器,并将包含重要文件的目录共享给用户拥有 root 权限的机器。以只读方式共享挂载,这样您不信任的用户所在的机器就无法进行任何修改。当您需要合法地进行更改时,您可以连接到 NFS 服务器并在那里进行更改。 我们将它用于我们的网络服务器,因此对网络服务器的成功利用将无法插入或更改服务器随后将提供的任何文件,或更改配置。 请注意,这可以像所有与挂载点相关的挂载点一样被绕过: 制作受保护目录的副本 卸载目录 移动副本以代替挂载,或者如果该挂载没有足够的空间,则将其符号链接。 Craig Tullis 2014-12-07T15:03:19+08:002014-12-07T15:03:19+08:00 为什么不创建一个设计为只读的 ISO 9660 映像? 挂载 ISO 映像,它看起来像一张 CD-ROM,但具有硬盘驱动器的性能,挂载的映像上的文件与物理 CD-ROM 上的文件一样不被删除。 将敏感文件刻录到 CD 并从 CD-ROM 运行它的想法很有趣,假设在文件上设置不可变位还不够。 从物理 CD 上运行它存在潜在的负面问题,包括性能(CD-ROM 驱动器比硬盘驱动器或 SSD 慢得多)。CD-ROM 很可能被善意的人移除并替换为他们需要访问的不同光盘。恶意方可能只是将光盘取出并将其扔进微波炉(或垃圾箱),从而“删除”您的文件。不得不为该文件配备专用硬件 CD-ROM 驱动器以及其他因素带来的不便。 但 OP 明确表示,主要目的是防止意外删除,而不是防止恶意行为,并且如果发生意外,有问题的文件会被备份和恢复,但非常希望文件永远不会被不小心删除了。 从已安装的 ISO 映像运行文件似乎可以满足要求。
是的,您可以将文件的属性更改为只读。
命令是:
并禁用它:
来自
man chattr
:将其刻录到 CD。将 CD 放入 CD-ROM 驱动器并从那里访问它。
例子:
您还应该为该文件创建多个硬链接。这些应该位于普通用户无法访问的各个位置。
这样,即使他们确实设法覆盖了您的 chattr 保护,数据仍将保留,您可以轻松地将其恢复到应用程序正在查找的位置。
Linux 有所谓的绑定挂载选项,这是一个相当强大且有用的特性:
— 这里所做的是将文件绑定到自身(是的,您可以在 Linux 中这样做),然后在 R/O 模式下重新安装它。当然,这也可以对目录进行。
其他人已按照您的要求回答了您的问题。正如@Sven 在评论中提到的那样,问题的一般解决方案是“我如何确保我永远不会丢失文件?” 是创建文件的备份。制作文件的副本并将其存储在多个位置。此外,如果该文件非常重要,并且您的公司有使用备份服务备份重要数据的政策,您可能会考虑将此文件包含在该服务中。
在 Linux 上,不可变标志仅在某些类型的文件系统上受支持(大多数本地文件系统,如
ext4
,xfs
,btrfs
...)在不支持的文件系统上,另一种选择是以只读模式将文件绑定挂载到自身之上。这必须分两步完成:
不过,这必须在每次启动时完成,例如通过
/etc/fstab
.在对Kevin 的回答的评论中,Jerry 提到:
我假设你不能改变这种做法,因为这是一个非常非常糟糕的主意。
所有关于使用只读设备的建议都有同样的问题——它使它成为一个 PITA,供您在需要时进行合法更改。对于可锁定的驱动器,例如 SD 卡,当您解锁它以进行更改时,您会遇到突然容易受到攻击的问题。
相反,我建议将另一台机器设置为 NFS 服务器,并将包含重要文件的目录共享给用户拥有 root 权限的机器。以只读方式共享挂载,这样您不信任的用户所在的机器就无法进行任何修改。当您需要合法地进行更改时,您可以连接到 NFS 服务器并在那里进行更改。
我们将它用于我们的网络服务器,因此对网络服务器的成功利用将无法插入或更改服务器随后将提供的任何文件,或更改配置。
请注意,这可以像所有与挂载点相关的挂载点一样被绕过:
为什么不创建一个设计为只读的 ISO 9660 映像?
挂载 ISO 映像,它看起来像一张 CD-ROM,但具有硬盘驱动器的性能,挂载的映像上的文件与物理 CD-ROM 上的文件一样不被删除。
将敏感文件刻录到 CD 并从 CD-ROM 运行它的想法很有趣,假设在文件上设置不可变位还不够。
从物理 CD 上运行它存在潜在的负面问题,包括性能(CD-ROM 驱动器比硬盘驱动器或 SSD 慢得多)。CD-ROM 很可能被善意的人移除并替换为他们需要访问的不同光盘。恶意方可能只是将光盘取出并将其扔进微波炉(或垃圾箱),从而“删除”您的文件。不得不为该文件配备专用硬件 CD-ROM 驱动器以及其他因素带来的不便。
但 OP 明确表示,主要目的是防止意外删除,而不是防止恶意行为,并且如果发生意外,有问题的文件会被备份和恢复,但非常希望文件永远不会被不小心删除了。
从已安装的 ISO 映像运行文件似乎可以满足要求。