Linux Dosya Sistemi İzinleri: chmod, chown ve SUID/SGID Riskleri
Linux'ta her dosya ve dizinin bir sahibi (owner), bir grubu (group) ve üç izin sınıfı için ayrı okuma/yazma/çalıştırma hakları vardır: sahip (user), grup (group) ve diğerleri (others). Bu izin modeli basit görünse de yanlış yapılandırıldığında ciddi güvenlik açıklarına yol açar.
Temel İzin Bitleri
ls -l çıktısında görülen -rwxr-xr-- gibi bir dizge üç bloğa ayrılır: sahip, grup, diğerleri. Her blokta r (read=4), w (write=2), x (execute=1) bitleri toplanarak oktal değer elde edilir. Örneğin 750, sahibe tam yetki (7=rwx), gruba okuma+çalıştırma (5=r-x), diğerlerine hiçbir yetki (0=---) verir:
chmod 750 /var/www/app/config
chown www-data:www-data /var/www/app/config
Sembolik gösterimle de aynı işlem yapılabilir: chmod u=rwx,g=rx,o= /var/www/app/config. Web sunucusu dizinlerinde genel kural, uygulamanın çalıştığı kullanıcıya (örn. www-data) gerekli minimum yetkiyi vermek, "diğerleri" sınıfına ise mümkünse hiç yetki bırakmamaktır.
chown ile Sahiplik Yönetimi
chown bir dosyanın sahibini ve/veya grubunu değiştirir. Rekürsif kullanım (-R) dizin ağaçlarında dikkatli uygulanmalıdır; yanlışlıkla sistem dizinlerinin sahipliğini değiştirmek servisleri kırabilir:
chown -R deploy:deploy /var/www/app/storage
SUID ve SGID: Güçlü ama Tehlikeli Bitler
SUID (Set User ID, oktal 4000) bir çalıştırılabilir dosyaya uygulandığında, dosyayı çalıştıran kullanıcı kim olursa olsun, süreç dosyanın sahibinin yetkileriyle çalışır. Klasik örnek /usr/bin/passwd'dir: normal bir kullanıcı bu komutu çalıştırdığında, /etc/shadow dosyasına yazabilmesi için geçici olarak root yetkisiyle çalışır.
chmod u+s /usr/local/bin/ozel-arac
# veya oktal olarak:
chmod 4750 /usr/local/bin/ozel-arac
SGID (Set Group ID, oktal 2000) ise dizinlere uygulandığında, o dizinde oluşturulan yeni dosyaların grubunun otomatik olarak dizinin grubuyla eşleşmesini sağlar; ekip çalışmasında ortak dizinler için kullanışlıdır:
chmod 2775 /var/www/shared-uploads
Sticky bit (oktal 1000) ise /tmp gibi herkesin yazabildiği dizinlerde, kullanıcıların yalnızca kendi oluşturdukları dosyaları silebilmesini garanti eder.
SUID/SGID'nin Ayrıcalık Yükseltme Riski
Root sahipli bir SUID ikili dosyada komut enjeksiyonuna izin veren bir zafiyet varsa, sıradan bir kullanıcı bu ikiliyi çalıştırarak root yetkisi kazanabilir. Bu, klasik bir privilege escalation senaryosudur. Bu yüzden sistem yöneticileri düzenli olarak beklenmeyen SUID/SGID dosyalarını taramalıdır:
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
Bu tarama sonucunda paket yöneticisiyle gelmeyen veya sebepsiz yere SUID bitine sahip özel betikler/binary'ler tespit edilirse, bu bit derhal kaldırılmalıdır (chmod u-s dosya). Ayrıca kabuk betiklerine (shell script) SUID uygulamak modern Linux çekirdeklerinde büyük ölçüde göz ardı edilir veya engellenir, çünkü script'lere SUID uygulamak tarihsel olarak ciddi güvenlik açıklarına yol açmıştır.
Sonuç
Doğru izin yönetimi, en az yetki (least privilege) ilkesinin dosya sistemi düzeyindeki karşılığıdır. chmod ve chown ile günlük bakım yapılırken, SUID/SGID bitleri istisnai durumlar için saklanmalı ve düzenli olarak denetlenmelidir. Sunucu sıkılaştırma sürecinin bir diğer önemli ayağı için yedekleme stratejileri yazımıza göz atabilirsiniz.