Yeni yazı: Active Directory Sağlık Kontrolü: krbtgt Rotasyonu ve Hesap Yaşam Döngüsü
Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri

Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri

İçindekiler

ls -l çalıştırdığınızda her satırın başında on karakterlik bir dizi görürsünüz: -rw-r--r--. Çoğu kullanıcı bu diziyi okumadan geçer ve izin gerektiğinde chmod 777 yazıp sorunu “çözer” — sonra o dosyayı sistemdeki herkesin değiştirebildiğini fark etmez.

Bu yazıda o on karakterin ne söylediğini, izinlerin sayısal karşılığını ve normal izinlerin yetmediği yerde devreye giren üç özel biti (setuid, setgid, sticky) göreceğiz.

Dosya Türleri: ls -l Çıktısının İlk Karakteri

ls -l çıktısındaki ilk karakter dosyanın türünü söyler:

KarakterTürÖrnek
-Normal dosyaMetin, betik, resim, ikili program
dDizin (directory)/home, /etc
lSembolik bağlantı/bin → /usr/bin
cKarakter aygıtı/dev/null, /dev/tty
bBlok aygıtı/dev/sda
pAdlandırılmış boru (named pipe)mkfifo ile oluşturulur
sSoket/run/docker.sock

Son dördü dosya ve dizin hiyerarşisi yazısında geçen /dev ve /run dizinlerinde karşınıza çıkar: Linux’ta aygıtlar da dosya olarak temsil edilir.

İzinleri Okumak: rwx Üçlüsü ve On Karakter

Linux dosya izinleri üç kategoriye ayrılır:

  1. Kullanıcı (Owner): Dosyanın veya dizinin sahibi. Genellikle dosyayı oluşturan kullanıcıdır.
  2. Grup (Group): Dosyanın veya dizinin ait olduğu grup. Birden fazla kullanıcı aynı grupta olabilir.
  3. Diğerleri (Others): Dosyanın veya dizinin sahibi veya gruptaki kullanıcılar dışındaki herkes.

Her bir kategori için izinler aşağıdaki şekillerde tanımlanır:

  • Okuma (Read - r): Dosyanın içeriğini okuma izni.
  • Yazma (Write - w): Dosyaya veri yazma veya değiştirme izni.
  • Çalıştırma (Execute - x): İçeriği çalıştırma izni (eğer bir betik dosyası ise).

Diziyi Parçalara Ayırmak

Bu üçlü, üç kategori için art arda yazılır. ls -l satırının başındaki dizi şöyle bölünür:

-rwxr-xr--
│└┬┘└┬┘└┬┘
│ │  │  └── diğerleri:  r--  → yalnızca okuyabilir
│ │  └───── grup:       r-x  → okuyabilir, çalıştırabilir
│ └──────── sahip:      rwx  → okur, yazar, çalıştırır
└────────── tür:        -    → normal dosya

Dizinlerde aynı harfler farklı anlama gelir ve en çok karıştırılan yer burasıdır:

  • r → dizinin içindekileri listeleyebilirsiniz (ls).
  • w → dizinde dosya oluşturabilir ve silebilirsiniz. Bir dosyayı silme yetkisi dosyanın kendi izinlerine değil, içinde bulunduğu dizinin yazma iznine bağlıdır. Yazma izniniz olmayan bir dosyayı, dizine yazabiliyorsanız silebilirsiniz.
  • x → dizinin içine girebilirsiniz (cd) ve içindeki bir dosyaya yol üzerinden erişebilirsiniz. x olmadan r neredeyse işe yaramaz: isimleri görürsünüz ama hiçbirini açamazsınız.

Sahibini ve Grubunu Değiştirmek: chown ve chgrp

İzinler kime uygulanacağını bilmeden işe yaramaz. Bir dosyanın sahibini chown, grubunu chgrp değiştirir. chown iki tarafı iki nokta üst üste ile ayırır: soldaki sahip, sağdaki grup.

chown murat:proje rapor.txt   # hem sahip hem grup
chown murat rapor.txt         # yalnız sahip
chown :proje rapor.txt        # yalnız grup (sol taraf boş)
chgrp proje rapor.txt         # aynı işin kısa yolu

Bir dizini ve içindeki her şeyi birden değiştirmek için -R ekleyin:

chown -R murat:proje /srv/proje

chown root yetkisi ister — kendi dosyanızı bile başkasına devredemezsiniz, aksi hâlde disk kotası anlamsızlaşırdı. chgrp ise üyesi olduğunuz bir gruba geçiş yapıyorsanız yetkisiz de çalışır.

Linux dosya izinleri (rwx) şeması

Sayısal Biçim: chmod ve Octal Mod

Üç iznin her biri bir bit değeri taşır: okuma 4, yazma 2, çalıştırma 1. Bir kategorinin izni, o kategoride açık olan bitlerin toplamıdır — rw- = 4+2 = 6, r-x = 4+1 = 5. Üç kategori yan yana yazılınca üç haneli sayı çıkar:

