/var/www权限管理

/var/www权限管理

我有一台服务器,上面有几个用户,我想允许其中一些用户在上面存储网页。因此,我为他们创建了 /var/www 子目录,并相应地配置了我的网络服务器。

但是,我不希望他们能够查看 /var/www 中除他们自己的子目录之外的任何内容。我该怎么做?如果我将顶级目录的权限设置为 user:www-data 并将访问权限设置为 760,我认为这是可能的。但我如何确保在其目录中创建的每个文件或目录都使用相同的 user:group 属性?

另外,我希望能够使用 git 来部署网页内容。我不想知道任何有关如何执行此操作的技术细节,而是想知道如何重新组织权限。我使用 gitolite,每个存储库都存储在 /var/lib/gitolite/repositories 下(文件的所有者是 git 用户)。允许 git 用户在使用正确的用户:组信息的同时写入其中一个网页目录的最佳方法是什么?这可能吗?您如何管理您的 /var/www 访问权限?提供商如何做到这一点?

答案1

首先,请注意,您的 760 将拒绝 www-data 组“进入”该目录的权限,因此它无法从中提供文件。

目录上的 +s 位强制文件和子目录使用与目录本身相同的 uid/gid 创建(子目录也将是 +s),因此如果你

chown user:www-data /var/www/userdir
chmod 6770 /var/www/userdir

在此之后,在该文件夹中创建的任何文件和文件夹都将是 user:www-data。请注意,您只需要在目录上设置它,它不会“修复”已经存在的文件和目录。

如果你不需要网络服务器的目录列表或内容协商功能,你可以省略组 r 位在文件夹上(6730)。这将使编写由 Web 服务器运行并查看其他用户目录的脚本变得有些困难(他们必须知道他们想要读取的文件的名称)。您还可以通过使用某种形式的 suexec 来确保用户目录中的脚本不会在 www-data 组中运行,从而缓解这种情况。

答案2

看一下 Apache2 模型,mod_userdir用于用户 Web 目录的标准方法。

答案3

关于 git 访问......

您允许 apache 用户对相应的 git 存储库具有只读访问权限。然后您定期运行git pull ...(例如,通过 cron)来更新 Web 服务器。这意味着您完全不必担心文件系统上的权限——所有文件都归 Apache 用户所有;没有其他人具有写访问权限。

这一点很重要:git 用户没有对 Apache 目录的写权限。apache 用户正在运行操作git pull并通过 ssh 连接到您的 git 服务器(即使它恰好在同一台主机上运行)。

如果您希望自动进行更新,而不是通过 cron 轮询,您可以使用一个触发的 CGI 脚本git pull,然后在您的存储库post-update挂钩中放入类似以下内容:

curl http://www.example.com/trigger-post-update-script

相关内容