Вопрос: В чем разница между / sbin / nologin и / bin / false?


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

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

Я также вижу, что /sbin/nologin указан в /etc/shells, в то время как /bin/false не является.

На странице руководства говорится, что FTP отключит доступ для пользователей с оболочкой не перечислены в /etc/shells и подразумевает, что другие программы могут сделать то же самое. Означает ли это, что кто-то может подключаться к FTP с учетной записью, которая /sbin/nologin как его оболочка?

В чем тут разница? Какой из них я должен использовать для отключения учетной записи пользователя и при каких обстоятельствах? Какие другие эффекты делают листинг в /etc/shells иметь?


63
2018-06-28 04:58


Источник


unix.stackexchange.com/questions/10852/... - dmourati
Как общая информация, которая работает. Я думаю конкретно с точки зрения системного администрирования. - Michael Hampton♦
Просто означало как задний план. - dmourati


Ответы:


/bin/false это служебная программа, компаньон для /bin/true, что полезно в каком-то абстрактном смысле, чтобы гарантировать, что unix является полнофункциональным. Однако были найдены новые цели для этих программ; рассмотрим инструкцию BASH /some/program || /bin/true, который всегда будет иметь значение boolean-value для true ($? = 0) независимо от возвращения /some/program,

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

POSIX (хотя я могу ошибаться, и это может быть SUS) сдерживает обе эти команды, чтобы они ничего не делали, кроме как вернуть соответствующее логическое значение.

/sbin/nologin это BSD-утилита, которая имеет аналогичное поведение с /bin/false (возвращает boolean false), но также выводит вывод, так как /bin/false запрещено делать. Это должно помочь пользователю понять, что произошло, хотя на практике многие терминальные эмуляторы просто закрываются, когда оболочка завершается, и в некоторых случаях сообщение все равно нечитабельно.

Существует мало целей для перечисления /sbin/nologin в /etc/shells, Стандартный эффект /etc/shells является список программ, допустимых для использования с chsh когда пользователи меняют свою собственную оболочку (и нет разумной причины изменить свою собственную оболочку на /sbin/nologin). Суперпользователь может изменить чью-либо оболочку на что угодно. Однако вы можете указать оба /sbin/nologin а также /bin/false в /etc/rsh, который запретит пользователям с этими оболочками изменять свою оболочку, используя chsh в неудачном случае они получают оболочку.

FTP-демоны могут запретить доступ к пользователям с оболочкой не в / etc / shells, или они могут использовать любую другую логику, которую они хотят. Запускать FTP следует избегать в любом случае, потому что sftp (который обеспечивает аналогичную функциональность) похож, но безопасен. Некоторые сайты используют /sbin/nologin для отключения доступа к оболочке, разрешая доступ sftp, помещая его в /etc/shells, Это может открыть бэкдор, если пользователю разрешено создавать cronjob.

В любом случае, scp не будет работать с недопустимой оболочкой. scponly может использоваться как оболочка в этом случае.

Кроме того, выбор оболочки влияет на работу su - (AKA su -l). В частности, выход /sbin/nologin будет напечатано на stdout, если это оболочка; это не может быть /bin/false, В любом случае команды запускаются с su -cl не удастся.

Наконец, ответ:

Чтобы отключить учетную запись, не зависеть ни от одного из них, но установите оболочку в /sbin/nologin для информационных целей (кроме /sbin/nologin в /etc/shells, в этот момент вы должны использовать /bin/false, чего не должно быть). Вместо этого установите поле пароля в /etc/passwd в !, что гарантируется crypt чтобы не было никаких паролей. Рассмотрите установку хэша в /etc/shadow таким же образом, чтобы избежать ошибок. passwd -l сделают это за вас.

Третий способ отключить учетную запись - установить поле даты истечения срока действия учетной записи на древнюю дату (например. usermod --expiredate 1). Это предотвратит вход в систему, если ваша настройка позволяет пользователям проходить проверку подлинности с их учетной записью unix без пароля, а служба, которую они используют, не требует оболочки.


66
2018-06-28 05:34



В то время как этот ответ прекрасно отражает различные варианты (и отвечает на вопрос), я счел нужным указать полезный ресурс для этого варианта использования, который доступен, по крайней мере, в хранилищах хранилищ Debian, в titantools пакет: noshell, Эта псевдо-оболочка предоставляет возможности аудита, вход в систему syslog пытается использовать учетные записи с noshellкак его оболочка, пока все еще запрещает доступ. - dawud
Это отнюдь не апокрифическое, но на самом деле довольно распространено среди сидэдминов определенного урожая (кашель), чтобы использовать /bin/false в качестве оболочки входа для людей, которые не должны входить в систему. - MadHatter
Апокрифический в том смысле, что это не первоначальное предназначение. Я не сказал анахроничность; Я вижу это каждый день :) - Falcon Momot
Отключение учетной записи по неверному паролю не очень хорошо работает с ssh. Если пользователю удалось предварительно настроить аутентификацию с открытым ключом, он, возможно, сможет войти. - joshudson
sshd задокументирован, чтобы проверить, что учетные записи, которые заблокированы определенным образом (хеши паролей, начинающиеся с!) упоминаются конкретно) даже с pubkey auth. - Falcon Momot


После проведения некоторых исследований по этому методу используемый вами метод зависит от того, что вам нужно заблокировать. Если пользователь входит в систему с этим набором в оболочку, тогда они получат сообщение, отображаемое в результате This account is currently unavailable. Обратите внимание, что вы можете изменить это, создав файл /etc/nologin.txt по крайней мере, на производных RHEL.

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

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

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


12
2018-06-28 05:30





Хм, кто-нибудь пытаться доказать, что / bin / false будет запрещать доступ к FTP?

Я только что изменил оболочку моего пользователя на / bin / false и смог FTP в порядке.

Я использую / dev / null для полностью заблокируйте пользователя (ну, кроме электронной почты, они все равно могут POP3).


2
2017-09-01 02:24



У вас было это в /etc/shells? Как настроен ваш FTP-сервер? - Michael Hampton♦
нет правила, говорящего, что пользователю нужна оболочка для входа в FTP-сервер. - Petter H
Это запретит это на некоторых FTP-демонах, а не на других. Существует много различий в функциональности между различными. Классическая реализация запретит доступ к любому, у кого нет оболочки, но это не значит, что все реализации должны. - Falcon Momot