Chmod İzinleri Nasıl Okunur? 755, 644 ve Diğerlerinin Anlamı
Chmod 755 ne anlama gelir: sahip dosyayı okuyabilir, yazabilir ve çalıştırabilir; grup ve diğer herkes yalnızca okuyabilir ve çalıştırabilir. Bu üç rakamlı sayı (755, 644, 600…) aslında üç ayrı iznin toplamıdır ve her rakam sahip, grup, diğerleri sırasına göre okunur. ls -l çıktısındaki rwxr-xr-x gibi bir dize de tam olarak aynı bilgiyi, sadece harflerle gösterir.
Octal rakam nasıl oluşur: 4, 2, 1 mantığı
Her izin sınıfının (sahip, grup, diğerleri) tek bir rakamı vardır ve bu rakam üç bitin toplamıdır: okuma 4, yazma 2, çalıştırma 1 değerindedir. Bir sınıfa hangi izinler verilmişse, o izinlerin sayısal değerleri toplanır ve 0 ile 7 arasında bir rakam elde edilir.
Örneğin rwx (oku + yaz + çalıştır) 4+2+1=7 eder. rw- (oku + yaz, çalıştırma yok) 4+2=6 eder. r-x (oku + çalıştır, yazma yok) 4+1=5 eder. r-- (yalnızca oku) tek başına 4’tür. Üç haneli octal sayının her hanesi bu hesabı kendi sınıfı için tekrarlar: ilk hane sahip, ikinci hane grup, üçüncü hane diğerleri.
755’i bu şekilde çözersek: ilk 7, sahip için rwx (4+2+1); ikinci 5, grup için r-x (4+1); üçüncü 5, diğerleri için de r-x (4+1). Sonuç: sahip her şeyi yapabilir, grup ve diğerleri sadece okuyup çalıştırabilir, yazamaz.
Sık kullanılan izin kombinasyonları
Aşağıdaki tablo en sık karşılaşılan chmod komutlarını, karşılık gelen octal ve sembolik gösterimlerini ve tipik kullanım alanlarını listeler.
| Komut | Octal | Sembolik | Tipik kullanım |
|---|---|---|---|
| chmod 600 file | 600 | rw------- | SSH özel anahtarı (id_rsa), .env / gizli bilgi dosyası |
| chmod 644 file | 644 | rw-r—r— | Sıradan dosya (HTML, config, log), sahip düzenler herkes okur |
| chmod 700 dir | 700 | rwx------ | Yalnızca sahibinin girebildiği özel klasör |
| chmod 755 script.sh | 755 | rwxr-xr-x | Herkese açık script veya dizin, sahip düzenler herkes çalıştırabilir/girebilir |
| chmod 775 dir | 775 | rwxrwxr-x | Paylaşılan ekip dizini, sahip ve grup yazabilir |
| chmod 777 file | 777 | rwxrwxrwx | Herkes okuyabilir, yazabilir, çalıştırabilir; kaçının, güvenlik riski |
Dizinlerde küçük ama sık karıştırılan bir ayrıntı var: bir dizine cd ile girebilmek için çalıştırma (x) bitine ihtiyaç vardır, içeriğini ls ile listeleyebilmek için ise okuma (r) bitine ihtiyaç vardır. Okunabilir ama çalıştırılamayan bir dizin bazı araçların içindeki dosya adlarını göstermesine izin verebilir, ama o dizine girmenize veya içindeki dosyaların detaylarına (stat) ulaşmanıza izin vermez. Bu iki bitin birbirinden bağımsız çalışması pek çok yeni kullanıcıyı şaşırtır.
İki farklı “sembolik” kavramı, karıştırılmamalı
Chmod konusunda “sembolik” kelimesi aslında iki farklı şeyi ifade edebilir ve bu ikisi sık sık birbirine karıştırılır.
Birincisi, ls -l komutunun gösterdiği rwxr-xr-x gibi bir dizedir. Bu, dosyanın izinlerinin o andaki tam görüntüsüdür, üç sınıfın (sahip, grup, diğerleri) her biri için üç karakterden oluşan mutlak bir anlık görüntüdür. Bu makalede anlatılan ve hesap makinesinin ürettiği format budur.
İkincisi ise chmod komutunun kendi sembolik mod söz dizimidir; izinleri mevcut haline göre artırıp azaltmak için kullanılır, octal rakam yazmak yerine. Örneğin chmod u+x file.sh yalnızca sahibe çalıştırma izni ekler, diğer izinlere dokunmaz. chmod go-w file gruptan ve diğerlerinden yazma iznini kaldırır. chmod a+r file dosyayı herkes için okunabilir yapar. Bu söz dizimi mevcut izinlere göre göreceli bir değişiklik yaparken, octal yazım (755 gibi) izinlerin tamamını baştan belirler.
Kendi izinlerinizle deneyin
Aşağıdaki araç octal rakam, sembolik dize ve hazır chmod komutu arasında anında dönüşüm yapar; birini girin, diğer ikisi otomatik güncellenir.
| Okuma | Yazma | Çalıştırma | |
|---|---|---|---|
| Sahip | |||
| Grup | |||
| Diğerleri |
Yeni dosyalar neden varsayılan olarak 644, dizinler neden 755 olur
Kimse chmod çalıştırmadığı halde her yeni dosyanın 644, her yeni dizinin 755 çıkmasının bir nedeni var: umask. Linux, yeni bir dosya oluşturulurken 666’dan (rw-rw-rw-, güvenlik gereği varsayılan olarak çalıştırma biti yok) başlar, yeni bir dizin oluşturulurken ise 777’den (rwxrwxrwx) başlar. Ardından kabuğun (shell) umask değeri bu tabandan çıkarılır.
Çoğu Linux sisteminde varsayılan umask 022’dir. Bu yüzden 666 eksi 022 işlemi 644 sonucunu verir; yeni oluşturulan bir dosya doğrudan bu izinle gelir. Aynı şekilde 777 eksi 022 işlemi 755 sonucunu verir; yeni oluşturulan bir dizin de bu izinle başlar. Yani gördüğünüz o tanıdık 644/755 çifti, aslında hiçbir chmod komutu çalıştırılmadan, sadece umask’ın sistem varsayılanı sayesinde ortaya çıkıyor.
Yaygın hatalar ve güvenlik riskleri
chmod 777 kullanmak. 777, sistemdeki herhangi bir kullanıcıya dosyayı okuma, yazma ve değiştirme izni verir; bu, bir saldırganın ele geçirdiği bir yükleme (upload) noktasını doğrudan bir web shell’e çevirebileceği klasik bir açıktır. WordPress veya hosting güvenlik denetimleri 777 izinli dosyaları kritik bulgu olarak işaretler. Çözüm neredeyse her zaman çalıştırılabilir dosyalar ve dizinler için 755, sıradan dosyalar için 644’tür; güvenilir bir grup söz konusuysa bu 750/640’a kadar sıkılaştırılabilir.
SSH özel anahtarını çok açık izinle bırakmak. ssh-keygen özel anahtarları varsayılan olarak 600 iznle oluşturur. OpenSSH, grup veya diğerleri tarafından okunabilir bir özel anahtarı kullanmayı doğrudan reddeder ve şu türde bir hata verir: “Permissions 0644 for ‘id_rsa’ are too open” ve ardından “UNPROTECTED PRIVATE KEY FILE!” uyarısı. Bu hatayı görürseniz çözüm basittir: chmod 600 id_rsa.
Dizin izinlerini dosya izinleriyle karıştırmak. Bir betiği çalıştırılabilir yapmak için chmod +x eklemeyi unutmak ya da tam tersi, bir dizine sadece okuma izni verip çalıştırma bitini atlamak, “permission denied” hatalarının en sık nedenlerinden biridir.
Kapsam dışında kalan bir nokta: setuid, setgid, sticky bit
Bu hesap makinesi ve bu makale, standart üç haneli sahip/grup/diğerleri iznini kapsar. Bunun dışında, chmod’un isteğe bağlı bir dördüncü baştaki hanesi olarak setuid (4000), setgid (2000) ve sticky bit (1000) özel izinleri de vardır; örneğin chmod 4755 veya /tmp dizininde görülen chmod 1777. Kısaca: setuid bir programı, çalıştıran kişi yerine dosyanın sahibinin yetkileriyle çalıştırır (/usr/bin/passwd klasik örnektir); sticky bit ise /tmp gibi herkesin yazabildiği bir dizinde, bir kullanıcının başka bir kullanıcının dosyasını silmesini engeller. Bu araç bu dördüncü haneyi hesaplamaz, yalnızca standart üç haneli izni modeller.
Sık sorulan sorular
Chmod 755 ne anlama gelir? Sahip dosyayı okuyabilir, yazabilir ve çalıştırabilir (7 = 4+2+1); grup ve diğer herkes sadece okuyabilir ve çalıştırabilir, yazamaz (5 = 4+1). Sembolik gösterimi rwxr-xr-x’tir. Genelde herkese açık scriptler ve dizinler için kullanılır.
Chmod 644 ile 755 arasındaki fark nedir? 644 (rw-r—r—) çalıştırma bitini kimseye vermez, sıradan dosyalar (HTML, config, log) için uygundur. 755 (rwxr-xr-x) sahibe tam yetki, grup ve diğerlerine okuma ile çalıştırma yetkisi verir; scriptler ve dizinler için gereklidir çünkü dizine girmek çalıştırma bitini gerektirir.
Neden chmod 777 kullanmamalıyım? 777, sistemdeki her kullanıcıya dosyayı okuma, yazma ve çalıştırma izni verir. Bu, güvenlik denetimlerinde neredeyse her zaman kritik risk olarak işaretlenir çünkü herhangi bir kullanıcı veya ele geçirilmiş bir süreç dosyayı istediği gibi değiştirebilir. Neredeyse tüm durumlarda 755 (çalıştırılabilirler/dizinler) veya 644 (sıradan dosyalar) yeterlidir.
SSH anahtarımda “Permissions are too open” hatası neden çıkıyor?
OpenSSH, grup veya diğerleri tarafından okunabilir özel anahtarları kullanmayı reddeder ve “Permissions 0644 for ‘id_rsa’ are too open” hatası verir. Çözüm chmod 600 id_rsa komutunu çalıştırmaktır; bu, dosyayı yalnızca sahibinin okuyup yazabileceği hale getirir.
Yeni oluşturduğum dosyalar neden otomatik olarak 644 oluyor? Linux yeni dosyaları 666 tabanından başlatır, ardından kabuğun umask değeri (çoğu sistemde varsayılan olarak 022) bu tabandan çıkarılır: 666 eksi 022, 644 eder. Aynı mantıkla yeni dizinler 777 eksi 022 işlemiyle 755 olarak oluşturulur.