Yeni yazı: Kümenin Kapağını Açalım: Kubernetes Bileşenleri Birbirini Neden Hiç Aramaz?
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ı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

Linux dosya izinleri (rwx) şeması

Dosya İzinleri:

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

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. x olmadan r neredeyse 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ç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.

    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:

    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? 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ı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

Symbolic Link ve Hard Link

Symbolic Link ve Hard Link

İşletim sistemlerinde dosyaları düzenlemek ve yönetmek, veri organizasyonunun temel bir parçasıdır. GNU/Linux dünyasında, dosyaları bağlamak için kullanılan iki önemli kavram Symbolic Link (Sembolik Bağlantı) ve Hard Link (Sert Bağlantı) olarak karşımıza çıkar. Bu yazıda, Symbolic Link ve Hard Link kavramlarını ayrıntılı bir şekilde inceleyecek ve her iki bağlantı türünün nasıl çalıştığını ve farklılıklarını örneklerle anlatacağız.

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 işletim sistemi olan GNU/Linux’un temel taşlarından biri dosya ve dizin yapısıdır. Dosyalar, verileri saklamak için kullanılan birimlerdir, dizinler ise dosyaların düzenli bir şekilde saklandığı yerlerdir. Dosya ve dizinlerin yönetimi ve erişimi, Linux öğrenme yolculuğunuzun vazgeçilmez bir parçasıdır. Bu yazıda, dosya ve dizin yapısının temelini oluşturan Mutlak Yol (Absolute Path) ve Bağıl Yol (Relative Path) kavramlarına yakından bakacağız.