WordPress dosya izinleri: Hangi dizin ne olmalı? (net rehber)
WordPress’te dizin ve dosya izinleri için doğru 0755/0644/0700 değerleri, güvenli yapı ve hata senaryolarıyla net kontrol rehberi.
WordPress’te en sık görülen sorunların bir kısmı “kod bozuk” sanılsa da aslında dosya izinleri (permissions) kaynaklı olur. Yanlış izin; eklenti (plugin) yükleyememe, tema düzenleyememe, güncelleme sırasında hata ve dosya sistemiyle ilgili “403/500” sonuçları doğurur. Bu rehberde, WordPress dizin yapısına göre hangi klasöre hangi izinlerin verilmesi gerektiğini, güvenlik ve işlevsellik dengesini koruyarak net şekilde göreceksiniz.
Aşağıdaki değerler genel WordPress kurulumları içindir. Son karar, kullandığınız sunucu kullanıcıları (web server kullanıcı adı), dosya sistemi (ext4/xfs), kontrol paneliniz ve güvenlik eklentilerinizle uyumlu olmalıdır.
1) WordPress izinleri neden kritik? (somut etkiler)
WordPress dosya izinleri yanlış olduğunda şu semptomlar tipik olarak ortaya çıkar:
- Tema/eklenti yükleme hatası: WordPress “yazma (write) izni yok” gibi mesajlar verir.
- Güncelleme başarısız: WordPress çekirdek (core) veya eklenti güncellemeleri sırasında dosya oluşturma/üzerine yazma engellenir.
- Medya yükleme sorunu:
wp-content/uploadskısmı yazılabilir değilse medya yükleme başarısız olur. - WP-CLI/cron işleri çalışmaz: Otomatik görevler dosya yazamadığı için loglarda izin hataları görülür.
- Aşırı açık izin güvenlik riski: Hem gizli dosyaların okunması hem de bazı senaryolarda zararlı komutların tetiklenmesi mümkün olur.
Bu yüzden hedef, “WordPress’in yazması gereken yerler yazılabilir olsun, geri kalanı minimum yetkiyle kalsın” yaklaşımıdır.
İzin değerleri nasıl okunur?
Linux’ta sayılar 3 basamaklı izin modudur:
- 0755: dizin için yaygın güvenli değer (okuma/çalıştırma herkese açık, yazma sadece sahibinde)
- 0644: dosya için yaygın güvenli değer (okuma herkese açık, yazma sadece sahibinde)
- 0700: sadece sahibinin tam erişimi (yüksek gizlilik gereken dizinler için)
Not: WordPress için pratikte en çok kullanılan kombinasyonlar şunlardır: dizinler 0755, dosyalar 0644, gizli/özel dizinler ise 0700.
2) WordPress için varsayılan dizin haritası
WordPress kök dizin yapısını şu şekilde düşünün:
public_html/veyawww/(web kökü)public_html/wp-admin/public_html/wp-content/public_html/wp-includes/public_html/wp-config.phppublic_html/wp-content/uploads/public_html/wp-content/themes/public_html/wp-content/plugins/
İzin yaklaşımı aynı mantığa dayanır:
- WordPress çekirdeği (wp-admin, wp-includes) genelde yazılabilir olmamalıdır.
- Uygulama içerikleri (wp-content) yazılabilir olmalıdır; ama “tam açık” değil, ihtiyaca göre.
- Yapılandırma dosyası (wp-config.php) sadece web server kullanıcısına okunabilir olmalı, gereksiz herkese açık olmamalıdır.
3) Net izin önerileri: Hangi dizin ne olmalı?
Aşağıdaki tablo, tipik bir WordPress kurulumunda güvenli ve işlevsel bir başlangıç sağlar.
Kural: Sahiplik (ownership) izinlerden daha önemlidir. İzinler doğru olsa bile doğru kullanıcı/sahip yoksa WordPress yazamaz.
| Yol (örnek) | Tür | Önerilen izin | Amaç |
|---|---|---|---|
wp-content/uploads/ |
dizin | 0755 | Dosya/medya yazma alanı; dizin listleme kontrolü |
wp-content/ |
dizin | 0755 | Eklenti/tema ve içerik için kontrollü erişim |
wp-content/plugins/ |
dizin | 0755 | Plugin ekleme/yükleme genelde WordPress üzerinden olur |
wp-content/themes/ |
dizin | 0755 | Tema yükleme/düzenleme için |
wp-admin/ |
dizin | 0755 | Çekirdek yönetim alanı; yazma gerektirmez |
wp-includes/ |
dizin | 0755 | Çekirdek dosyalar; yazma gerektirmez |
wp-config.php |
dosya | 0640 / 0600 | Yapılandırma; sadece gerekli kullanıcı okumalı |
index.php, wp-login.php vb. |
dosya | 0644 | Statik okunabilir dosyalar |
*.php (genel) |
dosya | 0644 | WordPress kod dosyaları |
.htaccess |
dosya | 0644 | Apache kullanıyorsanız rewrite kuralları için |
“uploads neden 0755?”
wp-content/uploads/ dizini yazılabilir olmalı; ancak dizin izni tek başına tüm yetkiyi belirlemez. En yaygın senaryoda web server kullanıcı adı (ör. www-data veya nginx) dosya oluşturur/yazar. Bu yüzden tipik çözüm:
- uploads/ dizini sahiplik olarak web server kullanıcısında
- izin olarak 0755 (dizinlerde write gereksinimi sahiplik üzerinden sağlanır)
Dosya izinleri yine de yazma için yetersiz kalırsa WordPress “klasöre yazılamıyor” hatası verir; bu durumda öncelik sırasıyla sahiplik, ardından dizin izni kontrol edilmelidir.
Gizli dosyalar ve yapılandırma: wp-config.php
wp-config.php için öneri:
- 0640: Web server grubuna okuyabilirlik verilir
- 0600: En katı seçenek; sadece sahibi okuyabilir
Bu dosyada veritabanı parolası, salts ve kritik ayarlar bulunduğu için “herkese okuma” hedefi doğru değildir.
4) Sahiplik (chown) ve izin eşleşmesi: en sık hata burada
WordPress’in dosya yazması için sadece chmod (izin) değil, doğru kullanıcı/grup sahibi de gerekir.
Örnek kontrol komutları
Sunucunuzda web server kullanıcı adını ve WordPress dosyalarının sahibini kontrol edin:
ls -lah public_html/wp-content/uploads
ls -lah public_html/wp-config.php
Çıktıda şu mantığı arayın:
- uploads ve WordPress güncelleme yapılan dosyalar: web server kullanıcısı veya WordPress’in çalıştığı hesap tarafından sahiplenmiş olmalı
- wp-config.php: web server kullanıcısı (ve gerekirse grup) tarafından sahiplenmeli
Net pratik: Dizini sahipliğe göre düzeltin
Kullanıcı adınız örnek olarak www-data ise genel mantık şöyledir:
chown -R www-data:www-data public_html/wp-content/uploads
Bu komutu körlemesine tüm public_html için çalıştırmayın. Hedef sadece yazılması gereken dizinler olmalıdır.
5) Hata senaryolarına göre hızlı teşhis (net checklist)
Aşağıdaki kontrol listesi, iznin mi sahipliğin mi soruna yol açtığını hızlıca ayırır.
A) “WordPress medya yüklenmiyor”
wp-content/uploads/dizininin sahibi web server kullanıcı adı mı?uploads/için izin 0755 mi ve üzerinde dosya oluşturulabiliyor mu?- Sunucuda ek güvenlik modülleri (ör. SELinux) açıksa, context ayarları gerekebilir.
B) “Eklenti yükleme başarısız”
wp-content/plugins/dizini yazılabilir mi?- WordPress dosya sistemi işlemleri için PHP hangi kullanıcıyla çalışıyor? (Farklı PHP-FPM havuzları farklı user kullanabilir.)
- Cache/otomasyon yazma işlemlerini de etkiliyor mu? (bazı kurulumlarda
object-cacheveya log dosyaları da izin ister)
C) “Dosya düzenleme (theme editor) çalışmıyor”
wp-content/themes/dizini ve tema dosyaları web server tarafından sahipleniyor mu?- Dosya izinleri 0644 ise, düzenleme için yazma gereksinimi yine sahiplik üzerinden karşılanmalıdır.
D) “Güncellemelerde 500/403”
- Apache/Nginx özel kural dosyaları (özellikle
.htaccess) yanlış izin aldı mı? - Dosya izinleri çok kısıtlı hale geldiyse WordPress PHP dosyalarını bile okuyamayabilir.
- Güncelleme sürecinde WordPress geçici dosya yazıyor olabilir; bu geçici dizin (bazı kurulumlarda
wp-content/altında) izin gerektirir.
6) Güvenli ve çalışır sonuç için önerilen yapı (aksiyon planı)
Net şekilde ilerlemek için şu sıralamayı uygulayın:
- Önce sahiplik:
uploads/ve yazma gereken içerik dizinlerinde web server kullanıcısı/grubu doğru mu? - Sonra izin: Dizini 0755, dosyayı 0644 yaklaşımına geri dönün.
- wp-config.php’yi kısıtlayın: 0600/0640.
- Değişiklik sonrası WordPress’te şu işlemleri test edin: - Medya yükleme - Eklenti yükleme (küçük bir eklenti) - Tema düzenleme (gerekirse) - WordPress güncellemesi (mümkünse staging ortamında)
- Üretimde bir şey bozulursa geri dönüş için değişiklik öncesi dosya durumu log veya yedeklenmiş olmalı.
Sonuç olarak, WordPress için en doğru izin stratejisi “tek bir sihirli chmod değeri” değil; sahiplik + dizin/dosya izinleri + gizli dosyaları kısıtlama üçlüsüdür. Sunucunuzda mevcut durumu ls -lah ile kontrol edip sadece yazması gereken dizinleri düzeltin; böylece hem güncelleme/medya sorunlarını çözer hem de gereksiz risk oluşturmazsınız.
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
Hosting Paketi Seçerken Yapılan 5 Hata ve Net Çözüm Rehberi
Hosting paketi seçerken yapılan 5 yaygın hatayı öğrenin: yanlış kaynak planlama, kontrol paneli beklentisi, yedekleme/SSL eksikleri ve daha fazlası.
Açık Portları Kapatma: Sunucu Hardening Rehberi
Açık portları kapatmak için net kontrol adımları: hangi portlar riskli, nasıl taranır, güvenli kapatma ve kalıcı hardening ayarları.
ModSecurity nedir, paylaşımlı hostingde aktif mi?
ModSecurity (WAF) nasıl çalışır, hangi saldırıları engeller ve paylaşımlı hostingde aktif edilip edilmediğini nasıl kontrol edeceğinizi öğrenin.
WordPress’te Redis/Memcached object cache mantıklı mı?
WordPress’te object cache (Redis/Memcached) ne kazandırır? Uyumsuzluk, ayar hataları ve ne zaman şart olduğu için net kontrol listesi.