В чем разница между /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
130 голосов | спросил xenoterracide 8 AMpFri, 08 Apr 2011 00:08:18 +040008Friday 2011, 00:08:18

8 ответов


158

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

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

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

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

ответил Mark McKinstry 8 AMpFri, 08 Apr 2011 01:47:28 +040047Friday 2011, 01:47:28
25

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

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

ответил Mikel 8 AMpFri, 08 Apr 2011 01:27:02 +040027Friday 2011, 01:27:02
10

/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 для фиктивных пользователей, но может сбивать с толку, так как пользователь не знает, почему они стартуют.

ответил penguin359 8 AMpFri, 08 Apr 2011 03:11:50 +040011Friday 2011, 03:11:50
4

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

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

ответил Gilles 8 AMpFri, 08 Apr 2011 00:14:40 +040014Friday 2011, 00:14:40
2

/bin /false только задание - это выход с ненулевым кодом выхода.

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

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

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

Надеюсь, это поможет.

ответил shellter 8 AMpFri, 08 Apr 2011 00:14:51 +040014Friday 2011, 00:14:51
2

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

ответил jsbillings 17 42011vEurope/Moscow11bEurope/MoscowThu, 17 Nov 2011 06:47:39 +0400 2011, 06:47:39
0

Они могут быть одной и той же программой, но они имеют разные значения. Имя программы сообщает все.

  • /bin /false предназначен для возврата ложного значения. Он запускается как программа.
  • /bin /nologin предназначен для указания пользователю, что учетная запись не разрешена. (Используется оболочка входа.)
ответил BillThor 17 42011vEurope/Moscow11bEurope/MoscowThu, 17 Nov 2011 06:29:06 +0400 2011, 06:29:06
-2

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

ответил pythondetective 26 SatEurope/Moscow2015-12-26T23:16:19+03:00Europe/Moscow12bEurope/MoscowSat, 26 Dec 2015 23:16:19 +0300 2015, 23:16:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132