У меня есть частная сеть серверов Centos 7. Каждый из серверов доступен только через SSH-бастион. Кроме того, все эти серверы используют SSSD для аутентификации ключей пользователей SSH по каталогу LDAP.
Поскольку ключи аутентифицируются по каталогу LDAP, стандартного файла нет authorized_keys
. Вместо стандартного authorized_keys
файла двоичный /usr/bin/sss_ssh_authorizedkeys
файл передает запрос к LDAP, чтобы sshd
отформатировать его как authorized_keys
файл, но на самом деле не как файл. Поэтому, насколько мне известно, ограничение пользователей определенными командами путем привязки ключей RSA к commands=" ... "
записям невозможно.
Пользователи SSH могут проходить аутентификацию на своих рабочих станциях через бастион, используя следующую команду:
ssh -A -l [email protected] joes.workstation.ip -o ProxyCommand="ssh -l [email protected] -q bastion.ip nc joes.workstation.ip %p"
К сожалению, они также могут подключаться по SSH к сеансу на сервере-бастионе, чего я бы не хотел, чтобы они могли делать.
Могу ли я каким-либо образом использовать мои текущие инструменты — SSSD, SSHD, каталог LDAP — чтобы разрешить пользователям SSH проходить через бастион, но невбастион?
решение1
Версия, sssd
позволяющая устанавливать конфигурации для каждой группы, все еще находилась в стадии разработки, когда я столкнулся с этой проблемой.
В итоге я добавил ForceCommand
запись в свою sshd_config
директиву Match
, а также AcceptEnv
директиву:
Match Group [email protected]
AcceptEnv SomeVariable
AcceptEnv SomeOtherVariable
ForceCommand /path/to/some/script/I/wrote
Затем в скрипте оболочки я использую переменные, переданные ssh-клиентом, для выполнения некоторых действий.
Например, если клиент вызвал это:
$ SomeVariable=foo ssh -i path/to/key -l [email protected] -o SendEnv=SomeVariable bastion.server
Скрипт будет иметь доступ к переменной среды SomeVariable
; обращайтесь к ней, используя любой удобный вам язык, и используйте ее для выполнения каких-либо действий.
Убедитесь, что ваш скрипт не выходит в сеанс оболочки на бастионе.