Linux'ta Dosya İzinlerini Değiştirme
Kısa cevap: Linux'ta bir dosyanın izinlerini değiştirmek için chmod komutu kullanılır. İki yazım biçimi vardır: sayısal (oktal) biçim chmod 644 dosya.txt ve simgesel biçim chmod u+x script.sh. Sayısal biçimde okuma 4, yazma 2, çalıştırma 1 değerini taşır; bu değerler sahip, grup ve diğerleri için tek tek toplanır. Dosyalar için tipik değer 644, çalıştırılabilir dosyalar ve dizinler için 755, gizli kalması gereken anahtar dosyaları için 600'dür. İzin değiştirme yetkisi yalnızca dosyanın sahibinde ve root kullanıcısındadır.
İzin Modelini Doğru Okumak: ls -l Çıktısı
Herhangi bir müdahaleden önce mevcut durumu görmek gerekir. ls -l çıktısındaki ilk sütun on karakterlik bir dizidir:
-rwxr-xr-- 1 ahmet gelistirici 2048 dosya.sh
Bu dizinin parçalanması şöyledir:
| Bölüm | Karakterler | Anlamı |
|---|---|---|
| Tür | - | Normal dosya (d dizin, l sembolik bağlantı) |
| Sahip (user) | rwx | Oku, yaz, çalıştır → 7 |
| Grup (group) | r-x | Oku, çalıştır → 5 |
| Diğerleri (other) | r-- | Yalnızca oku → 4 |
Yani bu dosyanın oktal karşılığı 754'tür. Aynı bilgiyi tek adımda görmek için stat -c "%a %n" dosya.sh komutu kullanılabilir; çıktı doğrudan sayısal izni verdiği için toplu denetimlerde ls -l'den daha pratiktir.
Sayısal (Oktal) Biçim ve Sık Kullanılan Değerler
Sayısal biçimin avantajı kesinliktir: mevcut izinleri hesaba katmadan tam durumu yazar. Simgesel biçim ise fark uygular. Aşağıdaki tablo pratikte en çok karşılaşılan kombinasyonları karşılaştırıyor:
| Değer | Simgesel | Nerede kullanılır | Risk |
|---|---|---|---|
| 600 | rw------- | SSH özel anahtarı, kimlik bilgisi dosyaları | Yok, en güvenli seçim |
| 644 | rw-r--r-- | Metin, yapılandırma, HTML dosyaları | Düşük |
| 700 | rwx------ | Kişisel betikler, özel dizinler | Yok |
| 755 | rwxr-xr-x | Dizinler, sistem betikleri, /usr/bin altı | Düşük |
| 775 | rwxrwxr-x | Ekip halinde yazılan paylaşımlı dizinler | Orta |
| 777 | rwxrwxrwx | Neredeyse hiçbir yerde gerekmez | Yüksek |
777 değeri, forumlarda "çalışmıyorsa şunu dene" tavsiyesi olarak dolaşır ama pratikte sorunu çözmez, yalnızca gizler. Sunucudaki bir web dizinine 777 vermek, o sunucuda çalışan herhangi bir sürecin dosyalarınızı değiştirebilmesi anlamına gelir. Android tarafında uygulama izinlerini kısıtlama mantığı ne kadar önemliyse, Linux'ta da en az yetki ilkesi aynı ölçüde geçerlidir.
Simgesel Biçim: Cerrahi Müdahaleler
Simgesel biçim üç bileşenden oluşur: hedef (u sahip, g grup, o diğerleri, a hepsi), operatör (+ ekle, - kaldır, = tam olarak ayarla) ve izin harfi (r, w, x).
- chmod u+x kurulum.sh → yalnızca sahibe çalıştırma yetkisi ekler, diğer izinlere dokunmaz.
- chmod go-w rapor.txt → grup ve diğerlerinden yazma yetkisini alır.
- chmod a=r sabit.conf → herkes için yalnızca okuma bırakır, kalan tüm bitleri sıfırlar.
- chmod u+x,g-w,o= veri.db → virgülle ayrılmış çoklu kural aynı komutta çalışır.
Sayısal biçim mevcut durumu ezdiği için, izinlerinin bir kısmını korumak istediğiniz dosyalarda simgesel biçim daha güvenlidir. 644 olan bir dosyaya chmod 755 yazmak yerine chmod +x demek, aynı sonucu yan etkisiz üretir.
Dizinlerde x Bitinin Anlamı Farklıdır
Bu, en sık yapılan yanlış yorumdur. Dizinlerde x "çalıştırma" değil, dizine girme ve içindeki dosyaların meta verisine erişme anlamına gelir. r ise dizin içeriğini listeleme yetkisidir. Dolayısıyla:
- r var, x yok → ls ile isimleri görürsünüz ama dosyaları açamaz, cd yapamazsınız.
- x var, r yok → adını bildiğiniz dosyaya erişebilirsiniz, ama listeleme başarısız olur.
Bu nedenle dizinler için 755 (veya özel dizinlerde 700) standart kabul edilir; dizine 644 vermek erişimi tamamen kilitler.
Özyinelemeli Değişiklik ve Doğru Yöntemi
chmod -R 755 proje/ komutu tüm alt öğelere aynı değeri uygular. Sorun şu: bu işlem dizinlerle birlikte metin dosyalarına da çalıştırma biti verir, yani gereksiz bir yetki genişlemesi yaratır. Doğru yaklaşım ikisini ayırmaktır:
- find proje/ -type d -exec chmod 755 {} + → yalnızca dizinler
- find proje/ -type f -exec chmod 644