WordPress Dosya İzinleri: Dizin Bazlı En Doğru Ayarlar
WordPress’te doğru dosya izinlerini dizin bazında öğrenin: wp-content, uploads, cache, config ve SSH ile güvenli uygulama örnekleri.
WordPress’te dosya izinleri (permissions), hem güvenliği hem de içeriklerin çalışmasını doğrudan etkiler. Yanlış ayarlar dosya yüklemeyi bozar, eklentilerin güncellemelerini keser veya “hatalı yazma izni” yüzünden risk artırır. Bu rehberde, sunucu ortamından bağımsız şekilde dizin bazlı hangi hakların verilmesi gerektiğini, ayrıca pratik doğrulama yöntemleriyle birlikte net bir kontrol listesi olarak okuyacaksınız.
Aşağıdaki hedef, “maksimum izin” vermek değil; WordPress’in gerçekten ihtiyaç duyduğu yazma izinlerini, geri kalanını kilitleyecek şekilde ayarlamaktır.
WordPress’te dosya izinleri neden bu kadar hassas?
WordPress’in yazma ihtiyacı dinamik içerik üretilirken ortaya çıkar: - Görsel ve dosya yükleme (uploads) - Geçici dosyalar ve cache üretimi (ör. wp-content/cache) - Eklenti/tema güncellemeleri ve otomatik kurulumlar (wp-content) - wp-config.php gibi ayar dosyalarının korunması (yazmaya kapalı)
Linux’ta yetkiler genelde 3 haneli (ör. 644, 755) görünür. Bu sayıların mantığı: - İlk hane: dosyanın sahibi - İkinci hane: grup - Üçüncü hane: diğerleri (world)
Örnek: - 644: dosya için tipiktir (sahibi yazabilir, herkes okuyabilir) - 755: dizin için tipiktir (dizin içine erişim ve listeleme mümkün, dosya çalıştırma/erişim akışı izinli)
Kritik nokta: WordPress’te en sık görülen problem “dizinlerin yazmaya açık olması” değil; yazma izninin gereksiz yere fazla verilmesidir. Diğer yandan en sık işlev bozan problem de “gereken yere yazma izni verilmemesidir”.
WordPress dizinleri için önerilen izinler (standart şablon)
Aşağıdaki değerler, Apache/Nginx ile çalışan çoğu WordPress kurulumunda kullanılan, güvenlik ile işlevi dengeler. Kurulumunuz farklı ise (ör. farklı PHP-FPM kullanıcıları, farklı web kökü), tabloda yer alan “kime (user) verilecek?” kısmını mutlaka eşleştirin.
Dosya türlerine göre temel kural
- PHP/konfigürasyon dışındaki dosyalar: 644
- Dizinsal yapılar: 755
Bunun istisnası; yazma gerektiren dizinlerdir. Bunlarda dizin izni genellikle 775 (grup yazabilir) veya bazı kurulumlarda 777 değildir. “777” pratikte genellikle gereksiz ve risklidir.
wp-content ve kritik dizin eşlemesi
Aşağıdaki tablo, WordPress’in en çok dokunduğu dizinleri gösterir. Buradaki izinler, “uploads ve cache yazabilsin, config yazamasın” mantığıdır.
| Yol (dizin/yol) | Beklenen izin | Kimin yazabilmesi? | Neden |
|---|---|---|---|
| /var/www/html (web kökü) | 755 | Web server user (veya grup) | Dizin listeleme ve erişim için temel erişim |
| /wp-admin | 755 | Web server user/grup | Çalışma için gerekli, dosya yazma gerekmez |
| /wp-includes | 755 | Web server user/grup | Güncelleme sırasında yazma gerekebilir; tipik olarak yeterli değilse güncellemeler patlar |
| /wp-content | 755 | Sınırlı (genellikle grup) | Tema/eklenti dizinleri burada; gerekirse alt dizinlere yazma ver |
| /wp-content/uploads | 775 | Web server user/grup | Dosya yükleme ve ortam dosyaları |
| /wp-content/cache (kullanıyorsanız) | 775 | Web server user/grup | Cache üretimi |
| /wp-content/uploads/tmp (varsa) | 775 | Web server user/grup | Geçici yükleme dosyaları |
| /wp-content/upgrade (varsa) | 775 | Web server user/grup | Güncelleme paketleri |
| wp-config.php | 640-600 | Sadece owner | Uygulama ayarları; “public write” tehlikeli |
| .htaccess (kullanıyorsanız) | 644 | Owner | Kural seti; yazma gerekir ama yönetimli olmalı |
| wp-config.php ve config benzeri dosyalar | 640 (öneri) | Owner; gerekirse grup okumaya açık | Çalınma/bozulma riskini azaltır |
Eğer “grup” mantığını kullanıyorsanız (ör. tüm dizinler aynı grup altında), 775 ile hem güvenlik hem çalışabilirlik dengelenir. Gruplama yapamıyorsanız, owner’a yazma verip diğerlerine kapatmak daha iyi sonuç verir.
Doğru user:group eşlemesi (permissions kadar önemli)
Dosya izinleri tek başına yetmez. “Web server’ın hangi kullanıcı ile çalıştığı” ve dosyaların owner/grup bilgisi, izinleri fiilen anlamlandırır.
Kontrol: Sizin web server user’ınız kim?
- Nginx + PHP-FPM: genellikle
www-data,nginxveya benzeri bir kullanıcı - Apache + mod_php: genelde
www-data/apachegibi
Hangi kullanıcı olduğunu iki yolla netleştirebilirsiniz:
- PHP-FPM havuz ayarlarından (pool) ilgili user/group
- Sunucu üzerinde çalışan web server hizmeti kullanıcı bilgisinden
Kontrol: İzinler niye yetmiyor?
Klasik senaryolar:
- wp-content/uploads dizini var ama owner/grup farklı → web server yazamaz
- Dizindeki izin 775 görünüyor ama asıl kullanıcı farklı → yazma başarısız
Bu yüzden izin değişikliğinden önce owner/grubu doğru hedefe almak gerekir.
Uygulama: Güvenli ve tekrarlanabilir izin ayarlama adımları
Aşağıdaki adımlar, “her şeyi 777 yap ve düzelsin” yaklaşımına karşı, tekrar edilebilir ve ölçülebilir bir yöntemdir.
1) Hedef dizini ve mevcut izinleri görün
Örnek kontrol komutu (yolunuza göre uyarlayın):
- ls -la /var/www/html/wp-content
Burada şu kolonları okuyun:
- drwx... (dizin/dosya türü)
- sahibi (user)
- grubu (group)
- izin (ör. 775)
2) Web server’ın sahibi/grubu ile eşleştirin
Genel prensip: - WordPress dosyalarının owner’ı web server’ın erişebileceği kullanıcı olmalı - Yazma gerektiren dizinlerde grup yazabilir olmalı (775)
Bu işlemler için kullanılan komutlar:
- chown -R user:group /var/www/html
- chgrp -R group /var/www/html/wp-content
Hangi
user:groupdeğerlerini kullanacağınız, sunucunuzun web server/PHP-FPM ayarlarına bağlıdır. Rastgele değer yazmayın.
3) Dosya/dizin izinlerini kural tabanlı düzeltin
Pratik bir yaklaşım iki adım halinde çalışır: 1) Tüm dosya/dizinleri “varsayılan” seviyeye çek 2) Yazma gerektiren dizinleri özel izinle yükselt
Örnek kural seti (yol ve kullanıcı/grup değerlerini uyarlayın):
- Dizini 755 yap: /var/www/html altında dizinler
- Dosyaları 644 yap: /var/www/html altında dosyalar
- wp-content/uploads gibi yazma dizinlerini 775 yap
Hızlı doğrulama: WordPress’te hangi izin hatası nereye yazıyor?
WordPress içinde tipik semptomlar: - “Dosya taşınırken hata oluştu” - Eklenti yükleme güncelleme başarısız - Görsel yükleyememe
Bunlarda ek olarak sunucu loglarına bakın: - PHP hata logları - Web server error logları
Bu sayede “izin mi, disk mi, SELinux/AppArmor mı?” sorusu ayrışır.
Yaygın yanlışlar ve nasıl düzeltilir?
wp-config.php dosyasını yazılabilir yapmak
wp-config.php üzerinde yazma izni vermek saldırı riskini artırır. Özellikle tüm world’a (777/666) izin verilmesi güvenlik açığı üretir.
Düzeltme yaklaşımı:
- wp-config.php için 640-600 aralığını hedefleyin
- Web server user’ın owner ya da grubu olmasını sağlayın, ancak diğerlerine write vermeyin
wp-content içinde “her yere” aynı izin
Gereken yazma alanı sınırlıdır. wp-content köküne 775 vermek genelde çalışır ama wp-content içindeki tüm alt dizinleri aynı şekilde yükseltmek gereksizdir.
Düzeltme yaklaşımı:
- Kök wp-content için 755
- Yazma gereken alt dizinler için 775 (uploads/cache/upgrade gibi)
Sahiplik bozulması: “Ben değiştiriyorum ama değişmiyor” hissi
Bazı senaryolarda SSH ile chown/chmod yaparsınız ama WordPress daha sonra bir dosyayı farklı kullanıcı ile oluşturur. Böylece karışıklık oluşur.
Düzeltme yaklaşımı: - Web server’ın üretken işlemlerinde (PHP-FPM worker) kullanılan user/grup ile uyum sağlayın - Otomasyon/cron job aynı izin modelini takip etsin
Özel senaryolar: Nginx, Apache ve PHP-FPM farklılıkları
PHP-FPM ile yazma izinleri
PHP-FPM, genelde havuz bazında user/group kullanır. Bu nedenle:
- İzinleri belirlerken “web root’a yazan” kullanıcıyı hedefleyin
- Havuz sayınız (pool) birden fazlaysa, tüm pool’ların user’ını hesaba katın
Apache mod_php ile izin mantığı
mod_php kullanıyorsanız web server kullanıcıları daha tekdüzedir ancak yine de owner/grup uyumsuzluğu upload’ları etkileyebilir.
“Doğru izinleri verdim” nasıl anlarsınız? Kontrol listesi
Aşağıdaki testler izinlerin doğru olduğunu somutlaştırır:
1) Medya yükleme testi
- WordPress admin panelinde küçük bir görsel yükleyin
- Dosyanın wp-content/uploads altında görünüp görünmediğine bakın
- Görünmüyorsa: owner/grup uyumsuzluğu veya 775 eksikliği vardır
2) Eklenti/tuzak güncelleme testi
- Küçük bir eklenti güncellemesi yapın
- Başarısız olursa: güncelleme paketleri için wp-content/upgrade veya çekirdek alt dizinlerde yazma eksik olabilir
3) Cache üretimi testi
- Etkin cache eklentiniz varsa cache dosyaları üretiliyor mu kontrol edin
- Üretilmiyorsa wp-content/cache (ve/veya kullanılan alt yol) 775 değil ya da owner/grup uyumsuz
4) wp-config.php bütünlüğü testi
- wp-config.php yazılabilir mi kontrol edin
- “diğerleri” (world) write alıyorsa bu tablo dışına taşıyor demektir
Sonuç: Aksiyonla kapatın
WordPress dosya izinlerinde en iyi sonuç, “tüm sistemi geniş yazma izinleriyle açmak” değil, uploads/cache gibi belirli dizinleri yazılabilir kılıp wp-config.php gibi kritik dosyaları yazmaya kapatmaktır. Önce web server/PHP-FPM user’ını tespit edin, ardından dizin bazlı izin hedeflerini (kök 755, yazma dizinleri 775, dosyalar 644 ve config 640-600) uygulayın. Dosya yükleme ve eklenti güncelleme testleri geçince izin ayarlarınızı “doğru” kabul edin; sonra aynı şablonu staging→prod akışında da tutarlı şekilde kullanın.
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
Snapshot yedekleme gerçek backup yerine geçer mi?
Snapshot (anlık görüntü) hızlı geri dönüş sağlar. Ancak gerçek backup değildir. Doğru strateji, süre/erişim ve test kriterlerini birlikte ele alır.
Paylaşımlı Hosting Yeterli mi? Ne Zaman Değiştirmeli?
Paylaşımlı hosting ne zaman yeterli olur, ne zaman VDS/VPS gerekir? Trafik, kaynak, hız, güvenlik ve maliyet eşiklerini net şekilde öğren.
Sunucu Loglarından Anormallik Tespiti: Net İzleme Rehberi
Sunucu loglarını izleyerek CPU, servis hatası ve güvenlik sinyallerini kaçırmadan anormallik tespit edin. Adım adım filtreler ve kontrol listesi.
WAF nedir? Web siteni korumak için net işlev ve kullanım rehberi
WAF (Web Application Firewall) ne yapar, hangi saldırıları engeller ve doğru kurulum/konfigürasyon için net kontrol listesi.