Пункт 2.11 Рекомендаций по безопасной настройке операционных систем Linux Федеральной службы по техническому и экспортному контролю (ФСТЭК) говорит, что необходимо «Не допускать использование учётных записей пользователей с пустыми паролями. Настроить учётные записи таким образом, чтобы каждый пользователь системы либо имел пароль, либо был заблокирован по паролю». В данном мануале разберём, как закрыть доступ для пользователей без пароля в Linux.
Как закрыть доступ для пользователей без пароля
Доступ к виртуальной машине, работающей на Linux, можно получить, подключившись к ней либо по SSH, либо с помощью консоли, роль которой на сайте RUVDS играет терминал аварийного доступа к серверу.
По умолчанию подключение по SSH под именем пользователя, не имеющего пароля, закрыто в настройках SSH. Данная настройка содержится в конфигурационном файле SSH, а именно /etc/ssh/sshd_config.
В файле конфигурации за запрет доступа учётным записям с пустым паролем отвечает значение no параметра PermitEmptyPasswords:
PermitEmptyPasswords no
По умолчанию на создаваемых серверах эта строка закомментирована, но значение параметра установлено как no. Это означает, что доступ пользователям, не имеющим пароля, по SSH запрещён.
Но при этом существует возможность подключиться к серверу без пароля через терминал аварийного доступа.
В качестве эксперимента мы создали учётную запись your-user и удалили у неё пароль:
# useradd your-user
# passwd -d your-user
Чтобы убедиться, что пользователь не имеет пароля, достаточно найти соответствующую ему строку в файле /etc/shadows:

Также для вывода списка всех учётных записей с пустым паролем можно применить команду:
# awk -F: '($2 == "" ) {print $1}' /etc/shadow

Таким образом, мы создали, а затем «нашли» в нашей системе пользователя, который может авторизоваться исключительно при помощи имени своей учётной записи. После чего открыли терминал, ввели имя пользователя, нажали Enter и, как следствие, получили доступ к нашей системе:

Чтобы установить запрет на возможность аутентификации подобным способом, необходимо перейти в каталог /etc/pam.d/, который содержит файлы конфигурации для PAM (Pluggable Authentication Modules). Данный каталог используется для управления аутентификацией, авторизацией и учётом в Linux. Каждая программа, использующая PAM для аутентификации, например, SSH, sudo или login, имеет свой отдельный файл конфигурации в этом каталоге. Эти файлы содержат инструкции для модуля PAM о том, как обрабатывать процесс аутентификации.
В каталоге /etc/pam.d/ необходимо найти и отредактировать соответствующий файл:
- для CentOS – это файл
system-auth; - для Ubuntu и Debian – это файл
common-auth.
В файле system-auth (в случае с CentOS) нужно отыскать строку:
auth sufficient pam_unix.so try_first_pass nullok
В файле common-auth (если вы используете Debian или Ubuntu) строку:
auth [success=1 default=ignore] pam_unix.so nullok
В любом из этих случаев следует удалить запись nullok, находящуюся в конце строки.
Проверка доступа пользователя с пустым паролем
После сохранения внесённых в файл изменений мы можем снова открыть консоль и попробовать зарегистрироваться в системе при помощи пользователя, не имеющего пароля.

Как видите, теперь система просит ввести пароль для нашего пользователя. Какой бы пароль мы ни вводили, даже пустой, мы получаем сообщение о некорректности введённых учётных данных.
Таким образом, мы увидели, как закрыть доступ для пользователей без пароля на серверах и рабочих станциях, работающих под управлением операционных систем семейства Linux.
