Laravel项目需确保Web服务器用户(Debian默认为www-data)对项目文件具有访问权限。使用以下命令递归修改项目根目录所有者:
sudo chown -R www-data:www-data /path/to/your/laravel/project
注意:仅修改项目目录所有者,避免将系统关键目录(如/root)的所有者更改为www-data。
app、config、routes等)需设置为755(所有者可读/写/执行,组及其他用户可读/执行),确保Web服务器能访问目录结构:sudo find /path/to/your/laravel/project -type d -exec chmod 755 {} \;
storage(日志、缓存、会话等动态数据存储)、bootstrap/cache(框架缓存文件)需设置为775(允许www-data组写入),确保Laravel能正常写入动态内容:sudo chmod -R 775 /path/to/your/laravel/project/storage
sudo chmod -R 775 /path/to/your/laravel/project/bootstrap/cache
警告:避免将目录权限设置为777(完全开放),否则可能导致敏感数据泄露或恶意文件上传。
644(所有者可读/写,组及其他用户只读),防止未经授权的修改:sudo find /path/to/your/laravel/project -type f -exec chmod 644 {} \;
.env(环境配置,包含数据库密码、API密钥等)需设置为600(仅所有者可读/写),避免敏感信息泄露:sudo chmod 600 /path/to/your/laravel/project/.env
.htaccess(URL重写规则)可读,设置为644:sudo chmod 644 /path/to/your/laravel/project/.htaccess
若Debian系统启用了SELinux(默认未启用,可通过sestatus命令检查),需调整Laravel项目的安全上下文,允许Web服务器访问:
httpd_sys_content_t(HTTP服务器可读取的内容):sudo chcon -R -t httpd_sys_content_t /path/to/your/laravel/project
storage和bootstrap/cache需设置为httpd_sys_rw_content_t(HTTP服务器可读/写的内容):sudo chcon -R -t httpd_sys_rw_content_t /path/to/your/laravel/project/storage
sudo chcon -R -t httpd_sys_rw_content_t /path/to/your/laravel/project/bootstrap/cache
注意:若不想使用SELinux,可临时禁用(sudo setenforce 0),但生产环境建议保留并正确配置。
确保Web服务器(Nginx/Apache)配置正确,指向Laravel项目的public目录(而非项目根目录),并允许URL重写:
server {
listen 80;
server_name yourdomain.com;
root /path/to/your/laravel/project/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 根据PHP版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all; # 禁止访问隐藏文件(如.git)
}
}
<VirtualHost *:80>
ServerName yourdomain.com;
DocumentRoot /path/to/your/laravel/project/public;
<Directory /path/to/your/laravel/project/public>
AllowOverride All;
Require all granted;
</Directory>
</VirtualHost>
修改配置后,重启Web服务器使更改生效:
sudo systemctl restart nginx # 或 apache2
若使用PHP-FPM(Debian默认的PHP进程管理器),需确保www.conf(通常位于/etc/php/8.1/fpm/pool.d/www.conf)中的用户/组设置为www-data,与Web服务器用户一致:
[www]
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
修改后重启PHP-FPM:
sudo systemctl restart php8.1-fpm # 根据PHP版本调整
权限设置需遵循最小权限原则:
root(除非必要);777(完全开放);.env)设置为可写(664及以上)。运行Laravel Artisan命令(如php artisan key:generate、php artisan migrate)时,需指定www-data用户(确保命令以Web服务器身份执行),避免权限冲突:
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan migrate