标题说明了一切。(这是真正合适的少数情况之一。:P)
答案1
Linux 端的一个老技巧可能在这里有用:
mkdir StayingAlive
sudo touch StayingAlive/.CantTouchThis
sudo chattr +i StayingAlive/.CantTouchThis
这里的关键是 上的不可变属性.CantTouchThis
(您可能想要一个更严肃的名称,例如.rootfile
)。此属性可防止文件被删除(甚至修改)——即使 root 也无法在不先删除该属性的情况下删除它。此文件将防止目录被清空,因此防止目录被删除。
过去我这样做时,通常还会更改文件夹的所有权,并通过 setgid 位 (g+s) 授予用户访问权限——尽管我暂时想不通这样做背后的原因
sudo chown root.user StayingAlive
sudo chmod g+sw StayingAlive
答案2
为了删除目录,该目录必须是空的,并且您必须对其父目录具有写权限。
因此,您可以像 STW 建议的那样防止目录变空,或者确保用户对目录的父目录没有写权限,并且不允许删除该目录。
假设您有一个名为 的目录/foo/bar
和一个名为 的文件/foo/bar/file
,则对 具有写入权限的用户/foo/bar
可以删除该文件。但对 具有写入权限/foo/bar
并不意味着有权删除/foo/bar
,删除需要对 具有写入权限/foo
。