Merhabalar,

“Linux Öğreniyorum Serisi”nin ikinci dersi için merhabalar. İlk dersimizde, dizin hiyerarşisini ve başlangıç dosyalarını (initializing files) anlattım.

İlk ders için https://www.linkedin.com/pulse/linux-%25C3%25B6%25C4%259Freniyorum-dizin-hiyerar%25C5%259Fisi-ve-ba%25C5%259Flang%25C4%25B1%25C3%25A7-dosyalar%25C4%25B1-yigit-0ayif/?trackingId=L%2FTEFUMUTmuntXVwGovRKw%3D%3D linkini inceleyebilirsiniz.

Bu derste, Linux’ta dosya ve dizin izinlerini nasıl yönetebileceğinizi öğreneceğiz. İzinlerin ikili (binary) ve sekizlik (octal) sistemlerde nasıl ifade edildiğini inceleyecek, umask kavramını açıklayacak ve farklı kullanıcıların (owner, group, others) izinlerini nasıl yapılandıracağımızı örneklerle göstereceğiz.

Şekil 1.

Yukardaki örnekte asiye kullanıcısı olarak, file1.txt isimli bir dosya, dizin1 isimli bir dizin oluşturdum. “ls” komutuyla oluşturduğum dosya ve dizinin izinlerini kontrol ettim. “umask” komutuyla da “umask” değerine baktım. İzinlerde gördüğümüz ilk karakter, dizinin başında,”d” olarak görünen, dosyanın başında “-“ olarak görünen, bunların sırasıyla dizin ve dosya olduğunu söyler. Bugün odaklanacağımız konu bu ilk karakterden sonra gelen karakterler. Yani dizin için, “rwxr-xr-x” ve dosya için gördüğümüz “rw-r—r—“ karakterleri.

Nedir bu karakterler? Bu karakterler dizin ve dosyalarda ne tür işlemler yapabileceğimizi söyler. Bu izinlerin, ikili (binary), sekizlik (octal/oktal) gösterimleri vardır. Bu izinleri üçlü ayrı bileşenler gibi düşünün, yani “rw-“, “r—“, “r-x” gibi.

Dizinlere ve dosyalara, “owner:sahip”, “group:grup”, “others:diğerleri” olarak izinler atarız.

Dizinde gördüğünüz, “rwxr-xr-x”nin her üçlüsü sırasıyla, “owner”, “group” ve “others” ifade eder. Yani dosya sahibini, dosya sahibinin bulunduğu grubu ve sonuncusu, dosya sahibi ve dosya sahibinin bulunduğu grupta olmayanları ifade eder.

Bu üçlü her bir grup sadece aşağıdaki değerlerde olabilirler.

Şekil 2.

Universite yıllarımızdan hatırlıyoruz değil mi? İkili sayıların ne şekilde sekizlik düzene dönüştürüleceğini. Gerçi lise yıllarında da görmüştük.

Oktal sistem (sekizlik sistem), Linux’ta dosya ve dizin izinlerinin kısaca ifade edilmesi için kullanılır. Çünkü her oktal basamağı, 3 bit’lik bir binary grubuna karşılık gelir. Bu yapı, dosya izinlerinin okuma (r), yazma (w), çalıştırma (x) olarak 3’erli gruplar halinde gösterilmesiyle uyumludur.

Şekil 3.

Şekil 4.

Bu formülü kullandığınızda yukardaki tablo artık size mantıklı geldi değil mi? Dikkat ederseniz, (r) oktal yani sekizlik değeri, 4, (w)ın sekizlik değeri 2 ve (x)in sekizlik değeri 1 dir.

  • r (read): 4
  • w (write): 2
  • x (execute): 1
  • – (no permission): 0

Siz chmod, setfacl, umask gibi komutları oktal değerlerle de kullanabilirsiniz.

Artık bu hesaplamaları öğrendiğimize göre, neden file1.txt’in izni 644, dizin1’in izni ise 755 geldi. Linux işletim sisteminde, siz dizin oluşturduğunuzda varsayılan olarak izin 777 (rwxrwxrwx), dosya oluşturduğunuzda ise varsayılan izin 666 (rw-rw-rw-) şeklindedir. Peki o zaman bizim oluşturduklarımız neden, dizin için 755 (rwxr-xr-x), dosya için ise 644 (rw-r—r—) şeklinde? “umask” değerimizden ötürü. “umask” değerimiz 0022.

