Какова цель пользователя "nobody"?

93

После прочтения списка всех пользователей-людей я заметил, что в моей системе Ubuntu есть учетная запись с именем «nobody».

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

sudo su nobody

су никто

Меня это не волнует, но я хочу знать, какова цель этого пользователя? Он создается по умолчанию при новой установке Ubuntu или создается путем установки определенного пакета?

Раду Рэдяну
источник
8
Обратите внимание, что когда вы входите в систему, используя свой пароль, вы используете его для шага sudo, а не для учетной записи nobody (и причина, по которой он работает, заключается в том, что суперпользователь может su для любого, не вводя свой пароль (хотя и как Я упомянул ниже, я думаю, по крайней мере, для RH-производных, если ни у кого не установлена ​​оболочка / sbin / nologin, вы все равно не сможете войти в систему, даже используя superuser (он же root)
Foon
По умолчанию это так (18.04+?). sudo su nobodyВозврат Этот аккаунт в настоящее время недоступен. потому что оболочка для пользователя nobody установлена ​​в/usr/sbin/nologin ( getent passwd nobody).
Пабло А
@sarnold - пожалуйста, смотрите мой комментарий к ответу, на который, я полагаю, вы намекаете. Это довольно плохой ответ, так как он не рассуждает и не цитирует источники. Кроме того, это идет вразрез со всем, что я знаю об учетной записи nobody и о том, как работает NFS: при root_squashэтом на удаленных системах root никому не сопоставляется . Это более или менее точно противоположно тому, что говорится в этом ответе
vidarlo

Ответы:

85

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

Сравните это с выполнением чего-либо в качестве реального пользователя, если бы эта служба была скомпрометирована (веб-серверы иногда используются для запуска произвольного кода), она работала бы как этот пользователь и имела бы доступ ко всему, что имел пользователь. В большинстве случаев это так же плохо, как получение root.

Вы можете прочитать немного больше о пользователе nobody в Ubuntu Wiki:

Чтобы ответить на ваши последующие действия:

Почему я не могу получить доступ к этой учетной записи su nobody?

sudo grep nobody /etc/shadowпокажет вам, что никто не имеет пароля, и вы не можете suбез пароля учетной записи. Самый чистый способ - sudo su nobodyвместо этого. Это оставит вас в довольно пустынной shраковине.

Можете ли вы привести конкретный пример, когда указано использовать этот аккаунт?

Когда разрешения не требуются для операций программы. Это особенно заметно, когда на диске никогда не будет никаких действий.

Реальный мир пример этого memcached(ключ-значение в памяти кэша / базы данных / вещь), сидя на моем компьютере , и мой сервер работает под никому счета. Почему? Потому что ему просто не нужны никакие разрешения, и предоставить ему учетную запись, у которой есть доступ на запись к файлам, будет просто ненужным риском.

Оли
источник
Еще две вещи, если вы можете объяснить: 1) почему я не могу получить доступ к этой учетной записи su nobodyи 2) можете ли вы привести конкретный пример, когда указано использовать эту учетную запись?
Раду Рэдяну
@ RaduRădeanu 1) Я предполагаю, что это потому, что у него не установлен пароль, и когда вы suкак обычный пользователь, вы должны указать пароль целевого пользователя. Попробуйте sudo -iтогда su nobodyиз корневой оболочки (для которой не требуется пароль).
CVN
2
Network File Systemсопоставления rootс nobodyлокальным корнем не могут получить доступ ко всему, как удаленный корень.
Сильвестр
1
@ RaduRădeanu Пожалуйста, обратите внимание на историю изменений. Когда я тестировал оригинальную команду (а не то, что там есть), изначально я оказался в оболочке тире (/ bin / sh), но сейчас я не могу ее воспроизвести. Ваше оригинальное редактирование было в порядке. Это не я изменил это.
Оли
1
Я всегда думал, nobodyчто на самом деле / ​​главным образом используется NFS в качестве состояний linuxstandardbase .
dgonzalez
29

Во многих вариантах Unix «никто» - это условное имя учетной записи пользователя, которая не имеет файлов, не имеет привилегированных групп и не имеет никаких возможностей, кроме тех, которые есть у каждого другого пользователя.

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

Информация взята с http://en.wikipedia.org/wiki/Nobody_(username) .

Паулюс Шукис
источник
-1: nobodyстрого для NFS и не должен использоваться другими службами и, конечно, не системными администраторами. Благодарю.
Сарнольд
22

Пользователь никто не зарезервирован только для NFS.

Ответы выше довольно неправильны, потому что они предполагают, что nobodyэто «общий» идентификатор пользователя в стиле анонимного / гостевого стиля

