Neden birçok hesap var? Tek kullanıcı benim


13

Bir Ubuntu 12.04 masaüstü sistemi kullanıyorum. Şimdiye kadar sadece bazı programlar yükledim (sudo haklarım var).

  1. Sistemdeki kullanıcıların listesini kontrol ettiğimde, 20'den fazla kullanıcı gibi uzun bir liste görüyorum. Bunlar yüklenen yeni programlarla nasıl ilişkilidir?

  2. Sistemimde bir program çalıştırırsam, UID'imle çalışmalıdır. Ama bir ps yaparken , farklı UID ile çalışan birçok program görüyorum (root, daemon, avahi, syslog, colord vb.) - bu programlar farklı UID'lerle nasıl başladı?


3
Bu konuda başka bir yol düşünün: Henüz giriş yapmadıysanız bilgisayar ilk bot ve programlar olarak çalıştırmak zorunda birileri . Hepsi kök olarak çalışabilir, ancak bu programların çoğu bilgisayarın çalışmasının sadece küçük bir kısmından sorumlu olduğu için güvensizdir. Giriş yaptıktan sonra, doğrudan çalıştırdığınız çoğu program sizin gibi çalışacaktır.
dimo414

Sonuçta, bu bir hack. Yaygın olarak kullanılan, ancak yine de bir kesmek. UNIX dağıtımları, eski ve eksik bir güvenlik modeli etrafında çalışmak için "kullanıcı" kavramını kötüye kullanır.
Federico Poloni

Yanıtlar:


24

Kullanıcı hesapları yalnızca gerçek kullanıcılar için değil, aynı zamanda sistem hizmetlerini ve bazen de sistem dosyalarının sahibi olarak kullanılır. Bunun nedeni, insan kullanıcıların kaynakları (süreçler, dosyalar vb.) Arasındaki ayrım ve sistem hizmetlerinin kaynakları arasındaki ayrım, başlık altında aynı mekanizmaları gerektirdiği için yapılır.

Normalde çalıştırdığınız programlar kullanıcı kimliğinizle çalışır. Sadece kendi hesapları altında çalışan sistem artalan süreçleri . Ya daemon'un ne zaman çalıştırılacağını belirten yapılandırma dosyası, kullanıcının ne çalıştırması gerektiğini de belirtir ya da daemon başlatıldıktan sonra ayrıcalıksız bir hesaba geçer. Bazı cinler tam yönetici ayrıcalıkları gerektirir, bu nedenle kök hesap altında çalışırlar . Birçok armağanın yalnızca belirli bir donanım aygıtına veya belirli dosyalara erişmesi gerekir, bu nedenle özel bir kullanıcı hesabı altında çalışırlar. Bu güvenlik için yapılır: bu şekilde, bu hizmetlerden birinde bir hata veya yanlış yapılandırma olsa bile, tam bir sistem saldırısına yol açamaz, çünkü saldırgan bu hizmetin yapabilecekleriyle sınırlı olacak ve olmayacak dosyaların üzerine yazabilir, süreçlerde casusluk yapabilir vb.

Ubuntu altında, sistem kurulumunda 0-99 aralığındaki kullanıcı kimlikleri oluşturulur. 0 köküdür; 1-99 aralığındaki birçoğu yalnızca tarihsel nedenlerle bulunur ve yalnızca bunları kullanan bazı yerel kurulumlarla geriye dönük uyumluluk için tutulur (birkaç ekstra giriş zarar vermez). 100–999 aralığındaki kullanıcı kimlikleri, özel bir kullanıcı kimliği gerektiren hizmetler yüklendiğinde veya kaldırıldığında dinamik olarak oluşturulur ve kaldırılır. 1000'den sonraki aralık, insan kullanıcılar veya sistem yöneticisi tarafından oluşturulan başka herhangi bir hesap içindir. Aynı şey gruplar için de geçerlidir.


7

