İçeriğe geç
academia.sh

Ders 13 / 20

İzin Bitleri

Dokuz izin bitinin üç sınıf ve üç erişim türüne bölünmesi, sekizlik gösterim, sınıf seçiminin dışlayıcılığı, dizinlerde bitlerin farklı anlamı ve varsayılan izinleri belirleyen maske.

İçindekiler

Önceki ders kimliği tanımladı. Şimdi bu kimliğin bir dosyada ne yapabileceği sorulabilir. Yanıt, listeleme çıktısının ilk sütununda en baştan beri duruyordu:

$ ls -l betik/ozet.sh
-rwxr-xr-x 1 ogrenci ogrenci 139 Jul 26 18:49 betik/ozet.sh
$ ls -l veri/ham/olcum-01.csv
-rw-r--r-- 1 ogrenci ogrenci 61 Jul 26 19:17 veri/ham/olcum-01.csv

İlk karakter dosya türüdür ve izinle ilgisizdir. Kalan dokuz karakter, çekirdeğin her erişim isteğinde danıştığı tablodur.

Üç Sınıf, Üç Erişim

Dokuz karakter üçerli üç gruba bölünür. Gruplar kullanıcı sınıflarına karşılık gelir:

  • İlk üç: dosyanın sahibi
  • Orta üç: dosyanın grubu
  • Son üç: diğerleri

Her grup içinde üç erişim türü aynı sırada durur: okuma (r), yazma (w), çalıştırma (x). İzin verilmemişse yerinde tire bulunur.

Buna göre -rwxr-xr-x şu anlama gelir: sahip okuyabilir, yazabilir, çalıştırabilir; grup üyeleri okuyabilir ve çalıştırabilir, yazamaz; diğerleri de aynı.

Sınıf Seçimi Dışlayıcıdır

En sık yapılan yanlış varsayım, izinlerin birikimli olduğudur. Değildir. Çekirdek sırayla tek bir sınıf seçer ve yalnızca onu uygular:

  1. İsteği yapan sürecin kullanıcı kimliği dosyanın sahibiyse: sahip bitleri uygulanır.
  2. Değilse, kullanıcının gruplarından biri dosyanın grubuysa: grup bitleri uygulanır.
  3. Hiçbiri değilse: diğer bitleri uygulanır.

Karar verildikten sonra diğer sınıflara bakılmaz. Bunun şaşırtıcı sonucu, sahibin kendi dosyasına diğerlerinden daha az erişebilmesidir:

$ chmod 044 /tmp/sinif.csv
$ ls -l /tmp/sinif.csv
----r--r-- 1 ogrenci ogrenci 47 Jul 26 19:20 /tmp/sinif.csv
$ id -un
ogrenci
$ cat /tmp/sinif.csv
cat: /tmp/sinif.csv: Permission denied

Dosyanın sahibi ogrenci’dir ve okuma girişimi reddedilmiştir. Grup ve diğer sınıflarda okuma izni vardır, ama sahip sınıfı seçildiği için onlara bakılmamıştır.

Sahibin bir üstünlüğü yine de vardır: izinleri değiştirme hakkı bitlerde tutulmaz, sahiplikten gelir. Sahip kendini kilitleyebilir ama kilidi her zaman açabilir.

$ chmod 644 /tmp/sinif.csv
$ cat /tmp/sinif.csv
zaman,sicaklik,nem
08:00,19.8,61
12:00,23.1,52

Sekizlik Gösterim

Dokuz bit, üçerli gruplar hâlinde okunduğunda üç sekizlik basamak verir. Bilgisayarlar Nasıl Çalışır kursundaki sekizlik taban tam olarak bu iş için uygundur: her basamak tam olarak üç biti kodlar.

Ağırlıklar erişim türlerine göre sabittir:

Erişim Harf Değer
Okuma r 4
Yazma w 2
Çalıştırma x 1

Bir sınıfın basamağı, o sınıfta açık olan bitlerin toplamıdır:

