WordPress’te Dosya İzinleri: Hangi Dizin Ne Olmalı?
WordPress’te dizin ve dosya izinleri için net şema: doğru chmod değerleri, riskler, sorun giderme ve güvenli varsayımlar.
WordPress sitelerinde dosya izinleri (file permissions), hem güvenliği hem de erişilebilirliği doğrudan etkiler. Yanlış izinler “500 Internal Server Error” hatalarına, eklenti/yükleme sorunlarına ve bazı durumlarda gereksiz risklere yol açar. Bu rehberde, WordPress’in tipik dizinlerinde hangi izinlerin kullanılacağını net bir şema ile ele alacak; ardından yaygın hataları nasıl tespit edip düzelteceğinizi adım adım vereceğim.
Not: Aşağıdaki değerler, çoğu Linux tabanlı hosting senaryosu için güvenli varsayımlardır. Dosya sistemi türü (ext4/xfs), web sunucusu kullanıcısı (www-data, nginx, apache) ve PHP çalıştırma modu (mod_php/FPM) değerleri etkileyebilir. Bu yüzden önce mevcut durumu kontrol edeceğiz.
WordPress dosya izinleri nasıl okunur? (chmod mantığı)
Linux’ta izinler üçlü (okuma/yazma/çalıştırma) mantığıyla verilir. En pratik referans, chmod ile verilen 3 veya 4 haneli sayılardır.
- Dosyalar (file): Web üzerinden statik okunur. Genelde çalıştırma gerekmez.
- Dizinler (directory): İçerisine girilmesi için “execute (x)” gerekir.
Tipik eşleşmeler: - 644 = dosya (rw-r--r--) - 640/600 = dosyalar (daha kısıtlı) - 755 = dizin (rwxr-xr-x) - 750 = daha kısıtlı dizin - 700 = en kısıtlı (çoğu zaman gereksiz)
WordPress’te hedef: 1) Web sunucusu dosyaları okuyabilsin, 2) gerektiğinde belirli dizinlere yazılsa (upload gibi), 3) gereksiz “write” yetkisi verilmesin.
Web sunucusu kim? (en kritik kontrol)
Değer seçmeden önce, web sunucusunun hangi kullanıcı/gruba sahip olduğunu bilmeniz gerekir. Hosting panelinizde “web server user” bazen belirtilir; yoksa PHP hata logundan veya sunucu üzerinden kontrol edilir.
Örnek komutlar:
- ls -ld /var/www/html
- ps aux | grep -E 'nginx|apache'
- id www-data (Debian/Ubuntu için)
Aynı sunucuda yanlış kullanıcıya write izni vermek güvenlik açığını büyütür.
WordPress için hedef izin şeması: dizin bazlı net değerler
Aşağıdaki şema, WordPress’in standart kurulum yapısına göre hazırlanmıştır. Dizinin adını, kurulum kökünü (document root) baz alarak kullanın.
WordPress kökü (document root)
Kök dizin: WordPress’in tüm uygulamasının bulunduğu üst seviye klasördür. - İzin hedefi: 755 - Amaç: Web sunucusu içerikleri okuyup dizinlere girebilsin.
wp-content dizini ve alt dizinler
WordPress’te yazılabilir olması gereken alanların çoğu wp-content altındadır.
wp-content (ana)
- Dizin hedefi: 755
- Amaç: Web sunucusu klasörleri listeleyebilsin; ancak rastgele yazma yetkisi vermeyelim.
wp-content/uploads
Dosya yükleme (medya), tema/eklenti üzerinden oluşturulan görseller bu dizinde birikir. - Dizin hedefi: 755 - Dosya hedefi: 644 - Amaç: PHP işlemleri bu dizine yazabilsin; diğer yetkisiz süreçler aynı düzeyde yazamasın.
Bazı kurulumlarda “uploads’e yazma” için kullanıcı/grup doğru olduğunda 755 yeterlidir. Gereksiz yere 777 kullanmayın.
wp-content/themes
Tema dosyaları genellikle statik okunur. - Dizin: 755 - Dosyalar: 644
wp-content/plugins
Eklentiler okunur; ancak güncelleme/otomasyon varsa yazma ihtiyacı doğabilir. - Dizin: 755 - Dosyalar: 644
wp-admin, wp-includes
Bu dizinler WordPress çekirdeğiyle ilgilidir; normalde web sunucusu yazmaz. - wp-admin dizin: 755 - wp-admin dosyalar: 644 - wp-includes dizin: 755 - wp-includes dosyalar: 644
wp-config.php ve kritik dosyalar
wp-config.php site ayarlarını taşır. Buraya “fazla izin” güvenlik açısından risk üretir. - wp-config.php: 640 veya 600 - Dizin/diğer kritik dosyalar: çoğu senaryoda 644 dosya, 755 dizin yeterlidir.
.htaccess ve benzeri dosyalar
Apache kullanıyorsanız .htaccess kritik rol oynar.
- .htaccess: 644
İzin şeması özet tablosu
Aşağıdaki tablo, en çok kullanılan hedefleri tek ekranda görmeniz için hazırlanmıştır:
| Yol (önek) | Tür | Hedef izin | Neden |
|---|---|---|---|
| /public_html (WordPress kökü) | dizin | 755 | Listeleme ve giriş; yazma yetkisi yok |
| /wp-admin | dizin | 755 | Okuma ve gezinme |
| /wp-admin/* | dosya | 644 | Çalıştırma gerekmez |
| /wp-includes | dizin | 755 | Okuma |
| /wp-content | dizin | 755 | Dizin erişimi |
| /wp-content/uploads | dizin | 755 | Medya yükleme; yazma kontrollü |
| /wp-content/uploads/* | dosya | 644 | Okuma; gereksiz yazma yok |
| /wp-content/themes | dizin | 755 | Tema dosyaları okunur |
| /wp-content/plugins | dizin | 755 | Eklentiler okunur |
| /wp-config.php | dosya | 640/600 | Hassas içerik; düşük yetki |
| /.htaccess | dosya | 644 | Kural okuma |
Yanlış izinlerin belirti verdiği yerler (hızlı teşhis)
İzin hataları çoğu zaman “tek bir belirti” değil, birkaç farklı semptomla gelir.
En yaygın hatalar
- Medya yükleme başarısız: “Dosya yüklenemedi” veya HTTP 403/500
- Eklenti/tema güncelleme başarısız: WordPress güncelleme işlemi sırasında yazma engeli
- 500 Internal Server Error: PHP/WordPress dosyaları okunamıyor veya .htaccess/konfig doğru çalışmıyor
- Güncellemelerde dosya taşınamadı: wp-content alt dizinlerde yanlış sahiplik (ownership)
“chmod değil ownership sorun” olasılığı
Sıklıkla görülen durum: İzin değerleri doğru görünür, ancak dosya “başka bir kullanıcıya/gruba” aittir. Bu durumda web sunucusu yazamaz.
Kontrol:
- ls -l wp-content/uploads
- ls -l wp-config.php
İnceleme kriteri: - Web sunucusu kullanıcısı (ör. www-data/nginx/apache) ilgili dizinlerde yazma yetkisine sahip mi?
Güvenli şekilde izinleri düzeltme: adım adım
Aşağıdaki adımlar, kontrollü biçimde ilerlemenizi sağlar.
1) Kapsamı daraltın: en önce belirti veren dizini düzeltin
Örneğin sadece yükleme sorunu varsa ilk hedef genelde:
- wp-content/uploads
Böylece gereksiz geniş çaplı chmod işlemi yapmazsınız.
2) Önce sahipliği (ownership) kontrol edin
Aynı izin bile farklı kullanıcılar için farklı sonuç verir.
Web sunucusu kullanıcısı örneği:
- Ubuntu/Debian yaygın: www-data
Örnek yaklaşım (değerleri sunucunuza göre güncelleyin):
- Dizinin sahibi: chown -R www-data:www-data wp-content
Burada komut örnek amaçlıdır. Hosting sağlayıcınızın kullanıcı adını bilmiyorsanız önce panelden veya dokümandan doğrulayın.
3) Ardından izinleri uygulayın (dosya/dizin ayrımı şart)
WordPress’te dizinlere “x” gerekir; dosyalara genelde çalıştırma verilmez.
Tipik düzeltme mantığı: - Dizinler: 755 - Dosyalar: 644
Komut örnekleri (kurulum köküne göre düzenleyin):
- Dizinler için:
find . -type d -exec chmod 755 {} \;- Dosyalar için:
find . -type f -exec chmod 644 {} \;
uploads istisnası
uploads dizinine yazma gerekiyorsa ve sahiplik doğruysa 755 yeterlidir. Yalnızca “uygulama kullanıcı doğru değilse” 777 gibi yöntemler gereksiz risk yaratır.
4) wp-config.php için özel kural
wp-config.php için hedef daha kısıtlıdır:
- chmod 640 wp-config.php
Bazı sistemlerde 600 daha uygundur; ancak WordPress’in aynı dosyaya erişim gerektirdiği kullanıcı/grup eşleşmeli.
Hızlı referans: Hangi değeri ne zaman kullanmamalısınız?
Aşağıdaki değerler pratikte çok kullanılır ama WordPress için sık yanlış sonuç verir.
- 777: Güvenlik riski. Sadece “geçici teşhis” için, mümkün olan en kısa sürede geri alınmalıdır.
- 666: Hassas dosyalar için uygun değildir; özellikle wp-config.php risklidir.
- 755 + dosyalara execute (x) eklemek: Gereksiz yetki artışı. Dosyalar için 644 daha doğrudur.
Deneyip bırakmayın: değişiklikten sonra doğrulama kontrol listesi
İzinleri düzelttikten sonra şu testleri yapın. Her biri hangi izin eksikliğini yakaladığını gösterir.
- Yönetici paneline giriş (wp-admin erişimi)
- Medya > Yeni ekle ile dosya yükleme
- Tema/eklenti güncelleme (mümkünse küçük bir eklenti ile)
- Site önbellek varsa sayfa yenileme
- Hata logu kontrolü: PHP hata günlüğü ve web sunucusu hata logu
Sonuç: Net bir aksiyon planı
WordPress’te dosya izinlerini “tek seferde her yere aynısını ver” yaklaşımıyla düzeltmeyin. İlk adım olarak sorunun çıktığı dizini (çoğunlukla wp-content/uploads) ve web sunucusunun çalışan kullanıcı/grubunu kontrol edin. Sonra dizinler 755 / dosyalar 644 temel şemasını koruyun; wp-config.php için 640 veya 600 kullanın. Bu sırayı takip ettiğinizde hem 500 hatalarını hem de yükleme/güncelleme problemlerini sistematik biçimde çözürsünüz.
İsterseniz sitenizdeki kurulum kök yolunu (ör. /public_html veya /var/www/html), web sunucusu türünüzü (Apache/Nginx) ve hatayı (örn. medya yükleme 403/500) paylaşırsanız, hedef izin şemasını birebir senaryonuza uyarlayacak şekilde netleştirebilirim.
Hosting karşılaştırması yapmaya hazır mısın?
100+ firmanın fiyatlarını tek tıkla karşılaştır, en uygun paketi bul.
Hosting Karşılaştır →İlgili Yazılar
SSL süresi neden 90 güne düştü? Teknik ve operasyonel etkiler
SSL sertifikası süresinin 90 güne düşmesi; güvenlik hedefleri, otomasyon zorunluluğu ve hosting operasyonlarına etkileriyle net biçimde anlatılır.
Prod ortamda Self-signed SSL kullanılır mı? Risk haritası
Self-signed SSL prod’da kullanılır mı? Tarayıcı uyarıları, güven zinciri, SEO ve uygulama uyumluluğu risklerini net örneklerle ele al.
E-ticarette PCI-DSS: Kart bilgisi saklamadan uyumluluk
Kart verisini kendi sunucunda tutmadan e-ticaret PCI-DSS uyumluluğunu nasıl kurarsınız? Risk azaltma, mimari ve kontrol listesi.
Container Hosting (Docker/Kubernetes) için minimum altyapı planı
Docker/Kubernetes için minimum altyapıyı; CPU/RAM, depolama, ağ, yedekleme ve güvenlik başlıklarında net değerlerle planlayın.
