
У нас есть приложение, которое использует SSH для подключения к серверу: сетевой трафик приложения (база данных, некоторые пользовательские протоколы TCP и т. д.) туннелируется через SSH-соединение.
Мы используем пару ключей и непривилегированную учетную запись на сервере, но пользователи по-прежнему могут использовать свой ключ для входа на сервер или выполнять любое перенаправление портов по своему усмотрению.
Есть ли способ настроить SSH-сервер так, чтобы он разрешал тольконекоторыйтуннели (ограничены по конечному адресу и порту туннелей), и отключить доступ к оболочке ? (мы используем OpenSSH)
[редактировать]
Я наткнулся наЭта статья, похоже, что удаления доступа к оболочке недостаточно. Изменил заголовок и описание соответственно.
решение1
В файле authorized_keys вы можете указать, какая команда будет запущена при входе в систему. Вы можете просто задать эту команду для запуска чего-то, что будет просто ждать в течение длительного времени. Человек sshdстраницакак список всех опций, которые вы можете использовать в вашем файле authorized_keys.
permitopen="tsserver.example.org:3389",no-pty,no-agent-forwarding,no-X11-forwarding,command="/usr/local/stm_shell.sh" ssh-rsa AAAAB3....
Мой stm_shell.sh такой (он также устанавливает 12-часовой тайм-аут). Я не уверен на 100%, что это полностью безопасно.
#!/bin/bash
# send a hang-up after this process exits
shopt -s huponexit
# maximum session length in hours
CONNECT_TIME=12
sleep $[CONNECT_TIME*60]
kill $PPID
решение2
Установка оболочки пользователя в значение /bin/false может дать то, что вам нужно.
решение3
Возможно, ключевое слово «ChrootDirectory» в sshd_config (man sshd_config) может обеспечить немного большую безопасность.
решение4
Я полагаю, что вы могли бы установить ForceCommand
директиву, /bin/false
чтобы запретить доступ к оболочке.