管理网络服务器的最佳用户是谁?

管理网络服务器的最佳用户是谁?

在 Apache Web 服务器中,我有一个用户www-data,并且 中的所有文件/var/www都归 拥有www-data。这不是为了安全吗?有时我需要通过 FTP 将文件上传到/var/www/*,但我自己的用户没有写入权限。

假设我使用 WordPress,它建议644对文件和755文件夹授予权限。安全地执行此操作的最佳方法是什么?我仍然需要能够通过 FTP 上传文件。

答案1

虽然处理 /var/www 中 Apache 2 用户 www-data 权限的最佳方法是什么?很好地讨论了权限问题,它已有近 9 年历史,并且不符合当前的最佳做法。我来回答这个问题:安全地执行此操作的最佳方法是什么?

作为讨论在元上,移动和这个答案的改进版本是这里

  • 每个站点都有单独的用户即不要使用 为所有网站提供服务www-data。这很重要,因为使用 WordPress(或任何其他 CMS)时,您的 Apache 不会提供静态内容文件,而是运行 PHP。如果您在单个网站上遇到安全问题,它可能会蔓延到以同一用户身份运行的每个网站。

  • 通过上传文件FTP 不安全因为它会以纯文本形式发送密码和内容。例如,您托管的 WordPress 的数据库登录信息位于 中wp-config.php。您应该使用SSH 文件传输协议(SFTP)即可。

    这样,您还可以将站点管理员的公钥添加到~/.ssh/uthorized_keys,这样他们就无需知道运行站点的用户的密码。(请参阅如何在 Ubuntu 16.04 上设置 SSH 密钥)。个人SSH公钥可以在多个站点上使用,方便快捷地访问,减轻了拥有多个账户的额外负担。

  • 使用 PHP-FPM。这是当前以用户身份运行 PHP 的方法。为每个用户创建一个新池,即每个站点一个池。这对于安全性和性能来说都是最好的,因为您还可以指定单个站点可以消耗多少资源。

    例如参见 NeverEndingSecurity 的在 Linux 上使用单独的用户/uid 和组运行 php-fpm有类似 HowtoForge 的教程在 Ubuntu 16.04 上将 PHP-FPM 与 Apache 结合使用不使用 PHP-FPM 通过用户分离来提高安全性,指导在整个服务器上使用单个 FPM 套接字。

答案2

汤姆值得获得一枚奖章这个答案在 ServerFault 上。

按照他解释的方式设置组 ID 使其起作用!

  • 创建一个新组(www-pub)并将用户添加到该组

    groupadd www-pub

    usermod -a -G www-pub usera ## 必须使用 -a 来附加到现有组

    usermod -a -G www-pub userb

    groups usera ## 显示用户群组

  • 将 /var/www 下所有内容的所有权更改为 root:www-pub

    chown -R root:www-pub /var/www ## -R 表示递归

  • 将所有文件夹的权限改为2775

    chmod 2775 /var/www ## 2=设置组 ID,7=rwx 表示所有者(root),7=rwx 表示组(www-pub),5=rx 表示全世界(包括 apache www-data 用户)

    设置组 ID ([SETGID][2]) 位 (2) 导致组 (www-pub) 被复制到该文件夹​​中创建的所有新文件/文件夹。其他选项包括 SETUID (4)(用于复制用户 ID)和 STICKY (1)(我认为它只允许所有者删除文件)。

    有一个-R递归选项,但它不会区分文件和文件夹,因此您必须[使用 find][3],如下所示:

    find /var/www -type d -exec chmod 2775 {} +

  • 将所有文件改为0664

    find /var/www -type f -exec chmod 0664 {} +

  • 将用户的 umask 更改为 0002

    umask 控制默认的文件创建权限,0002 表示文件有 664 而目录有 775。设置此项(在我的情况下是通过编辑umask底部的行/etc/profile)意味着一个用户创建的文件将可由 www 组中的其他用户写入,而无需chmod他们。

相关内容