Linux'ta dosya izinleri güvenliğin temelini oluşturur. Her dosya ve dizin, kimin okuyabileceğini, yazabileceğini ve çalıştırabileceğini belirleyen izinlere sahiptir. İzin Sistemi Temelleri
Bir dosyanın izinlerini görmek için:
ls -l dosya.txt
Çıktı:
-rw-r--r-- 1 kullanici grup 1234 Oca 15 10:30 dosya.txt
İlk karakter dosya tipini belirtir:
- -: Normal dosya
- d: Dizin
- l: Sembolik link
Sonraki 9 karakter izinleri gösterir, 3'lü gruplar halinde:
- İlk 3: Sahip (owner) izinleri
- İkinci 3: Grup (group) izinleri
- Son 3: Diğerleri (others) izinleri
İzin Türleri
r (read - okuma): Dosya içeriğini okuma. Dizinlerde içeriği listeleme.
w (write - yazma): Dosya içeriğini değiştirme. Dizinlerde dosya ekleme/silme.
x (execute - çalıştırma): Dosyayı program olarak çalıştırma. Dizinlerde içine girme (cd).
İzin Örnekleri
rwxr-xr-x: Sahip her şeyi yapabilir, grup ve diğerleri okur ve çalıştırır. rw-r--r--: Sahip okur yazar, diğerleri sadece okur. rwx------: Sadece sahip erişebilir.
chmod Komutu
chmod (change mode) izinleri değiştirir. İki kullanım yöntemi vardır.
Sayısal (Octal) Format
Her izin bir sayı değerine sahiptir:
- r = 4
- w = 2
- x = 1
Üç izin toplamı o kategori için değeri verir.
Örnek hesaplama: rwx = 4+2+1 = 7 r-x = 4+0+1 = 5 r-- = 4+0+0 = 4
Kullanım:
chmod 755 script.sh
755 = rwxr-xr-x
- Sahip: rwx (7)
- Grup: r-x (5)
- Diğerleri: r-x (5)
Yaygın Değerler
777: Herkes her şeyi yapabilir (tehlikeli) 755: Scriptler ve programlar için standart 644: Normal dosyalar için standart 600: Hassas dosyalar (SSH anahtarları, config) 700: Hassas dizinler 000: Hiçbir erişim yok
Sembolik Format
Daha okunabilir, belirli izinleri değiştirmek için uygun.
Hedefler:
- u: user (sahip)
- g: group (grup)
- o: others (diğerleri)
- a: all (hepsi)
Operatörler:
- +: İzin ekle
- -: İzin kaldır
- =: İzni ayarla
Çalıştırma izni ekleme:
chmod +x script.sh chmod u+x script.sh
Yazma iznini kaldırma:
chmod o-w dosya.txt chmod go-w dosya.txt
Tam izin ayarlama:
chmod u=rwx,g=rx,o=r dosya.txt
Recursive (-R)
Dizin ve tüm içeriğine uygula:
chmod -R 755 klasor/ chmod -R u+w klasor/
Dizinler ve Dosyalar İçin Fark
Dizinlere x izni: İçine girmek (cd) için gerekli. Olmadan içerik listelenemez bile. Dosyalara x izni: Çalıştırmak için gerekli. Metin dosyalarında genellikle olmaz.
Script örneği:
# Script yazıldı nano myscript.sh
# Çalıştırma izni verilmeli chmod +x myscript.sh
# Artık çalıştırılabilir ./myscript.sh
chown Komutu
chown (change owner) sahipliği değiştirir.
Sahip değiştirme:
sudo chown yeni_sahip dosya.txt
Sahip ve grup değiştirme:
sudo chown yeni_sahip:yeni_grup dosya.txt
Sadece grup değiştirme:
sudo chown :yeni_grup dosya.txt
Recursive:
sudo chown -R kullanici:grup /var/www/html
Web Sunucu Örneği
Web dosyaları www-data kullanıcısına ait olmalı:
sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html
chgrp Komutu
Sadece grup değiştirmek için alternatif:
sudo chgrp developers proje/ sudo chgrp -R developers proje/
umask - Varsayılan İzinler
Yeni oluşturulan dosya ve dizinlerin izinlerini belirler.
Mevcut umask değeri:
umask
Tipik değerler:
- 022: Varsayılan (dosya 644, dizin 755)
- 002: Grup yazabilir (dosya 664, dizin 775)
- 077: Sadece sahip (dosya 600, dizin 700)
Hesaplama
Dosyalar için başlangıç: 666 Dizinler için başlangıç: 777
umask değeri çıkarılır:
umask 022:
- Dosya: 666 - 022 = 644 (rw-r--r--)
- Dizin: 777 - 022 = 755 (rwxr-xr-x)
umask 077:
- Dosya: 666 - 077 = 600 (rw-------)
- Dizin: 777 - 077 = 700 (rwx------)
umask Ayarlama
Geçici:
umask 002
Kalıcı (bashrc'ye ekleyin):
echo "umask 002" >> ~/.bashrc
Özel İzin Bitleri
SUID (Set User ID)
Dosya sahibinin izinleriyle çalışır. passwd komutu buna örnektir.
chmod u+s dosya chmod 4755 dosya
ls -l çıktısında s görünür: -rwsr-xr-x
SGID (Set Group ID)
Dosya grubunun izinleriyle çalışır. Dizinlerde yeni dosyalar dizinin grubunu alır.
chmod g+s dizin chmod 2755 dizin
ls -l çıktısında s görünür: drwxr-sr-x
Sticky Bit
Dizindeki dosyaları sadece sahipleri silebilir. /tmp dizininde kullanılır.
chmod +t dizin chmod 1777 dizin
ls -l çıktısında t görünür: drwxrwxrwt
Pratik Senaryolar
SSH Anahtar İzinleri
SSH çok katı izin kontrolü yapar:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub chmod 600 ~/.ssh/authorized_keys
Web Projesi
# Sahiplik sudo chown -R www-data:developers /var/www/proje
# Dizinler sudo find /var/www/proje -type d -exec chmod 2775 {} \;
# Dosyalar sudo find /var/www/proje -type f -exec chmod 664 {} \;
2775: SGID ile yeni dosyalar developers grubuna ait olur.
Script Çalıştırma
# Yeni script nano backup.sh
# İzin ver chmod 755 backup.sh
# Sadece sahip çalıştırabilsin chmod 700 backup.sh
Hassas Config Dosyası
chmod 600 /etc/myapp/config.yml chown root:root /etc/myapp/config.yml
Sorun Giderme
İzin reddedildi hatası:
ls -la dosya.txt # İzinleri kontrol et, gerekirse chmod ile düzelt
Bir dizine giremiyorum:
# x izni gerekli chmod +x dizin/
Script çalışmıyor:
# x izni var mı kontrol et ls -l script.sh
# Yoksa ekle chmod +x script.sh
Güvenlik İpuçları
777 kullanmayın: Güvenlik açığı oluşturur.
En az yetki ilkesi: Sadece gerekli izinleri verin.
Hassas dosyalara dikkat: SSH anahtarları, config dosyaları 600 veya 640 olmalı.
SUID/SGID dikkatli kullanın: Güvenlik riski oluşturabilir.
Düzenli denetim: find / -perm -4000 ile SUID dosyalarını listeleyin.
Henüz yorum yok.
Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.