it-swarm-ru.tech

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

Технически, если 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
185
xenoterracide

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

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

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

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

212
Mark McKinstry

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

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

29
Mikel

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

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

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

14
penguin359

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

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

4

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

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

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

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

3
shellter

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

3
jsbillings

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

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