İçeriğe atla
0 XP 0
← Blog
Araçlar

Linux Dosya İzinleri: chmod 755 Ne Demek?

Linux dosya izinleri nasıl okunur? chmod 755, 644 ve 600 ne demek, umask ve SUID ne işe yarar? Tablolar ve güvenli komut örnekleriyle öğren.

Yazan: AltaySec AkademiSon güncelleme: 7 dk okuma

Linux dosya izinleri, her dosya için üç soruyu yanıtlar: kim okuyabilir, kim değiştirebilir, kim çalıştırabilir. Cevap sahip, grup ve diğer herkes için ayrı ayrı tutulur. chmod 755 ne demek sorusunun yanıtı da buradan çıkar: sahip her şeyi yapar, grup ve diğerleri yalnız okur ve çalıştırır. Bu yazıda izinleri okumayı, hesaplamayı ve güvenli biçimde değiştirmeyi öğreneceksin.

Linux dosya izinleri nasıl okunur?

İzinleri görmenin en kısa yolu ls -l komutudur. Çıktının ilk sütunu dosya türünü ve dokuz izin harfini gösterir:

$ ls -l yedekle.sh
-rwxr-xr-x 1 ayse gelistirme 1204 Eki 13 09:12 yedekle.sh

Bu satırı soldan sağa şöyle okursun:

  • İlk karakter türdür. - sıradan dosya, d dizin, l sembolik bağlantı demektir.
  • Sonraki üç harf (rwx) sahibin iznidir.
  • Ortadaki üç harf (r-x) grubun iznidir.
  • Son üç harf (r-x) diğer herkesin iznidir.
  • ayse dosyanın sahibi, gelistirme grubudur.

Harflerin anlamı sabittir: r okuma, w yazma, x çalıştırma. Yerinde - varsa o izin yoktur.

SınıfKimi kapsarchmod'daki harfi
SahipDosyanın sahibi olan kullanıcıu
GrupDosyanın grubundaki kullanıcılarg
DiğerleriSahip ve grup dışındaki herkeso
HepsiÜç sınıfın tamamıa

Sayısal değeri doğrudan görmek istersen Linux'ta stat -c '%a %A %U:%G %n' yedekle.sh komutu 755 -rwxr-xr-x ayse:gelistirme yedekle.sh gibi bir satır verir. Temel komutların geri kalanını 20 temel Linux komutu yazısında bulabilirsin.

chmod 755 ne demek, sayısal izin nasıl hesaplanır?

Her izin bir bit ile tutulur ve bir değeri vardır: okuma 4, yazma 2, çalıştırma 1. Bir sınıfın rakamı bu değerlerin toplamıdır. Üç rakam sırayla sahip, grup ve diğerlerini gösterir.

  • 7 = 4 + 2 + 1, yani okuma, yazma ve çalıştırma
  • 6 = 4 + 2, yani okuma ve yazma
  • 5 = 4 + 1, yani okuma ve çalıştırma
  • 4 = yalnız okuma
  • 0 = hiçbir izin yok

755'i bu kuralla çözersen sahip 7 (rwx), grup 5 (r-x), diğerleri 5 (r-x) alır. Sayılar sekizlik tabanda okunur. GNU belgesine göre 0755 ile 755 aynı anlama gelir.

DeğerHarflerleAnlamıNerede kullanılır
600rw-------Yalnız sahip okur ve yazarGizli anahtar, parola içeren ayar dosyası
644rw-r--r--Sahip yazar, herkes okurSıradan metin ve web dosyası
700rwx------Yalnız sahip her şeyi yaparÖzel betik, ~/.ssh dizini
750rwxr-x---Sahip her şeyi yapar, grup okur ve girerEkibe açık, dışarıya kapalı dizin
755rwxr-xr-xSahip her şeyi yapar, herkes okur ve çalıştırırProgram, herkese açık dizin
777rwxrwxrwxHerkes her şeyi yaparKullanma

Dördüncü bir rakam da görebilirsin: 4755 ya da 1777. Baştaki rakam özel bitleri taşır. Aşağıda ayrı bir başlıkta ele alıyoruz.

Dosyada ve dizinde r, w, x aynı şey mi?

Değil. Aynı harf dosyada ve dizinde farklı iş görür. GNU coreutils belgesi farkı şöyle tanımlar:

İzinDosyadaDizinde
rİçeriği okumaİçindeki adları listeleme
wİçeriği değiştirmeİçinde dosya oluşturma ve silme
xProgram olarak çalıştırmaİçindeki dosyalara erişme

