Передача параметров клиенту SSH для выполнения ForceCommand с параметрами - PullRequest
3 голосов
/ 22 марта 2011

У меня проблемы с передачей параметров команды удаленно в программу ForceCommand в ssh.

На моем удаленном сервере у меня есть эта конфигурация в sshd_config:

Match User user_1 
ForceCommand /home/user_1/user_1_shell

Программа user_1_shellограничивает команды, которые пользователь может выполнять, в этом случае я разрешаю пользователю только выполнять "set_new_mode param1 param2".Любые другие команды будут игнорироваться.

Поэтому я ожидаю, что когда клиент входит в систему через ssh, например, такую:

ssh user_1@remotehost "set_new_mode param1 param2"

Программа user_1_shell, похоже, выполняется, но строка параметракажется, не передается.

Может быть, я должен спросить, ForceCommand на самом деле поддерживает это?Если да, какие-нибудь предложения относительно того, как я мог заставить это работать?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 13 марта 2017

Как уже ответили, командная строка, отправленная с клиента ssh, помещается в переменную окружения SSH_ORIGINAL_COMMAND, выполняется только ForcedCommand.

Если вы используете информацию из SSH_ORIGINAL_COMMAND в своем ForcedCommand, вы должны позаботиться о последствиях для безопасности. Злоумышленник может дополнить вашу команду произвольными дополнительными командами, отправив, например, ; rm -rf / в конце командной строки.

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

Описанный метод (скрипт only) работает следующим образом:

  1. Сделайте скрипт «only» ForcedCommand и дайте ему разрешенный Команда в качестве параметра. Обратите внимание, что можно использовать более одной разрешенной команды.

  2. Поместите файлы .onlyrules в домашний каталог user_1 и заполните его правилами (регулярными выражениями), которые сопоставляются с командная строка, отправленная клиентом ssh.

Ваш пример будет выглядеть так:

Match User user_1
ForceCommand /usr/local/bin/only /home/user_1/user_1_shell

и если, например, вы хотите разрешить в качестве параметров только 'set_new_mode' с ровно двумя буквенно-цифровыми произвольными параметрами, файл .onlyrules будет выглядеть следующим образом:

\:^/home/user_1/user_1_shell set_new_mode [[:alnum:]]\{1,\} [[:alnum:]]\{1,\}$:{p;q}

Обратите внимание, что для отправки команды на сервер вы должны использовать всю командную строку:

/home/user_1/user_1_shell set_new_mode param1 param2

«only» ищет команду на сервере и использует ее имя для соответствия правилам. Если какая-либо из этих проверок не пройдена, команда не выполняется.

0 голосов
/ 23 апреля 2019

[Раскрытие: я написал sshdo, который описан ниже]

Для этого есть программа sshdo. Он контролирует, какие команды могут выполняться через входящие ssh-соединения. Доступно для скачивания по адресу:

http://raf.org/sshdo/ (read manual pages here)
https://github.com/raforg/sshdo/

В нем есть режим обучения, позволяющий разрешать все команды, и опция --learn для создания конфигурации, необходимой для постоянного разрешения изученных команд. Тогда режим обучения можно отключить, и любые другие команды не будут выполняться.

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

Он также может быть настроен вручную.

Очень суетно из-за того, что позволяет. Это не позволит команду с любыми аргументами. Только полные команды оболочки могут быть разрешены. Но он поддерживает простые шаблоны для представления похожих команд, которые различаются только цифрами в командной строке (например, порядковые номера или метки даты / времени).

Это похоже на брандмауэр или контроль белого списка для команд ssh.

0 голосов
/ 21 августа 2014

Я нашел ответ.Удаленный сервер захватывает строку параметров и сохраняет ее в переменной среды $ SSH_ORIGINAL_COMMAND.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...