Чому існує багато облікових записів? Я єдиний користувач


13

Я запускаю настільну систему Ubuntu 12.04. Поки що я встановив лише деякі програми (у мене є права судо).

  1. Коли я перевіряю список користувачів у системі, я бачу довгий список, як-от понад 20 користувачів - коли такі користувачі були створені (наприклад, демон, син, синхронізація, ігри, імпульс тощо)? Як вони пов'язані з новими програмами, які встановлюються?

  2. Якщо я запускаю програму в своїй системі, вона повинна працювати з моїм UID. Але, роблячи PS , я бачу багато інших програм, що працюють з різним UID (наприклад, root, daemon, avahi, syslog, colord тощо) - як ці програми запускалися з різних UID?


3
Подумайте про це іншим способом: коли комп'ютер спочатку завантажується, ви ще не ввійшли в систему, і програми повинні працювати як хтось . Усі вони могли працювати як root, але це небезпечно, оскільки більшість цих програм відповідає лише за невелику частину роботи комп’ютера. Після входу в систему, більшість програм, які ви запускаєте безпосередньо, буде працювати як ви.
dimo414

Зрештою, це хак. Широко використовується, але все-таки хак. Дистрибутиви UNIX зловживають концепцією "користувача", щоб обходити стару і неповну модель безпеки.
Федеріко Полоні

Відповіді:


24

Облікові записи користувачів використовуються не лише для реальних користувачів, але й для запуску системних служб, а іноді і як власників системних файлів. Це робиться через те, що розділення між ресурсами користувачів (процесами, файлами тощо) та розділенням між ресурсами системних служб вимагають однакових механізмів під кришкою.

Програми, які ви запускаєте, зазвичай працюють із вашим ідентифікатором користувача. Це лише демони системи, які працюють за власним обліковим записом. Або файл конфігурації, який вказує, коли запустити демон, також вказує, який користувач повинен запустити його, або демон перемикається на непривілейований рахунок після запуску. Деякі демони потребують повних адміністративних привілеїв, тому вони працюють під кореневим обліковим записом. Багато демонів потребують доступу лише до певного апаратного пристрою або до певних файлів, тому вони працюють під спеціальним обліковим записом користувача. Це робиться для безпеки: таким чином, навіть якщо в одній із цих служб є помилка чи неправильна конфігурація, це не може призвести до повної системної атаки, оскільки зловмисник обмежиться тим, що може зробити ця служба, і не буде вміє перезаписувати файли, шпигувати за процесами тощо.

Під Ubuntu при встановленні системи створюються ідентифікатори користувачів у діапазоні 0–99. 0 - корінь; багато з них у діапазоні 1–99 існують лише з історичних причин і зберігаються лише для зворотної сумісності з деякими локальними установками, які їх використовують (кілька додаткових записів не зашкодять). Ідентифікатори користувачів у діапазоні 100–999 створюються та видаляються динамічно, коли сервіси, яким потрібен спеціальний ідентифікатор користувача, встановлені або видалені. Діапазон від 1000 і більше призначений для користувачів або будь-який інший обліковий запис, створений системним адміністратором. Те саме стосується груп.


7

Я припускаю, що ви знайдете цей список користувачів, перевіривши /etc/passwd? Це абсолютно нормально - "користувачі" служать для отримання набору дозволів, корисних для блокування не лише "фактичних користувачів", а й програм до певних областей вашої системи та відстеження того, що вони змінилися (те саме поняття з групами).

Я нижче вставив один із моїх /etc/passwdфайлів Raspberry Pi для ознайомлення; ви помітите користувача ntopвнизу цього файлу, створеного програмою ntop(мережевий моніторинг). Аналогічно sshd, gnatsповідомлення про помилки тощо.

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, чи створює це новий користувач? Якщо ні, то чому так багато програм працює з іншим UID, ніж моя? Я маю на увазі, як ці програми запускаються з різним UID?
Джейк

Ви можете запустити dpkg --get-selections | grep -v deinstallта порівняти його зі списком користувачів файлів / etc / passwd, якщо хочете. Що стосується вашого питання: "... як ці програми працюють з різним UID", ви можете спробувати це самостійно. Напишіть випадковий скрипт bash, test_fileякий містить щось нешкідливе ( echo "Test"). Тоді sudo chmod 755 test_file(щоб його читали та виконували будь-хто, читав, записував і виконував власник), sudo chown nobodyякий призначатиме його користувачеві nobody. Потім запустіть його. test_fileЩойно "програма" запускалася з UID nobody.
toxefa

2
@ py4on Не зовсім ... він запускається з файлу з nobodyUID, але він працює з вашим UID; для цього вам потрібно створити файл SUID, але біт SUID видаляється, якщо файл запускається з інтерпретатором.
Рікінг

Гаразд, як я не можу редагувати свій коментар вище, але dpkgбіт все ще корисний (сподіваємось), будь ласка, ігноруйте частину про запуск його як самостійно! Будь ласка, перейдіть із SUID або увійдіть як інший користувач, щоб це
мало

