【问题标题】:How to make a folder/directory undeletable/unremovable for a user but still writable如何使用户的文件夹/目录不可删除/不可删除但仍可写
【发布时间】:2018-01-17 08:36:42
【问题描述】:

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

在我的情况下(即 RedHat),仅将具有 root 权限的文件放在用户的文件夹中是不够的,因为用户拥有该文件夹。
在我的情况下,如果用户拥有(或拥有文件夹的所有权限),即使里面有根文件或空文件夹,他也可以将其删除。

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

同时我找到了一个解决方案,我在下面分享一个答案;到目前为止适合我需求的变体。

【问题讨论】:

  • 我同时编辑了问题和您的答案,以形成单独的问题/答案对。编辑比我通常做的要广泛一些。如果您认为这超出了您的意图,请告诉我。在这种情况下,请随时回滚,我会道歉。
  • @Yunnosch 我认为一切都很好,你在帮助澄清这一点方面做得很好。谢谢。
  • 为了删除一个目录,必须有写入父目录的权限。因此,从相关用户那里删除该权限,他们将无法删除子目录...
  • @twalberg 这就是我的情况:用户必须有能力写入目录(就像我在标题中写的那样)。此外,在我的情况下,它必须是具有用户权限的目录。

标签: linux bash sh file-permissions


【解决方案1】:

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

在下面的示例中,超级用户(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 文件中。这会覆盖允许用户从他拥有的目录中删除任何文件的策略。
猜你喜欢
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 2017-11-26
  • 2017-01-06
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多