В чем разница между / sbin / nologin и / bin / false


170

Технически, если только pamвы не настроили проверку вашей оболочки, pam_shellsни один из них не может фактически предотвратить ваш вход в систему, если вы не в оболочке. В моей системе они даже разных размеров, поэтому я подозреваю, что они действительно что-то делают. Так в чем же разница? почему они оба существуют? Зачем мне использовать один над другим?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin


Путь /bin/falseдолжен существовать везде, но не /sbin/nologin: '/ sbin / nologin': такого файла или каталога нет. Есть идеи, почему /usr/sbin/nologinвместо /sbin/nologinDebian и Ubuntu?
baptx

4
Мне любопытно, почему / bin / false берет 21k кода, чтобы вернуть код возврата «1»! (и / sbin / nologin занимает всего 4.7k)
Марк Стюарт,


1
@nxnev Да, я не думал о накладных расходах ELF. А из моих прежних дней в IBM была программа IEFBR14, которая была простой инструкцией по сборке одного кода операции: BR 14 - ветвь для регистра 14, которая завершала бы программу с кодом возврата, установленным на то, что было в регистре 14!
Марк Стюарт

Ответы:


198

Когда /sbin/nologinустановлена ​​оболочка, если пользователь с этой оболочкой войдет в систему, он получит вежливое сообщение «Эта учетная запись в данный момент недоступна». Это сообщение можно изменить с помощью файла /etc/nologin.txt.

/bin/falseэто просто двоичный файл, который сразу же завершает работу, возвращая false, когда он вызывается, поэтому, когда кто-то, имеющий falseучетную запись, входит в систему, он сразу же выходит из системы при falseвыходе. Установка оболочки на /bin/trueтот же эффект не позволяет кому-либо войти в систему, но false, вероятно, используется в качестве соглашения, trueпоскольку гораздо лучше передать концепцию, что у человека нет оболочки.

Глядя на nologinсправочную страницу, он говорит, что он был создан в 4.4 BSD (начало 1990-х), так что он появился намного позже false. Использование falseв качестве оболочки, вероятно, просто соглашение, перенесенное с первых дней UNIX.

nologinэто более удобный для пользователя вариант с настраиваемым сообщением, которое выдается пользователю, пытающемуся войти в систему, поэтому теоретически вы захотите его использовать; но оба nologinи falseбудут иметь один и тот же конечный результат, если кто-то не имеет оболочки и не может войти в ssh.


10
/usr/sbin/nologinдля дистрибутивов на основе Debian.
Diemo

3
По крайней мере, реализация BSD также регистрирует попытки входа в syslog, как показано в opensource.apple.com/source/system_cmds/system_cmds-735/… , тогда как / bin / false ничего не регистрирует
Сергей Колодяжный

28

Некоторые FTP-серверы разрешают вам FTP-доступ, только если у вас есть действующая оболочка. /sbin/nologinсчитается допустимой оболочкой, тогда /bin/falseкак нет.

(Я думаю, что «действительный» означает, что его статус выхода равен 0, но /etc/shellsможет также войти в него, это, вероятно, зависит от системы, программного обеспечения FTP и вашей конфигурации.)


1
да, это, вероятно, часть программы ftp, использующей pam, и pam, использующей pam_shells, которая, как вы сказали, проверяет /etc/shells. Просто предположение ... Я могу ошибаться.
ксенотеррацид

4
Я только что проверил Ubuntu 8.04 и 14.04. Команда nologin выходит со статусом 1, похожим на false, и ни один из параметров true, false или nologin не включен в / etc / shells. Если бы они были, пользователь мог бы использовать chsh, чтобы выбрать такую ​​оболочку и заблокировать себя из своей учетной записи.
penguin359

12

/bin/falseэто системная команда, которая используется каждый раз, когда вам нужно передать команду программе, которая не должна делать ничего, кроме выхода с ошибкой. Это компаньон для /bin/true. Обе они являются очень старыми и стандартными утилитами POSIX и не выдают никаких выходных данных по определению. Значение true иногда используется для сценария оболочки, который должен выполняться бесконечно, например:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinспециально разработан для замены оболочки и выдаёт жалобы на невозможность входа в систему. До того, как он существовал, его обычно использовали /bin/falseдля фиктивных пользователей, но это могло сбивать с толку, поскольку пользователь не знает, почему его выкинули.


4
Стоит отметить это /bin/trueи /bin/falseне всегда то, что вы получите в сценарии оболочки. В zsh trueи falseвстроенные модули, где bashиспользуются /bin/*версии
xenoterracide

4

На моей машине nologinвсегда отображается одно и то же сообщение на английском языке без учета аргументов. /bin/falseотвечает --versionи --helpна языке, указанном $LC_CTYPE. Помимо этих косметических различий, они имеют тот же эффект.

С точки зрения удобства использования, nologinлучше, если он используется за счет реального человека, который говорит по-английски. С точки зрения безопасности, нет никакой разницы.


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

1
Какая у тебя ОС? nologinВерсия Centos не принимает аргументов, но может читать сообщения /etc/nologin.txt.
Александр Гончий

3

Задача / bin / false только для выхода с ненулевым кодом выхода.

Попробуйте это в командной строке:

$:> /bin/false
$:> echo $?
1
$:>

Некоторые учреждения используют / bin / false в поле оболочки файла паролей. Если пользователь пытается войти, оболочка имеет вид / bin / false, поэтому они сразу выходят


2

В Linux это /sbin/nologinпроисходит из проекта util-linux , а также /bin/falseявляется частью GNU Coreutils . Они выполняют разные роли, и у nologin есть возможность распечатать сообщение для людей, которые используют его в качестве оболочки для входа в систему. Команды linux приходят из BSD, где они, похоже, имеют долгую историю отличия. FreeBSD falseпросто возвращает 1 , в то время как nologinпроверяет, работает ли он на TTY, и отправляет сообщение в системный журнал во время попыток входа в систему. Версии linux немного сложнее (я falseделаю разные забавные вещи с интернационализацией для вывода --help, я полагаю), но, по сути, работают так же.


1

Это может быть одна и та же программа, но они имеют разные значения. Название программы говорит обо всем.

  • / bin / false предназначен для возврата ложного значения. Он запускается как программа.
  • / bin / nologin предназначен для указания пользователю, что для учетной записи не разрешен вход в систему. (Используется оболочка входа в систему.)

-4

Оба выполняют более или менее одинаковую работу, но /bin/falseполезны для непривилегированных пользователей. С другой стороны, /sbin/nologinдля привилегированных пользователей.


4
О, как вы пришли к такому выводу?
fpmurphy

Вероятно, он изучил /etc/passwd. Я только что посмотрел на /etc/passwdнедавно установленную версию Debian. В этом поле почти все системные учетные записи (идентификаторы пользователей <1000) имеют /usr/sbin/nologinоболочку, за некоторыми исключениями. Обратите внимание, что я не согласен с ответом @ pythondetective. Я просто размышляю, что могло бы привести его к такому выводу. Мой комментарий немного поздно, хотя.
Binarus

нет! оболочка входа по умолчанию не совпадает с привилегиями.
MUY Бельгия

не великий "детектив"
Эмоб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.