我在 LEMP VPS 上进行了以下设置;
cd /home/$USER/public/myDomain.com # change directory to myDomain.com
chown -R nginx:nginx . # change file ownership
find . -type d -exec chmod 750 {} \; # change permissions for directories
find . -type f -exec chmod 640 {} \; # change permissions for files
chmod 400 wp-config.php # change permission for wp-config
问题是,如果不以 root 身份登录,我无法进入“myDomain.com”文件夹。此外,我无法以 身份运行wp-cli
,$USER
我必须按如下方式运行;
sudo -u nginx wp <wp-command> # running wp-cli as user `nginx`
因此,正如标题所说,LEMP VPS 中文件所有权和权限的安全设置是什么。
答案1
这已完全涵盖在NGINX 和 PHP-FPM。我的权限应该是什么?。
本质上:
- 出于安全目的,始终有一个特定于站点的用户,并且为了方便,该用户以您的域名命名,例如
example.com
,创建一个example
用户。 - 将 NGINX 设置为站点特定用户组的成员:
usermod -a -G example nginx
- 现在,您可以根据需要保护一些东西,方法是将 chmod 赋予 PHP 需要读取/执行文件的用户位,并删除 NGINX 不需要访问的组 chmod 位
按照建议的设置,chmod 400 将导致wp-config.php
只有站点用户才能对配置进行只读访问(并且 NGINX 将无法为其提供服务,这是好事)。
关于在哪里文件应该存储
假设有:nick
(sudo 用户)和example
用户(特定于站点)...:
网站文件应该被移动到一个与用户无关的位置(例如/var/www/example.com
)。或者(稍微糟糕一点)放在网站用户的主目录下,例如/home/example/example.com
。
如果你打算使用单个 SSH 用户进行连接,你可以随意更改为特定用户。例如,如果你希望始终连接与nick
,但有时与一起工作example.com
,您将通过更改为网站用户sudo -iu example
。
将网站文件存储在具有 sudo 权限的用户的主目录中听起来并不安全,并且是最不可取的:
- 如果网站文件归用户所有
nick
(而你根本没有example
用户),那么一旦网站被黑客入侵,他们就可以获得整个服务器的管理访问权限 - 如果网站文件归 所有
example
,那么唯一可行的方法就是将限制/home/nick
从 0700 降低到 0750(至少)。
FHS 授权的文件托管位置实际上是/srv/
这是有争议的,但无论如何比 homedirs 要好。