
Kod çalışıyordu, dosyaları sunucuya yüklediniz ve site "403 Forbidden" veya "500 Internal Server Error" vermeye başladı. Kodda değişiklik yok, yapılandırma aynı — ama site açılmıyor.
Bu senaryonun nedeni neredeyse her zaman aynıdır: dosya izinleri ve sahiplik. VDS sunucu yönetiminde en sık karşılaşılan ve en kolay çözülen sorun sınıfıdır.
İzin Sisteminin Mantığı
Linux'ta her dosyanın bir sahibi, bir grubu ve üç izin kümesi vardır: sahip için, grup için ve diğer herkes için. Her kümede üç yetki bulunur — okuma, yazma ve çalıştırma.
| İzin | Dosyada anlamı | Dizinde anlamı |
|---|---|---|
| Okuma | İçeriği okuyabilir | İçindekileri listeleyebilir |
| Yazma | İçeriği değiştirebilir | Dosya ekleyip silebilir |
| Çalıştırma | Program olarak çalıştırabilir | İçine girebilir |
Tablodaki en çok yanlış anlaşılan satır sonuncusudur: dizinlerde çalıştırma izni, o dizine girebilmek anlamına gelir. Bu izin yoksa içindeki dosyalar okunabilir olsa bile erişilemez — ve ortaya "403 Forbidden" çıkar.
Sahiplik: Asıl Sorun Genellikle Burada
Web sunucusu, kendi kullanıcı hesabıyla çalışır. Dosyalarınız başka bir kullanıcıya aitse ve "diğerleri" için okuma izni yoksa, web sunucusu dosyayı okuyamaz.
Bu durum en çok şu anlarda oluşur:
- Root ile dosya kopyalamak. Kopyalanan dosyaların sahibi root olur, web sunucusu erişemez.
- Arşiv açmak. Sıkıştırılmış dosya, içindeki orijinal sahiplik ve izinleri taşıyabilir.
- Farklı bir kullanıcıyla FTP yüklemesi. Yükleyen kullanıcı sahip olur.
- Sürüm kontrolünden çekmek. Hangi kullanıcı çektiyse dosyalar ona ait olur.
Çözüm, dosyaların sahipliğini web sunucusunun kullanıcısına veya o kullanıcının erişebileceği bir gruba vermektir.
Doğru İzin Değerleri
Web uygulamaları için genel kabul görmüş yaklaşım:
- Dizinler: sahip tam yetkili, diğerleri okuma ve giriş. Dizine girilebilmeli ama içeriği değiştirilememeli.
- Dosyalar: sahip okuma-yazma, diğerleri yalnızca okuma. Web dosyalarının çalıştırma iznine ihtiyacı yoktur.
- Yükleme dizinleri: web sunucusu yazabilmeli. Ancak buradaki dosyalar asla çalıştırılabilir olmamalı.
- Yapılandırma dosyaları: mümkün olduğunca kısıtlı. Veritabanı şifresi içeren dosyayı herkes okuyabilir durumda bırakmayın.
Üçüncü madde bir güvenlik konusudur: kullanıcıların dosya yükleyebildiği bir dizinde çalıştırma izni varsa, yüklenen bir betik sunucuda çalıştırılabilir. Bu, en yaygın sunucu ele geçirme yollarından biridir.
Asla Yapılmaması Gereken
İnternette en sık rastlanan ve en zararlı tavsiye şudur: "izin sorunu varsa herkese tam yetki verin."
Bu, sorunu çözer gibi görünür ama:
- Sunucudaki herhangi bir kullanıcı dosyalarınızı değiştirebilir
- Bir güvenlik açığından yararlanan saldırgan kodunuzu doğrudan düzenleyebilir
- Yapılandırma dosyalarınızdaki şifreler herkese açık hâle gelir
Doğru yaklaşım izinleri gevşetmek değil, sahipliği düzeltmektir. Dosyalar doğru kullanıcıya aitse, kısıtlı izinlerle sorunsuz çalışır.
Paylaşımlı hostingde bu ayarların çoğu sizin kontrolünüzde değildir; VDS sunucunuzda ise sahiplik ve izin yapısını baştan doğru kurabilirsiniz. Bu, kök erişiminin en pratik faydalarından biridir.
Teşhis Adımları
403 Alıyorsanız
Web sunucusu dosyayı görüyor ama okuyamıyor. Kontrol sırası: dizin zincirindeki her klasörün giriş izni var mı, dosyanın okuma izni var mı, sahiplik doğru mu?
Sık atlanan nokta: üst dizinlerden birinde giriş izni yoksa, hedef dosyanın izinleri doğru olsa bile erişilemez.
500 Alıyorsanız
Genellikle uygulama bir dosyaya yazamıyordur — log dosyası, önbellek dizini veya oturum klasörü. Hata logu size hangi yolun sorunlu olduğunu söyler.
Yükleme Çalışmıyorsa
Hedef dizine web sunucusu kullanıcısının yazma izni yoktur. Dizinin sahipliğini ve yazma iznini kontrol edin.
Betik Çalışmıyorsa
Zamanlanmış görev veya kabuk betiği çalışmıyorsa, dosyanın çalıştırma izni eksik olabilir. Web dosyalarının aksine, betiklerin bu izne ihtiyacı vardır.
Pratik Alışkanlıklar
- Dosyaları root ile kopyalamayın. Uygulama kullanıcısıyla çalışın; sonradan sahiplik düzeltmekle uğraşmazsınız.
- Dağıtım sürecinize izin ayarını ekleyin. Her yayında elle düzeltmek yerine, otomatik olarak doğru izinleri uygulayın.
- Yükleme dizinlerini ayrı tutun. Kullanıcı dosyalarını uygulama kodundan ayrı bir yerde saklayın.
- Yapılandırma dosyalarını web kök dizini dışında tutun. Erişilemeyecek yerdeki dosya, izin hatasıyla ifşa olmaz.
Sonuç
İzin ve sahiplik sorunları, sunucu yönetiminin en sık karşılaşılan ama en hızlı çözülen problemlerindendir. Ayırt edici kural: 403 genellikle okuma veya dizine giriş sorunudur, 500 ise yazma sorunudur. Çözüm izinleri gevşetmek değil sahipliği düzeltmektir — "herkese tam yetki" tavsiyesi sorunu gizler, güvenliği yok eder. Ve yükleme dizinlerinde çalıştırma izni bulunmadığından emin olun; bu tek ayar, en yaygın sunucu ele geçirme yollarından birini kapatır.
Sıkça Sorulan Sorular (SSS)
Neden 403 Forbidden hatası alıyorum?
Web sunucusu dosyayı okuyamıyor. Üç şeyi kontrol edin: dosyanın okuma izni, dosyaya giden yoldaki tüm dizinlerin giriş izni ve sahiplik. Üst dizinlerden birinde giriş izni yoksa, hedef dosyanın izinleri doğru olsa bile erişilemez.
İzin sorununda herkese tam yetki vermek çözüm mü?
Hayır, ciddi bir güvenlik hatasıdır. Sunucudaki herhangi bir kullanıcı veya bir açıktan yararlanan saldırgan dosyalarınızı değiştirebilir hâle gelir. Doğru çözüm izinleri gevşetmek değil, dosya sahipliğini web sunucusunun kullanıcısına düzeltmektir.
Yükleme dizininde nelere dikkat etmeliyim?
Web sunucusunun yazma izni olmalı ama çalıştırma izni kesinlikle olmamalı. Kullanıcıların dosya yükleyebildiği ve çalıştırma izni bulunan bir dizin, yüklenen bir betiğin sunucuda çalıştırılmasına imkân verir — en yaygın ele geçirme yollarından biridir.
Dosyaları root ile kopyalamak neden sorun çıkarır?
Kopyalanan dosyaların sahibi root olur. Web sunucusu farklı bir kullanıcıyla çalıştığı için bu dosyaları okuyamaz veya değiştiremez. Mümkünse uygulama kullanıcısıyla çalışın; root kullandıysanız işlem sonrası sahipliği düzeltin.