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 ID
ve 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, EUID
ve EGID
özniteliklerinin 'gereksiz' ve sadece sahne arkasına eşit RUID
ve RGID
arka 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 which
ardı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, ping
komutun bir soket açması gerekmesi ve Linux çekirdeğinin root
bunun için ayrıcalık talep etmesidir.
Ama ayrıcalığım ping
yoksa 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 .
ping
sudo
İşte burada EUID
ve EGID
devreye giriyor.
Bir setuid ikili dosyası ping
çalıştırıldığında, işlemin Etkili Kullanıcı Kimliğini ( EUID
) varsayılandan RUID
bu özel ikili çalıştırılabilir dosyanın sahibine değiştirir, bu durumda -root
.
Tüm bunlar, bu dosyanın setuid
biti 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 EUID
işaret ediyor root
, işlem çekirdek tarafından reddedilmeyecek.
Not : En son Linux sürümlerinde ping
komutun çı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 SUID
ve 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 SUID
ve ayrıcalıklı hesaba geri dönülecektir.