İçindekiler
Linux'ta her dosyanın ve klasörün bir sahibi, bir grubu ve üç grup için tanımlanmış izinleri vardır. Bu yapı basittir, ama bir kez yanlış anlaşıldığında yıllarca süren güvenlik sorunlarına yol açar.
İzinleri okumak
ls -l
-rw-r--r-- 1 ahmet www 2410 Eyl 11 17:40 index.php
drwxr-xr-x 3 ahmet www 4096 Eyl 11 17:40 wp-content
İlk sütun on karakterden oluşur:
- 1. karakter: tür.
-dosya,dklasör,lsembolik bağlantı. - Sonraki üçlü: sahip (
rw-→ okuyabilir, yazabilir). - Sonraki üçlü: grup (
r--→ yalnızca okuyabilir). - Son üçlü: diğerleri, yani herkes (
r--).
Üçüncü ve dördüncü sütunlar sahibi (ahmet) ve grubu (www) gösterir.
r, w, x ne demek?
Dosyalarda anlamları açıktır: oku, yaz, çalıştır. Klasörlerde ise farklıdır ve en çok karıştırılan konu budur:
r→ klasörün içindeki dosyaların adlarını listeleyebilir.w→ klasörde dosya oluşturabilir, silebilir, adını değiştirebilir.x→ klasöre girebilir ve içindeki dosyalara erişebilir.
Bir klasörde x izni yoksa, içindeki dosyanın izni ne olursa olsun o dosyaya ulaşılamaz. "Dosyaya 644 verdim, hâlâ 403 alıyorum" şikâyetinin sebebi genellikle üst klasörlerden birindeki eksik x iznidir.
Sayısal gösterim
Her izin bir sayıya karşılık gelir: r = 4, w = 2, x = 1. Üçlüdeki sayılar toplanır:
7 = 4+2+1 = rwx
6 = 4+2 = rw-
5 = 4+1 = r-x
4 = 4 = r--
0 = ---
Böylece 644 sahip için rw-, grup ve diğerleri için r-- demektir. 755 ise sahip için rwx, diğerleri için r-x anlamına gelir.
chmod 644 dosya.php
chmod 755 klasor
chmod u+x betik.sh # sahibe çalıştırma izni ekle
chmod go-w ayar.php # grup ve diğerlerinden yazma iznini kaldır
777 neden tehlikeli?
777, herkesin o dosyaya yazabileceği anlamına gelir. "Herkes" demek, sunucuda çalışan her süreç ve her kullanıcı demektir. Paylaşımlı bir sunucuda başka bir müşterinin ele geçirilmiş sitesi, sizin 777 izinli klasörünüze PHP dosyası bırakabilir. Kendi sunucunuzda bile, web uygulamasındaki küçük bir açık saldırganın dosyalarınızı değiştirmesine izin verir.
"777 yapınca düzeldi" demek, sorunun aslında sahiplikte olduğu anlamına gelir. 777 sorunu çözmez, yalnızca kapıyı herkese açarak sorunu görünmez kılar.
Sahiplik: Asıl çözüm
Bir web sitesinde dosyalara iki taraf erişir: siz (FTP ya da SSH ile) ve web sunucusu ya da PHP süreci. PHP hangi kullanıcıyla çalışıyor? Asıl soru budur.
ps -o user= -C php-fpm | sort -u # PHP-FPM süreçleri hangi kullanıcıyla çalışıyor?
Modern hosting kurulumlarında her sitenin PHP havuzu, o sitenin kendi kullanıcısıyla çalışır. Bu durumda dosyaların sahibi de o kullanıcı olmalıdır:
chown -R ahmet:ahmet /home/ahmet/public_html
Sahiplik doğruysa 755 ve 644 izinleri yeterlidir. PHP hem okuyabilir hem yazabilir, başka hiçbir kullanıcı yazamaz.
Web siteleri için doğru ayarlar
cd /home/ahmet/public_html
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +
chmod 600 wp-config.php .env 2>/dev/null
- Klasörler:
755 - Dosyalar:
644 - Şifre içeren yapılandırma dosyaları:
600(ya da web sunucusu ayrı bir grupla okuyorsa640)
Bir kez daha: "Permission denied" teşhisi
Bir yolun her basamağındaki izinleri tek komutla görmek için:
namei -l /home/ahmet/public_html/wp-content/uploads/2026/09/resim.jpg
Bu komut yolun her klasörünün sahibini ve izinlerini sırayla listeler. Zincirde x izni eksik olan ya da sahibi yanlış olan halka hemen göze çarpar.
RHEL, AlmaLinux ve Rocky gibi dağıtımlarda bir de SELinux katmanı vardır. İzinler ve sahiplik doğru olduğu hâlde erişim reddediliyorsa:
ls -Z dosya.php
ausearch -m avc -ts recent
Bu komutlar SELinux etiketini ve son engellemeleri gösterir. SELinux'u kapatmak yerine restorecon -Rv /yol ile doğru etiketleri geri yüklemek çoğu zaman sorunu çözer.
Özet
İzin sorunlarında önce sahipliğe bakın, sonra izinlere. 755 ve 644 neredeyse her zaman yeterlidir. 777 ise neredeyse hiçbir zaman doğru cevap değildir.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.