Bu tablonun iki pratik sonucu var. Birincisi, bir dosyayı silmek için dosyanın değil, içinde durduğu dizinin yazma iznine bakılır. Sticky bit yoksa, yazamadığın bir dosyayı yazabildiğin bir dizinde silebilirsin. İkincisi, x izni olmayan bir dizine giremezsin. Adını bilsen bile içindeki dosyayı açamazsın.

Bu yüzden dizinlere genellikle x verilir (755, 750, 700), sıradan dosyalara verilmez (644, 640, 600).

chmod komutu nasıl kullanılır?

chmod iki biçimde yazılır. Sayısal biçim izni baştan sona yeniden atar. Sembolik biçim var olan izne ekleme ya da çıkarma yapar.

chmod 640 rapor.txt          # sahip rw, grup r, diğerleri hiçbir şey
chmod u+x yedekle.sh         # sahibe çalıştırma ekle
chmod go-w paylasim.conf     # grup ve diğerlerinden yazmayı al
chmod a=r,u+w notlar.txt     # herkese okuma, sahibe ek olarak yazma

Sembolik biçimde u, g, o, a sınıfı seçer. + izin ekler, - izin alır, = izni tam olarak ayarlar.

Bir dizini ve içindekileri topluca düzeltmen gerekiyorsa chmod -R 755 yazma. Bu komut tüm dosyaları da çalıştırılabilir yapar. Bunun yerine büyük harf X kullan:

chmod -R u=rwX,go=rX proje/

X, çalıştırma iznini yalnız dizinlere ve zaten çalıştırılabilir olan dosyalara verir. Sonuç dizinlerde 755, sıradan dosyalarda 644 olur. -c seçeneği yalnız gerçekten değişen dosyaları ekrana yazar, böylece neye dokunduğunu görürsün.

Yeni dosyalar neden 644 olarak oluşur? umask nedir?

Yeni dosyanın izni chmod ile değil, umask ile belirlenir. umask, yeni dosyalardan hangi izinlerin çıkarılacağını söyleyen maskedir. Linux kılavuzuna göre tipik varsayılan değer 022'dir.

Hesap şöyle işler. Programlar yeni dosyayı genellikle 666, yeni dizini 777 izniyle ister. umask bu istekten kendi bitlerini düşer:

umaskYeni dosyaYeni dizinNe zaman uygun
022644755Çoğu masaüstü ve sunucu varsayılanı
027640750Diğer kullanıcılara kapalı sunucu
077600700Gizli dosya üreten betik ve hizmet

Kendi umask değerini görmek için terminale umask yazman yeterli. Gizli dosya üreten bir betiğin başına umask 077 eklersen, betik içinde oluşturulan her dosya baştan yalnız sana açık olur. Sonradan chmod ile daraltmaya gerek kalmaz. Bu tür betiklerin örneklerini Bash betik örnekleri yazısında bulabilirsin.

SUID, SGID ve sticky bit neye yarar?

Üç özel bit, izin sayısının başına eklenen dördüncü rakamla ayarlanır. GNU belgesindeki tanımlar şöyle:

BitDeğerls -l görünümüNe yapar
SUID4000-rwsr-xr-xProgram, çalıştıranın değil dosya sahibinin kimliğiyle çalışır
SGID2000-rwxr-sr-xProgram dosyanın grubuyla çalışır. Dizinde yeni dosyalar dizinin grubunu alır
Sticky bit1000drwxrwxrwtHerkesin yazabildiği dizinde yalnız dosyanın ya da dizinin sahibi silme yapabilir

/tmp dizini sticky bit'in klasik örneğidir: 1777. Herkes yazabilir ama kimse başkasının dosyasını silemez.

SUID meşru işler için vardır. Parola değiştiren passwd komutu bunu kullanır. Sorun, sahibi root olan ve olmaması gereken bir dosyada SUID bulunmasıdır. Böyle bir dosya, yerel bir kullanıcıya root yetkisine giden yolu açabilir. Bu yolların nasıl kapatıldığını yetki yükseltme yazısında okuyabilirsin.

Kendi sunucunda SUID envanteri çıkarmak için:

sudo find / -xdev -type f -perm -4000 -exec ls -l {} + 2>/dev/null

Listeyi kaydet ve aradan zaman geçince yeniden al. Yeni bir satır belirdiyse nedenini araştır.

Yanlış izinler hangi güvenlik açıklarını doğurur?

