Linux 如何使文件夹/目录对用户不可删除/不可移动但仍可写

Linux 如何使文件夹/目录对用户不可删除/不可移动但仍可写,linux,bash,sh,file-permissions,Linux,Bash,Sh,File Permissions,如果需要在用户的主目录中创建文件夹,允许用户读取/写入/删除文件夹中的文件,但不允许删除文件夹本身(考虑到普通用户而不是sudoer),则需要这样做 在我的例子(即RedHat)中,仅仅将具有根权限的文件放在用户文件夹中是不够的,因为该文件夹是用户所有的。 在我的例子中,如果一个用户拥有(或拥有)一个文件夹的所有权限,他甚至可以删除其中的根文件或空文件夹 我做了很多实验,包括玩chown和权限,比如400000、o+t、1775等。最初我不想使用chattr 与此同时,我找到了一个解决方案,我将

如果需要在用户的主目录中创建文件夹,允许用户读取/写入/删除文件夹中的文件,但不允许删除文件夹本身(考虑到普通用户而不是sudoer),则需要这样做

在我的例子(即RedHat)中,仅仅将具有根权限的文件放在用户文件夹中是不够的,因为该文件夹是用户所有的。
在我的例子中,如果一个用户拥有(或拥有)一个文件夹的所有权限,他甚至可以删除其中的根文件或空文件夹

我做了很多实验,包括玩
chown
和权限,比如400000、o+t、1775等。最初我不想使用
chattr


与此同时,我找到了一个解决方案,我将其作为下面的答案与大家分享;到目前为止,这是一个适合我需要的变体。

这是我自己找到的解决方案。
基本上,它使用了这样一个事实:当根子文件夹不是空的时候,用户就不能再删除它了

在下面的示例中,超级用户(root)每次在用户的主目录中创建(如果尚未存在)具有用户权限的文件夹,然后将其放入具有root权限的文件夹(如果尚未存在)中,并在该根文件夹中放入具有root权限的文件

## prepare directory for the external configuration
EXT_CONFIG_PATH="~user/.EXT_CONFIG"
mkdir -p ${EXT_CONFIG_PATH}
chown user:user ${EXT_CONFIG_PATH}
chmod 555 ${EXT_CONFIG_PATH}
mkdir -p ${EXT_CONFIG_PATH}/.rootguard
chmod o+t ${EXT_CONFIG_PATH}/.rootguard
touch ${EXT_CONFIG_PATH}/.rootguard/.rootguard
chmod 400 ~user/.EXT_CONFIG/.rootguard/.rootguard

为什么把文件夹放在一个文件里而不是一个文件里就可以了?自问自答是可以的,甚至是潜在的感激。但你仍然必须解释你的解决方案,不仅要解释做了什么,还要解释为什么以及它是如何解决问题的。特别是如果它可以被理解为与问题的规定要求相矛盾的话。在我的例子中,仅仅放一个根文件是不够的,因为它是一个用户文件夹。如果我没记错的话,这是Linux的一项政策(虽然不能肯定其他发行版/版本),如果用户拥有(或拥有)文件夹的所有权限,他甚至可以删除其中的根文件或空文件夹。当根目录子文件夹不为空时,他无法再删除它。有趣的背景信息。我建议将其编辑到问题中。在我看来,这个问题变得“有用和研究”,然后(但不是那么多,因为它是…)。也许你甚至可以引用一些关于这件事的话?Yunnosch明白了。谢谢。一个不需要目录的替代方法是将
chattr+i
添加到
.rootguard
-文件中。这将覆盖允许用户从其拥有的目录中删除任何文件的策略。我并行编辑了问题和您的答案,以形成独立的问题/答案对。编辑比我通常做的要广泛一些。如果你认为这超出了你的意图,请告诉我。在这种情况下,请随意回退,我会道歉。@Yunnosch我认为一切都很好,你在澄清这一点上做得很好。谢谢。要删除目录,用户必须具有写入父目录的权限。因此,从有问题的用户处删除该权限,他们将无法删除子目录…@twalberg这就是我的情况:用户必须能够写入目录(就像我在标题中所写的那样)。此外,在我的例子中,它必须是一个具有用户权限的目录。