温馨提示×

ubuntu php如何设置权限

小樊
44
2026-10-01 11:09:15
栏目: 编程语言

在 Ubuntu 上设置 PHP 相关权限,通常涉及到文件/目录权限、**PHP 运行用户(www-data)以及Web 服务器(Apache/Nginx)**的协作。下面按常见场景说明。


一、确认 PHP 运行用户

Ubuntu 下 Web 服务一般用 www-data 用户:

ps aux | grep apache
# 或
ps aux | grep nginx

通常你会看到:

www-data

二、设置网站目录权限(最常见)

1️⃣ 设置目录所有者

假设网站目录是 /var/www/html:

sudo chown -R www-data:www-data /var/www/html

2️⃣ 设置目录和文件权限

# 目录 755
sudo find /var/www/html -type d -exec chmod 755 {} \;

# 文件 644
sudo find /var/www/html -type f -exec chmod 644 {} \;

三、可写目录(上传、缓存、日志)

例如:

/var/www/html/storage
/var/www/html/uploads
sudo chown -R www-data:www-data /var/www/html/storage
sudo chmod -R 775 /var/www/html/storage

⚠️ 不建议直接 777,有安全风险。


四、当前用户也要能修改文件(推荐做法)

如果你用自己的用户开发:

sudo chown -R youruser:www-data /var/www/html
sudo chmod -R 775 /var/www/html

并把自己加入 www-data 组:

sudo usermod -aG www-data youruser

退出重新登录后生效。


五、PHP 写文件没权限的常见原因

  1. 目录不属于 www-data
  2. SELinux / AppArmor 限制(Ubuntu 默认是 AppArmor)
  3. PHP 运行在 CLI 和 FPM 不同用户

查看 PHP-FPM 用户:

sudo nano /etc/php/*/fpm/pool.d/www.conf

确认:

user = www-data
group = www-data

修改后重启:

sudo systemctl restart php8.1-fpm

六、Apache / Nginx 权限示例

Apache

sudo systemctl restart apache2

Nginx

sudo systemctl restart nginx

七、快速检查脚本是否可写

<?php
var_dump(is_writable('/var/www/html/storage'));

八、安全建议 ✅

  • 不要用 777
  • 只给必要目录写权限
  • 生产环境文件用 644,目录 755
  • 上传目录禁止执行 PHP(Nginx/Apache 配置)

如果你能告诉我:

  • 用的是 Apache 还是 Nginx
  • PHP 版本
  • 具体报错信息(如 Permission denied)

我可以给你更精确的命令。

0 踩