Linux-有没有办法防止/保护文件甚至被root删除?


89

我的工作场所中的应用程序有一个非常重要的文件,我需要确保它不会被删除,该怎么办?

linux  files 

13
做一个备份,这样你就可以恢复它......除此之外,chattr +i可以帮助反而会使文件设置为只读,以及(和可以被覆盖chattr -i),你也可以尝试用SELINUX等保护它
斯文

43
root可以创建一个连root也无法杀死的进程吗?
Mark Gabriel

4
@MarkGabriel是的。叉子炸弹。:)
reirab 2014年


8
硬件管理员可能会来取出磁盘,切碎,燃烧残余物并将其送入休斯。或者,更好的是,某些C(++)程序员可能会诱发一些鼻恶魔。对您而言重要的任何事情,都请备份。两次。
Pavel

Answers:


133

是的,您可以将文件的属性更改为只读。

该命令是:

chattr +i filename

并禁用它:

chattr -i filename

来自man chattr

具有i属性的文件无法修改:不能删除或重命名,不能创建与此文件的链接,也不能将数据写入该文件。只有超级用户或拥有此CAP_LINUX_IMMUTABLE功能的进程才能设置或清除此属性。


11
对于感兴趣的人,bsd等效项是chflags schg
Andrew Domaszek

85
请注意,具有root用户访问权限的用户可以取消设置该标志,然后删除该文件。这不太可能偶然发生,但不能防止故意删除。
授予

6
@Grant,没有如果安全级别设置足够高的。引导过程会在启用网络之前将安全级别设置为2,因此重置标志需要本地计算机访问(但这意味着在此之前引导过程中使用的文件也必须是不变的)。
西蒙·里希特

16
@Grant如果想将其发挥到极致,则无法防止在10 ^ 30年内删除分区或将磁盘放入熔炉或质子衰减...
Hagen von Eitzen 2014年

2
@Itai Ganot man希望我4天前读过它。我在参加考试的过程中遇到了一个问题= /
vfbsilva 2014年

84

将其刻录到CD。将CD放入CD-ROM驱动器中,然后从那里进行访问。


15
开箱即用的+1。而且,afaik在某些情况下也曾使用过它(带有cd的黑盒cdrom驱动器已运到目的地)。无论如何,如果有人能够断开驱动器,则可能不合适。
Alex Mazzariol 2014年

1
吻我爱它!+1
MonkeyZeus 2014年

2
我认为这是对这个问题的正确答案。更改文件属性(chattr -i)不能阻止恶意操作。
布鲁诺·冯·巴黎

7
如今,内置读卡器中的全尺寸SD卡可能是一个更好的解决方案-更低的功耗,在许多情况下可以更快地访问并且在非写操作中更加耐用。
克里斯H

3
@ jpmc26因此是CD-ROM驱动器。那些是只读的。
托尔比约恩Ravn的安德森

29
  1. 创建文件系统映像。
  2. 挂载映像。
  3. 将文件复制到安装的映像。
  4. 卸载映像并将其重新安装为只读。
  5. 现在您无法删除它。

例:

# 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

3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
卡兹·沃尔夫

3
更进一步,您可以使用squashfscramfs压缩或只读的。它需要一个特殊的工具来构建文件系统。
Zan Lynx 2014年

7

Linux具有所谓的bind-mount选项,它是一个非常强大且有用的功能,需要了解

%  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模式下。当然,也可以对目录执行此操作。


6

您还应该创建指向该文件的多个硬链接。这些应该位于普通用户无法访问的各个位置。

这样,即使他们确实设法覆盖了对chattr的保护,数据也将保留,您可以轻松地将其还原到应用程序正在寻找的位置。


11
硬链接不会保护文件的内容。
200_success,2014年

但是,它们将提供附加的保护,以防DELETION(原来的问题)。
烧烤

2
@barbecue如果以应用程序查找文件的名称解除链接文件,则文件的内容以其他名称存在并不重要。对于使用所需名称查找文件的任何内容,该文件仍被删除。
CVn 2014年

5

其他人已经按照您的要求回答了您的问题。正如@Sven在评论中提到的那样,该问题的一般解决方案是:“如何确保我永远不会丢失文件?” 是创建文件的备份。复制文件并将其存储在多个位置。此外,如果文件非常重要,并且您的公司有使用备份服务备份重要数据的策略,则可以考虑将该文件包含在服务中。


2
好吧,当然可以定期备份文件了,我只想要另一层保护用户的权限,这些权限有时会在具有root用户权限的情况下运行。

5

在Linux上,一成不变的标志只支持某些类型的文件系统(最原生的像的ext4xfsbtrfs...)

在不支持文件系统的文件系统上,另一种选择是以只读模式将文件绑定安装在其自身上。这必须分两步完成:

