sudo apt update && sudo apt upgrade
(Ubuntu/Debian) 或 sudo yum update
(CentOS/RHEL)bash
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
bash
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 22 # 仅限管理IP
sudo ufw enable
bash
sudo chown -R www-data:www-data /path/to/laravel
sudo find /path/to/laravel -type f -exec chmod 644 {} \;
sudo find /path/to/laravel -type d -exec chmod 755 {} \;
sudo chmod -R 775 storage/
sudo chmod -R 775 bootstrap/cache/
生产环境配置:
cp .env.example .env
php artisan key:generate
确保 .env
中 APP_ENV=production
和 APP_DEBUG=false
敏感信息保护:
.env
文件提交到版本控制php artisan config:cache
后确保 .env
权限为 600App\Providers\AppServiceProvider.php
的 boot
方法中添加:
php
if(config('app.env') === 'production') {
\URL::forceScheme('https');
}
php
@csrf
sql
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
server {
# 禁用不必要的 HTTP 方法
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$ ) {
return 444;
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
}
# 禁止访问敏感文件
location ~* ^/(\.env|composer\.lock|composer\.json|package\.json|webpack\.mix\.js|phpunit\.xml|readme\.md|LICENSE|\.gitignore)$ {
deny all;
}
}
; 在 php.ini 中设置
expose_php = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
cgi.fix_pathinfo=0
bash
sudo nano /etc/logrotate.d/laravel
内容:
/path/to/laravel/storage/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 www-data www-data
sharedscripts
postrotate
kill -USR1 `cat /run/php/php7.4-fpm.pid 2>/dev/null` 2>/dev/null || true
endscript
}
bash
composer require beyondcode/laravel-self-diagnosis --dev
bash
sudo apt install lynis
sudo lynis audit system
# 每天备份数据库
mysqldump -u laravel_user -p laravel_db > /backups/laravel_db_$(date +\%Y\%m\%d).sql
# 使用 tar 打包项目
tar -czvf /backups/laravel_app_$(date +\%Y\%m\%d).tar.gz /path/to/laravel
通过以上多层次的防护措施,可以显著提高 Laravel 应用在 Linux 服务器上的安全性。记得定期审查和更新安全配置,以应对新出现的安全威胁。