Unix / Linux: Gerçek Kullanıcı Kimliği, Etkili Kullanıcı Kimliği ve Kaydedilmiş Kullanıcı Kimliği arasındaki fark


107

Gerçek kullanıcı kimliğinin zaten farkındayım . Sistemdeki bir kullanıcının benzersiz numarasıdır.

Benim sistemde, My uidolduğunu

$ echo $UID
1014
$                 

Diğer iki kimlik ne anlama geliyor?
Ve kullanımı nedir etkili kullanıcı kimliği ve kaydedilen kullanıcı kimliği ve nerede sistemde kullanmak?


Bilginize - Wikipedia sayfasında özetlendiği gibi dosya sistemi kullanıcı kimliği de vardır: en.wikipedia.org/wiki/User_identifier
Willem van Ketwich

Sanırım bundan bahsetmedi çünkü (wiki bağlantınızdan): "Çekirdek 2.0'dan beri, fsuid'in varlığı artık gerekli değil çünkü Linux sinyal göndermek için SUSv3 kurallarına bağlı, ancak fsuid uyumluluk nedenleriyle kalıyor."
RtmY

Yanıtlar:


151

Gerçek ve etkili bir kullanıcı kimliği arasındaki ayrım, başka bir kullanıcının kimliğini geçici olarak almanız gerekebileceği için yapılır (çoğu zaman olur root, ancak bu herhangi bir kullanıcı olabilir). Yalnızca bir kullanıcı kimliğiniz varsa, daha sonra orijinal kullanıcı kimliğinize geri dönmenin hiçbir yolu olmayacaktır (sözünüzü kabul etmek ve eğer öyleyseniz root, rootherhangi bir kullanıcıyı değiştirmek için ayrıcalıklarını kullanmak dışında).

Dolayısıyla, gerçek kullanıcı kimliği gerçekte kim olduğunuzdur (işlemin sahibi olan kişi) ve etkili kullanıcı kimliği, işletim sisteminin bir şeyi yapmanıza izin verilip verilmediğine karar vermek için baktığı şeydir (çoğu zaman bazı istisnalar vardır).

Oturum açtığınızda, oturum açma kabuğu hem gerçek hem de etkili kullanıcı kimliğini parola dosyası tarafından sağlanan aynı değere (gerçek kullanıcı kimliğiniz) ayarlar.

Şimdi, aynı zamanda bir setuid programı çalıştırmak olur ve başka bir kullanıcı olarak çalışan yanında (örneğin root) setuid programıdır de sizin adınıza bir şeyler yapmak gerekiyordu. Bu nasıl çalışıyor?
Setuid programını çalıştırdıktan sonra, setuid olduğundan gerçek kimliğinize (işlem sahibi olduğunuz için) ve dosya sahibinin etkin kullanıcı kimliğine (örneğin root) sahip olacaktır.

Program, süper kullanıcı ayrıcalıklarıyla yapması gereken sihri yapar ve sonra sizin adınıza bir şeyler yapmak ister. Bu, yapamamanız gereken bir şeyi yapmaya çalışmanın başarısız olması gerektiği anlamına gelir . Bunu nasıl yapıyor? Açıkçası, etkili kullanıcı kimliğini gerçek kullanıcı kimliğiyle değiştirerek!

Artık o setuid programının geri dönüş yolu yok, çünkü tüm çekirdek bildiği gibi sizin id ve ... id . Bang, sen öldün.

Kaydedilen set-user id bunun içindir.


7
Kaydedilmiş ayarlanmış kullanıcı kimliği hakkındaki bu son nokta hakkında daha fazla netlik için Wikipedia'ya
GDP2

Bunun yerine hangi sys çağrısının Gerçek kullanıcı kimliğini kontrol etmesini bulabileceğim bazı okumalara yönlendirebilir misin? teşekkür ederim
mik1904

1
@ mik1904: Kullanmanız muhtemel olan ve gerçek UID'yi gerçekten kontrol eden en önemlisi access. Bu% 99.9. Ayrıca setfsuid(ancak nadiren ihtiyaç duyulur) ve bazı çok düşük seviyeli işlevler ve öncelikleri veya zamanlayıcıyı almak / ayarlamak için gerçek kullanıcı kimliğine ve sinyal işleyicilerine iletilen veya waitve diğerleri tarafından döndürülen kimliklere ihtiyacınız vardır (ancak kontrol edilmez) . olan gerçek kimlikleri. execvekontrol etmez, ancak gerçek kullanıcı kimliğini değiştirdiyseniz başarısız olabilir. Ayrıca forkkontrol etmez, ancak gerçek UID'de maksimum işlem kotasına ulaşırsanız başarısız olabilir. Google ile site:man7.orgburada arkadaşınız var.
Damon

"ping komutunun bir soket açması gerekiyor ve Linux çekirdeği bunun için kök ayrıcalığı talep ediyor." bu gerçekten doğru değil. ham bir sokete pingihtiyaç duyar . herhangi bir kullanıcı (genellikle) 1024'ün üzerinde bir soket açabilir ve dinlemek için.
Daniel Farrell

44

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.



1
SUID ile ilgili son paragraf dışında net cevap. Ayrıcalıklı ve ayrıcalıklı görevlerle kafam karıştı. Bir örnek verilirse kullanışlıdır. Teşekkürler.
Upendra

2
Çok kesin cevap. Teşekkürler!!
user37416
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.