WordPress Dosya İzinleri: Hangi Dizin Kaç Olmalı?
WordPress'te hangi dizine kaç chmod değeri verilmeli? wp-config.php, uploads, wp-content için doğru izin haritası, 777'nin tehlikeleri ve toplu düzeltme komutları.
WordPress kurulumunuzda "izin hatası" ya da "dosya yüklenemiyor" gibi mesajlarla karşılaştığınızda aklınıza gelen ilk çözüm muhtemelen her şeye chmod 777 vermektir. Bu yöntem sorunu anlık olarak çözer; ancak sunucunuzu ciddi bir güvenlik riskine açar. Doğru dosya izinleri, hem WordPress'in düzgün çalışması hem de sunucunuzun dışarıdan gelen saldırılara karşı korunması için belirleyicidir. Bu rehberde WordPress dizin ve dosyalarının hangi izni alması gerektiğini, her iznin arkasındaki teknik gerekçeyi ve mevcut izin sorunlarını nasıl toplu olarak düzelteceğinizi ele alacağız.
Linux Dosya İzni Mantığı: Sayılar Ne Anlama Geliyor?
Linux'ta her dosya ve dizin üç farklı taraf için ayrı ayrı izin tanımlar: dosya sahibi (owner), grup (group) ve diğerleri (others). Her taraf için üç eylem tanımlanır: okuma (r=4), yazma (w=2) ve çalıştırma (x=1).
Bu üç değerin toplamı tek bir rakam üretir:
| Sayı | Açık İzin | Anlamı |
|---|---|---|
| 7 | rwx | Okuma + yazma + çalıştırma |
| 6 | rw- | Okuma + yazma |
| 5 | r-x | Okuma + çalıştırma |
| 4 | r-- | Yalnızca okuma |
| 0 | --- | Hiçbir yetki yok |
chmod 755 ifadesi şunu söyler: dosya sahibi her şeyi yapabilir (7), grup okuyabilir ve çalıştırabilir (5), diğerleri de okuyabilir ve çalıştırabilir (5). WordPress için bu ayrım çok önemlidir çünkü web sunucusu genellikle grup veya diğerleri kategorisinde çalışır.
WordPress için Standart İzin Haritası
Aşağıdaki tablo, WordPress'in doğru çalışması için her dizin ve dosya türüne verilmesi gereken izinleri özetler. Tablodaki değerler Apache veya Nginx'in www-data ya da apache kullanıcısı altında çalıştığı tipik bir VDS/VPS ortamı için geçerlidir.
| Dizin / Dosya | Doğru İzin | Neden |
|---|---|---|
| WordPress kök dizini | 755 |
Sunucu dizini okuyabilmeli, dışarıdan yazma kapalı |
wp-admin/ |
755 |
PHP dosyaları çalıştırılabilir olmalı |
wp-includes/ |
755 |
Temel kütüphaneler okunabilir/çalıştırılabilir |
wp-content/ |
755 |
Eklenti ve tema kurulumu için sahip yazabilmeli |
wp-content/uploads/ |
755 |
Web sunucusu yazabilmeli; 775 gerekirse |
wp-content/themes/ |
755 |
Tema dosyaları okunabilir olmalı |
wp-content/plugins/ |
755 |
Eklenti çalıştırılabilir olmalı |
*.php dosyaları |
644 |
Sunucu okur, dışarıdan değiştirilmez |
.htaccess |
644 |
WordPress yeniden yazar, dışarıya kapalı |
wp-config.php |
440 veya 400 |
Kimse değiştirememeli, çoğu ortamda okuma bile kısıtlı |
wp-config.php: En Kritik Dosya
wp-config.php, veritabanı adı, kullanıcı adı, parola ve gizli anahtarlar (secret keys) dahil WordPress kurulumunuzun tüm hassas bilgilerini içerir. Bu dosyaya verilen izin bir numara bile fark yaratır.
644: En tehlikeli seçenek. Sunucu kullanıcısı dahil herkese okuma açık.640: Sahip okur/yazar, grup okur, diğerleri erişemez. Paylaşımlı hostingde zaman zaman yeterli görülür.440: Sahip okur, grup okur, diğerleri hiçbir şey yapamaz. VDS ortamlarında tercih edilen değer.400: Yalnızca sahip okur. En kısıtlayıcı seçenek; sunucu kullanıcısı sahiple aynıysa yeterlidir.
Çoğu VDS kurulumunda PHP-FPM, WordPress dosyalarıyla aynı kullanıcı (örneğin www-data) altında çalışır. Bu durumda 400 vermek güvenlidir çünkü web sunucusu dosyayı sahip olarak okur.
chmod 400 /var/www/html/wp-config.php
Paylaşımlı hosting ortamlarında FTP kullanıcısı ve web sunucusu farklı kullanıcı olabileceğinden 440 daha uyumlu bir seçimdir.
uploads/ Dizini: Neden 777 Vermeden Çalıştırılabilir?
wp-content/uploads/ dizini, WordPress'in medya yüklemelerini (görsel, belge, video) yazdığı yerdir. PHP süreci bu dizine yazabilmek için yeterli yetkiye ihtiyaç duyar.
Burada kritik nokta şudur: yazma yetkisini kime verdiğiniz, web sunucusunun hangi kullanıcı olduğuna bağlıdır.
Senaryo 1: PHP ve web sunucusu aynı kullanıcı (tipik VDS)
Dosya sahibi www-data, PHP-FPM de www-data altında çalışıyorsa 755 yeterlidir. Sahip zaten yazabildiği için grup ve diğerleri bölümüne yazma yetkisi vermek gerekmez.
Senaryo 2: Farklı kullanıcılar (bazı paylaşımlı hosting ortamları)
FTP ile yüklediğinizde dosya sahibi sizin FTP kullanıcınız olur; web sunucusu ise farklı bir kullanıcıyla (ör. apache) çalışır. Bu durumda web sunucusu grup üyesi olarak tanımlanmışsa 775 yeterlidir. 777 ise "diğerleri" kategorisine de yazma yetkisi verdiği için zorunlu değildir ve açıktan kötüye kullanılabilir.
777 İzni Neden Güvenlik Açığı Yaratır?
chmod 777, pratikte "sunucuya bağlanabilen herkes bu dosyayı değiştirebilir" anlamına gelir. Bu riskin somut yansımaları şunlardır:
- Shell yükleme (shell upload): Saldırgan, izni açık bir dizine PHP dosyası yükleyerek sunucuya doğrudan erişim sağlayabilir.
uploads/dizinine 777 verilen ve dosya türü doğrulaması zayıf olan sitelerde bu saldırı vektörü aktif olarak kullanılmaktadır. - Paylaşımlı hostingde komşu siteler: Paylaşımlı bir hosting ortamında başka bir müşterinin PHP işlemi, 777 izinli bir dizine teorik olarak yazabilir. Hosting sağlayıcınız bunu filtreliyor olsa da varsayım olarak güvenmemek doğrudur.
- Zararlı kod enjeksiyonu: Mevcut PHP dosyalarına ek kod eklenerek site ziyaretçilerine zararlı içerik sunulabilir. Bu tür ihlaller genellikle
wp-content/themes/veyawp-content/plugins/altındaki 777 izinli dosyalar üzerinden gerçekleşir.
Kural basittir: bir dizine yalnızca gerekli kullanıcının yazmasını sağlayın, herkese açık yazmayı kapatın.
Mevcut İzinleri Kontrol Etme
SSH erişiminiz varsa mevcut izinleri hızlıca görmek için şu komutu kullanın:
ls -la /var/www/html/
Belirli bir dizindeki tüm dosyaların izinlerini görmek için:
find /var/www/html -maxdepth 2 -printf "%m %p\n" | sort
Bu komut her dosya/dizinin izin değerini ve yolunu yan yana listeler. 777 değerini kolayca fark edebilirsiniz.
Toplu İzin Düzeltme Komutları
Yanlış izinleri tek tek düzeltmek yerine aşağıdaki komutlarla tüm WordPress kurulumunu standart değerlere getirebilirsiniz. Komutları çalıştırmadan önce /var/www/html kısmını kendi kurulum yolunuzla değiştirin.
# Tüm dizinleri 755 yap
find /var/www/html -type d -exec chmod 755 {} \;
# Tüm dosyaları 644 yap
find /var/www/html -type f -exec chmod 644 {} \;
# wp-config.php'yi sıkılaştır
chmod 400 /var/www/html/wp-config.php
# .htaccess'i düzelt
chmod 644 /var/www/html/.htaccess
Bu dört komut çoğu WordPress kurulumunu güvenli bir başlangıç noktasına taşır. Ardından medya yükleme testini çalıştırın; başarısız olursa uploads/ dizinine chmod 755 yerine chmod 775 verip tekrar deneyin.
Paylaşımlı Hosting ile VDS Arasındaki Fark
Paylaşımlı hosting kullanıyorsanız SSH erişiminiz olmayabilir. Bu durumda cPanel Dosya Yöneticisi ya da bir FTP istemcisi (FileZilla gibi) üzerinden izinleri değiştirebilirsiniz. FileZilla'da bir dizine sağ tıklayarak "Dosya İzinleri" menüsünü açabilir ve sayısal değeri girerek ayarı uygulayabilirsiniz. Özyinelemeli (recursive) seçeneği ile alt dizinlere toplu uygulama da mümkündür.
VDS veya VPS kullanıyorsanız SSH ve chmod komutları en hızlı ve güvenilir yöntemdir. Ayrıca dosya sahibini ve grubunu chown ile düzenleyerek PHP-FPM kullanıcısıyla uyumlu hale getirmeniz gerekebilir:
chown -R www-data:www-data /var/www/html/
Bu komut tüm dosyaların sahibini www-data kullanıcısı ve grubuna atar; PHP-FPM aynı kullanıcıyla çalışıyorsa uploads/ dizininde ekstra izin genişletmesine gerek kalmaz.
Sonuç
WordPress dosya izinleri karmaşık görünse de uygulaması basit birkaç kurala indirgenir: dizinler 755, dosyalar 644, wp-config.php 400 ya da 440. Sorun yaşadığınızda 777'ye başvurmak yerine önce PHP işleminin hangi kullanıcıyla çalıştığını kontrol edin ve uploads/ dizinini yalnızca o kullanıcıya yazma açık bırakın.
Eğer bir VDS ya da VPS üzerinde WordPress barındırıyorsanız sunucu kurulumunuzu tamamladıktan sonra yukarıdaki toplu düzeltme komutlarını çalıştırın ve ardından bir güvenlik taraması aracıyla (örn. WP-CLI'nin wp doctor check komutu) izin yapınızı doğrulayın. Bu adımlar olası bir saldırı girişiminde saldırganın hareket alanını ciddi ölçüde daraltır.
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
Node.js VDS Kurulumu: Performans ve güvenlik odaklı net yapı
Node.js uygulaması için VDS üzerinde net kurulum: OS seçimi, Nginx ters proxy, systemd, loglar, yedekleme ve güvenlik ayarları.
Domain DNS Kayıtları Rehberi: A, AAAA, MX, TXT, CNAME
A, AAAA, MX, TXT ve CNAME kayıtlarının ne yaptığını, doğru formatları ve sık hataları örneklerle öğrenin; e-posta ve yönlendirmeyi net yönetin.
Siteyi Geçici Kapatınca SEO: Doğru 503 Kodu ve Uygulama Rehberi
Siteyi bakım/kapalı moda alırken SEO’yu korumak için doğru HTTP 503 durum kodu, nagging yapmayan headerlar ve uygulama adımlarını öğrenin.
Domain Privacy Lock Nedir? Neden Mutlaka Aktif Etmelisiniz?
Domain Privacy Lock, alan adı kaydındaki yetkisiz değişiklikleri engeller. Kimlik avı, transfer kilidi ve güvenlik adımlarını net öğrenin.
