
Bir eklenti "dosyaya yazılamıyor" hatası veriyor. İnternette bulduğunuz çözüm klasöre tam yetki vermenizi söylüyor. Uyguluyorsunuz, sorun çözülüyor — ve sitenizi bir sonraki taramada saldırganlara açmış oluyorsunuz.
Bu yazı, hosting hesabında doğru izin ayarlarını ele alıyor.
İzinlerin Mantığı
Her dosyanın üç grup için üç yetkisi vardır:
| Grup | Kim |
|---|---|
| Sahip | Dosyayı oluşturan hesap |
| Grup | Aynı gruptaki kullanıcılar |
| Diğerleri | Herkes |
Yetkiler okuma, yazma ve çalıştırma olarak üçe ayrılır ve sayısal karşılıkları toplanarak yazılır: okuma dört, yazma iki, çalıştırma bir.
Kritik ayrım şudur: klasörlerde "çalıştırma" yetkisi, o klasörün içine girebilmek anlamına gelir — dosyalarda ise gerçekten çalıştırılabilir olmak demektir.
Bu fark, klasörlerin neden 755, dosyaların neden 644 olduğunu açıklar.
Doğru Değerler
- Klasörler: 755. Sahip yazar, herkes girer.
- Dosyalar: 644. Sahip yazar, herkes okur.
- Yapılandırma dosyaları: 600. Yalnızca sahip.
- Yükleme klasörleri: 755. Genellikle yeterli.
- Betikler: 755. Çalıştırılması gerekiyorsa.
Üçüncü madde en önemlisidir ve çok atlanır: veritabanı şifresini içeren yapılandırma dosyasının "diğerleri" tarafından okunabilir olması, aynı sunucudaki başka bir hesabın onu okuyabilmesi anlamına gelebilir.
Paylaşımlı bir sunucuda bu gerçek bir risktir. Sunucu doğru yapılandırılmışsa hesaplar birbirinden yalıtılmıştır, ama bu yalıtımın her katmanda kusursuz olduğu varsayılmamalıdır.
Dördüncü madde ise yaygın bir yanlış anlamayı düzeltir. Yükleme klasörünün çalışması için 777 gerekmez.
777 Neden Tehlikeli?
Bu değer "herkes her şeyi yapabilir" demektir:
- Herkes okuyabilir.
- Herkes yazabilir.
- Herkes çalıştırabilir.
Sonuç doğrudan bir güvenlik açığıdır: 777 izinli bir klasöre dosya yükleyebilen bir saldırgan, oraya zararlı bir betik bırakıp çalıştırabilir — sitenizin tamamı ele geçirilmiş olur.
Üstelik bu değer çoğu zaman gereksizdir. "Yazılamıyor" hatasının asıl nedeni genellikle izin değil sahiplik sorunudur.
Bazı güvenlik taramaları ve hosting sağlayıcıları 777 izinli klasörleri otomatik tespit edip uyarı verir; bazı sunucular ise bu klasörlerdeki betikleri çalıştırmayı reddeder.
Asıl Sorun: Sahiplik
İzin doğru olduğu hâlde yazılamıyorsa neden farklıdır:
| Durum | Sonuç |
|---|---|
| PHP hesap kullanıcısı olarak çalışıyor | 644 ve 755 yeterlidir |
| PHP web sunucusu kullanıcısı olarak çalışıyor | Sahiplik uyuşmazlığı çıkar |
| Dosya FTP ile yüklenmiş | Sahibi FTP kullanıcısıdır |
| Dosya betikle oluşturulmuş | Sahibi çalışan süreçtir |
Üçüncü ve dördüncü satırların çakışması klasik bir karışıklık üretir: FTP ile yüklediğiniz bir dosyayı betiğiniz değiştiremez, çünkü ikisi farklı kullanıcı olarak çalışıyordur — izin doğru olsa bile.
Modern paylaşımlı hosting kurulumlarının çoğunda birinci satırdaki düzen kullanılır ve bu sorun ortadan kalkar.
Sorun yaşıyorsanız sağlayıcınıza PHP'nin hangi kullanıcı olarak çalıştığını sormak, doğru çözümü seçmenizi sağlar.
Toplu Düzeltme
Tüm site için izinleri düzeltmek gerektiğinde:
- Klasörleri ve dosyaları ayrı ayrı işleyin.
- Aynı değeri ikisine birden uygulamayın.
- Yapılandırma dosyalarını sonradan kısıtlayın.
İkinci madde çok yapılan bir hatayı önler: tüm site 755 yapılırsa her dosya çalıştırılabilir hâle gelir; tüm site 644 yapılırsa hiçbir klasöre girilemez ve site tamamen kapanır.
İkinci senaryo daha korkutucudur çünkü site anında erişilemez olur ve düzeltmek için dosya yöneticisine girmek gerekir.
Çoğu panelin dosya yöneticisi, klasörlere ve dosyalara ayrı ayrı izin uygulama seçeneği sunar.
Özel Durumlar
- Kural dosyaları: 644 olmalı, aksi hâlde yoksayılabilir.
- Ana dizin: Fazla açık olmamalı.
- Yedek dosyaları: Kısıtlı ve web dışında.
- Günlük klasörleri: Yazılabilir ama okunamaz.
Birinci madde ilginç bir davranıştır: bazı web sunucuları, fazla açık izne sahip kural dosyalarını güvenlik gerekçesiyle tamamen yoksayar — kural dosyanız durur ama hiçbir etkisi olmaz.
Bu, "kuralımı yazdım ama çalışmıyor" durumlarının bilinmeyen bir nedenidir.
Üçüncü madde ise ciddi bir sızıntıyı önler. Web kökünde duran ve okunabilir bir veritabanı yedeği, adresini tahmin eden herkes tarafından indirilebilir.
Düzenli Kontrol
| Kontrol | Aranan |
|---|---|
| 777 izinli öğe var mı? | Hemen düzeltilmeli |
| Yapılandırma dosyası kısıtlı mı? | 600 tercih edilir |
| Web kökünde yedek var mı? | Taşınmalı |
| Beklenmedik çalıştırılabilir dosya | İncelenmeli |
Dördüncü satır bir ele geçirilme belirtisi olabilir: yükleme klasöründe çalıştırılabilir izne sahip beklenmedik bir betik dosyası, sitenize sızıldığının en net göstergelerinden biridir.
Bu kontrol, düzenli güvenlik taramasının bir parçası olmalıdır.
Birinci satır ise en hızlı kazançtır ve panel üzerinden filtreleyerek bulunabilir.
Dosya izinlerini toplu görüntülemek ve düzeltmek için panelinizin dosya yöneticisini kullanabilirsiniz; hosting hizmeti kapsamında sunulan dosya yöneticisi klasör ve dosya bazında ayrı izin uygulama seçeneği sunar.
Sonuç
Doğru varsayılanlar basittir: klasörler 755, dosyalar 644, yapılandırma dosyaları 600. 777 vermeyin — o klasöre dosya yükleyebilen bir saldırgan zararlı bir betik bırakıp çalıştırabilir. "Yazılamıyor" hatasının nedeni genellikle izin değil sahipliktir: FTP ile yüklediğiniz dosyayı betiğiniz değiştiremez, çünkü ikisi farklı kullanıcı olarak çalışır. Toplu düzeltme yaparken klasör ve dosyaları ayrı işleyin; tüm siteyi 644 yapmak siteyi tamamen kapatır.
Sıkça Sorulan Sorular (SSS)
Hangi izin değerlerini kullanmalıyım?
Klasörler için 755, dosyalar için 644, veritabanı şifresi içeren yapılandırma dosyaları için 600. Yükleme klasörleri de 755 ile çalışır — 777 gerekmez. Betiklerin çalıştırılması gerekiyorsa 755 uygundur.
777 vermek gerçekten tehlikeli mi?
Evet, doğrudan bir güvenlik açığıdır. 777 izinli bir klasöre dosya yükleyebilen bir saldırgan oraya zararlı bir betik bırakıp çalıştırabilir ve sitenizin tamamı ele geçirilir. Üstelik genellikle gereksizdir; "yazılamıyor" hatasının asıl nedeni sahipliktir.
İzin doğru ama hâlâ yazılamıyor?
Sahiplik uyuşmazlığı vardır. FTP ile yüklediğiniz dosyanın sahibi FTP kullanıcısı, betiğin oluşturduğu dosyanın sahibi ise çalışan süreçtir. İkisi farklıysa izin doğru olsa bile yazma başarısız olur. Sağlayıcınıza PHP'nin hangi kullanıcı olarak çalıştığını sorun.
Kural dosyam neden çalışmıyor?
İzni fazla açık olabilir. Bazı web sunucuları, güvenlik gerekçesiyle fazla açık izne sahip kural dosyalarını tamamen yoksayar — dosya durur ama hiçbir etkisi olmaz. Kural dosyalarını 644 yapın.