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


69

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

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

Я также вижу, что /sbin/nologinв списке /etc/shells, пока /bin/falseнет.

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

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



1
Как общая информация, которая работает. Я думаю конкретно с точки зрения системного администрирования.
Майкл Хэмптон

Просто подразумевается как фон.
dmourati

Ответы:


70

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

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

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

/sbin/nologinутилита BSD, которая работает аналогично /bin/false(возвращает логическое значение 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. Это может открыть бэкдор, если пользователю разрешено создавать cronjobs.

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

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

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

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

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


9
Хотя этот ответ суммирует совершенно разные варианты (и отвечает на вопрос), я почувствовал необходимость указывать на полезный ресурс для этого случая использования, который доступен по крайней мере , в акции Debian репозиториях, в titantoolsпакете: noshell. Эта псевдооболочка предоставляет возможности аудита, регистрируя попытки системного журнала использовать учетные записи в noshellкачестве оболочки, но в то же время запрещает доступ.
Дауд

1
Это ни в коем случае не является апокрифическим, но на самом деле довольно распространено среди системных администраторов определенного винтажа (кашель), чтобы использовать /bin/falseв качестве оболочки входа для людей, которые не должны входить в систему.
MadHatter,

2
Апокриф в том смысле, что это не оригинальное предназначение. Я не сказал анахронизм; Я вижу это каждый день :)
Сокол Момот

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

3
sshd документирован для проверки того, что учетные записи, которые заблокированы определенным образом (хеши паролей начинаются с!, упоминаются специально), даже с аутентификацией pubkey.
Сокол Момот

13

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


2

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

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

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


У тебя это было /etc/shells? Как настроен ваш FTP-сервер?
Майкл Хэмптон

Нет правила, согласно которому пользователю нужна оболочка для входа на FTP-сервер.
Петтер Х

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