chmod izinleri nasıl çalışır: 755, 644 ve sticky bit
Unix benzeri sistemlerde chmod, dosya ve dizinlerin erişim izinlerini değiştirir. Okuma, yazma ve çalıştırma izinleri sahip, grup ve diğer kullanıcılar için ayrı ayrı belirlenir. Dizin izinlerinin kendine özgü bir anlamı vardır: adların listelenmesini, girdilerin oluşturulmasını veya kaldırılmasını ve bilinen bir yola erişimi etkiler.
Sayısal ve sembolik modlar
chmod u+x script.sh gibi sembolik bir komut, dosya sahibine dosyayı çalıştırma izni verir. Sayısal modda okuma 4, yazma 2 ve çalıştırma 1'dir. Dolayısıyla 755, rwxr-xr-x anlamına gelir: sahip okuyabilir, yazabilir ve çalıştırabilir; grup ve diğerleri ise okuyabilir ve çalıştırabilir. 644 sıradan, herkese açık bir dosya için çoğu zaman yeterlidir; yine de doğru değer uygulamaya bağlıdır. Tanıdık bir sayıyı evrensel bir güvenlik ayarı olarak görmeyin.
Dizin izinleri neden önemlidir?
Bir dizinde okuma izni adları listelemeye, yazma izni dizin girdilerini değiştirmeye, çalıştırma izni ise bilinen bir yoldan geçmeye olanak tanır. Bir dosyanın silinmesi genellikle dosyanın kendisindeki yazma iznine değil, üst dizinindeki izinlere bağlıdır. Bu yüzden 444 olarak ayarlanmış bir dosya, dizine yeterli erişimi olan biri tarafından yine de silinebilir. GNU Coreutils kılavuzu bu ayrımı açıklıyor. Son dosya okunabilir görünse bile erişim başarısız oluyorsa, tüm üst dizinleri ve hizmetin hangi kimlikle çalıştığını inceleyin.
Web hosting'den bir örnek
Web sunucusunun okuyabilmesi gereken ama yalnızca sahibinin güncelleyebileceği HTML dosyalarından oluşan bir dizin düşünün. Başlangıç noktası olarak dizinler için 755, sıradan dosyalar için 644 kullanılabilir. Yine de hizmet hesabını, grupları ve hosting kurallarını hesaba katmanız gerekir; özel yapılandırma dosyaları daha sıkı erişim gerektirebilir. Bir hatadan kurtulmak için her şeyi 777 yapmak, yerel kullanıcılara geniş değiştirme hakları verir ve güvenlik sorununa yol açabilir. Değiştirmeden önce mevcut sahibi ve izinleri stat ve ls -l ile inceleyin.
Setuid, setgid ve sticky bit
Başa eklenen dördüncü sekizlik basamak özel bitleri belirtir: setuid için 4, setgid için 2 ve sticky için 1. Örneğin 4755 bir çalıştırılabilir dosyada setuid'i etkinleştirir; 455 ise etkinleştirmez. Setuid dikkat ister, çünkü programdaki bir kusur sahibin ayrıcalıklarıyla çalışır hâle gelebilir. Dizinlerde setgid, yeni girdilerin dizinin grubunu devralmasını sağlayabilir. /tmp gibi paylaşılan bir dizindeki sticky bit, başka bir kullanıcının dosyalarını kimin silebileceğini veya yeniden adlandırabileceğini kısıtlar. chmod -R kullanmadan önce ağacın tamamını inceleyin: sıradan dosyalar, çalıştırılabilir dosyalar ve dizinler nadiren aynı modlara ihtiyaç duyar.