Яка мета користувача "ніхто"?


93

Після того, як я прочитав « Список усіх користувачів», я помітив, що в моїй системі Ubuntu є обліковий запис користувача «ніхто».

Також я помітив, що я можу увійти в цей обліковий запис з терміналу, використовуючи таку команду та свій пароль:

sudo su nobody

су ніхто

Мене це зовсім не проти, але я хочу знати, яка мета цього користувача? Це створено за замовчуванням у свіжому встановленні Ubuntu або створюється встановленням певного пакету?


8
Зауважте, що під час входу за допомогою свого пароля ви використовуєте свій пароль для кроку sudo, а не для нікого в обліковому записі (і що це працює в тому, що суперпользователь може подати заяву будь-кому без необхідності вводити свій пароль (хоча як Згадане нижче, я вважаю, щонайменше щодо RH-похідних, якщо оболонка нікого не буде встановлена ​​на / sbin / nologin, ви все одно не зможете увійти в систему, навіть використовуючи суперпользователь (aka root)
Foon

Це так за замовчуванням зараз (18.04+?). sudo su nobodyповернути Цей акаунт наразі недоступний. тому що оболонці для користувача nobody встановлено значення/usr/sbin/nologin ( getent passwd nobody).
Пабло А

@sarnold - дивіться, будь ласка, мій коментар до відповіді, на яку я вважаю, що ви на це натякаєте. Це досить погана відповідь, оскільки вона не аргументує та не цитує джерела. Крім того, це суперечить усім, що я знаю про нікому рахунок та про те, як працює NFS: при цьому root_squashвін буде віддавати корінь нікому на віддалені системи. Це більш-менш точно протилежне тому, що ця відповідь стверджує
vidarlo

Відповіді:


85

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

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

Ви можете прочитати трохи більше про нікого користувача на Ubuntu Wiki:

Щоб відповісти на ваші подальші дії:

Чому я не можу отримати доступ до цього облікового запису su nobody?

sudo grep nobody /etc/shadowпокаже вам, що ніхто не має пароля, і ви не можете suбез пароля облікового запису. Найчистіший спосіб - це sudo su nobodyзамість цього. Це залишить вас у досить порожній shоболонці.

Чи можете ви навести конкретний приклад, коли вказано на використання цього облікового запису?

Коли дозволи не потрібні для операцій програми. Це найбільш помітно, коли ніколи не буде жодної дискової активності.

Реальний світ приклад цього memcached(ключ-значення в пам'яті кеша / бази даних / річ), сидячи на моєму комп'ютері , і мій сервер працює під нікому рахунку. Чому? Оскільки він просто не потребує жодних дозволів і надавати йому обліковий запис, який мав доступ для запису до файлів, було б просто зайвим ризиком.


Ще дві речі, якщо ви можете пояснити: 1) чому я не можу отримати доступ до цього облікового запису, su nobodyі 2) чи можете ви навести конкретний приклад, коли вказано, щоб використовувати цей обліковий запис?
Radu Rădeanu

@ RaduRădeanu 1) Я здогадуюсь, що це не так, що він не встановлений паролем, і коли ви, suяк звичайний користувач, ви повинні вказати пароль цільового користувача. Спробуйте sudo -iпотім su nobodyз кореневої оболонки (для якої не знадобиться пароль).
CVn

2
Network File Systemкарти rootна nobodyлокальний корінь не можуть отримати доступ до всього, як може віддалений корінь.
Сільвестер

1
@ RaduRădeanu Будь ласка, зверніть увагу на історію редагування. Коли я тестував оригінальну команду (не те, що там), спочатку я закінчувався штрихом (/ bin / sh) оболонкою, але зараз не можу повторити це. Ваша оригінальна редакція була чудовою. Це не я змінив це не я.
Олі

1
Я завжди думав nobody, що насправді / в основному NFS використовується як стан Linux-стандартної бази .
dgonzalez

29

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

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

Інформація, взята з http://en.wikipedia.org/wiki/Nobody_(username) .


-1: nobodyсуворо для NFS і не повинен використовуватися іншими службами і, звичайно, не системними адміністраторами. Дякую.
sarnold

22

Користувач ніхто не зарезервований лише для NFS.

Наведені вище відповіді є помилковими, оскільки вони припускають, що nobodyце "загальний" анонімний / гостьовий ідентифікатор користувача.

У моделі контролю доступу UNIX / Linux анонімні / гості стилі користувача не існують, і це погані пропозиції:

  • " загальноприйняті для запуску демонів як nobody, особливо серверів, з метою обмеження шкоди, яку може завдати зловмисник, який отримав контроль над ними " через таке: " Однак корисність цієї методики зменшується, якщо більше один демон ведеться так, тому що тоді здобуття контролю над одним демоном забезпечить контроль над усіма ними ".
  • " Приклад справжнього світу - це memcachedкеш-пам'ять / база даних / річ, що є ключовим значенням, сидячи на моєму комп’ютері та на моєму сервері, що працює під nobodyобліковим записом. Чому? Тому що йому просто не потрібні ніякі дозволи та надавати його обліковий запис, який мав доступ для запису до файлів, був би просто зайвим ризиком ".

