Linux Dosya İzinleri ve chmod Kullanımı Rehberi

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...

Linux
Linux Dosya İzinleri ve chmod Kullanımı Rehberi

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.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

25 yıldır bilgi işlem piyasasında farklı dallarda uzmanlaşan bir Bilgisayar Mühendisi

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar