Sunucu Yönetimi & Linux

    Linux Dosya İzinleri: chmod, chown ve 755/644 Rehberi

    rwx izin modelini, sekizli ve sembolik chmod kullanımını, chown/chgrp ile sahiplik değişimini ve web sunucular için doğru izin değerlerini anlatan pratik rehber.

    9 dk okuma Güncellendi: 1 Temmuz 2026

    Bir Linux sunucusuyla yeterince vakit geçiren herkes eninde sonunda "Permission denied" hatasıyla tanışır: bir WordPress eklentisi kendi klasörüne dosya yazamaz, elle yazdığınız bir betik ./deploy.sh dediğinizde çalışmaz ya da bir kullanıcı komşusunun dosyasını silmeye kalkınca duvara toslar. Görünüşte birbirinden bağımsız bu sorunların hepsi tek bir mekanizmaya dayanır: Linux'un dosya izinleri modeli. Bu rehberde önce rwx harflerinin dosyada ve dizinde ne anlama geldiğini, ardından sekizli (octal) gösterimle 755, 644, 600 gibi değerlerin nasıl çözüldüğünü, chmod ile chown komutlarını nasıl kullanacağınızı ve bir web sunucusunda dosya ile dizinlere hangi izinleri vermeniz gerektiğini örneklerle ele alıyoruz. Son bölümlerde ise -R ile özyineli (recursive) izin değiştirmenin en sık düşülen tuzağını ve yeni dosyaların varsayılan iznini belirleyen umask kavramını inceliyoruz. Kabuk üzerinde henüz yeniyseniz temel Linux komutları yazımız iyi bir başlangıç noktası olacaktır.

    Linux İzin Modeli Nasıl Çalışır?#

    Linux'ta her dosya ve dizinin üç ayrı sahiplik sınıfı ve her sınıf için üç ayrı yetki vardır. ls -l komutuyla bir dosyayı listelediğinizde karşınıza şuna benzer bir satır çıkar:

    $ ls -l index.php
    -rw-r--r-- 1 www-data www-data 2048 Tem  1 10:00 index.php
    

    Baştaki 10 karakterlik dizgiyi parçalara ayıralım:

    • İlk karakter dosya tipini gösterir: - normal dosya, d dizin, l sembolik bağlantı (symlink).
    • Sonraki üç karakter (rw-) sahibin (user/owner) iznidir.
    • Ardından gelen üç karakter (r--) grubun (group) iznidir.
    • Son üç karakter (r--) diğer herkesin (others) iznidir.

    Her üçlü grupta sıra hep aynıdır: r (read/okuma), w (write/yazma), x (execute/çalıştırma). Bir yetki yoksa yerine - konur. Yani rw-r--r-- şu anlama gelir: sahibi okuyup yazabilir ama çalıştıramaz; grup ve diğer herkes sadece okuyabilir.

    Dosyada ve Dizinde rwx Farklı Anlam Taşır#

    Bu ayrım sık kafa karıştırır ama kritik önemdedir:

    İzinDosyada anlamıDizinde anlamı
    rDosya içeriği okunabilir (cat, less)Dizindeki dosya isimleri listelenebilir (ls)
    wDosya içeriği değiştirilebilirDizin içinde dosya oluşturulabilir/silinebilir
    xDosya bir program/betik olarak çalıştırılabilirDizine girilebilir (cd) ve içindeki dosyalara erişilebilir

    Buradan çıkan pratik sonuç şu: bir dizine x izni olmadan, o dizinin içindeki dosyaları isimleriyle bilseniz bile açamazsınız — cd başarısız olur. Bu yüzden web sunucularında dizinlere neredeyse her zaman x izni verilir, aksi halde web sunucusu prosesi dizin içine giremez.

    Sekizli (Octal) Gösterim: 755, 644, 600 Ne Anlama Gelir?#

    chmod komutunda izinleri genelde üç haneli bir sayıyla ifade ederiz: 755, 644, 600 gibi. Bu sistemin mantığı basittir — her yetki bir ikilik (bit) değere karşılık gelir ve üçü toplanır:

    • r (okuma) = 4
    • w (yazma) = 2
    • x (çalıştırma) = 1

    Bir sınıfın (sahip/grup/diğer) izinlerini bu üç sayıyı toplayarak buluruz. Örneğin rwx = 4+2+1 = 7, rw- = 4+2 = 6, r-- = 4 = 4, r-x = 4+1 = 5. Üç haneli sekizli sayının her hanesi sırasıyla sahip, grup, diğer içindir.

    En sık karşılaşacağınız değerler şunlardır:

    • 755 (rwxr-xr-x): Sahip her şeyi yapabilir, grup ve diğerleri okuyup çalıştırabilir ama yazamaz. Dizinler ve çalıştırılabilir betikler için tipik değer.
    • 644 (rw-r--r--): Sahip okur-yazar, grup ve diğerleri sadece okur. Sıradan dosyalar (HTML, CSS, resim, çoğu PHP dosyası) için standart değer.
    • 600 (rw-------): Sadece sahip okuyup yazabilir, başka kimse erişemez. Şifre, özel anahtar, .env gibi hassas dosyalar için kullanılır.
    • 700 (rwx------): Sadece sahip her şeyi yapabilir. Özel betikler veya ~/.ssh gibi dizinler için uygundur.
    • 777 (rwxrwxrwx): Herkes her şeyi yapabilir — pratikte neredeyse hiçbir zaman doğru cevap değildir, ileride ayrıca değineceğiz.

    chmod Komutu: Sekizli ve Sembolik Kullanım#

    chmod (change mode) izinleri değiştirmenin standart komutudur. İki farklı söz dizimini destekler.

    Sekizli (Sayısal) Kullanım#

    chmod 644 index.php            # sıradan bir dosya: sahip okur-yazar, gerisi okur
    chmod 755 scripts/deploy.sh    # çalıştırılabilir betik: sahip tam yetkili
    chmod 600 .env                 # hassas dosya: yalnızca sahip erişebilir
    

    Bu biçim tüm izin bitlerini tek seferde ve mutlak olarak belirler — dosyanın önceki izinleri ne olursa olsun tamamen üzerine yazılır. Üç haneli sayının yanına dördüncü bir hane geldiğinde (chmod 4755 gibi) bunlar setuid/setgid/sticky bit gibi özel bitlerdir; günlük dosya/dizin izinleri için gerekmez, bu yüzden burada üç haneye odaklanıyoruz.

    Sembolik Kullanım#

    Bazen mevcut izinlere dokunmadan sadece tek bir yetkiyi eklemek/çıkarmak istersiniz; bunun için sembolik gösterim daha kullanışlıdır:

    chmod u+x deploy.sh        # sahibe çalıştırma izni EKLE
    chmod g-w rapor.txt        # gruptan yazma iznini ÇIKAR
    chmod o=r ayarlar.conf     # "diğer" iznini sadece okumaya EŞİTLE
    chmod a+r README.md        # herkese (all) okuma izni ver
    

    Harfler şu şekilde okunur: u (user/sahip), g (group/grup), o (others/diğer), a (all/hepsi); işlemler ise + (ekle), - (çıkar), = (eşitle/ayarla). Bir hedef sınıf belirtmeden chmod +x deploy.sh yazarsanız işlem a+x gibi davranır ama umask tarafından maskelenir; niyetiniz "yalnızca sahip çalıştırsın" ise chmod u+x demek daha güvenlidir. Genel olarak bu yöntem, bir betiği çalıştırılabilir yapmak gibi tek noktalı düzeltmelerde önce mevcut izni sekizliye çevirip yeniden hesaplamaktan çok daha pratiktir; çünkü diğer bitlere hiç dokunmadan sadece istediğiniz yetkiyi değiştirir.

    chown ve chgrp: Sahiplik Değiştirme#

    İzinler kimin ne yapabileceğini belirlerken, sahiplik dosyanın kime ait olduğunu belirler. Bir dosyanın sahibi ve grubu chown (change owner) komutuyla değiştirilir:

    chown www-data:www-data index.php
    chown -R deploy:deploy /var/www/site
    chgrp developers proje/
    

    chown kullanici:grup dosya biçimi hem sahibi hem grubu tek komutta değiştirir; sadece grubu değiştirmek isterseniz chgrp grup dosya yeterlidir. Web sunucularında en sık karşılaşılan senaryo şudur: dosyalar FTP ile başka bir kullanıcı adına yüklenmiştir ama Nginx/Apache prosesi (www-data veya nginx kullanıcısı) o dosyalara erişemez — çözüm genelde chown -R www-data:www-data ile sahipliği web sunucusu kullanıcısına devretmektir. chown komutunu çalıştırmak için genelde root yetkisi (sudo) gerekir; sıradan bir kullanıcı kendi sahip olmadığı bir dosyanın sahipliğini başkasına devredemez.

    Web Sunucusu İçin Doğru İzin Değerleri#

    Bir web sunucusunu güvenli tutarken çalışır durumda kalması gereken tipik izin şeması şöyledir:

    • Dizinler: 755. Web sunucusu prosesinin dizinlere girip dosya listeleyebilmesi için x izni şarttır; ama grup/diğerlerin dizine yeni dosya yazabilmesi (w) istenmez.
    • Sıradan dosyalar (HTML, CSS, JS, resim, çoğu PHP): 644. Herkes okuyabilir (tarayıcıya servis edilir), sadece sahip değiştirebilir.
    • Yükleme (upload) dizinleri: Web uygulamasının (örneğin WordPress wp-content/uploads) çalışma anında dosya yazabilmesi gerekir. Buradaki doğru yaklaşım izni gevşetmek değil, sahipliği ayarlamaktır: dizinin sahibi web sunucusu kullanıcısı (www-data / nginx) olduğunda 755 dizin ve 644 dosya izinleri yeterlidir, çünkü yazma yetkisi zaten sahibe açıktır. Dizini 777 yapmak yerine chown ile doğru sahibi vermek hem çalışır hem de güvenli kalır.
    • Yapılandırma/gizli dosyalar (wp-config.php, .env, veritabanı kimlik bilgileri): 600 veya en fazla 640. Bu dosyalar veritabanı şifresi gibi hassas bilgiler içerir; grup ve diğerlerine kapatılmalıdır.
    • SSH anahtarları (~/.ssh/id_rsa, ~/.ssh/authorized_keys): 600, ~/.ssh dizini 700. SSH istemcisi bu izinler gevşekse bağlantıyı reddeder — güvenlik konusunu SSH bağlantısı ve güvenliği yazımızda daha detaylı işledik.

    777 neden tehlikelidir? 777 (rwxrwxrwx) izni sunucudaki herkese — sunucuyu paylaşan diğer kullanıcılara, ele geçirilmiş başka bir hesaba, hatta bazı yanlış yapılandırılmış servislere — o dosyayı okuma, değiştirme ve (dosyaysa) çalıştırma hakkı verir. Bir saldırgan yazılabilir bir PHP dosyası bulduğunda oraya kötü amaçlı kod enjekte edip web sunucusu üzerinden çalıştırabilir. "Permission denied hatası aldım, 777 yapıp geçeyim" refleksi kısa vadede sorunu çözer ama güvenlik açığını kalıcı hale getirir — doğru çözüm her zaman dosyanın gerçek sahipliğini ve minimum gerekli izni bulmaktır. Sunucu güvenliğini genel olarak sıkılaştırmak istiyorsanız WAF ve DDoS koruma hizmetlerimiz de ek bir savunma katmanı sağlar.

    -R (Özyineli) Kullanımın Tuzağı#

    chmod ve chown komutlarına -R (recursive) bayrağı eklediğinizde işlem, belirttiğiniz dizinin altındaki her şeye — hem dosyalara hem dizinlere — aynı değeri uygular. İşte tam olarak burada yaygın bir hata yapılır:

    # YANLIŞ: dosyalara da 755 (çalıştırma izni) verir, gereksiz ve riskli
    chmod -R 755 /var/www/site
    

    Bu komut, dizinlerin 755 olmasını isterken sıradan bir HTML veya PHP dosyasına da gereksiz yere çalıştırma (x) izni verir. Tek başına dosyanın kendiliğinden çalışmasına yol açmaz, ancak izin hijyenini bozar, saldırı yüzeyini gereksizce genişletir ve "her şeye aynı izin" gibi tehlikeli bir alışkanlık yerleştirir. Doğrusu, dizinlerle dosyalara ayrı ayrı izin vermektir; bunu find ile dosya tipine göre filtreleyerek tek satırda yapabilirsiniz:

    # Doğru yöntem: önce tüm dizinlere 755, sonra tüm dosyalara 644
    find /var/www/site -type d -exec chmod 755 {} \;
    find /var/www/site -type f -exec chmod 644 {} \;
    

    chown -R için ise durum farklıdır — sahiplik değişiminde dosya/dizin ayrımı yapmaya gerek yoktur, çünkü sahiplik hem dosya hem dizin için aynı mantıkla çalışır:

    chown -R www-data:www-data /var/www/site
    

    Ayrıca -R özyineli bir işlemi kök dizine (/) veya yanlış bir yola yakın çalıştırmak — özellikle sudo ile — geri döndürülmesi zor bir hasara yol açabilir; komutu çalıştırmadan önce hedef yolu iki kez kontrol etmek iyi bir alışkanlıktır.

    umask: Yeni Dosyaların Varsayılan İzni#

    Bir dosya veya dizin oluşturduğunuzda ona hangi iznin verileceğini umask (user mask) değeri belirler. Mantığı şudur: sistem "tam açık" bir başlangıç varsayar (dosyalar için 666, dizinler için 777 — dikkat edin, yeni dosyalara çalıştırma biti hiç verilmez) ve umask bu değerden hangi bitlerin kaldırılacağını maskeler. Çoğu Linux dağıtımında sıradan kullanıcılar için varsayılan umask değeri 022'dir; bu maske grup ve diğerlerinin yazma bitini kaldırır, sonuçta yeni dosyalar 644, yeni dizinler 755 ile oluşur — bu değerlerin yukarıda önerdiğimiz web sunucusu şemasıyla örtüşmesi tesadüf değildir. Şu anki değeri görmek için:

    umask
    

    Değeri kalıcı değiştirmek isterseniz ~/.bashrc veya /etc/profile içine umask 027 gibi bir satır eklenir; bu, gruba yazma iznini varsayılan olarak kapatıp daha sıkı bir varsayılan sağlar. umask günlük işlerde nadiren elle değiştirilir ama "neden yeni oluşturduğum dosya 644 çıkıyor" sorusunun cevabı genelde budur.

    Sıkça Sorulan Sorular#

    chmod 755 ile chmod 777 arasındaki fark nedir?#

    755 (rwxr-xr-x) sahibe tam yetki verirken grup ve diğerlerine sadece okuma/çalıştırma izni tanır; 777 (rwxrwxrwx) ise herkese yazma iznini de açar. Web dosyalarında 777 kullanmak, dosyanın sunucudaki herhangi bir kullanıcı veya süreç tarafından değiştirilebilmesine izin verdiği için ciddi bir güvenlik riskidir.

    chmod -R 777 yaparsam sorun çözülür mü?#

    Kısa vadede "Permission denied" hatasını ortadan kaldırır ama asıl sorunu (yanlış sahiplik veya eksik izin) çözmez, sadece maskeler. Doğru yaklaşım dosyanın gerçek sahibini chown ile web sunucusu kullanıcısına (www-data, nginx vb.) ayarlamak ve izinleri 644/755 gibi minimum gerekli düzeyde tutmaktır.

    Bir dizine x izni olmadan neden içine giremiyorum?#

    Dizinlerde x izni, o dizinin içine "girme" ve içindeki dosyalara erişme yetkisidir. r izniniz olsa bile x yoksa dosya adlarını listeleyebilirsiniz ama cd ile içine giremez, dosyaları açamazsınız. Bu yüzden erişilebilir olması gereken her dizine en az x izni tanınmalıdır.

    chown komutunu neden sudo ile çalıştırmam gerekiyor?#

    Bir dosyanın sahipliğini değiştirmek, o dosya üzerinde kimin yetkili olacağını yeniden tanımlamak demektir; bu nedenle sıradan kullanıcılar güvenlik gereği kendi sahip olmadıkları dosyaların sahipliğini değiştiremez. root (yani sudo) bu kısıtlamadan muaftır ve sahiplik devrini gerçekleştirebilir.

    WordPress için wp-config.php dosyasına hangi izni vermeliyim?#

    wp-config.php veritabanı kullanıcı adı ve şifresi gibi hassas bilgiler içerdiğinden 600 (sadece sahip okur-yazar) veya en fazla 640 (sahip okur-yazar, grup sadece okur) önerilir. 644 gibi herkese açık bir izin, paylaşımlı bir sunucuda başka kullanıcıların veritabanı kimlik bilgilerinizi okumasına yol açabilir.

    chmod ve chown işlemlerini FTP üzerinden de yapabilir miyim?#

    Çoğu FTP istemcisi (FileZilla gibi) dosya/dizin izinlerini değiştirme (chmod) seçeneği sunar, ancak sahiplik (chown) değişimi genelde sunucu tarafında kabuk erişimi gerektirir çünkü FTP protokolü kullanıcı/grup kavramını doğrudan yönetmez. Sahiplik sorunları için SSH ile bağlanıp chown komutunu çalıştırmak daha güvenilir bir yoldur.

    Dosya izinleri, bir sunucunun temel güvenlik katmanlarından biridir ve doğru ayarlandığında hem uygulamanızın sorunsuz çalışmasını hem de olası bir sızıntının etkisini sınırlamayı sağlar. Kendi sunucunuzda bu izinleri sıfırdan, tam kontrol sahibi olarak yönetmek isterseniz VDS veya sanal sunucu seçeneklerimize göz atabilirsiniz.

    LinuxİzinlerGüvenlik

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.