Вопрос или проблема
В основном, что я хочу сделать, это отключить вход с помощью пароля на клиентских машинах и разрешить аутентификацию только через SSH-ключи, которые берутся с нашего сервера FreeIPA. Аутентификация по SSH-ключам работает нормально, просто я не могу найти способ отключить аутентификацию по паролю.
Отключение аутентификации по паролю в sshd_config просто отключает все методы аутентификации. Так что, очевидно, это какая-то опция PAM, которую я не могу найти.
Я приложил мой sshd_config ниже. Буду очень признателен за любую помощь.
# Смотрите man-страницу sshd_config(5) для подробностей
# Какие порты, IP-адреса и протоколы мы слушаем
Port 22
# Используйте эти параметры, чтобы ограничить интерфейсы/протоколы, к которым будет привязан sshd
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# Ключи хоста для протокольной версии 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
# Разделение привилегий включено для безопасности
UsePrivilegeSeparation yes
# Период жизни и размер временного ключа сервера версии 1
KeyRegenerationInterval 3600
ServerKeyBits 1024
# Логирование
SyslogFacility AUTH
LogLevel INFO
# Аутентификация:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Не читать файлы пользователя ~/.rhosts и ~/.shosts
IgnoreRhosts yes
# Для этого также нужны ключи хоста в /etc/ssh_known_hosts
RhostsRSAAuthentication no
# аналогично для протокольной версии 2
HostbasedAuthentication no
# Раскомментируйте, если вы не доверяете ~/.ssh/known_hosts для RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# Чтобы разрешить пустые пароли, измените на yes (НЕ РЕКОМЕНДУЕТСЯ)
PermitEmptyPasswords no
# Измените на yes, чтобы включить аутентификацию по методам "вызов-ответ" (учтите проблемы с
# некоторыми модулями PAM и потоками)
ChallengeResponseAuthentication yes
# Измените на no, чтобы отключить проксированные пароли в открытом виде
#PasswordAuthentication no
# Опции Кераberos
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# Опции GSSAPI
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Позволять клиенту передавать переменные окружения локали
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Установите это значение в 'yes', чтобы включить аутентификацию PAM, обработку учетных записей
# и обработку сеансов. Если это включено, аутентификация PAM будет
# разрешена через ChallengeResponseAuthentication и
# PasswordAuthentication. В зависимости от вашей конфигурации PAM,
# аутентификация PAM через ChallengeResponseAuthentication может обойти
# настройку "PermitRootLogin without-password".
# Если вы просто хотите, чтобы проверки учетной записи и сеанса PAM выполнялись без
# аутентификации PAM, тогда включите это, но установите PasswordAuthentication
# и ChallengeResponseAuthentication на 'no'.
#UsePAM yes
KerberosAuthentication no
PubkeyAuthentication yes
UsePAM yes
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
GSSAPIAuthentication yes
AuthorizedKeysCommandUser nobody
После долгих попыток, похоже, установка этого параметра в sshd_config работает. Что странно, потому что я пробовал это раньше, но теперь, кажется, это сработало.
AuthenticationMethods publickey
Единственная проблема, которую я имею с этим, это то, что это жесткая ошибка. Я бы предпочел, чтобы боты отправляли запросы пароля, не зная, что они никогда не будут приняты.
Ответ или решение
Для того чтобы обеспечить безопасность доступа к клиентским машинам и разрешить аутентификацию только по SSH-ключам, используемым с серверами FreeIPA, необходимо внести некоторые настройки в конфигурацию SSH. Вы уже проделали значительную работу и сделали важные выводы, однако давайте более детально рассмотрим, как это правильно настроить.
Настройка SSH для аутентификации по ключам
-
Конфигурация sshd_config:
В вашем файле
sshd_config
уже есть много необходимых параметров, но основной момент заключается в том, чтобы задать правильные методы аутентификации. Вам нужно установить следующие параметры:AuthenticationMethods publickey
Этот параметр гарантирует, что для аутентификации будет использоваться только публичный ключ. Если клиент не предоставит валидный ключ, доступ будет закрыт. Это позволяет исключить использование паролей.
-
Отключение паролей для улучшения безопасности:
Вы упомянули, что хотели бы предотвратить попытки подбора паролей автоматами. Чтобы достичь этого, вы можете комбинировать настройки:
PasswordAuthentication no ChallengeResponseAuthentication no
Этот подход отключит аутентификацию с помощью паролей, но также, как вы заметили, приведет к жесткому отказу в доступе. Однако, можно использовать дополнительные меры, такие как блокировка IP-адресов после определенного количества неудачных попыток.
-
Настройки PAM:
Чтобы убедиться, что другие методы аутентификации, такие как PAM (Pluggable Authentication Modules), не будут мешать вашему сценарию, установите:
UsePAM no
Учтите, что это может отключить другие возможности, предоставляемые PAM, такие как учёт сеансов или управление доступом.
-
Логирование и мониторинг:
Рекомендуется настроить логирование для отслеживания попыток доступа. Вы можете использовать:
LogLevel VERBOSE
Это обеспечит более детальную информацию о неудачных попытках входа в систему, что может помочь в популяризации безопасности.
-
Дополнительные мер безопасности:
- Fail2Ban: Установите и настройте Fail2Ban, чтобы блокировать IP-адреса, с которых осуществляется слишком много неудачных попыток входа.
- Firewall: Рассмотрите возможность использования firewall (например, iptables или firewalld), чтобы ограничить доступ к SSH только с определённых адресов.
Заключение
Следуя вышеуказанным рекомендациям, вы сможете настроить ваш сервер так, чтобы он принимал вход только с помощью SSH-ключей, что значительно повысит безопасность вашего окружения. Подобная конфигурация позволит вам лучше контролировать доступ и снизить риски, связанные с несанкционированным входом через пароли. Если возникнут дополнительные вопросы или вам потребуется помощь с какими-либо аспектами настройки, не стесняйтесь обращаться за советом.