Ders 12 / 20
Kullanıcılar ve Gruplar
Kimliğin çekirdek düzeyinde sayı olarak tutulması, hesap ve grup dosyalarının alan yapısı, birincil ile ek grup ayrımı ve ad çözümlemesi.
İçindekiler
Önceki derste uzak makinedeki dosyalar yedek hesabına, yerel dosyalar başka bir hesaba ait
çıktı. Listeleme çıktılarında sahip ve grup sütunları en baştan beri görünüyordu ama ne
oldukları açıklanmadı.
Bu ders o boşluğu kapatır. Kimliğin sistemde ne olarak saklandığı, sonraki dersteki izin denetiminin girdisidir: çekirdek “bu kullanıcı bu dosyayı okuyabilir mi” sorusunu yanıtlarken tam olarak bu değerleri karşılaştırır.
Kimlik Bir Sayıdır
Çekirdek kullanıcı adı bilmez. Her sürecin ilişkilendirildiği şey iki tam sayıdır: kullanıcı kimliği (UID) ve grup kimliği (GID). Adlar yalnızca insanlar içindir ve kullanıcı alanındaki programlarca çözülür.
$ id uid=1001(ogrenci) gid=1001(ogrenci) groups=1001(ogrenci),2001(proje)
Çıktı üç bilgi verir: kullanıcı kimliği, birincil grup kimliği ve üyesi olunan tüm gruplar. Parantez içindeki adlar sayıların çözülmüş karşılıklarıdır; asıl değer sayıdır.
Alanlar ayrı ayrı da istenebilir:
$ id -u 1001 $ id -g 1001 $ id -un ogrenci
-n eki, sayı yerine adı verir. whoami komutu id -un ile aynı sonucu üretir.
Ayrımın pratik sonucu şudur: bir dosyanın sahibi bir ad değil bir sayıdır. Kullanıcı silinip aynı numarayla yeni bir hesap açılırsa, eski dosyalar yeni hesaba ait görünür. Aynı biçimde, arşivden çıkarılan dosyaların sahipliği hedef sistemde farklı bir kişiye denk gelebilir — arşiv dosyalarında saklanan da sayıdır.
Kök kullanıcı (root) UID değeri sıfır olan hesaptır. Ayrıcalığı adından değil bu sayıdan gelir; çekirdek birçok denetimi UID sıfır için atlar.
Hesap Dosyası
Hesap kayıtları bir metin dosyasında tutulur. Her satır bir hesaptır ve alanlar iki nokta üst üste ile ayrılır:
$ grep -E '^(root|ogrenci|yedek):' /etc/passwd root:x:0:0:root:/root:/bin/bash ogrenci:x:1001:1001::/home/ogrenci:/bin/bash yedek:x:1002:1002::/home/yedek:/bin/bash
Yedi alan sırayla şunlardır:
| Sıra | Alan | Örnekteki değer |
|---|---|---|
| 1 | Kullanıcı adı | ogrenci |
| 2 | Parola yeri | x |
| 3 | Kullanıcı kimliği | 1001 |
| 4 | Birincil grup kimliği | 1001 |
| 5 | Açıklama alanı | boş |
| 6 | Ev dizini | /home/ogrenci |
| 7 | Oturum açma kabuğu | /bin/bash |
Bu dosyanın biçimi, yardım kaynakları dersinde kılavuzun beşinci bölümünden okunmuştu; bölüm 5’in ne işe yaradığının somut örneği budur.
İkinci alandaki x bir parola değildir. Parola karmaları, yalnızca kök kullanıcının
okuyabildiği ayrı bir dosyada tutulur:
$ ls -l /etc/passwd /etc/shadow -rw-r--r-- 1 root root 1236 Jul 26 19:14 /etc/passwd -rw-r----- 1 root shadow 668 Jul 26 19:14 /etc/shadow $ cat /etc/shadow cat: /etc/shadow: Permission denied
Ayrımın nedeni izin sütunlarında görünür: hesap dosyası herkes tarafından okunabilir
(rw-r--r--), çünkü kullanıcı adı ve kimlik eşlemesine her program erişmek zorundadır.
Parola karmaları aynı erişilebilirlikte olsaydı, herkes karmaları alıp çevrimdışı deneme
yapabilirdi. Karmalar bu yüzden ayrılmıştır ve yalnızca sahibi ile shadow grubu tarafından
okunabilir.
Sistem hesapları ile insan hesapları kimlik aralıklarıyla ayrılır. Düşük numaralar servisler için ayrılmıştır; insan hesapları belirli bir eşiğin üzerinden başlar. Eşiğin değeri sistem yapılandırmasına bağlıdır, ama ayrımın kendisi geneldir ve yeni hesap açan araçlar numarayı bu aralıktan seçer.
Yedinci alandaki kabuk, oturum açıldığında çalıştırılacak programdır. Oturum açması istenmeyen servis hesaplarında buraya, çalıştırıldığında hemen sonlanan bir program yazılır; bu, hesabı devre dışı bırakmanın standart yoludur.
Hesabın Yaşam Döngüsü
Hesap dosyaları elle düzenlenmez; hesap yönetimi komutları bu dosyaları tutarlı biçimde günceller. Yeni bir hesap açan komut tek bir dosyaya değil üçüne birden yazar: hesap dosyasına bir satır, gölge dosyasına bir parola kaydı, grup dosyasına birincil grup. Ayrıca ev dizinini oluşturur ve içine iskelet dizininden başlangıç yapılandırma dosyalarını kopyalar.
Ek grup üyeliği sonradan verilebilir. Burada sık karşılaşılan bir yanılgı vardır: üyelik eklendiği anda çalışan oturuma yansımaz. Süreçlerin grup listesi oturum açılırken belirlenir ve süreç boyunca sabit kalır; yeni üyelik ancak yeni bir oturumda geçerli olur.
Hesabın kapatılması ile silinmesi ayrı işlerdir. Kapatma, parolayı geçersiz kılar veya oturum kabuğunu sonlandıran bir programla değiştirir; kimlik ve dosya sahipliği yerinde kalır. Silme, kaydı dosyalardan çıkarır — ama kullanıcının sistemde bıraktığı dosyaları temizlemez.
Sonuç, kimliğin bir sayı olmasının doğrudan görünür hâlidir:
$ ls -l /veri/rapor.txt -rw-r--r-- 1 ogrenci ogrenci 0 Jul 26 19:54 /veri/rapor.txt $ sudo userdel ogrenci $ ls -l /veri/rapor.txt -rw-r--r-- 1 1001 1001 0 Jul 26 19:54 /veri/rapor.txt
Sahip sütununda ad yerine sayı görünür: dosyanın sahipliği değişmemiştir, yalnızca sayıyı ada çevirecek kayıt kalmamıştır. Bu tür dosyalar, aynı numara başka bir hesaba verildiğinde sessizce onun olur; hesap silinirken dosyalarının da devredilmesi ya da temizlenmesi gereken şey budur.
Grup Dosyası
Gruplar ayrı bir dosyada, dört alanla tutulur:
$ grep -E '^(root|ogrenci|yedek|proje):' /etc/group root:x:0: ogrenci:x:1001: proje:x:2001:ogrenci yedek:x:1002:
Alanlar sırayla grup adı, parola yeri, grup kimliği ve ek üyelerin listesidir.
Son alan dikkat ister. ogrenci grubunun üye listesi boştur, ama ogrenci kullanıcısı bu
grubun üyesidir. Çelişki değildir: üyelik iki ayrı yerden gelir.
Birincil grup, hesap dosyasının dördüncü alanındadır. Kullanıcının oluşturduğu yeni dosyalar varsayılan olarak bu grubu alır.
Ek gruplar, grup dosyasının üye listelerinden gelir. proje:x:2001:ogrenci satırı
ogrenci kullanıcısını proje grubuna ek üye yapar.
Toplam üyelik iki kaynağın birleşimidir:
$ groups ogrenci proje
Her kullanıcıya kendi adıyla bir birincil grup açmak yaygın bir yapılandırmadır. Nedeni izin bitleri dersinde görülecektir: birincil grup paylaşılan bir grup olsaydı, kullanıcının oluşturduğu her dosya varsayılan olarak o gruba açık olurdu.
Bu kursun proje ağacı için ayrı bir proje grubu tanımlanmıştır. Grup, sahiplik ve özel
izin bitleri derslerinde ağacın paylaşıma açılmasında kullanılacaktır.
Ad Çözümleme
Kimlik bilgisi her zaman yerel dosyalardan gelmez. Kuruluş ölçeğinde hesaplar ağ üzerindeki bir dizin hizmetinde tutulabilir. Bu nedenle programlar dosyaları doğrudan okumak yerine bir çözümleme katmanı çağırır.
$ getent passwd ogrenci ogrenci:x:1001:1001::/home/ogrenci:/bin/bash $ getent group proje proje:x:2001:ogrenci
getent komutu, sistemin yapılandırılmış tüm kaynaklarına sorar ve yanıtı standart biçimde
verir. Kayıt yerel dosyada değil ağdaki bir kaynakta olsa da çıktı aynı biçimdedir; komutu
çağıran programın kaynağın nerede olduğunu bilmesi gerekmez.
Uygulamada bunun anlamı şudur: bir hesabın var olup olmadığı grep ile dosyada aranarak
değil, getent ile sorularak sınanır. Dosyada bulunmaması hesabın olmadığını göstermez.
Hesap Yönetimi Komutları
Hesap ve grup oluşturma, değiştirme ve silme komutları kök yetkisi gerektirir ve kılavuzun sekizinci bölümünde belgelenir. Bu kursta hesap açılmayacaktır; ilgili araç ailesi Sistem Yönetimi kursunun konusudur.
Kök yetkisi gerektirmeyen tek yaygın işlem, kullanıcının kendi parolasını değiştirmesidir. Bu işlemin nasıl mümkün olduğu ilginç bir sorudur: parola karmalarını tutan dosya sıradan bir kullanıcı tarafından okunamaz bile, yazılması nasıl sağlanır?
$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 72056 May 30 2024 /usr/bin/passwd
İzin dizesinde alışılmadık bir karakter var: sahip izinlerinin üçüncü konumunda x yerine
s. Bu, özel izin bitleri dersinin konusudur ve bu konunun sonunda yanıtlanacaktır.
Özet
- Çekirdek kimliği sayı olarak tutar; adlar kullanıcı alanında çözülür ve dosya sahipliği sayıya bağlıdır.
- Kök kullanıcının ayrıcalığı adından değil, kullanıcı kimliğinin sıfır olmasından gelir.
- Hesap dosyası yedi alan taşır: ad, parola yeri, kullanıcı kimliği, birincil grup kimliği, açıklama, ev dizini ve oturum kabuğu.
- Parola karmaları, çevrimdışı deneme saldırılarını engellemek için yalnızca ayrıcalıklı okunabilen ayrı bir dosyadadır.
- Üyelik iki kaynaktan gelir: hesap dosyasındaki birincil grup ve grup dosyasındaki ek üye listeleri.
- Ad çözümleme yerel dosyalarla sınırlı değildir; sorgular çözümleme katmanı üzerinden yapılır.
Sonraki Adım
Kimlik tanımlandığına göre, bu kimliğin bir dosyada ne yapabileceği sorulabilir. Sonraki ders listeleme çıktısının ilk sütunundaki dokuz karakteri çözer: üç erişim türü, üç kullanıcı sınıfı, sekizlik gösterim ve dizinlerde aynı bitlerin neden bambaşka anlamlar taşıdığı.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.