Как мне настроить sshd, чтобы он требовал как приватный ключ, так и пароль?

Как мне настроить sshd, чтобы он требовал как приватный ключ, так и пароль?

В /etc/ssh/sshd_config у меня сейчас есть:

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes

Но, по-видимому, это позволяет пользователю войти в систему, используя либо личный ключ, либо пароль.

3 ответа

Решение

Вам необходимо настроить SSH-привратник. Это позволяет openssh разрешить многофакторную аутентификацию.

Вот отличная ссылка: https://calomel.org/openssh.html

По сути, вы используете директиву ForceCommand для запуска скрипта, когда пользователь входит в систему. Затем этот скрипт запрашивает у пользователя пароль. В настоящее время я ищу способ проверки данного пароля по системному паролю, но я выхожу (понятно) пустым.

Если учетная запись пользователя хранится в каталоге LDAP, вы можете попытаться выполнить привязку к каталогу, используя эти учетные данные, но проблема заключается в том, что работающая программа будет работать от имени пользователя, а не от имени пользователя root. Я не знаю последствий для безопасности написания скомпилированного кода и установки его SUID.

Надеюсь, кто-то даст вам лучший ответ.

но так как я напечатал это так много, ты на сверхзащищенном сайте? Потому что это действительно единственная причина для этого. Обычные открытые ключи с парольными фразами должны быть более чем достаточными для 99% случаев.

Последние версии OpenSSH сделали это намного проще!

В /etc/ssh/sshd_config просто добавьте следующее:

AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

Если вы хотите, чтобы конкретный IP-адрес (например, 192.168.10.10) мог входить в систему с помощью методов OpenSSH по умолчанию, но для каждого другого IP-адреса требуется использовать как пароль, так и ключ, вы можете добавить следующее Match блок вместо:

Match Address "*,!192.168.10.10"
    AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

Хотя это не очень хорошо задокументировано, в строке совпадения требуется ведущая звездочка; Match Address "!192.168.10.10" на самом деле никогда не совпадет. Это может измениться в будущих версиях OpenSSH.

Двухфакторная аутентификация? Не совсем. Сертификат является более надежным методом аутентификации, чем пароль.

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

И отключите аутентификацию по паролю на вашем SSH-сервере. Это мешает людям использовать атаки по словарю / перебором.

Другие вопросы по тегам