Bu kullanıcı listesini kontrol ederek bulduğunuzu varsayıyorum /etc/passwd? Bu tamamen normaldir - 'kullanıcılar', sadece 'gerçek kullanıcıları' değil, aynı zamanda sisteminizin belirli alanlarına programları değiştirmek ve değiştiklerini izlemek için de yararlı olan bir dizi izin taşımaya yarar (gruplarla aynı kavram).

/etc/passwdReferans için aşağıdaki Raspberry Pi dosyalarımdan birini ekledim ; ntopprogram tarafından oluşturulan ntop(ağ izleme) kullanıcıyı bu dosyanın altında görürsünüz . Benzer şekilde sshd, gnatshata raporlama vb.

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false

Ubuntu'ya yeni bir program yüklediğimde, yeni bir kullanıcı mı oluşturuyor? Değilse, nasıl bu kadar çok program benimkinden farklı UID ile çalışıyor? Yani bu programlar diff UID ile nasıl çalışıyor?
Jake

İsterseniz dpkg --get-selections | grep -v deinstall/ etc / passwd dosya listenizle çalıştırabilir ve karşılaştırabilirsiniz. Sorunuza gelince: "... bu programlar diff UID ile nasıl çalışır", bunu kendiniz deneyebilirsiniz. test_fileZararsız ( echo "Test") bir şey içeren rastgele bir bash betiği yazın . Sonra sudo chmod 755 test_fileo (okunabilir ve sahibi tarafından herkese ve okunabilir, yazılabilir ve çalıştırılabilir tarafından yürütülebilir yüzden) sudo chown nobodykullanıcıya atar hangi nobody. Sonra çalıştırın. 'Program' test_fileUID ile birlikte çalıştı nobody.
toxefa

2
@ py4on Pek değil ... nobodyUID ile bir dosyadan , ama UID ile koştu; bunu yapmak için bir SUID dosyası yapmanız gerekir, ancak dosya bir yorumlayıcıyla çalıştırılırsa SUID biti bırakılır.
Riking

Yukarıdaki yorumumu düzenleyemiyorum ama dpkgbiraz hala yararlı (umarım) lütfen kendiniz olarak çalıştırma hakkındaki bölümü dikkate almayın ! Ya SUID ile gidin ya da bunun mantıklı olması için farklı bir kullanıcı olarak giriş yapın
toxefa

3

Bu kullanıcılar ne zaman oluşturuldu?

Bahsettiğiniz durumlarda, sistem kurulumunda oluşturuldular. Bu kullanıcı hesapları gelenekseldir, bazıları on yıllara dayanır. Ayrıca standartlaştırılmıştır. Linux Standard Base bunları Linux'a ayırır:

  • Gerekli standart kullanıcı, hesapları root, binve daemon; ve
  • İsteğe bağlı standart kullanıcı hesapları adm, lp, sync, shutdown, halt, mail, news, uucp, operator, man, venobody

Burada sözü edilen diğer kullanıcı hesapları - pulse, avahi, colord, ve Debian-exim(py4on şifresinin dosyadan biri almaya) - Bir sonraki soruya bize getir.

Bunlar yüklenen yeni programlarla nasıl ilişkilidir?

Standart olmayan kullanıcı hesapları, çeşitli paketler için "sürdürücü komut dosyaları" tarafından oluşturulur ve yok edilir. Paketin , kullanıcı hesabının zaten var olup olmadığını ve var olup olmadığını görmek için postinstçalışan sürdürücü komut dosyası tarafından bir kullanıcı hesabı oluşturulur . Teoride, paketin sözde sürdürücü komut dosyası tarafından silinerek çalışacaktı .getentuseraddpostrmuserdel

Uygulamada, paketler için kullanıcı hesapları silinmez. Fedora wiki (qv) bunun zorluklarla dolu olacağını açıklıyor. Bkz Debian hata # 646175 basitçe karar verilir eyleminde bu mantığı, bir örneği için değil silmek için rabbitmqbu hesabın himayesi altında çalışan devam eden bir servistir bir sorunu çözmek için, paket tasfiye edildiğinde kullanıcı hesabı.

Bu programlar farklı UID'lerle nasıl başladı?

