2026年11月12日
2026年11月12日
WordPress Dosya İzinleri: Dizin 755, Dosya 644, wp-config.php
Bu makale, Japonca orijinalin yerelleştirilmiş sürümüdür. Japonca orijinali oku
WordPress dosya izinlerinde temel kural, dizinler için 755 ve dosyalar için 644 kullanmaktır. Veritabanı bağlantı bilgilerini içeren wp-config.php dosyasını okuyabilenleri ise daha da sınırlayın. Yalnızca rakamlara değil, dosyaların sahibinin kim olduğuna ve PHP'nin hangi kullanıcıyla çalıştığına da bakarsanız hem bilgi sızıntısını hem de "güncelleme yapılamıyor" sorununu önleyebilirsiniz. Bu yazıdaki önerilen değerler, Kasım 2026 itibarıyla WordPress'in resmî "WordPress'i Sağlamlaştırma (Hardening WordPress)" sayfasına bakılarak doğrulanmıştır.
İzin rakamları nasıl okunur
İzinler "sahip, grup, diğerleri" olmak üzere üç takımdan oluşur ve okuma (4), yazma (2), çalıştırma (1) değerlerinin toplamıyla ifade edilir.
| Değer | Gösterim | Anlamı |
|---|---|---|
| 755 | rwxr-xr-x | Sahip okuyabilir, yazabilir ve dizinin içine girebilir; diğerleri yalnızca okuyabilir ve içine girebilir (dizinler için) |
| 644 | rw-r--r-- | Sahip okuyabilir ve yazabilir, diğerleri yalnızca okuyabilir (dosyalar için) |
| 640 | rw-r----- | Sahip okuyabilir ve yazabilir, grup yalnızca okuyabilir, diğerleri hiçbir şey yapamaz |
| 600 | rw------- | Yalnızca sahip okuyabilir ve yazabilir |
| 440 / 400 | r--r----- / r-------- | Kimse yazamaz; okuma yalnızca sahip (ve grup) için |
Bir dizindeki "çalıştırma (x)" izni, o dizinin içine girme iznidir. Bir dizinden x iznini kaldırırsanız içindeki dosyalar okunamaz hale gelir.
WordPress için önerilen değerler
| Hedef | Önerilen değer | Not |
|---|---|---|
| Dizinler | 755 (paylaşımlı sunucuda başkalarının görmesini istemiyorsanız 750) | Resmî otomatik güncellemeler de dizinleri 755'e getirir |
| Dosyalar | 644 (aynı durumda 640) | Resmî otomatik güncellemeler de dosyaları 644'e getirir |
| wp-config.php | Yalnızca kendiniz ve web sunucusu okuyabilecek şekilde kısıtlayın | Resmî açıklamada "genellikle 400 veya 440" denir. PHP, dosya sahibiyle aynı kullanıcı olarak çalışan bir ortamda 600 veya 400 de çalışır |
| .htaccess | 644 | Kalıcı bağlantı ayarını kaydederek WordPress'in dosyayı yeniden yazmasına izin veriyorsanız, PHP'nin çalıştığı kullanıcının yazabilmesi gerekir |
| wp-content/uploads | Dizin 755, dosya 644 | Sahibi, PHP'nin çalıştığı kullanıcının yazabileceği şekilde ayarlanmalıdır |
777 (herkes yazabilir) yapmanıza gerek yoktur. Paylaşımlı sunucuda aynı sunucudaki başka kullanıcılar tarafından değiştirilme riski doğar.
Bazı kiralık sunucu hizmetleri (PHP'nin çalıştırılma biçimi sunucudan sunucuya farklı olduğundan) kendi önerilen değerlerini belirleyebilir. Sözleşme yaptığınız sunucunun kılavuzunda değerler yazıyorsa onları önceliklendirin.
Sahiplik nasıl düşünülmeli
Resmî açıklamaya göre dosyaların sahibi kendi kullanıcı hesabınız olmalı ve onlara siz yazabilmelisiniz. Yalnızca WordPress'in yazması gereken dosyalarda (uploads, tema düzenleyicisini kullanıyorsanız temalar gibi) sahibi veya grubu, web sunucusunun (PHP'nin) çalıştığı kullanıcının yazabileceği şekilde eşleştirin.
Her şeyi chown -R www-data:www-data gibi bir komutla web sunucusu kullanıcısına verirseniz, PHP tüm dosyaları değiştirebilir hale gelir. Bir eklenti açığı kullanıldığında zarar kolayca büyür; bu yüzden önce mevcut durumu kontrol edip sonra karar verin.
Eklenti veya çekirdek güncellemesinde "bağlantı bilgileri (FTP ana bilgisayar adı, kullanıcı adı, parola)" istenmesinin nedeni çoğu zaman bu sahiplik uyuşmazlığıdır. WordPress, yalnızca PHP'nin oluşturduğu dosyaların sahibi ile WordPress dosyalarının sahibi aynıysa dosyaları doğrudan yazma yöntemini seçer. Farklıysa FTP üzerinden güncelleme ister. İzinleri 777'ye genişletmek yerine sahipliği eşleştirerek düzeltin.
Mevcut ayarları kontrol etme
SSH ile WordPress dizinine girin ve aşağıdaki komutlarla değerleri ve sahibi kontrol edin. Yolları kendi ortamınıza göre değiştirin.
cd /var/www/html
# wp-config.php değeri, sahibi ve grubu
stat -c '%a %U:%G %n' wp-config.php
# Diğer kullanıcıların yazabildiği dosya ve dizinleri bul
find . -perm -o=w ! -type l
# uploads içindeki PHP dosyalarını bul (normalde bulunmaz)
find wp-content/uploads -type f -name '*.php'
Web üzerinden erişildiğinde PHP'nin çalıştığı kullanıcıyı sunucu ayarlarından (PHP-FPM havuzundaki user gibi) veya kiralık sunucunun kılavuzundan öğrenin. SSH ile giriş yaptığınız kullanıcıyla aynı olmayabilir.
uploads içinde tanımadığınız bir PHP dosyası varsa dosyanın bozulmuş (kurcalanmış) olduğundan şüphelenin ve silmeden önce dosyanın tarihini ve içeriğini kaydedin.
İzinleri toplu düzeltme
WordPress dizininde çalıştırın. Çalıştırmadan önce yedek alın.
cd /var/www/html
# Dizinleri 755, dosyaları 644 yap
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
# wp-config.php'yi kısıtla (PHP'nin dosya sahibi olarak çalıştığı ortam örneği)
chmod 600 wp-config.php
wp-config.php değerini ortamınıza göre şöyle seçin.
- PHP, dosya sahibiyle aynı kullanıcı olarak çalışıyorsa (çoğu paylaşımlı kiralık sunucu, kullanıcı başına PHP-FPM): 600 veya 400
- Sahibi kendi hesabınızsa ve web sunucusu grup olarak okuyorsa: 640 veya 440 yapın ve grubu web sunucusunun grubu olarak ayarlayın
# Örnek: sahibi kendiniz, grubu web sunucusu (www-data) yapıp 640 ver
sudo chgrp www-data wp-config.php
chmod 640 wp-config.php
Ayardan sonra siteyi ve yönetim ekranını açıp görüntülemenin ve girişin çalıştığını doğrulayın. Bembeyaz bir ekran veya hata alırsanız PHP wp-config.php dosyasını okuyamıyor demektir. Değeri 644'e geri alın, ardından sahibi ve grubu yeniden gözden geçirin.
400 veya 440 yaparsanız wp-config.php'ye yazan eklentiler (önbellek ayarlarını yazanlar gibi) başarısız olur. Bu tür eklentileri yapılandırırken yalnızca geçici olarak yazma izni verin.
wp-config.php’nin web üzerinden okunmasını engelleme
PHP düzgün çalışıyorsa wp-config.php'ye tarayıcıdan erişseniz de içeriği görünmez. PHP durduğunda kaynağın görüntülenmesini önlemek için web sunucusu tarafında da erişimi reddedin. Apache 2.4'te, WordPress'in bulunduğu dizindeki .htaccess dosyasına aşağıdakini yazın (eski Order Deny,Allow / Deny from all Apache 2.2 yazımıdır).
<Files "wp-config.php">
Require all denied
</Files>
Ayrıntılı adımlar "wp-config.php erişimini reddetme ayarı" yazısında anlatılmaktadır.
.htaccess dosyasının kendisine erişim, Apache'nin standart ayarıyla (httpd.conf içindeki <Files ".ht*">) zaten reddedilir.
Resmî açıklamaya göre wp-config.php dosyasını WordPress'in bulunduğu dizinin bir üst dizinine de taşıyabilirsiniz. WordPress, aynı dizinde wp-config.php yoksa bir üst dizine bakar. Ancak resmî açıklama da etkisinin küçük olduğu görüşüne ve yanlış yapılırsa tersine tehlikeli olabileceğine değinir. Taşıyacaksanız bir üst dizinin herkese açık bir dizin olmadığından emin olun.
uploads içinde PHP çalıştırmayı engelleme
uploads, WordPress'in yazdığı bir dizin olduğundan saldırıyla dosya bırakılmaya elverişli bir yerdir. Burada PHP'nin çalışmasını engellerseniz, dosya bırakılsa bile çalışmaz.
Apache 2.4'te wp-content/uploads/.htaccess dosyasını oluşturup aşağıdakini yazın.
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
.htaccess içinde Require kullanabilmek için sunucu tarafında AllowOverride ile buna izin verilmiş olması gerekir. İzin verilmemişse 500 hatası alınır veya ayar yok sayılır. Yazdıktan sonra https://example.com/wp-content/uploads/test.php gibi var olmayan bir PHP adresini açıp 403 aldığınızı doğrulayın (404 geliyorsa ayar etkili değildir).
Nginx'te server bloğunun içinde, PHP'yi işleyen location ~ \.php$ bloğundan önce aşağıdakini koyun. Düzenli ifadeli location blokları yukarıdan aşağıya sırayla eşleştirilir ve ilk eşleşen kullanılır.
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
Ayarı değiştirdikten sonra nginx -t ile sözdizimini kontrol edip yeniden yükleyin.
Ayrıca WordPress'in medya yüklemesi, izin verilen türler (görsel, PDF vb.) dışındaki dosyaları varsayılan olarak kabul etmez. PHP dosyasını medya olarak yüklemek, yönetim ekranından normalde mümkün değildir.
Dikkat edilecekler
- İzinleri değiştirmeden önce dosyaların ve veritabanının yedeğini alın.
- İzinleri bir FTP programıyla değiştiriyorsanız, bazı sunucularda toplu değişiklik desteklenmeyebilir. Dosya sayısı çoksa SSH'deki
findkomutunu kullanmak daha hızlıdır ve atlanan dosya kalmasını da önler. - Güncelleme sırasında FTP bağlantı bilgileri isteniyorsa izinleri genişletmeyin, sahipliği kontrol edin. "WordPress izin hatası nasıl düzeltilir" yazısına da bakabilirsiniz.
- Yukarıdaki kontrol komutlarını (diğer kullanıcıların yazabildiği dosyalar, uploads içindeki PHP) düzenli olarak çalıştırırsanız ayar bozulmalarını veya kurcalamayı erken fark edersiniz.
WordPress hakkında sorunuz mu var? Bu sitenin yayıncısı Japonya'dadır ve Japonca yanıt verir. İletişim (Japonca)