У меня есть человек, которому будет нужен доступ к моему SSH-серверу, но я хочу, чтобы у них был ограниченный доступ к программам. Все, что они должны использовать, это ssh, чтобы войти на другой сервер. Мой сервер является точкой доступа к другому серверу. Я не хочу, чтобы этот пользователь запускал программы, отличные от программы ssh, которые им нужно получить в другой сети.
В идеале, когда они будут входить в систему, они будут перенаправлены на другой SSH-вход и не будут иметь другой доступный вариант для чего-либо еще.
У пользователей SSH нет прав root.
Как я могу это настроить? Я думаю, что могу сделать это с их файлами bashrc. Я напишу вторичный скрипт входа, который выполняется при входе в систему. Есть ли способ для входа пользователя на SSH-сервер и игнорировать их файл bashrc при входе в систему? Есть ли лучший способ, который я должен рассмотреть?
Вы решили отредактировать файл bashrc. Я хотел бы взглянуть на ограничение их доступа ко всем командам bash, кроме ssh, таким образом, они могут. У этой ссылки есть хорошая информация.
Еще одна мысль - настроить ssh-проход через туннель без доступа к логину. Эта ссылка может быть полезна. Это может быть проще настроить.
Просто установите оболочку входа пользователя в сценарий оболочки вместо bash или sh, содержащий синтаксис ssh во вторую конечную точку. Все логины, если они явно не определяют оболочку с -s в синтаксисе ssh, будут перенаправляться по вашему запросу.
Я могу избавиться от ограничений BASHRC различными способами. Если вы ожидаете, что они будут злонамеренными, убедитесь, что они не могут указывать альтернативную оболочку при входе в систему.
Локальный пользовательский сигн, чтобы они не могли вывести Ctrl + C и проверить на выходе из ssh для кода выхода 0, иначе завершить полностью или повторить попытку на неопределенный срок. Ваш выбор.
Вы можете сделать это несколько прозрачно, заставляя пользователя использовать локальный ProxyCommand локально, рассматривая ваш собственный сервер как хост-бастион SSH.
На вашем сервере (бастионе) ограничьте пользователя nc, как показано в sshd_config:
Match User restricted_usr
ForceCommand nc -w 600 restricted_usr_vm 22
На клиенте (предполагается OpenSSH) в ~/.ssh/config:
Host myserver
ProxyCommand ssh bastion nc -w 600 restricted_usr_vm 22
(пользователи Windows могут [d1 ] bastion host , используя PuTTY plink).
Хотя, благодаря вашему ForceCommand, я уверен, что команда ssh игнорируется; ProxyCommand ssh bastion I am a bannana должен иметь тот же эффект. Прямое соединение (отсутствует ProxyCommand) от пользователя приведет к необработанному дампу SSH для limited_usr_vm.
Как отмечено в комментарии к другому ответу здесь, ForceCommand будет очень сложно управлять SSH ключ доступа к бастионному хосту. Я могу подумать о двух простых решениях: (1) Установите для SSS-ключа без пароля SSH для этого пользователя на бастионе, который предоставляет доступ к целевому хосту, и у него есть crontab этого пользователя на bastion run scp restricted_usr_vm:.ssh/authorized_keys ~/.ssh/ или (2) Создайте веб-форму (например, GitHub), чтобы разрешить загрузку этого файла. (3) NFS также может работать, но я не очень люблю его, потому что каталог .ssh может быть скомпрометирован кем-то с root (или тем же UID) в любой системе, которая его монтирует.
Я отправил комментарий к другому ответу здесь (с более подробной информацией о ProxyCommand) на очень похожий вопрос ServerFault Имя пользователя SSH proxy.
Мне это нравится намного лучше, чем ForceCommand ssh -t restricted_usr_vm, потому что он лучше справляется с тайм-аутами, а ssh -t является довольно неуклюжим (и, возможно, в прошлом, иногда ненадежным). Я также предполагаю, что такие вещи, как scp, не будут работать через этот метод, пока они отлично работают через ProxyCommand.