在 Unix 中,对组的权限限制比对所有者的权限限制少,会带来安全隐患吗?

在 Unix 中,对组的权限限制比对所有者的权限限制少,会带来安全隐患吗?

我有一台 Ubuntu 服务器,目前使用 Apache Web 服务器、MySQL 和 PHP 等托管 WordPress 网站。此外,我还配置了 VSFTPD 和 SSH 来处理 FTPS(隐式 FTPS)和 SFTP,并且创建了两个帐户foobar我的 Web 服务器在 Unix 用户/组下运行www-data,我可以使用以下命令查看:sudo apachectl -S

User: name="www-data" id=33
Group: name="www-data" id=33

sudo ps -aux | egrep apache2 '(httpd|apache2|apache)'也证实了这一点。

这两个用户账户foobarfoo是sudo组的一部分,并且bar是标准用户。 

遵循 WordPress 强化Changing file permissions指南这里

“通常,所有文件都应归您的 Web 服务器上的用户 (ftp) 帐户所有,并且应可由该帐户写入。在共享主机上,文件永远不应归 Web 服务器进程本身所有(有时是 www、apache 或 nobody 用户)。任何需要 WordPress 写访问权限的文件都应归 WordPress 使用的用户帐户所有或归其组所有(可能与服务器帐户不同)。例如,您可能有一个用户帐户,允许您将文件来回 FTP 传输到您的服务器,但您的服务器本身可能使用单独的用户、单独的用户组(如 dhapache 或 nobody)运行。如果 WordPress 以 FTP 帐户运行,则该帐户需要具有写访问权限,即成为文件的所有者,或属于具有写访问权限的组。在后一种情况下,这意味着权限设置比默认值更宽松(例如,文件夹的权限为 775 而不是 755,文件夹的权限为 664 而不是 644)。”

考虑到这一点,我使用以下命令将其添加foo为 Web 根目录的所有者和www-data组所有者:/var/www/example.com

sudo chown -R foo:www-data /var/www/example.com

然后,我使用以下命令按照 WordPress 权限指南中的详细说明设置文件和目录权限:

# Set permissions for directories
find "/var/www/example.com/" -type d -exec chmod 775 {} \;

# Set permissions for files
find "/var/www/example.com/" -type f -exec chmod 664 {} \;

# Set permission for 'wp-config.php' file
sudo chmod 440 "var/www/example.com/wp-config.php"

# Set all permissions on all 'htaccess' files
sudo chmod 664 "/var/www/example.com/.htaccess" "var/www/example.com/wp-admin/.htaccess"

foo用户通过 SFTP 或 FTPS 访问时/var/www/example.com,他们可以删除文件、创建新文件并按照所有者的预期更改权限。

如果您只需要一个用户能够通过 FTP 编辑文件,那么这样做就没问题。但是,就我而言,我需要启用完全权限,以便bar他们也可以完全编辑文件/目录。根据我对 Unix 权限的理解,多个用户对文件/目录拥有完全权限的方法是将两个用户都添加到一个组,并将组所有者设置为该组。例如:

sudo usermod -a -G www-data foo
sudo usermod -a -G www-data bar

# Re-set permissions on web root directory
find /var/www/example.com/ -type d -exec chmod 775 {} \;
find /var/www/example.com/ -type f -exec chmod 664 {} \;

但是,为了能够授予组中的完全权限foo,他们需要将文件权限更新为barwww-data674 find /var/www/example.com/ -type f -exec chmod 674 {} \;

然而,这违背了 WordPress 为文件和目录定义的建议安全权限。我想了解的内容和我想问的问题是:-

  1. 我可以将所有者设置为www-data并设置foo为群组所有者吗?
  2. 我可以降低新所有者的权限并提高新群主的权限吗?

换句话说,我正在交换所有者和组所有者。本质上,Apache Web 服务器正在运行的进程 ( www-data) 和 Web 根目录的新所有者将成为同一帐户。如果 Web 根目录文件/目录的所有者与运行它的 Web 服务器用户相同,会带来哪些安全隐患?

答案1

听起来你对其中的含义已经有了很好的理解。安全建议的目标是提供最低限度的权限,以便维护你的系统,从而避免数据被不必要地暴露给读取或更新。你提到的建议试图为你提供在大多数情况下都是最佳的配置,但可能并不适用于你的情况。

在这种特定情况下,我建议不要使用组权限来处理文件访问:这也意味着更改umaskvsftpd 的使用(-> 如果其他用户连接到服务器上的其他文件夹可能会产生副作用)以及用户的默认组,如果您必须添加其他用户,从长远来看,处理起来会很麻烦。

您可能想要做的是,在 vsftpd 中设置用户特定的(如果他们是您唯一的 ftp 用户,则为全局)配置,以便在他们访问服务器时将两个用户映射到第三个用户。通过这样做,您可以处理文件夹中的权限,就好像只有一个用户访问它(新用户)。

看看user_config_dirVSFTD 的 MAN 页面设置目录以及guest_username用户映射

相关内容