LINUX TEMEL KOMUTLAR VE İZİNLER

Linux chmod izin tripleti rwx rwx rwx ile owner group other katmanlarının görsel anlatımı

"İzin hatası mı aldın? chmod 777 yap geçsin" — Linux dünyasında en sık duyulan ve en yanlış tavsiye. chmod 777 sorunu çözmez; sadece görünmez kılar ve arka planda çok daha büyük güvenlik açıkları yaratır. Dosya izinleri, Linux'un omurgasıdır: kim okuyabilir, kim yazabilir, kim çalıştırabilir sorusunun yanıtıdır. Bu yanıtı doğru kuran sistem yöneticisi ile her şeye 777 veren biri arasındaki fark, üretim sunucusunun ayakta kalıp kalmamasıdır.

chmod 777 Neden Çözüm Değildir?

777 izni, dosya üzerinde herkese (sahip, grup, diğerleri) okuma, yazma ve çalıştırma yetkisi verir. "Çalışmıyordu, 777 yaptım çalıştı" cümlesi aslında şunu söyler: "Sorunun ne olduğunu anlamadım, kapıyı sökerek geçtim." Web sunucularında bir upload klasörünü 777 yapmak, herhangi bir kullanıcının oraya yazılabilir script bırakmasına ve sunucunun ele geçirilmesine açık davetiyedir.

Doğru yaklaşım, hatanın kaynağını bulmaktır: dosyanın sahibi kim, hangi process hangi kullanıcıyla çalışıyor, gerçekten yazma izni mi gerekli yoksa sadece okuma mı yeterli? Genellikle ihtiyaç duyulan izin 755 (dizin için) veya 644 (dosya için) civarındadır.

Owner, Group, Other: Üçlü Yapı

Linux'ta her dosyanın üç farklı izin katmanı vardır:

  • Owner (u): Dosyayı oluşturan ya da sonradan sahipliği devredilen kullanıcı.
  • Group (g): Dosyanın ait olduğu grup. Birden fazla kullanıcının ortak erişimi için kullanılır.
  • Other (o): Yukarıdaki ikisine dahil olmayan tüm kullanıcılar.

ls -l çıktısında -rwxr-xr-- şeklinde gördüğünüz dizi tam olarak bu üçlüyü anlatır: ilk üç karakter owner, sonraki üç karakter group, son üç karakter other. Her grup için sırasıyla read (4), write (2), execute (1) bitleri toplanır. 754 demek; owner okur+yazar+çalıştırır (7), group okur+çalıştırır (5), other sadece okur (4).

chown ve chgrp: Sahipliği Devretmek

İzinleri doğru ayarlamak yetmez; doğru kullanıcıya ait olmak da şarttır. chown deploy:www-data /var/www/site komutu, dizini deploy kullanıcısına ve www-data grubuna devreder. Bu sayede deploy kullanıcısı dosyaları güncelleyebilirken, web sunucusu (genelde www-data ile çalışır) sadece okuyabilir. İzin ile sahiplik birlikte düşünülmediğinde 644 bile fazla kısıtlayıcı veya fazla gevşek olabilir.

Linux chmod sayısal ve sembolik notasyon karşılaştırması 754 izin değerinin rwx anlamı

Special Bitler: setuid, setgid, sticky

Standart rwx bitlerinin ötesinde, çoğu kullanıcının fark etmediği üç özel bit vardır. Bunları anlamadan Linux güvenliğini tam kavramak mümkün değildir:

  1. setuid (4000): Bir çalıştırılabilir dosya çalıştırıldığında, dosyayı çalıştıranın değil sahibinin yetkisiyle çalışır. /usr/bin/passwd bunun klasik örneğidir; sıradan kullanıcı şifresini değiştirebilsin diye root yetkisiyle çalışır.
  2. setgid (2000): Dizine uygulandığında, içeride oluşturulan tüm dosyalar otomatik olarak dizinin grubunu miras alır. Ortak proje klasörlerinde son derece yararlıdır.
  3. sticky bit (1000): /tmp dizinindeki davranıştır. Herkes yazabilir ama yalnızca dosyanın sahibi kendi dosyasını silebilir. Aksi halde bir kullanıcı diğerinin geçici dosyalarını silebilirdi.