umask değeri 4 basamaklıdır: Örneğin, 0022.
Ancak çoğu zaman, ilk basamak genellikle 0 olur ve birçok kullanıcı bunu göz ardı eder. Ama bu basamağın özel bir işlevi vardır.

  1. Basamak (Özel Bitler): Setuid, Setgid ve Sticky bit’i engeller. Bu özel bitleri daha sonra anlatacağım.

2-3-4. Basamaklar: Sahip, grup ve diğer kullanıcıların izinlerini sınırlar.

Yorumu,

0 → Özel bitlerle ilgili bir değişiklik yapmıyor.

022 → Sahip, grup ve diğerlerinin izinlerini sınırlandırıyor.

Bizim örneğimizde, (777 – 022)’nin 755 olduğunu görüyoruz. (666 – 022)’nin de 644 olduğunu görüyoruz.  Bu, örneğimizdeki dizin ve dosya izinlerinin neden böyle olduğunu bize açıklıyor.

Aşağıdaki örneğimizi inceleyebilirsiniz.

Şekil 5.

“umask” değerini 0077 yaptık. Yani “group” ve “others” dan tüm izinleri kaldırdım. Oluşturulan dizin ve dosyanın izinlerine ne şekilde yansıdığını görüyorsunuz. Komut satırıyla yaptığım “umask” değişikliği kalıcı değil. Kalıcı yapmak için ilk dersimizde anlattıklarımı hatırlayın. Evet sizi duyabiliyorum. Dediğiniz gibi, başlangıç dosyalarında “umask”ın size uygun değerinin kalıcılığını sağlayabilirsiniz.

Şekil 6.

Şimdi konuyu daha iyi anlamanız için aşağıda bazı alıştırmalar yapıyorum. Lütfen dikkatli takip edin.

Şekil 7.

Üç adet kullanıcım var: asiye, sarav, yigit. “Owner”, asiye kullanıcısı. asiye kullanıcısının grubuna sarav kullanıcısını ekledim. yigit kullanıcısı ise, “others” konumunda.

Şekil 8.

Şekil 9.

rw-: Asiye için (sahip) okuma ve yazma izni.

r–: Grup ve diğerleri için sadece okuma izni.

Şekil 10.

Neden?: Sarav grubun bir üyesi olsa da, dosyada yazma izni yok.

asiye kullanıcısı grup üyelerine yazma izni versin.

Şekil 11.

Aşağıda göreceğiniz gibi yine hata aldık. Acaba neden?

Şekil 12.

Çünkü dosya izinleriyle ilgili düzenleme yaparken dizinlerin izinlerini de dikkate almamız gerekir. Linux’ta dizin izinleri, o dizindeki dosyaların listeleme, ekleme, silme ve görünürlüğünü kontrol eder. Dosya izinlerinden farklı olarak, dizinlerdeki izinlerin bazı özel anlamları vardır. Şimdi r, w, x izinlerinin dizinlerde ne anlama geldiğine bakalım.

Şekil 13.

 

Okuma İzni (r):

Dizin içindeki dosya ve dizinlerin adlarını listeleme hakkı verir.

Ancak, içeriklerine erişebilmek için çalıştırma (x) izni de gereklidir.

Yazma İzni (w):

Dizine yeni dosyalar ekleme ve mevcut dosyaları silme izni verir.

Ancak dosya silebilmek için dizinde hem yazma (w) hem çalıştırma (x) izni olmalıdır.

Çalıştırma İzni (x):

Dizin içine girme izni verir.

Çalıştırma izni olmadan, dizine giremez ve içeriklere erişemezsin (hatta ls ile listeleyemezsin).

Bir dosyada sadece okuma (r) izni varsa, kullanıcı içeriği görüntüleyebilir ama dosya üzerinde değişiklik yapamaz. Ancak, dizinlerde yalnızca okuma izni yeterli değildir; dizine girmek için çalıştırma (x) izni de gereklidir.

Bu anlatılanları bir tablo ile özetleyelim.

Şekil 14.

Gelin bu tabloda yazanları tek tek test edelim. Öncelikle, gruba sadece read hakkı verelim, yani r–.

Şekil 15.