mount --bind file file
mount -o remount,bind,ro file

但是,这必须在每次引导时完成,例如通过/etc/fstab


我希望umount该文件的所有人再次获得写权限
Whoan 2017年

3

在对Kevin的回答的评论中,Jerry提到:

好吧,当然要定期备份文件,我只想再加上一层保护,以防止有时会在具有root用户权限的情况下使用的用户受到保护。–

我将假设您无法更改此做法,因为这是一个非常非常糟糕的主意。

有关使用只读设备的所有建议都存在相同的问题-它使您可以在需要时进行PITA合法更改。对于可锁定的驱动器(例如SD卡),您会遇到这样的问题:在解锁驱动器以进行更改时,您突然变得脆弱。

我所建议的是将另一台计算机设置为NFS服务器,并将具有重要文件的目录共享到用户具有root权限的计算机。将挂载共享为只读,这样您不信任用户的计算机就无法进行任何修改。当您需要合法地进行更改时,可以连接到NFS服务器并在此处进行更改。

我们将其用于我们的Web服务器,这样针对该Web服务器的成功利用将无法插入或更改该服务器随后将回发的任何文件或更改配置。

请注意,可以以与所有与安装点相关的设置相同的方式来绕过此设置:

  • 复制受保护的目录
  • 卸载目录
  • 将副本移到安装位置,或者如果该安装空间不足,则将其符号链接到其中。

为什么定期备份重要文件并努力保护原始文件免遭意外删除是“一个非常糟糕的主意”?在OP的原始问题中,以及从OP对您引用的答案的评论中,很明显,关注的不是恶意活动,而是偶然/不称职的活动。
克雷格

1
@Craig:让很多用户具有root用户是一个坏主意,特别是如果不信任他们不会破坏关键文件的话。
Joe H.

啊...当然是。:-)但这不是OP问题的症结所在。OP断言,应该保护某些具有root用户访问权限的用户,以防止他们意外删除文件。
克雷格

@Craig:这可能不是问题的症结,但它问题的症结(XY问题?)……但我不知道他们以root身份在做什么,所以如果他们可以利用setuid的话和/或受限制的sudo特权。您应该重新阅读该问题,因为杰瑞没有提到他只是在尝试防止意外删除(“我需要确保它不会被删除”),并且他只提供了一个后续步骤,看到(触发了我的回应)。
Joe H.


2

为什么不创建ISO 9660映像,该映像在设计上是只读的?

挂载ISO映像,它看起来像CD-ROM,但是具有硬盘驱动器的性能,并且所挂载映像上的文件与物理CD-ROM上的文件一样安全地被删除。

假设将文件中的不可变位设置为不足够的话,将敏感文件刻录到CD并从CD-ROM运行它的想法很有趣。

从物理CD上运行有潜在的负面问题,包括性能(CD-ROM驱动器比硬盘驱动器或SSD慢得多,而且慢得多)。好心人可能会将CD-ROM取出,并用他们需要访问的其他光盘代替。恶意方很可能只是将光盘取出并放入微波炉(或垃圾桶)中,从而“删除”您的文件。不得不为该文件和其他因素配备专用的硬件CD-ROM驱动器带来的不便。

但是OP明确指出,主要目的是防止意外删除,而不是恶意行为,并且有问题的文件应备份并在发生事故时可恢复,但非常希望文件不要被意外删除。

似乎从已装载的ISO映像运行文件将满足要求。


1
根目录仍然可以通过直接操作图像来删除文件。这只是一个碰巧已挂载的普通文件。
托尔比约恩Ravn的安徒生

@ThorbjørnRavnAndersen怎么回事?ISO 9660通过设计是不可变的。进行此更改的一方必须删除并替换整个ISO文件。不是说他们做不到。但是即使没有,他们也无法在没有大量专业知识的情况下外科手术删除一个文件。从驱动器中删除物理CD-ROM并将其扔进垃圾箱会容易得多。;-)
Craig

无需复杂-只需用零覆盖图像文件即可。
托尔比约恩Ravn的安徒生

@ThorbjørnRavnAndersen我会很容易地承认这一点。需要注意的是,这将需要有意拆卸图像并覆盖它。shred到那时,彻底的调整就可以了。但是,除非您拒绝对计算机的物理访问,将物理CD从驱动器中弹出并扔到垃圾箱中似乎比卸除和覆盖ISO文件要容易得多,尽管两者都很容易。OP表示定期备份重要文件,因此这仅是防止意外损坏而不是恶意破坏的一种额外措施。
克雷格2014年

我已经指出了如何更改ISO9660映像,即使该映像无法更改也是如此。我的观点是,如果一点点都可以写,root可以写它。
托尔比约恩Ravn的安徒生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.