İzin hataları genellikle tek bir alışkanlıktan doğar: bir şey çalışmayınca izni genişletmek. Bu sık görülen durumlar gerçek açıklara dönüşür:

  • Herkesin yazabildiği betik: root yetkisiyle zamanlanmış bir betiği başka bir kullanıcı değiştirirse, kendi komutunu root olarak çalıştırır.
  • Herkesin okuyabildiği ayar dosyası: İçindeki veritabanı parolası sunucudaki her hesaba açılır.
  • 777 web dizini: Ele geçirilen bir eklenti siteye yeni dosya bırakabilir.
  • Geniş izinli SSH anahtarı: OpenSSH bu anahtarı kullanmaz. Doğru çözüm 600'dür.

Kendi sisteminde bu hataları bulmak için üç komut yeter. İlki ev dizininde diğer kullanıcıların yazabildiği dosyaları, ikincisi herkesin yazabildiği ama sticky bit taşımayan dizinleri, üçüncüsü SSH dosyalarının iznini gösterir:

find ~ -xdev -type f -perm -0002
sudo find / -xdev -type d -perm -0002 ! -perm -1000 2>/dev/null
ls -ld ~/.ssh && ls -l ~/.ssh

Bulduğun her satır için önce nedenini anla. Sonra yalnız gereken sınıfa gereken izni bırak. Değişiklikten önce ve sonra ls -l ile izni oku. Toplu komutları önce küçük bir test dizininde dene, sistem dizinlerinde -R ile çalışma. Bu alıştırmaları kendi kurduğun bir sanal makinede yapmak en güvenlisidir. Kurulum için sanal siber güvenlik laboratuvarı rehberine bak.

Komutların kısa özetini Linux temel komutlar kopya kâğıdında tek sayfada görebilirsin. Bir API sunucusunda herkese yazılabilir bir ayar dosyasını bulup umask'ı düzelttiğin senaryo ise saha görevleri arasında.

Kaynaklar

Sık sorulan sorular

chmod 777 neden tehlikeli?

777, sahibe, gruba ve diğer herkese okuma, yazma ve çalıştırma izni verir. Sistemdeki her hesap ve her süreç dosyayı değiştirebilir. Ele geçirilen bir web uygulaması bile o dosyaya zararlı kod yazabilir. Bir şey çalışmadığında 777 yazmak yerine dosyanın sahibine bak ve yalnız ihtiyacı olan sınıfa gereken izni ver.

chmod 644 ile chmod 600 arasındaki fark nedir?

644'te sahip okur ve yazar, grup ve diğer kullanıcılar yalnız okur. 600'de ise yalnız sahip okur ve yazar, başka hiç kimse dosyayı açamaz. Herkesin görmesinde sakınca olmayan metin ve web dosyaları için 644 uygundur. Parola, API anahtarı ve SSH özel anahtarı gibi gizli dosyalar için 600 kullan.

chmod ile chown arasındaki fark nedir?

chmod izinleri, yani sahibin, grubun ve diğerlerinin ne yapabileceğini değiştirir. chown ise dosyanın sahibini ve grubunu değiştirir. İkisi birlikte çalışır. Dosya yanlış hesaba aitse en dar izin bile işe yaramaz, çünkü yanlış kişi sahip haklarını kullanır. Önce sahipliği, sonra izni kontrol et.

Klasörde çalıştırma (x) izni ne işe yarar?

Dizinde x izni, içindeki dosyalara erişme iznidir. r izniyle yalnız içeriği listelersin. w izniyle dosya oluşturur ve silersin. x olmadan, adını bilsen bile içerideki dosyayı açamazsın. Bu yüzden dizinler genellikle 755 ya da 700 olur, sıradan dosyalar ise 644 ya da 600 olur.

SSH özel anahtarı için hangi izin gerekir?

Özel anahtar dosyasını yalnız sahibi okuyabilmeli, başka hiç kimsenin izni olmamalı. Bunun için chmod 600 kullan, ~/.ssh dizinini de 700 yap. OpenSSH belgelerine göre ssh, başkalarının erişebildiği bir özel anahtar dosyasını kullanmaz ve yok sayar. Bağlantı bu yüzden reddedilirse sorunu izni daraltarak çöz, genişleterek değil.

  • Linux
  • chmod
  • dosya izinleri
  • umask
  • SUID

İlgili yazılar

Okuduğunu uygula.
Yollarda ders ders ilerle, alıştırmalarla pekiştir.
Başla