Назад | Перейти на главную страницу

Ограничение пользователей 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 joe.user@directory.service joes.workstation.ip -o ProxyCommand="ssh -l joe.user@directory.service -q bastion.ip nc joes.workstation.ip %p"

К сожалению, они также могут подключиться по SSH к сеансу на сервере-бастионе, чего я бы не хотел, чтобы они могли это сделать.

Могу ли я использовать свои текущие инструменты - SSSD, SSHD, каталог LDAP - чтобы позволить пользователям SSH проходить через бастион, но не в бастион?

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

В итоге я добавил ForceCommand вход в мой sshd_config под Match директива, а также AcceptEnv директива:

Match Group thisGroup@directory.service
  AcceptEnv SomeVariable
  AcceptEnv SomeOtherVariable
  ForceCommand /path/to/some/script/I/wrote

Затем в сценарии оболочки я использую переменные, переданные ssh-клиентом, для выполнения некоторых действий.

Например, если клиент назвал это:

$ SomeVariable=foo ssh -i path/to/key -l joe@directory.service -o SendEnv=SomeVariable bastion.server

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

Убедитесь, что ваш сценарий не завершает сеанс оболочки на бастионе.