Unix ve Linux altında, süper kullanıcının himayesinde çalışan bir işlem, kullanıcı hesabını başka bir şeye değiştirebilir ve aynı programı çalıştırmaya devam edebilir, ancak bunun tersine izin verilmez. (Birisi set-UID mekanizmasını kullanmalıdır.)

Dæmon yönetim sistemi süper kullanıcı olarak çalışır. Yapılandırma verileri, belirli dæmons'ların belirli kullanıcı hesaplarının gözetimi altında çalıştığını belirtir:

  • Sistem 5 ile rckomut dosyası /etc/init.dgibi kullanımlar bir yardımcı alet start-stop-daemonve --chuidopsiyon.
  • Bir daemontools aile hizmeti yöneticisi ile, runkomut çağrıları setuidgid, s6-setuidgid, chpstveya runuidkullanıcı hesabı adı. Buna , kullanıcı hesabını ayarlayan /unix//a/179798/5132 adresinde örnekler verilebilir nagios.
  • setuidUptart ile bir iş dosyasında kullanıcı hesabını belirten bir stanza bulunur. Bu özellikle ince taneli değildir ve bazen /superuser//a/723333/38062 adresinde açıklanan şeyi ister .
  • Systemd ile User=, servis birimi dosyasında kullanıcı hesabını belirten bir ayar bulunur.

Dæmon yönetim sistemi dæmon olmak için bir süreç oluşturduğunda, bu mekanizmalar süper kullanıcı ayrıcalıklarını düşürür, böylece dæmon süreci ayrıcalıklı olmayan kullanıcı hesabının himayesinde çalışmaya devam eder.

İyi deopmon yönetiminin neden bu şekilde yapıldığına dair oldukça uzun bir açıklama var . Ama nedenini sormadınız; sadece ne zaman, nasıl ve nerede. ☺ Bu nedenle çok kısa bir karar:

Unix ve Linux işletim sistemleri, farklı kullanıcı hesaplarının himayesinde çalışan işlemleri birbirinden yalıtır. Tarihsel olarak, kişi süper kullanıcı olarak çalışan bir dæmon'u devralabilseydi, sevdiği her şeyi yapabilirdi. Öte yandan, ayrıcalıksız bir hesabın himayesinde çalışan bir dæmon, yalnızca ayrıcalıklı hesabın yapabileceği dosyalara, dizinlere, cihazlara ve işlemlere erişebilir. Farklı kullanıcı hesaplarının gözetiminde çalışan ve birbirlerinin (dahili, güvenilir) dosyalarına / dizinlerine / işlemlerine / cihazlarına erişemeyen / kontrol edemeyen , karşılıklı olarak güvenmeyen bir programlar programı , bu nedenle, kırılması çok daha zordur.

daha fazla okuma


1

Linux'ta bir hizmet yüklediğimizde, başka bir dosyaya erişememesi için hizmet adında veya buna benzer bir kullanıcı oluşturur.


1
Bu bir sözleşmedir, ancak zorunlu değildir ve kesinlikle evrensel değildir. Aslında, artık o kadar da yaygın değil…
HalosGhost

1
@HalosGhost Uh? Hayır, bu çok yaygın bir sözleşme, hala güçlü. Bu cevap eksik ama tamamen doğru.
Gilles 'SO- kötü olmayı kes'

1
@Gilles, bunun yanlış olduğunu söylemedim (hatta ima etmedim). Ancak çoğunlukla güncel değil. Bu günlerde hizmetlerin büyük bir kısmı (systemd'in gelişiyle) sadece hizmet dosyalarıdır. Artık bu, hizmet başına kullanıcı hesaplarının artık mevcut olmadığı anlamına gelmiyor; kesinlikle yapıyorlar. Ancak, örneğin, tüm sistemimde çok daha fazla hizmetimin olduğu sadece 24 hesap var.
HalosGhost

@Gilles HalosGhost ile aynı duruma sahibim - hesaplardan daha fazla hizmet. Bu, hepsinin kök olarak çalıştığı anlamına mı geliyor?
lonix
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.