在 Ubuntu 上,使用 PHP-FPM 实现权限控制通常涉及以下几个方面:
配置 PHP-FPM 用户和组:
确保 PHP-FPM 以特定的用户和组运行。这可以在 /etc/php/版本号/fpm/pool.d/www.conf
文件中设置。
user = www-data
group = www-data
设置文件和目录权限: 确保你的 web 根目录及其内容的所有者和组与 PHP-FPM 运行的用户和组一致。
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
配置 Nginx 或 Apache: 如果你使用 Nginx 或 Apache 作为反向代理来处理 PHP 请求,确保它们的配置文件中正确设置了 PHP-FPM 的 socket 或端口。
Nginx:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据你的 PHP 版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Apache:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://unix:/run/php/php7.4-fpm.sock" # 根据你的 PHP 版本调整
</FilesMatch>
SELinux 或 AppArmor: 如果你的系统启用了 SELinux 或 AppArmor,确保它们不会阻止 PHP-FPM 访问必要的文件和目录。
SELinux:
sudo setenforce 0 # 临时禁用 SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久禁用 SELinux
AppArmor:
sudo aa-disable /etc/apparmor.d/usr.sbin.php-fpm7.4 # 根据你的 PHP 版本调整
防火墙设置: 确保防火墙允许 HTTP 和 HTTPS 流量。
sudo ufw allow 'Nginx Full'
日志文件权限: 确保 PHP-FPM 和 web 服务器的日志文件权限设置正确,以便它们可以被写入。
sudo chown www-data:www-data /var/log/php7.4-fpm.log # 根据你的 PHP 版本调整
sudo chmod 664 /var/log/php7.4-fpm.log # 根据你的 PHP 版本调整
通过以上步骤,你可以在 Ubuntu 上使用 PHP-FPM 实现基本的权限控制。根据具体需求,你可能还需要进行更详细的配置和调整。