Sekizlik Bitler Anlamı
7 rwx 4+2+14+2+1
6 rw- 4+24+2
5 r-x 4+14+1
4 r-- 44
0 --- 00

Böylece -rwxr-xr-x dizesi 755, -rw-r--r-- dizesi 644 ve yukarıdaki ----r--r-- dizesi 044 olur.

Sekizlik gösterimin üstünlüğü kesinliktir: chmod 644 komutu dokuz biti de belirler, önceki durumu ne olursa olsun. Harfli gösterim ise seçici değişiklik yapar.

Simgesel Gösterim

chmod komutunun harfli biçimi üç parçadan oluşur: hangi sınıf (u sahip, g grup, o diğerleri, a hepsi), hangi işlem (+ ekle, - çıkar, = tam olarak ayarla) ve hangi bitler.

$ chmod 644 /tmp/s.txt
$ ls -l /tmp/s.txt
-rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:20 /tmp/s.txt
$ chmod u+x /tmp/s.txt
$ ls -l /tmp/s.txt
-rwxr--r-- 1 ogrenci ogrenci 0 Jul 26 19:20 /tmp/s.txt
$ chmod go-r /tmp/s.txt
$ ls -l /tmp/s.txt
-rwx------ 1 ogrenci ogrenci 0 Jul 26 19:20 /tmp/s.txt
$ chmod a=r /tmp/s.txt
$ ls -l /tmp/s.txt
-r--r--r-- 1 ogrenci ogrenci 0 Jul 26 19:20 /tmp/s.txt

+ ve - yalnızca adı geçen bitlere dokunur; diğerleri korunur. = ise o sınıfın tüm bitlerini verilen değere ayarlar, yani listelenmemiş bitleri kapatır.

Seçim ölçütü nettir: bilinen bir duruma getirmek için sekizlik, var olan duruma ekleme veya çıkarma yapmak için simgesel biçim kullanılır. Komut yolu dersindeki chmod +x kullanımı ikinci türdendi — dosyanın okuma izinleri korunarak yalnızca çalıştırma eklenmişti.

Dizinlerde Bitlerin Anlamı Değişir

Aynı üç harf dizinlerde bambaşka şeyler ifade eder. Bu, izin modelinin en çok yanlış anlaşılan yanıdır.

Okuma (r) dizindeki adların listelenmesine izin verir.

Yazma (w) dizine girdi eklemeye ve girdi silmeye izin verir.

Çalıştırma (x) dizinden geçmeye, yani içindeki bir ada erişmeye izin verir. Dizin hiyerarşisi dersinde yolun bileşen bileşen çözümlendiği söylenmişti; her bileşende aranan izin budur.

İki bit birbirinden bağımsızdır ve ayrı ayrı sınanabilir. Yalnızca geçiş izni olan bir dizin, içeriği listelenemez ama adı bilinen dosyaya erişilebilir:

$ chmod 100 /tmp/dz
$ ls -ld /tmp/dz
d--x------ 3 ogrenci ogrenci 4096 Jul 26 19:20 /tmp/dz
$ ls /tmp/dz
ls: cannot open directory '/tmp/dz': Permission denied
$ cat /tmp/dz/veri.txt
icerik

Listeleme reddedilmiş, ama adı doğrudan verilen dosya okunabilmiştir. Bu yapılandırma pratikte kullanılır: içeriği gizli tutulan ama belirli dosyalarına erişim verilen dizinler böyle ayarlanır.

Tersi durum daha çarpıcıdır — okuma var, geçiş yok:

$ chmod 400 /tmp/dz
$ ls -ld /tmp/dz
dr-------- 3 ogrenci ogrenci 4096 Jul 26 19:20 /tmp/dz
$ ls /tmp/dz
alt  veri.txt
$ ls -l /tmp/dz
ls: cannot access '/tmp/dz/veri.txt': Permission denied
ls: cannot access '/tmp/dz/alt': Permission denied
total 0
d????????? ? ? ? ?            ? alt
-????????? ? ? ? ?            ? veri.txt

