İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat