Как динамически разрешить пользователям в OpenSSH? - PullRequest
1 голос
/ 06 марта 2019

Я хочу иметь возможность блокировать или разрешать пользователям на основе результатов внешнего скрипта с использованием OpenSSH.Я вижу, что libssh имеет поддержку обратных вызовов , но после прочтения справочных страниц OpenSSH я нигде не могу найти, чтобы эта функция была передана пользователю.

Например, я бы хотелчтобы иметь возможность поддерживать файл или даже API, содержащий черный или белый список имен пользователей, и заставить OpenSSH обращаться к этим спискам во время процесса аутентификации.

Идеи, которые у меня были до сих пор, и почему их недостаточно:

  1. Используйте sshd_config: AllowUsers. Это начало, но, поскольку оно не читает файл, оно не является динамическим.Конфигурационный файл необходимо будет менять каждый раз, и служба будет перезапущена.Кроме того, изменение файла конфигурации из скрипта опасно и ужасно.

  2. Используйте sshd_config: AuthorizedKeysCommand. К сожалению, хотя это позволяет вамчтобы указать сценарий и предоставить доступ на основе результата, он не допускает отказа в доступе.Если скрипт ничего не возвращает, sshd продолжает пробовать другие методы аутентификации.

  3. Перекомпилируйте OpenSSH с добавлением, которое реализует обратные вызовы libssh.Я бы предпочел не делать этого по очевидным причинам ремонтопригодности.

Есть ли другой способ, который я пропустил при чтении документации?

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Для 2. вы можете ограничить аутентификацию publickey с AuthenticationMethods .

Другой вариант - использовать PAM и реализовать свой собственный модуль PAM authz.

0 голосов
/ 07 марта 2019

Варианта 2 достаточно, если вы отключите проверку authorized_keys:

sshd_config:

AuthorizedKeysCommand /etc/ssh/my-custom-command
AuthorizedKeysUser nobody
AuthorizedKeysFile none

my-custom-command:

# $1 is user, as passed from sshd

#psuedo code:
if $1 is in whitelist:
cat /home/$1/.ssh/authorized_keys
exit 0
else
exit 1
...