Ограничение пользователей SSH в LDAP только одной командой на бастионе SSH

Ограничение пользователей SSH в LDAP только одной командой на бастионе SSH

У меня есть частная сеть серверов 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; обращайтесь к ней, используя любой удобный вам язык, и используйте ее для выполнения каких-либо действий.

Убедитесь, что ваш скрипт не выходит в сеанс оболочки на бастионе.

Связанный контент