Octal değerStringİznin anlamı
0---Hiçbir izin yok
1--xÇalıştırma
2-w-Yazma
3-wxYazma & çalıştırma
4r--Okuma
5r-xOkuma & çalıştırma
6rw-Okuma & yazma
7rwxOkuma & yazma & çalıştırma

Yani chmod 750 betik.sh, -rwxr-x--- demektir: sahip her şeyi yapar, grup okur ve çalıştırır, diğerleri hiçbir şey yapamaz.

chmod 750 betik.sh      # sayısal
chmod u=rwx,g=rx,o= betik.sh   # aynı sonucun harfli karşılığı
chmod g+w betik.sh      # mevcut izinlere ekleme yapar, diğerlerini korur

Sayısal biçim izinlerin tamamını baştan yazar; harfli biçim (+/-) yalnızca belirttiğiniz biti değiştirir. Toplu değişikliklerde bu ayrım önemlidir.

chmod 777 bir çözüm değildir. Bir erişim sorununda ilk refleks olarak 777 vermek sorunu görünürde kapatır ama dosyayı sistemdeki her kullanıcıya yazılabilir hâle getirir; web sunucusu altındaki bir dizinde bu, herhangi bir kullanıcının çalıştırılabilir kod bırakabilmesi demektir. Doğru yol, dosyayı doğru gruba verip gruba izin tanımaktır — bkz. gruplar ve üyelik yönetimi.

Sayı ile sembol arasında çevrim yaparken chmodcommand sitesini kullanıyorum.

Özel Bitler: setuid, setgid ve Sticky Bit

Üç kategorilik rwx düzeni her sorunu çözmez. “Kullanıcı kendi parolasını değiştirebilsin ama /etc/shadow‘u okuyamasın” ya da “bu dizine on kişi yazsın ama kimse başkasınınkini silmesin” gibi istekler normal izinlerle ifade edilemez. Bunun için üç ek bit vardır.

