Я использую Mac OS X Server.app на Yosemite, и у меня включен SSH для пользователей с настройками по умолчанию в /etc/sshd_config
(открытый ключ и аутентификация по паролю включены по умолчанию). Однако мне нужно ограничить git
локальный пользователь должен иметь доступ к публичному ключу ТОЛЬКО через SSH.
Полное раскрытие, Server.app включает некоторые дополнительные параметры Kerberos и GSSAPI (хотя я не уверен на 100%, как они влияют на мои вопросы ниже):
# Kerberos options
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
GSSAPIStrictAcceptorCheck yes
GSSAPIKeyExchange no
/etc/sshd_config
говорит следующее:
# To disable tunneled clear text passwords both PasswordAuthentication and
# ChallengeResponseAuthentication must be set to "no".
Тем не мение, ChallengeResponseAuthentication
не допускается в операторах соответствия, поэтому я попытался просто отключить аутентификацию по паролю:
Match User git
PasswordAuthentication no
Это не работает - я все еще мог войти в систему с именем пользователя / паролем на git@my.server :(
Однако добавление KbdInteractiveAuthentication no
казалось, работает правильно:
Match User git
PasswordAuthentication no
KbdInteractiveAuthentication no
Теперь я получаю Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
при попытке авторизации без открытого ключа. Похоже, это указывает на то, что есть еще методы, помимо publickey, которые позволят войти в систему из git
пользователь (т.е. gssapi-keyex
и gssapi-with-mic
)
Похоже, что лучший подход - просто ограничить метод аутентификации publickey
:
Match User git
AuthenticationMethods publickey
Это дает ответ `Permission denied (publickey).
Вопросы:
ChallengeResponseAuthentication
и KbdInteractiveAuthentication
? Почему KbdInteractiveAuthentication
разрешено в операторах соответствия, но не ChallengeResponseAuthentication
?AuthenticationMethods publickey
подходить?gssapi-keyex
/gssapi-with-mic
и как они соотносятся с включенными параметрами GSSAPI / Kerberos)Вот хорошее резюме разницы между ChallengeResponseAuthentication
и KbdInteractiveAuthentication
в http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-challengeresponseauthentication.html - резюме состоит в том, что ChallengeResponse часто заканчивается просто запросом пароля (но настаивает на том, чтобы он предоставлялся в интерактивном режиме).
KbdInteractiveAuthentication
и ChallengeResponseAuthentication
это разные вещи. Просто это ChallengeResponseAuthentication
может закончиться просто запросом пароля в простых случаях.
ChallengeResponseAuthentication
является глобальным параметром и не может быть указан в Match
пункт - см. sshd_config
справочную страницу для подробностей.
Явное указание AuthenticationMethods publickey
для git
пользователь должен работать нормально и лучше, чем отключать те, которые вам не нужны (так как список может измениться).
В gssapi
варианты вступают в игру, если вы работаете в Kerberos
среда (например, домен Active Directory).
Мне не совсем понятно, есть ли разница, но, по крайней мере, ChallengeResponseAuthentication, похоже, требует KbdInteractiveAuthentication; он автоматически включается, если включен запрос-ответ.
Я чувствую, читая его, что они придумали вызов-ответ еще в эпоху SSH1. Он был стандартизирован как интерактивный с клавиатурой с SSH2, но они не сразу изменили файл конфигурации сервера, чтобы старые конфигурации продолжали работать.
Я нашел следующее в портативном источнике openssh (по состоянию на 20181214).
sshd.c, начиная со строки 1685:
/* challenge-response is implemented via keyboard interactive */
if (options.challenge_response_authentication)
options.kbd_interactive_authentication = 1;
sshconnect2.c, начиная со строки 375:
if (options.challenge_response_authentication)
options.kbd_interactive_authentication = 1;