Gördüğünü gibi çalıştırma (x) izni olmadan sarav kullanıcısı, dizin içeriğini listeleyemez ve dizin içine giremez.

Şimdi ise, grup için okuma (r) ve çalıştırma (x) hakkı verelim. Yani, r-x hakkı verelim. Aşağıdaki örneği detaylı inceleyin lütfen.

Şekil 16.

Sarav kullanıcısı /home/asiye dizinin içini listeleyebildi ve içine girebildi. Ama dizin içine herhangi bir şey yazamaz. Çünkü yazma (w) hakkı yok.

Şekil 17.

Şimdi, (x) hakkını kaldırıp sadece “rw” hakkı vereceğim. Yani, rw- hakkı verelim.

Şekil 18.

Gördüğünüz gibi, “rw” hakkı olsa bile, eğer dizin için (x) hakkı yok ise, bu dizinin içeriğini göremez, içerisine herhangi bir şey ekleyemez.

Şimdi ise, gruba “rwx” hakkı verelim. Bu durumda sarav kullanıcısı grubun bir üyesi olduğu için beklentimiz, elbette dizinin içerisini listelemesi, dizine dosya veya dizin ekleyebilmesi.

Şekil 19.

Aşağıda sarav kullanıcısının asiye kullanıcısına ait dosyayı da silebildiğini görüyoruz. Yani aslında gruba “rwx” izni verdiğinizde büyük bir risk alıyorsunuz.

Şekil 20.

İlginç bir şey yapalım. Dizine sadece (x) hakkı verelim. Yani, –x hakkı verelim. Sizce ne olur?

Şekil 21.

Bu durumda, sarav kullanıcısı ile dizine girebiliyorsunuz, çünkü dahil olduğu grubun (x) hakkı var. Ama içini ls komutu ile listeleyemiyorsunuz. Fakat dikkat edin, dosyanın ismini biliyorsak cat komutu ile görüntüleyebildik.

Hadi gelin gruba sadece (w) hakkı verelim. Yani, -w- hakkı verelim.

Şekil 22.

(w) hakkı olmasına rağmen, sarav kullanıcısı dosya oluşturamadı.

Dizine yazma izni (w) şu durumlarda anlamlı olur:

Dizin içinde dosya eklemek veya var olan dosyaları silmek istiyorsan, hem yazma (w) hem çalıştırma (x) iznine sahip olmalısın.

Çalıştırma izni olmadan dizine erişemez ve dosya işlemleri yapamazsın.

Çalıştırma izni olmadan (x), dizine erişim sağlanamaz. Bu yüzden, yazma izni (w) olmasına rağmen dosya eklemek mümkün değildir.

Dizin erişimi olmadan dosya oluşturulamaz veya silinemez.

Yazma izni (w): Dizin içinde dosya oluşturma ve silme hakkı verir.

Çalıştırma izni (x): Dizine girme ve dosyalara erişim izni verir.

Dolayısıyla, dosya eklemek ve silmek için hem w hem x izni gereklidir. Yazma izni tek başına yetmez. Çalıştırma izni olmadan (x), yazma izni (w) olsa bile dosya ekleme veya silme işlemi yapılamaz. Bu yüzden, dosya oluşturabilmek için hem (w) hem (x) iznine ihtiyaç vardır.

Son olarak gruba “-wx” hakkı verelim.

Şekil 23.

Sarav kullanıcısı için yaptığımız tüm örnekleri ekteki tabloda özetleyebiliriz.

Şekil 24.

Özellikle dizinlerde (x) hakkını anlamakta Linux’e yeni başlayanlar zorlanıyor. Bu örneklerle biraz daha konuyu anlaşılır yapmak istedim.

Öğrendiklerinizi pekiştirmek için aşağıdaki soruları yanıtlayabilirsiniz:

  • Bir dizine sadece çalıştırma (x) izni verirseniz ne olur?
  • Sadece yazma (w) izni verilirse dizine dosya eklenebilir mi?
  • chmod 770 komutu ne anlama gelir ve hangi durumlarda kullanılır?

 

Bir sonraki bölümde, Linux’taki özel imtiyazları ele alacağız. Sticky bit, setuid ve setgid gibi izinlerin ne işe yaradığını ve hangi durumlarda kullanıldığını detaylandıracağız.

Sarav Asiye Yiğit – 28 Ekim 2024