Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri
- Murat Akpınar
- Linux öğrenme yolculuğu
- 16 Eylül 2023
İç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ındaki ilk karakter dosyanın türünü söyler:
| Karakter | Tür | Örnek |
|---|---|---|
- |
Normal dosya | Metin, betik, resim, ikili program |
d |
Dizin (directory) | /home, /etc |
l |
Sembolik bağlantı | /bin → /usr/bin |
c |
Karakter aygıtı | /dev/null, /dev/tty |
b |
Blok aygıtı | /dev/sda |
p |
Adlandırılmış boru (named pipe) | mkfifo ile oluşturulur |
s |
Soket | /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.
İzinler ve chmod, chown, chgrp
- chmod (Change Mode): Dosya veya dizinlerin izinlerini değiştirmek için kullanılır. İzinler üç grupta gelir: kullanıcı (owner), grup (group) ve diğer (others). chmod komutuyla bu izinler, okuma (read), yazma (write) ve çalıştırma (execute) olarak ayarlanabilir.
- chown (Change Owner): Dosya veya dizinin sahibini değiştirmek için kullanılır. Bu komutla dosyanın sahibi ve grup sahibi değiştirilebilir. Chown komutu için solda ki kısım sahiplik, sağda ki taraf gruptur. Bu komutla isterseniz hem grup hem sahipliği değiştirebilirsiniz. Sadece bir tarafı değiştirmek için ‘:’ kısmın diğer tarafı boş bırakabilirsiniz. Sol kısım sahiplik : Sağ kısım grup temsil eder.
chown sahip:grup dosya/dizin - chgrp (Change Group): Dosya veya dizinin grubunu değiştirmek için kullanılır. Dosya veya dizinin ait olduğu grup değiştirilebilir.
chgrp grup-ismi dosya/dizin
Eğer bir dizinin ve aynı zamanda dizinin içinde ki dosyalarında bu değişiklikten etkilenmesini istiyorsanız ‘-R’ parametresini eklemeniz gerekir.
chown -R sahip:grup dizin

Dosya İzinleri:
Linux dosya izinleri üç kategoriye ayrılır:
- Kullanıcı (Owner): Dosyanın veya dizinin sahibi. Genellikle dosyayı oluşturan kullanıcıdır.
- Grup (Group): Dosyanın veya dizinin ait olduğu grup. Birden fazla kullanıcı aynı grupta olabilir.
- 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).
On karakteri okumak
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.xolmadanrneredeyse işe yaramaz: isimleri görürsünüz ama hiçbirini açamazsınız.
chmod Octal Mode
Üç 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ğer | String | İznin anlamı |
|---|---|---|
| 0 | --- |
Hiçbir izin yok |
| 1 | --x |
Çalıştırma |
| 2 | -w- |
Yazma |
| 3 | -wx |
Yazma & çalıştırma |
| 4 | r-- |
Okuma |
| 5 | r-x |
Okuma & çalıştırma |
| 6 | rw- |
Okuma & yazma |
| 7 | rwx |
Okuma & 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.
Hesaplamak için kullandığım ‘chmodcommand’ web sitesini önerebilirim.
Linux Dosya İzinleri: Setuid, Setgid ve Sticky Bit Nedir ve Nasıl Çalışır?
Linux işletim sistemi, dosya ve dizinlerin güvenliğini sağlamak için temel izinlerin ötesine geçen daha özel izinler sunar. Bu özel izinler, Setuid (set user ID), Setgid (set group ID) ve Sticky Bit olarak adlandırılır. Bu makalede, bu özel izinlerin ne olduğunu, nasıl çalıştığını ve neden önemli olduklarını öğreneceksiniz.
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çimdechmod 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üçüks, yoksa büyükSgörünür — büyükSgördüyseniz bit konmuş ama etkisiz demektir,chmod u+xile 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ışırSistemdeki tüm setuid dosyalarını listelemek için:
find / -perm -4000 -type f 2>/dev/nullSetuid kabuk betiklerinde çalışmaz. Linux çekirdeği, yorumlayıcıyla çalışan betiklerde (
#!/bin/bashile başlayan dosyalar) setuid bitini güvenlik gerekçesiyle yok sayar. Bir betiğe yetki vermek istiyorsanız doğru araçsudoyapılandırmasıdır.Buraya bir açıklama getiriyim daha iyi anlayacağınızı düşünüyorum. passwd dosyasının sahipliği root kullanıcısına ait yani ben bu dosyayı kendi kullanıcı izinlerimle değiştiremem, kullanamam. Peki ben kendi kullanıcı parolamı nasıl değiştirebilirim. Burada işte bu dosya izini geliyor ben root yetkisi ile kendi parolamı değiştiriyorum.
Setgid (Set Group ID):
-
Ne İşe Yarar? İki farklı işi vardır ve asıl kullanılan ikincisidir:
- Ç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/nullile listeleyebilirsiniz. - 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.
- Ç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
-
Nasıl Ayarlanır?
chmod g+s dizin_adı(sayısal biçimdechmod 2775 dizin_adı). -
Örnek Kullanım: Bir proje dizinini
projegrubuna 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" olurUygulamalı senaryonun tamamı gruplar yazısında var.
Sticky Bit:
- Ne İşe Yarar? Sticky Bit, bir dizin içindeki dosyaların yalnızca dosyanın sahibi veya yönetici tarafından silinebileceği bir klasörde kullanılır. Genellikle /tmp dizininde kullanılır.
- Nasıl Ayarlanır? Dizin içinde Sticky Bit’i ayarlamak için komut:
chmod +t dizin_adı - Örnek Kullanım: /tmp dizini, kullanıcıların kendi dosyalarını oluşturmasına izin verirken, sadece kendi dosyalarını silebilmelerini sağlar.
Bu özel izinler, dosya ve dizin güvenliğini daha fazla kontrol etmek ve özellikle çok kullanıcılı sistemlerde yetkilendirme sorunlarını çözmek için kullanışlıdır. Bununla birlikte, bu izinleri dikkatli bir şekilde ayarlamak ve gereksiz kullanımlarından kaçınmak önemlidir, çünkü yanlış yapılandırılmış izinler güvenlik açıklarına yol açabilir.
| İzin Türü | Sembolik İfadesi | Rakamsal Değeri |
|---|---|---|
| Setuid | u+s | 4 |
| Setgid | g+s | 2 |
| Sticky Bit | +t | 1 |
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ızchmod‘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 777sorunu çö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.