Принудительная аутентификация открытого ключа SSH для определенных пользователей

10

Можно ли заставить определенных пользователей входить в систему с открытым ключом, одновременно позволяя другим пользователям входить в систему с паролем? Поскольку аутентификация с открытым ключом (с парольной фразой) сильнее, чем аутентификация только по паролю, мы бы хотели, чтобы sudoers входил с открытым ключом. Однако заставить обычных пользователей делать это менее удобно. В sshd_config, я не вижу никакой конфигурации, связанной с политикой.

Crend King
источник

Ответы:

11

У вас есть несколько вариантов. В этом ответе я собираюсь предположить, что вы определили sudoersгруппу.

Взгляните на sshd_configстраницу руководства и найдите Matchдирективу. Это позволяет вам указывать блоки конфигурации, которые применяются только к подмножеству ваших соединений ssh. Вы можете сделать что-то вроде этого:

Match Group sudoers
PasswordAuthentication no
ChallengeResponseAuthentication no

Теоретически вы могли бы выполнить нечто подобное с конфигурацией PAM, которая просто провалила бы попытки аутентификации людьми в sudoersгруппе. Вероятно, это будет связано с модулем pam_succeed_if ... вы можете добавить что-то вроде этого в вашу authконфигурацию для sshd:

auth        requisite     pam_succeed_if.so user notingroup sudoers quiet

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

larsks
источник
1
Спасибо! Я также должен отметить, что директива Match введена в OpenSSH 5.0. Для консервативных дистрибутивов, таких как CentOS, он может быть недоступен изначально.
Кенд Кинг
Это нарушает OpenSSH 7.7p1 - мне пришлось удалить директиву ChallengeResponseAuthentication, чтобы перезапустить ее.
rbsec
2

Другой возможный ответ, как и @larsks, ответ не работает для моей версии , ssh_dкак моя версия , похоже, использует документация нашла здесь , которая гласит:

В строках после ключевого слова соответствия может использоваться только подмножество ключевых слов. Доступные ключевые слова есть. , ,

Этот список ключевых слов , не включает в себя: ChallengeResponseAuthentication.

Очень интересный способ, который я нашел, это использовать AuthenticationMethodsкоторый в вашем случае будет работать так:

Match Group sudoers
AuthenticationMethods 'publickey'

AuthenticationMethods принимает список значений, разделенных запятыми, которые представляют серию методов, которые пользователь должен пройти, прежде чем получить доступ к серверу.

AuthenticationMethods 'publickey,password' заставит пользователя пройти с открытым ключом и затем паролем.

Чтобы узнать больше man sshd_config.

Breedly
источник