我的 Ubuntu 服务器上有两个用户帐户,一个是 sudo 组的一部分,另一个是标准用户。出于演示目的,我将使用以下用户名:
- admin_user(sudo组权限)
- standard_user(无管理员权限)
我正在设置我的服务器来托管 WordPress,该服务器位于/var/www/example.com
.我还设置了 VSFTPD 和 SFTP 以允许 FTP 访问服务器,并且每个用户当前都已 chroot 到其主目录。遵循本指南后这里,WordPress 建议使用一个单独的帐户用于 FTP 访问,并使用另一个帐户来运行服务器进程本身(NGINX 或 Apache)。
“通常,所有文件都应该由您的 Web 服务器上的用户 (ftp) 帐户拥有,并且应该可由该帐户写入。在共享主机上,文件永远不应该由 Web 服务器进程本身拥有(有时这是 www 或 apache)或无人用户)。任何需要 WordPress 写入权限的文件都应由 WordPress 使用的用户帐户拥有或属于组拥有(可能与服务器帐户不同)。您可以通过 FTP 文件来回传输到您的服务器,但您的服务器本身可能会使用单独的用户(例如 dhapache 或无人)在单独的用户组中运行。如果 WordPress 作为 FTP 帐户运行,则该帐户需要具有写入权限,即。 、是文件的所有者,或者属于具有写入访问权限的组。在后一种情况下,这意味着权限设置比默认设置更宽松(例如,文件夹为 775 而不是 755,文件夹为 664 而不是 644)。 ”。
通过运行以下命令,sudo apachectl -S
我可以看到 Apache2 正在运行
User: name="www-data" id=33
Group: name="www-data" id=33
sudo ps -aux | egrep apache2 '(httpd|apache2|apache)'
也证实了这一点。
考虑到这一点,我运行了以下命令来更改 Web 根目录的所有者和组
sudo chown -R admin_user:www-data /var/www/example.com
在 WordPress 的强化指南中发现“更改文件权限”这里我已经运行了以下命令
find /var/www/example.com/ -type d -exec chmod 755 {} \;
find /var/www/example.com/ -type f -exec chmod 644 {} \;
通过 FTP/SFTP 以管理员身份登录时,我可以删除、创建新文件和更改权限。文件/目录的所有者是唯一可以更改权限的人;这就是 Unix 权限的工作原理。现在,在正常情况下,只有一个用户通过 FTP 管理服务器,这工作得非常好。但是,我希望标准用户也能够删除和写入 Web 根目录中的文件/目录。假设将 standard_user 添加到 www-data 组(apache2 进程在其下运行的同一组)并在该组上授予更开放的权限集是否安全且足够?
sudo usermod -a -G www-data standard_user
find /var/www/example.com/ -type d -exec chmod 775 {} \;
find /var/www/example.com/ -type f -exec chmod 664 {} \;
然后我设置特定文件的权限
sudo chmod 440 /var/www/example.com/wp-config.php
sudo chmod 664 /var/www/example.com/.htaccess
作为一个附带问题,将 Web 根目录的所有者设置为root
用户帐户,并将附加admin_user
帐户添加到www-data
组旁边是否standard_user
被认为是安全的?
sudo usermod -a -G www-data admin_user
sudo chown -R root:www-data /var/www/example.com
更新1
根据上面设置的权限,我尝试通过网络浏览器上传 WordPress 主题,但 WordPress 立即要求 FTP 访问,这表明存在权限问题。我在互联网上做了一些阅读,似乎有些指南告诉您将所有者和组设置为www-data
并插入define('FS_METHOD', 'direct');
到wp-config.php
文件中,如下所示这例如指南。然而,这被认为是安全的吗?