Setuid (Set User ID):

  • Ne İşe Yarar? Setuid, bir kullanıcının dosyayı çalıştırdığında o dosyanın sahibi olarak kabul edilmesini sağlar. Bu, kullanıcının normalde erişim hakkı olmayan sistem kaynaklarına erişmesine izin verebilir.

  • Nasıl Ayarlanır? chmod u+s dosya_adı (ya da sayısal biçimde chmod 4755 dosya_adı). Setuid biti çalıştırma iznini açmaz; dosyanın zaten çalıştırılabilir olması gerekir. ls -l çıktısında sahip alanının üçüncü karakteri, çalıştırma izni varsa küçük s, yoksa büyük S görünür — büyük S gördüyseniz bit konmuş ama etkisiz demektir, chmod u+x ile tamamlamanız gerekir.

  • Örnek Kullanım: “passwd” komutu Setuid özelliğine sahiptir, böylece kullanıcılar kendi şifrelerini değiştirebilirler:

    ls -l /usr/bin/passwd
    # -rwsr-xr-x 1 root root 68208 /usr/bin/passwd
    #    ↑ setuid biti: komut, çalıştıran kim olursa olsun root yetkisiyle çalışır
    

    Sistemdeki tüm setuid dosyalarını listelemek için: find / -perm -4000 -type f 2>/dev/null

    Setuid kabuk betiklerinde çalışmaz. Linux çekirdeği, yorumlayıcıyla çalışan betiklerde (#!/bin/bash ile başlayan dosyalar) setuid bitini güvenlik gerekçesiyle yok sayar. Bir betiğe yetki vermek istiyorsanız doğru araç sudo yapılandırmasıdır.

    Neden gerekli? Parolalar /etc/shadow‘da tutulur ve o dosyayı yalnızca root okuyabilir. Kendi parolanızı değiştirirken aslında root’a ait bir dosyaya yazmanız gerekir. Setuid biti tam olarak bu boşluğu kapatır: passwd komutu sizin adınıza root yetkisiyle çalışır, ama yalnızca kendi satırınıza dokunur.

Setgid (Set Group ID):

  • Ne İşe Yarar? İki farklı işi vardır ve asıl kullanılan ikincisidir:

    1. Çalıştırılabilir dosyada: program, çalıştıran kullanıcının grubuyla değil, dosyanın ait olduğu grupla çalışır. Sisteminizdekileri find / -perm -2000 -type f 2>/dev/null ile listeleyebilirsiniz.
    2. Dizinde: o dizinde oluşturulan yeni dosyalar, oluşturan kişinin birincil grubunu değil dizinin grubunu alır. Ekip için paylaşımlı dizin kurmanın çalışan tek yolu budur; setgid olmadan herkesin dosyası kendi grubuna ait olur ve diğerleri erişemez.
  • Nasıl Ayarlanır? chmod g+s dizin_adı (sayısal biçimde chmod 2775 dizin_adı).

  • Örnek Kullanım: Bir proje dizinini proje grubuna açmak:

    chgrp proje /srv/proje
    chmod 2775 /srv/proje
    ls -ld /srv/proje
    # drwxrwsr-x 2 root proje 4096 /srv/proje
    #     ↑ setgid: buraya kim dosya oluşturursa oluştursun grubu "proje" olur
    

    Uygulamalı senaryonun tamamı gruplar yazısında var.

Sticky Bit:

  • Ne İşe Yarar? Herkesin yazabildiği bir dizinde silme yetkisini kısıtlar. Sticky bit konmuş bir dizinde bir dosyayı yalnızca dosyanın sahibi, dizinin sahibi ve root silebilir ya da yeniden adlandırabilir. Sticky bit olmadan, dizine yazma izni olan herkes içindeki her dosyayı silebilir — yukarıda anlatılan dizin kuralının doğrudan sonucu.
  • Nasıl Ayarlanır? chmod +t dizin_adı (sayısal biçimde chmod 1777 dizin_adı).
  • Örnek Kullanım: /tmp. Sistemdeki her kullanıcı oraya dosya yazabilir; sticky bit olmasaydı herhangi bir kullanıcı bir başkasının geçici dosyasını silebilir ve çalışan programı bozabilirdi.

Üçü de normal izinlerin yerine geçmez, üzerine biner. Yanlış konulmuş bir setuid biti ise doğrudan yetki yükseltme açığıdır: sisteme sonradan eklenmiş setuid dosyalarını find / -perm -4000 -type f 2>/dev/null ile dönem dönem denetleyin.

İzin TürüSembolik İfadesiRakamsal Değeri
Setuidu+s4
Setgidg+s2
Sticky Bit+t1

Bu rakam, normal izinlerin önüne dördüncü hane olarak yazılır: chmod 4755 setuid’li, chmod 2775 setgid’li, chmod 1777 sticky bit’li izin verir. /tmp dizininin izni tam olarak budur:

ls -ld /tmp
# drwxrwxrwt 18 root root 4096 /tmp
#          ↑ sticky bit: herkes yazabilir, ama kimse başkasının dosyasını silemez

Sonuç

İzin sistemi karmaşık görünür ama üç cümleye iner:

  • ls -l çıktısının ilk on karakteri her şeyi söyler: tür + sahip/grup/diğerleri için üçer izin. Bu diziyi okuyabiliyorsanız chmod‘a çoğu zaman ihtiyacınız kalmaz.
  • Dizinlerde harfler farklı anlama gelir. Bir dosyayı silme yetkisi dosyanın izninde değil, bulunduğu dizinin yazma iznindedir — yazamadığınız bir dosyayı silebiliyor olmanızın sebebi budur.
  • chmod 777 sorunu çözmez, taşır. Erişim sorununun doğru çözümü uygun grubu vermek ve gerekiyorsa dizine setgid koymaktır.

Yol haritasının 3. bölümünü — temel komutlar ve dosya işlemlerini — burada tamamladık. Sırada bu izinlerin kime uygulandığı var: Kullanıcı Hesapları ve Yetkileri (sudo, su). Serinin tamamına GNU/Linux Öğrenme Yolculuğu sayfasından ulaşabilirsiniz.

Paylaş :

İlgili Yazılar

Linux Dosya ve Dizin Hiyerarşisi: Verileri Organize Etme Sanatı

Linux Dosya ve Dizin Hiyerarşisi: Verileri Organize Etme Sanatı

Bir Linux sunucusuna ilk kez bağlandığınızda / altında yirmiye yakın dizin görürsünüz ve hiçbirinin adı ne işe yaradığını söylemez: /etc, /opt, /srv, /var. Bu isimler rastgele seçilmedi — her biri Filesystem Hierarchy Standard (FHS) adlı bir sözleşmenin parçası. O sözleşmeyi bilen yönetici, ömründe hiç görmediği bir dağıtımda bile log dosyasını, yapılandırmayı ve kullanıcı verisini nerede arayacağını bilir.

Linux'da Dosya İçeriğini Görüntüleme: Less, Tail, Head Komutları

Linux'da Dosya İçeriğini Görüntüleme: Less, Tail, Head Komutları

Bir sunucuda sorun ararken ilk yaptığınız şey bir log dosyasına bakmaktır. Ama o dosya 2 GB ise ve siz cat yazdıysanız, terminaliniz dakikalarca akar ve aradığınız satır çoktan yukarı kaymıştır. Dosyanın tamamını okumakla bir kısmını okumak farklı komutların işidir.

Mutlak Yol ve Bağıl Yol Kavramları

Mutlak Yol ve Bağıl Yol Kavramları

Bir önceki yazıda kabuktaki ilk komutları çalıştırdık ve listenin en başına pwd‘yi koyduk. O komutu neden bu kadar öne aldığımızı burada açıklıyoruz.