在 Debian 上设置 PHP 权限,通常涉及文件/目录权限、PHP 运行用户、Web 服务器(Apache/Nginx)权限以及安全策略。下面按常见场景系统说明。
PHP 以 www-data 用户运行:
ps aux | grep apache
PHP-FPM 进程用户通常是 www-data:
ps aux | grep php-fpm
查看池配置:
/etc/php/*/fpm/pool.d/www.conf
user = www-data
group = www-data
假设网站目录为:
/var/www/html
# 目录 755
find /var/www/html -type d -exec chmod 755 {} \;
# 文件 644
find /var/www/html -type f -exec chmod 644 {} \;
chown -R www-data:www-data /var/www/html
或(开发环境):
chown -R youruser:www-data /var/www/html
chmod -R 775 /var/www/html
如:
/var/www/html/uploads
/var/www/html/storage
/var/www/html/cache
chown -R www-data:www-data /var/www/html/uploads
chmod -R 775 /var/www/html/uploads
⚠️ 不要对整个项目 777
ls -l /var/www/html
Debian 一般不用 SELinux,用 AppArmor。
在 php.ini:
open_basedir = /var/www/html
/etc/php/*/fpm/php.ini 或 cli/php.ini:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
server {
root /var/www/html;
index index.php;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
确保 socket 权限:
ls -l /run/php/php8.2-fpm.sock
应为:
srw-rw---- www-data www-data
namei -l /var/www/html/index.php
sudo -u www-data touch /var/www/html/test
| 问题 | 原因 |
|---|---|
| 500 错误 | PHP 无读权限 |
| 上传失败 | 目录不可写 |
| 文件生成失败 | 用户不对 |
| 777 被黑 | 权限过大 |
如果你能告诉我:
我可以给你一套精确命令。