在 Ubuntu + Apache2 环境下,“权限”通常涉及 文件权限、目录权限、Apache 运行用户、以及 SELinux/AppArmor 等。下面按常见场景系统说明。
Ubuntu 下 Apache2 默认运行用户是:
www-data
查看:
ps aux | grep apache2
/var/www/
└── html/
└── example.com/
├── index.php
└── uploads/
sudo chown -R www-data:www-data /var/www/html/example.com
sudo chmod -R 755 /var/www/html/example.com
drwxr-xr-x)-rw-r--r--)find /var/www/html/example.com -type d -exec chmod 755 {} \;
find /var/www/html/example.com -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data /var/www/html/example.com/uploads
sudo chmod -R 775 /var/www/html/example.com/uploads
⚠️ 不建议 777(安全风险)
如果你用自己的用户(如 ubuntu)传文件:
sudo usermod -aG www-data ubuntu
然后:
sudo chown -R ubuntu:www-data /var/www/html/example.com
sudo chmod -R 775 /var/www/html/example.com
编辑站点配置:
sudo nano /etc/apache2/sites-available/example.conf
示例:
<Directory /var/www/html/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
启用:
sudo a2ensite example.conf
sudo systemctl reload apache2
确保:
AllowOverride All
否则 .htaccess 权限无效。
Apache 受 AppArmor 限制:
查看:
sudo aa-status
如访问非 /var/www 目录被拒:
sudo nano /etc/apparmor.d/disable/usr.sbin.apache2
sudo systemctl reload apparmor
(生产环境慎用 disable)
Ubuntu 默认没有 SELinux,无需处理。
| 问题 | 原因 |
|---|---|
| 403 Forbidden | 目录无 Require all granted |
| 500 错误 | .htaccess 语法或权限 |
| 无法写入 | 属主不是 www-data |
| 文件无法删除 | 用户不在 www-data 组 |
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 {} \;
如果你有 具体场景(如 Laravel / WordPress / 上传报错 / 403),我可以直接给你针对性命令。