Ім'я nobodyкористувача з ідентифікатором користувача 65534 було створено та зарезервовано для певної мети, і воно повинно використовуватися лише для цієї мети: як заповнювач місця для "немапазованих" користувачів та ідентифікатори користувачів при експорті дерева NFS.

Тобто, якщо не встановлено відображення користувача / id для експорту з дерева NFS, всі файли експорту виявляться у власності nobody. Мета цього - не допустити доступу всіх користувачів системи імпорту до цих файлів (якщо вони не мають "інших" дозволів), оскільки жоден з них (крім root) не може бути / стати nobody.

Тому це дуже погана ідея використовувати nobodyдля будь-яких інших цілей, оскільки її мета - це ім'я користувача / ідентифікатор користувача для файлів, які не повинні бути доступні нікому.

Запис Wiki також дуже помиляється.

Практика UNIX / Linux полягає в створенні нового облікового запису для кожної "програми" або області додатків, яка потребує окремого домену контролю доступу, і ніколи не використовуватися повторно nobodyза межами NFS .


Відповідь на це питання не наводить будь - яких джерел, і явно суперечить кілька інших відповідей, які роблять цитують джерела. Поточна щедрість вказує, що ця відповідь є особливо хорошою, і в цьому випадку слід навести деякі джерела, або в списку мати певні міркування.
vidarlo


@ mook765 Ця частина чудово. Абзац про NFS, однак, я не грою. Наприклад, root_squashувімкнено, rootвін відображається для користувача nobody, тому файли, що мають власника, не nobodyмали б сенсу. Окрім того, твердження про те, що файли, що належать нікому, не мають права бути доступними нікому, має мало сенсу, оскільки дозволи на файли окремі від власності в UNIX. Я не кажу, що все у відповіді невірно, тільки що його елементи мало для мене сенсу або взагалі не мають сенсу :)
vidarlo

1
@vidarlo, ця відповідь не пропонує встановити файли, якими належить користуватися nobody. Це говорить вам про те, що nobodyNFS слід використовувати для відображення дозволів, і це для мене найважливіший момент. Як NFS використовує nobodyменш цікаво , ніж той факт , що він робить використання nobody. Дякую.
sarnold

@sarnold, на мою думку, відповідь досі явно неправильна. Якщо користувач читає відповідь і man exportsможе бути дуже розгублений.
vidarlo

17

nobodyКористувача за замовчуванням створюється на новій установці (перевірено на Ubuntu Desktop 13.04).

У багатьох варіантах * nix nobody- це умовне ім’я облікового запису користувача, у якого немає файлів, немає в привілейованих групах і не має здібностей, крім тих, які має кожен інший користувач ( nobodyкористувач та група не мають жодного запису у /etc/sudoersфайлі) .

Зазвичай для запуску демонів як nobody, особливо сервера, для того , щоб обмежити шкоду , яка може бути завдана зловмисним користувачем , який придбав контроль над ними. Однак корисність цієї методики знижується, якщо більш ніж один демон працює таким чином, оскільки тоді отримання контролю над одним демоном забезпечить контроль над усіма ними. Причина полягає в тому, що nobodyвласні процеси мають можливість передавати сигнали один одному і навіть налагоджувати один одного, дозволяючи їм читати чи навіть змінювати пам'ять один одного.

Джерело : Вікіпедія - Ніхто (ім'я користувача)


У nobody-ву процеси можуть посилати сигнали один одного і навіть ptrace один одного в Linux, а це означає , що процес ніхто власності може читати і писати пам'ять іншого ніхто власності процесу.

Це зразок запису nobodyкористувача у /etc/passwdфайлі:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

Як ви можете помітити, nobodyкористувач має /bin/shяк оболонку для входу, /nonexistentтак і домашній каталог. Як випливає з назви, /nonexistentкаталог за замовчуванням не існує.

Якщо ви параноїк, ви можете встановити nobodyоболонку за замовчуванням як /usr/sbin/nologinі так, заборонити sh вхід для nobodyкористувача.

Джерело : LinuxG.net - Ніхто не користувач Linux та Unix


Ця відповідь заслуговує +1, якщо неправильний абзац з Вікіпедії буде видалено. Дякую.
сарнольд

3

ніхто не є спеціальним обліковим записом користувача та групи. Оскільки це власне ім'я користувача (і ім’я групи) і може використовуватися процесами і навіть користувачами, це буквально ніхто . Наприклад, у деяких конфігураціях Apache немає нікого як користувача / групи, яка володіє файлами та каталогами веб-сайтів. Проблема виникає, коли в декількох процесах може бути використаний ніхто, наприклад, NFS-каталоги та веб-сервер.


0

Незначне виправлення до " Користувача, ніхто не зарезервований лише для NFS. 'відповідь. У цей час nobodyкористувач також використовується для непривілейованих контейнерів із прив'язними кріпленнями.

Це взято з systemd-nspawn, зокрема опцією --bind mount:

Зауважте, що коли ця опція використовується у поєднанні з --private-користувачами, то отримані точки монтажу будуть належати нікому не користувачеві. Це тому, що монтові та його файлам та каталогам надалі належать відповідні хост-користувачі та групи, яких не існує в контейнері, і таким чином відображаються під підстановочним UID 65534 (ніхто). Якщо такі кріплення для прив'язки створені, рекомендується зробити їх лише для читання, використовуючи --bind-ro =.

systemd-nspawn

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.