Laravel Çok Geliştiricili Üretim Sunucusu İçin Dosya İzinlerinin Güvenli Hale Getirilmesi
Birden fazla geliştirici aynı Laravel projesi üzerinde bir üretim sunucusunda çalıştığında, yanlış dosya izinleri birçok soruna yol açabilir:
- Git izin hataları
- Laravel 419 Sayfa Süresi Dolmuş hataları
- Depolama yazma hataları
- Önbellek izin sorunları
- Aşırı izinler nedeniyle güvenlik riskleri
Bu kılavuz, bir Bash komut dosyası kullanarak güvenli ve üretim hazır Laravel izinleri yapılandırması göstermektedir.
Proje Yapısı
Örnek Laravel proje yolu:
/var/www/html/laravel_application
Geliştiriciler:
tanjin
rasel
Geliştirici grubu:
webdev
Web sunucusu çalışma kullanıcısı:
www-data
İzin Stratejisi
Aşağıdaki güvenlik kurallarını izleyeceğiz:
| Bileşen | Sahibi | İzin |
|---|---|---|
| Proje dizini | tanjin:webdev | 2775 |
| Uygulama dosyaları | tanjin:webdev | 664 |
| Dizinler | tanjin:webdev | 2775 |
| storage | www-data:webdev | 775 |
| bootstrap/cache | www-data:webdev | 775 |
| .env | tanjin:webdev | 640 |
| public | tanjin:webdev | 755 |
Bu yapılandırma, aşağıdakileri sağlıyor:
- Geliştiricilerin proje dosyalarını değiştirebilmesi
- Laravel çalışma zamanının depolama ve önbelleğe yazabilmesi
- Duyarlı ortam değişkenlerinin korunması
Neden 2775 İzinlerini Kullanmalıyız?
2775 İzinlerini Kullanmalıyız?2775
Açıklama:
| Değer | Anlamı |
|---|---|
| 2 | setgid (yeni dosyalar grubu devralır) |
| 7 | sahip rwx |
| 7 | grup rwx |
| 5 | diğerleri r-x |
Sonuç:
drwxrwsr-x
Bu, tüm yeni dosyaların webdev grubunu devralmasını sağlar, güvenli çok geliştiricili işbirliği mümkün kılar.
Laravel İzinlerini Güçlendirme Scripti
Aşağıda, Laravel izinlerini güvenli bir şekilde yapılandırmak için eksiksiz bir Bash script bulunmaktadır.
#!/bin/bash
PROJECT=/var/www/html/laravel_application
MAINUSER=tanjin
GROUP=webdev
OTHERSUSER="rasel"
# grup oluştur, yoksa
sudo groupadd -f $GROUP
# diğer geliştiricileri gruba ekle
for USER in $OTHERSUSER
do
sudo usermod -aG $GROUP $USER
done
# proje sahipliğini ayarla
sudo chown -R $MAINUSER:$GROUP $PROJECT
# dizin izinleri
sudo find $PROJECT -type d -exec chmod 2775 {} \;
# dosya izinleri
sudo find $PROJECT -type f -exec chmod 664 {} \;
# laravel yazılabilir dizinler
sudo chown -R www-data:$GROUP $PROJECT/storage
sudo chown -R www-data:$GROUP $PROJECT/bootstrap/cache
sudo chmod -R 775 $PROJECT/storage
sudo chmod -R 775 $PROJECT/bootstrap/cache
# env dosyasını koru
sudo chown $MAINUSER:$GROUP $PROJECT/.env
sudo chmod 640 $PROJECT/.env
# public dizinini güvenli hale getir
sudo chmod -R 755 $PROJECT/public
echo "Laravel izin güçlendirme tamamlandı."
Scripti Kullanma
Script dosyasını oluşturun:
nano laravel_permission_fix.sh
Scripti yapıştırın ve kaydedin.
Çalıştırılabilir hale getirin:
chmod +x laravel_permission_fix.sh
Çalıştırın:
./laravel_permission_fix.sh
Önemli Git Kuralı
Asla Git komutlarını sudo ile çalıştırmayın.
Yanlış:
sudo git pull
Doğru:
git pull
Git’i sudo ile çalıştırmak depo sahipliği sorunlarına yol açabilir.
Laravel Yazılabilir Dizinler
Laravel, yazma iznine ihtiyaç duyar:
storage
bootstrap/cache
Uygun izinler olmadan, aşağıdaki hatalarla karşılaşabilirsiniz:
- 419 Sayfa Süresi Dolmuş hataları
- Önbellek yazma hataları
- Oturum depolama hataları
Script, bu dizinleri www-data çalışma zamanı erişimi için yapılandırır.
Güvenlik Notları
- Asla
.envdosyasını git’e commit etmeyin - Her zaman
.envdosyasını kısıtlanmış izinlerle koruyun - Geliştirici erişimini grup tabanlı olarak kullanın, tam sahiplik vermekten kaçının
- Herhangi bir Laravel dizininde
777izinlerinden kaçının
Son Önerilen Yapı
/var/www/html/laravel_application
│
├── app
├── bootstrap
│ └── cache (www-data:webdev)
│
├── config
├── database
├── public (755)
│
├── resources
├── routes
├── storage (www-data:webdev)
│
├── vendor
├── artisan
├── composer.json
└── .env (640)
Sonuç
Sonuç
Scripti çalıştırdıktan sonra:
- Birden fazla geliştirici projede güvenli bir şekilde çalışabilir
- Laravel çalışma zamanı depolama ve önbelleğe yazabilir
- Duyarlı yapılandırma dosyaları korunur
- Git izin hataları önlenir
Sonuç
Sonuç
Doğru Laravel dosya izinleri, üretim ortamlarında hem güvenlik hem de kararlılık için kritiktir.
Uygun dizin sahipliği ile grup tabanlı izin modeli kullanmak, aşağıdakileri garanti eder:
- güvenli işbirliği
- öngörülebilir dağıtımlar
- daha az çalışma zamanı hatası
Eğer bu kılavuzu yararlı bulduysanız, scripti kendi Laravel altyapınıza uyarlamaktan çekinmeyin.
Kaynak: Orijinal Makale


