如何在Debian Nginx服务器上为各WordPress站点配置独立Linux用户
为每个WordPress站点配置独立Linux用户(Nginx+PHP-FPM)
1. 创建站点专属Linux用户与组
为每个站点创建独立的系统用户,禁止交互式登录(避免安全风险),并将用户家目录设置为站点根目录:
# 以站点site1为例,创建用户site1_user useradd -m -d /var/www/site1 -s /usr/sbin/nologin site1_user
-m:自动创建家目录(即站点根目录)-d:指定家目录路径-s:设置登录shell为/usr/sbin/nologin,禁止用户登录服务器
2. 调整站点文件权限
将站点目录的所有者和组改为对应用户,同时设置严格的权限,确保其他站点用户无法访问:
# 递归设置站点目录所有者 chown -R site1_user:site1_user /var/www/site1 # 设置文件权限为640(所有者读写,组只读,其他无权限) find /var/www/site1 -type f -exec chmod 640 {} \; # 设置目录权限为750(所有者读写执行,组读执行,其他无权限) find /var/www/site1 -type d -exec chmod 750 {} \;
3. 配置独立PHP-FPM进程池
Nginx通过PHP-FPM处理PHP请求,需为每个站点创建单独的PHP-FPM池,让PHP以站点专属用户运行:
- 进入PHP-FPM池配置目录(根据你的PHP版本调整路径,比如PHP 8.2):
cd /etc/php/8.2/fpm/pool.d/
- 创建站点专属配置文件
site1.conf:
[site1] user = site1_user group = site1_user ; 使用Unix套接字通信(比TCP更高效) listen = /run/php/php8.2-fpm-site1.sock ; 设置套接字权限,让Nginx(www-data用户)能访问 listen.owner = www-data listen.group = www-data listen.mode = 0660 ; 进程管理配置(根据服务器资源调整) pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 ; 其他通用配置(可参考默认www.conf) php_admin_value[disable_functions] = exec,passthru,shell_exec,system php_admin_flag[allow_url_fopen] = on php_value[session.save_path] = /var/lib/php/sessions/site1 php_value[upload_tmp_dir] = /tmp/php-uploads/site1
- 手动创建session和上传临时目录,并设置对应权限:
mkdir -p /var/lib/php/sessions/site1 /tmp/php-uploads/site1 chown -R site1_user:site1_user /var/lib/php/sessions/site1 /tmp/php-uploads/site1
- 重启PHP-FPM服务使配置生效:
systemctl restart php8.2-fpm
4. 修改Nginx站点配置
更新每个站点的Nginx配置,使其指向对应的PHP-FPM套接字:
server { listen 80; server_name site1.example.com; root /var/www/site1; index index.php index.html; # WordPress伪静态规则 location / { try_files $uri $uri/ /index.php?$args; } # PHP请求处理,指向站点专属套接字 location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm-site1.sock; # 确保PHP-FPM能获取正确的文件路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # 禁止访问敏感文件 location ~ /\.ht { deny all; } }
5. 验证配置并重启服务
- 检查Nginx配置语法:
nginx -t
- 若配置无错误,重启Nginx:
systemctl restart nginx
- 验证PHP-FPM进程是否以站点用户运行:
ps aux | grep php-fpm | grep site1_user
注意事项
- 每个站点重复上述步骤,替换对应的用户名、目录和配置文件名
- 根据服务器CPU/内存资源,调整PHP-FPM进程池的
pm.max_children等参数,避免资源耗尽 - 站点安装插件/主题时无需额外调整权限,PHP已以站点用户运行,拥有目录读写权限
- 定期检查权限配置,防止出现跨站点权限泄漏的问题
内容的提问来源于stack exchange,提问作者Gudari
相关产品推荐
相关产品推荐