Adlar okunabilmiştir çünkü adlar dizinin içeriğidir. Ancak her adın üstverisini almak için dizinden geçmek gerekir ve geçiş izni yoktur; bu yüzden tüm sütunlar soru işaretiyle gösterilmiştir. Çıktı, adların dizinde, üstverinin düğümde durduğu ayrımını doğrudan görünür kılar.

Yazma bitinin sonucu da beklenmediktir: bir dizinde yazma izni olan kullanıcı, içindeki dosyaları silebilir — dosyanın kendisinde hiçbir izni olmasa bile. Silmek dosyayı değil dizin girdisini değiştirdiği için, aranan izin dizinin iznidir. Bu boşluğun nasıl kapatıldığı özel izin bitleri dersinin konusudur.

Varsayılan İzinler

Yeni oluşturulan dosyaların izinleri komutla verilmez; maskeden (umask) çıkar. Maske, kapatılacak bitleri gösterir: istenen izinlerden maskedeki bitler çıkarılır.

$ umask
0022
$ touch /tmp/u1.txt
$ mkdir -p /tmp/u1dir
$ ls -l /tmp/u1.txt
-rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:20 /tmp/u1.txt
$ ls -ld /tmp/u1dir
drwxr-xr-x 2 ogrenci ogrenci 4096 Jul 26 19:20 /tmp/u1dir

Hesap şöyledir: dosyalar için başlangıç değeri 666, dizinler için 777’dir. Maske 022 çıkarıldığında dosyalarda 644, dizinlerde 755 kalır.

Dosyaların 777 yerine 666 ile başlaması bilinçlidir: çalıştırma izni istem dışı verilmemelidir, çünkü bir veri dosyasının çalıştırılabilir olması hiçbir zaman gerekli değildir. Dizinlerde ise geçiş izni olmadan dizin kullanılamaz.

Maske değiştirilebilir:

$ umask 077
$ touch /tmp/u2.txt
$ mkdir -p /tmp/u2dir
$ ls -l /tmp/u2.txt
-rw------- 1 ogrenci ogrenci 0 Jul 26 19:20 /tmp/u2.txt
$ ls -ld /tmp/u2dir
drwx------ 2 ogrenci ogrenci 4096 Jul 26 19:20 /tmp/u2dir

077 maskesi grup ve diğer sınıfların tüm bitlerini kapatır; yeni dosyalar yalnızca sahibe açık olur. Çok kullanıcılı sistemlerde bu, varsayılan olarak tercih edilen ayardır.

Maske süreç özelliğidir ve çocuk süreçlere miras kalır; kalıcı olması için oturum açılışında okunan yapılandırma dosyasına yazılır — komut yolu dersindeki PATH ayarıyla aynı yere.

Özet

  • Dokuz izin biti üç sınıfa (sahip, grup, diğerleri) ve üç erişim türüne (okuma, yazma, çalıştırma) bölünür.
  • Sınıf seçimi dışlayıcıdır: uyan ilk sınıf uygulanır ve diğerlerine bakılmaz; sahip kendi dosyasına diğerlerinden az erişebilir.
  • Sekizlik gösterimde okuma 4, yazma 2, çalıştırma 1 değerindedir; chmod sekizlikle tam durum, simgesel biçimle seçici değişiklik yapar.
  • Dizinlerde okuma adları listelemeye, yazma girdi eklemeye ve silmeye, çalıştırma dizinden geçmeye izin verir.
  • Dizinde yazma izni olan kullanıcı, içindeki dosyalarda hiçbir izni olmasa da onları silebilir.
  • Yeni dosyaların izinleri maskeyle belirlenir: dosyalarda 666, dizinlerde 777 başlangıç değerinden maske bitleri çıkarılır.

Sonraki Adım

İzinler bir dosyanın sahibine ve grubuna göre uygulanıyorsa, sahiplik ve grubun kendisi nasıl değiştirilir? Sonraki ders sahiplik değiştirme komutlarını, kimin neyi değiştirebileceğini ve bir ağacın tamamının sahipliğini değiştirirken sembolik bağların neden sorun çıkardığını ele alır.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat