使目录内容可修改,包括创建新文件,但防止目录本身被删除

使目录内容可修改,包括创建新文件,但防止目录本身被删除

我的任务是为我们的网络项目托管设置一个新服务器。我是一名开发人员,所以我的系统管理水平相当低。

我提出了一个稍微简单的解决方案,每个项目都有自己的 UNIX 用户,并且 webroot 将位于用户的$HOME.

结构很简单:

  • /home/<user>/web
    • /home/<user>/web/log- 日志文件。
    • /home/<user>/web/www— 网络文档根目录。
    • /home/<user>/web/www/public——只是一种实践,提出了各种 Web 应用程序框架来将文档根与公共根分开。

现在,我想以这样的方式设置权限:

  • /home/<user>/web— 既不能删除,也不能添加新文件/目录。chown root:root在这里有帮助。
    • /home/<user>/web/log— 对用户只读,我也可以通过简单的chown root:root.
    • /home/<user>/web/www— 这不应该被删除/编辑,但内容可以自由修改(除了public)。创建、删除、编辑文件和目录。
    • /home/<user>/web/www/public— 不应该删除/编辑,但内容可以自由修改。

对于其他安全和隔离相关的功能,我选择使用

到目前为止我已经尝试过chattr +a- 它允许我添加新内容,编辑内容,但我无法删除它们。

在写问题时,类似的问题部分显示防止子目录被删除/强制执行目录结构,它有效,我现在希望使用它。

但是还有其他更透明的方法来设置这些目录吗?

答案1

删除目录需要其父目录的写权限。目录的权限和所有权是无关的。所以如果要防止删除/home/theuser/web,保证用户没有写权限是必要且充分的/home/theuser

请注意,当您写“ahelpshere chown root:root”时,那就是在父目录上为了防止其被删除,在目录本身上以防止添加或删除文件(但不修改现有文件)。

另请注意,要/home/theuser/web/log以有用的方式使其成为只读,仅确保用户没有写入权限(并且不拥有该目录)是不够的。如果允许用户写入/home/theuser/web(或/home/theuser/home) /,那么他们可以重命名/home/theuser/web/log(或/home/theuser/web等)并创建一个log他们拥有的新目录。

对于/home/theuser/web/www/home/theuser/web/www/public,您可以将wwwwww/public设为 root 拥有,但授予用户写入权限,并在 上设置粘滞位www。当目录具有粘滞位时,需要删除其中的文件(包括直接子目录 - 目录是一种文件类型):用户只能删除他们拥有的文件。这样,public只能由其所有者(root)删除,但用户可以自由操作其他任何内容。

chown root:root web/www web/www/public
chmod u=rwx,go= web/www web/www/public
chmod +t web/www
setfacl -m u:theuser:rwx web/www web/www/public

请注意,它可以是任何非用户所有权,不一定是 root。

1在合理的假设下,即所有必要的遍历权限、没有相关的 SELinux 规则等。

相关内容