3

Коли були створені ці користувачі?

У тих випадках, про які ви згадали, вони були створені при встановленні системи. Ці облікові записи користувачів є звичайними, деякі датуються десятиліттями. Вони також стандартизовані. Стандартна база Linux ділить їх на:

  • потрібно стандартні призначені для користувача облікові записи, root, bin, і daemon; і
  • необов'язково стандартні призначені для користувача облікові записи adm, lp, sync, shutdown, halt, mail, news, uucp, operator, man, іnobody

Інші облікові записи користувачів, які згадуються тут - pulse, avahi, colord, і Debian-exim(вибрати один з файлу паролів py4on в) - привести нас до наступного питання.

Як вони пов'язані з новими програмами, які встановлюються?

Нестандартні облікові записи користувачів створюються та знищуються за допомогою "скриптів технічного обслуговування" для різних пакетів, коли ці пакунки встановлюються та очищаються. Обліковий запис користувача буде створений за допомогою так званого postinstсценарію сервісного пакета , який запускає, getentщоб перевірити, чи вже існує обліковий запис користувача, та useraddчи ні. Теоретично це було б видалено за допомогою так званого postrmсценарію сервісного пакета , який працює userdel.

На практиці облікові записи користувачів для пакетів не видаляються. Вікі Fedora (qv) пояснює, що це загрожує труднощами. Дивіться помилку Debian # 646175 для прикладу цього обґрунтування в дії, де вирішено просто не видаляти rabbitmqобліковий запис користувача, коли пакет очищений, щоб вирішити проблему з dæmon, який продовжує працювати під егідою цього облікового запису.

Як розпочалися ці програми з різними UID?

У Unix та Linux процес, що працює під егідою суперпользователя, може змінити свій обліковий запис користувача на щось інше і продовжувати запускати ту саму програму, однак зворотне заборонено. (Потрібно використовувати механізм set-UID.)

Система управління dæmon працює як суперпользователь. Дані його конфігурації вказують, що конкретні dæmons працюють під егідами конкретних облікових записів користувачів:

  • У System 5 rcсценарій /etc/init.dвикористовує допоміжний інструмент, такий як start-stop-daemonта його --chuidпараметр.
  • З менеджером служби Daemontools сім'ї, runсценарій викликає setuidgid, s6-setuidgid, chpstабо runuidз ім'ям облікового запису користувача. Приклади цього є на /unix//a/179798/5132, які встановлюють nagiosобліковий запис користувача.
  • З setuidпочатком роботи у файлі завдань є строфа, яка вказує обліковий запис користувача. Це не особливо дрібнозернисте, і іноді хочеться того, що описано на /superuser//a/723333/38062 .
  • У системі systemd User=у файлі сервісного блоку є налаштування, яке вказує обліковий запис користувача.

Коли система управління dæmon породжує процес, який є dæmon, ці механізми скидають привілеї суперпользователя, щоб процес dæmon продовжував працювати під егідою непривілейованого облікового запису користувача.

Існує досить тривале пояснення того, чому добре керування dæmon робиться саме так. Але ви не запитували, чому; тільки коли, як і звідки. Therefore Отже, дуже короткий принцип:

Операційні системи Unix та Linux ізолюють процеси, що працюють під егідами різних облікових записів користувачів один від одного. Історично, якби хтось зміг перейняти джмон, який працював як суперпользователь, можна було зробити все, що подобалося. Dæmon, який працює під егідою непривілейованого облікового запису, з іншого боку, може отримати доступ лише до файлів, каталогів, пристроїв та процесів, які може мати цей непривілейований обліковий запис. Система взаємно недовірливих програм dæmon, які працюють під егідами різних облікових записів користувачів і не мають доступу до (керуються) файлами / каталогами / процесами / пристроями один одного (внутрішні, довірені), тому зламати набагато важче.

Подальше читання


1

У Linux, коли ми встановлюємо сервіс, він створює користувачеві його ім'я служби або подібне до того, щоб він не міг отримати доступ до інших файлів.


1
Це умова, але зовсім не потрібна і, звичайно, не універсальна. Насправді, це на самому ділі не що загальне більше ...
HalosGhost

1
@HalosGhost Так? Ні, це дуже поширена конвенція, яка все ще діє. Ця відповідь неповна, але абсолютно правильна.
Жил 'ТАК - перестань бути злим'

1
@Gilles, я не сказав (або навіть маю на увазі), що це неправильно. Але воно здебільшого застаріло. Величезна частина сервісів сьогодні (з появою systemd) - це лише сервісні файли. Тепер це не означає, що акаунти користувачів на послуги більше не існують; вони точно роблять. Але, наприклад, у всій моїй системі є лише 24 акаунти, де я маю набагато більше послуг.
HalosGhost

@Gilles У мене така ж ситуація, як у HalosGhost - більше послуг, ніж акаунти. Так це означає, що всі вони працюють як корінь?
lonix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.