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:
- İsteği yapan sürecin kullanıcı kimliği dosyanın sahibiyse: sahip bitleri uygulanır.
- Değilse, kullanıcının gruplarından biri dosyanın grubuysa: grup bitleri uygulanır.
- 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 |
|
| 6 | rw- |
|
| 5 | r-x |
|
| 4 | r-- |
|
| 0 | --- |
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;
chmodsekizlikle 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, dizinlerde777baş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.