Назад | Перейти на главную страницу

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

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

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

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

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

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

/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 - (AKA 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 без пароля, а используемая ими служба не требует оболочки.

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

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

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

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