Bazı örneklerle adım adım açıklamaya çalışacağım.
Kısa geçmiş
Her süreç gibi özelliklerini içeren kendi 'Süreç kimlik bilgileri' vardır PID, PPID, PGID, session IDve aynı zamanda gerçek ve etkin kullanıcı ve grup kimlikleri:
RUID, EUID, RGID, EGID.
Bunlara odaklanacağız.
Bölüm 1: UID ve GID'yi Anlayın
Şimdi kimlik bilgilerimle bir kabuğa giriş yapacağım ve şunu çalıştıracağım:
$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash
Sen benim kullanıcı kimliği (Rotem) görebilirsiniz, UID ve GID hem 1000, ve ben oturum ediyorum kabuğu gibi diğer detaylar.
Bölüm 2: RUID ve RGID'yi Anlayın
Her sürecin bir sahibi vardır ve bir gruba aittir .
Kabuğumuzda, şimdi çalıştıracağımız her işlem, kullanıcı hesabımın ayrıcalıklarını devralacak ve aynı UID ve GID ile çalışacaktır.
Kontrol etmek için basit bir komut çalıştıralım:
$ sleep 10 & ps aux | grep 'sleep'
Ve işlem UID ve GID'sini kontrol edin:
$ stat -c "%u %g" /proc/$pid/
1000 1000
Bunlar , işlemin Gerçek kullanıcı kimliği ( RUID) ve gerçek grup kimliğidir ( RGID) .
(*) UID ve GID'yi görüntülemek için diğer seçenekleri ve bunu tek satırda almanın yollarını kontrol edin .
Şimdilik, EUIDve EGIDözniteliklerinin 'gereksiz' ve sadece sahne arkasına eşit RUIDve RGIDarka planda olduğunu kabul edin.
Bölüm 3: EUID ve EGID'yi Anlayın
En alalım pingörnek olarak komutu.
Komutla ikili konumu arayın ve whichardından çalıştırın ls -la:
-rwsr-xr-x 1 root root 64424 Mar 10 2017 ping
Dosyanın sahibinin ve grubunun olduğunu görebilirsiniz root. Bunun nedeni, pingkomutun bir soket açması gerekmesi ve Linux çekirdeğinin rootbunun için ayrıcalık talep etmesidir.
Ama ayrıcalığım pingyoksa nasıl kullanabilirim root? Dosya izninin sahip bölümünde 'x' yerine 's' harfine
dikkat edin .
Bu, setuid olarak bilinen belirli ikili çalıştırılabilir dosyalar ( ve gibi ) için özel bir izin bitidir .
pingsudo
İşte burada EUIDve EGIDdevreye giriyor.
Bir setuid ikili dosyası pingçalıştırıldığında, işlemin Etkili Kullanıcı Kimliğini ( EUID) varsayılandan RUIDbu özel ikili çalıştırılabilir dosyanın sahibine değiştirir, bu durumda -root .
Tüm bunlar, bu dosyanın setuidbiti olduğu gerçeğiyle yapılır .
Çekirdek, sürece bakarak bu sürecin ayrıcalığa sahip olup olmadığına karar verir EUID. Çünkü şimdi EUIDişaret ediyor root, işlem çekirdek tarafından reddedilmeyecek.
Not : En son Linux sürümlerinde pingkomutun çıktısı, bu setuid yaklaşımı yerine Linux Yetenekleri yaklaşımını benimsedikleri için - aşina olmayanlar için - burayı okuyun .
Bölüm 4: SUID ve SGID ne olacak?
Kaydedilmiş kullanıcı kimliği ( SUID), ayrıcalıklı bir işlem çalışırken ( rootörneğin) kullanılır ve bazı ayrıcalıksız görevler yapması gerekir.
Bu durumda, önceki etkin UID ( EUID) içeriye kaydedilir SUIDve ardından ayrıcalıksız bir göreve dönüştürülür. Ayrıcalıksız görev tamamlandığında EUID, değerinden alınacak SUIDve ayrıcalıklı hesaba geri dönülecektir.