Setuid biti gevşek verildiğinde tehlikelidir: kullanıcı yazılabilir bir setuid script, sistemin tamamını teslim edebilir. Bu yüzden setuid yalnızca gerçekten ayrıcalık gerektiren, denetlenmiş binary'lere konur. Çekirdek seviyesindeki davranışları derinlemesine kavramak için resmi çekirdek dokümantasyonu önemli bir başvuru kaynağıdır.

Sayısal mı Sembolik mi: İki Notasyon

chmod iki şekilde kullanılabilir. Sayısal: chmod 750 script.sh. Sembolik: chmod u=rwx,g=rx,o= script.sh ya da değişiklik için chmod g+w dosya.txt. Sembolik notasyon, var olan izinleri tamamen ezmeden sadece istediğin biti eklemek/çıkarmak için idealdir. Otomasyon ve script'lerde ise sayısal form daha öngörülebilirdir.

Bir nokta önemli: dizinlerde execute (x) biti "içine girebilme" anlamına gelir. Dizin için 644 ayarlamak, içeriği listeleyebilir ama içine cd edemez hâle getirir — beklenmedik hatalara yol açar.

Komut Satırının Temel Aletleri

İzinleri yönetebilmek için önce dosyaları görebilmek gerekir. Günlük kullanımda en sık başvurulan komutlar:

  • ls -la — gizli dosyalar dahil detaylı listeleme
  • stat dosya — izinler, sahiplik, inode, erişim zamanları
  • find /var -perm -4000 — sistemdeki tüm setuid dosyalarını bulma
  • umask — yeni oluşturulan dosyaların varsayılan izinlerini kontrol etme
  • getfacl / setfacl — POSIX ACL ile daha ince izin kontrolü

umask değeri çoğu kullanıcının atladığı bir konudur. 022 umask, yeni dosyaların 644, dizinlerin 755 olmasını sağlar. Bu varsayılan, çoğu durum için makuldür ama çok hassas dosyalarla çalışıyorsanız 077 (yalnız sahibi görsün) kullanmak daha güvenli olur.

ACL: Klasik İzinlerin Yetmediği Yerde

Owner/group/other modeli güçlüdür ama her zaman yetmez. "Bu dosyaya sadece Ahmet ve Zeynep yazabilsin, diğer herkes okusun" gibi bir kuralı klasik modelle anlatmak zordur. Burada Access Control List devreye girer. setfacl -m u:zeynep:rw dosya komutu, klasik izinlere ek olarak Zeynep'e özel kural ekler. Bu tür ince ayar ihtiyaçları arttığında Linux sistem yönetimi eğitimi üzerinden ilerleyerek kendinizi geliştirebilirsiniz.

Linux setuid setgid ve sticky bit özel izin bayraklarının görev ve kullanım şeması

Sık Yapılan Hatalar ve Doğru Refleksler

chmod 777 yanılgısı tek başına değil; etrafında bir hata kümesi vardır. sudo chown -R $USER:$USER / gibi komutlar sistemi tamamen kullanılamaz hâle getirir — root'a ait olması gereken binary'lerin sahipliği değişir. chmod -R 777 /var/www ise klasik bir saldırı vektörü açar. Recursive komutlarda mutlaka önce --dry-run mantığıyla ne değişeceğini gözden geçirmek, sonra uygulamak gerekir.

Doğru refleks şudur: hatayı önce ls -la, id ve namei -l /yol/dosya ile teşhis et. Hangi kullanıcı, hangi gruba ait, hangi dizin zincirinde takılıyor? Sorunu anladıktan sonra uygulanacak çözüm genelde tek bir chmod g+w ya da chown olur — 777 değil.

Linux izinleri, başlangıçta soğuk bir matematik gibi görünse de aslında çok katmanlı bir güvenlik felsefesidir. Her bit bir sorunun yanıtıdır ve doğru yanıtı bulmak, sunucunun ömrünü uzatır. Daha derin pratik için Linux komut satırı eğitimi içeriğini inceleyebilirsiniz.