В модели управления доступом UNIX / Linux идентификаторы анонимных / гостевых пользователей не существуют, и это плохие предложения:

  • « Обычно запускаются демоны nobody, особенно серверы, чтобы ограничить ущерб, который может нанести злонамеренный пользователь, который получил над ним контроль». Из-за этого следует: « Однако полезность этого метода снижается, если более один демон запускается так, потому что тогда получение контроля над одним демоном обеспечит контроль над всеми ними ».
  • « Реальным примером этого является memcached(кэш / база данных / вещи в ключе-значении), сидящий на моем компьютере, а мой сервер работает под nobodyучетной записью. Почему? Потому что ему просто не нужны какие-либо разрешения и давать ему учетная запись, у которой есть доступ на запись к файлам, будет просто ненужным риском ».

Имя nobodyпользователя с идентификатором пользователя 65534 было создано и зарезервировано для определенной цели и должно использоваться только для этой цели: в качестве заполнителя для «несопоставленных» пользователей и идентификаторов пользователей в экспорте дерева NFS.

То есть, если для экспорта дерева NFS не настроено отображение user / id, все файлы в экспорте будут принадлежать nobody. Цель этого состоит в том, чтобы запретить всем пользователям в импортирующей системе доступ к этим файлам (если у них нет «других» разрешений), поскольку ни один из них (кроме root) не может быть / стать nobody.

Поэтому это очень плохая идея использовать nobodyдля каких-либо других целей, потому что его цель - быть именем пользователя / идентификатором пользователя для файлов, которые не должны быть доступны никому.

Запись в вики тоже очень неправильная.

Практика UNIX / Linux заключается в создании новой учетной записи для каждого «приложения» или области приложения, для которой требуется отдельный домен контроля доступа, и никогда не использовать повторно nobodyза пределами NFS .

PeterG
источник
Ответ на этот вопрос не приводит каких - либо источников, и явно противоречит несколько других ответов, которые делают цитируют источники. Текущая награда указывает на то, что этот ответ особенно хорош, и в этом случае следует указать некоторые источники или в списке есть некоторые причины.
Видарло
@ mook765 Эта часть в порядке. Параграф про NFS однако я не грок. Например, с root_squashon, rootотображается на пользователя nobody, поэтому файлы, имеющие владельца, nobodyне имеют никакого смысла. Кроме того, утверждение о том, что файлы, которыми никто не владеет, никому не предназначен, не имеет особого смысла, так как права доступа к файлам отделены от владения в UNIX. Я не говорю, что все в ответе неверно, только то, что его элементы не имеют никакого смысла или не имеют никакого смысла для меня :)
vidarlo
1
@vidarlo, этот ответ не предполагает, что вы должны установить файлы, которыми будут владеть nobody. Он говорит вам, что nobodyNFS следует использовать при сопоставлении разрешений, и это самое важное для меня. Как NFS использует nobodyменее интересно , чем тот факт , что он делает использование nobody. Благодарю.
Сарнольд
@sarnold ответ все еще совершенно неверен в этом вопросе, по моему мнению. Если пользователь читает ответ и man exports, он может быть очень смущен.
Видарло
17

nobodyПользователя по умолчанию создается на новой установке (проверено на Ubuntu Desktop 13.04).

Во многих * nix вариантах nobodyэто обычное имя учетной записи пользователя, которая не имеет файлов, не имеет привилегированных групп и не имеет никаких возможностей, кроме тех, которые есть у каждого другого пользователя (у nobodyпользователя и группы нет записи в /etc/sudoersфайле) ,

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

Источник : Википедия - Никто (имя пользователя)


Известные nobodyпроцессы могут отправлять сигналы друг другу и даже отслеживать друг друга в 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и, таким образом, запретить вход в систему через ssh для nobodyпользователя.

Источник : LinuxG.net - Linux и Unix Никто не Пользователь

Алаа али
источник
Этот ответ заслуживает +1, если неправильный абзац из Википедии был удален. Благодарю.
sarnold
3

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

jeffmcneill
источник
0

Незначительное исправление: «Пользователь никто не зарезервирован только для NFS. ' ответ. В настоящее время nobodyпользователь также используется для непривилегированных контейнеров с привязными креплениями.

Это взято из systemd-nspawn, в частности, опция монтирования --bind:

Обратите внимание, что когда эта опция используется в сочетании с --private-users, полученные точки монтирования будут принадлежать пользователю nobody. Это связано с тем, что mount, его файлы и каталоги по-прежнему принадлежат соответствующим пользователям и группам хоста, которых нет в контейнере, и, следовательно, они отображаются под универсальным UID 65534 (никто). Если такие привязки монтируются, рекомендуется сделать их доступными только для чтения, используя --bind-ro =.

Systemd-nspawn

ykuksenko
источник