Как уже ответили, командная строка, отправленная с клиента ssh, помещается в переменную окружения SSH_ORIGINAL_COMMAND, выполняется только ForcedCommand.
Если вы используете информацию из SSH_ORIGINAL_COMMAND в своем ForcedCommand, вы должны позаботиться о последствиях для безопасности. Злоумышленник может дополнить вашу команду произвольными дополнительными командами, отправив, например, ; rm -rf /
в конце командной строки.
В этой статье показан общий скрипт, который можно использовать для блокировки разрешенных параметров. Он также содержит ссылки на соответствующую информацию.
Описанный метод (скрипт only) работает следующим образом:
Сделайте скрипт «only» ForcedCommand и дайте ему разрешенный
Команда в качестве параметра. Обратите внимание, что можно использовать более одной разрешенной команды.
Поместите файлы .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» ищет команду на сервере и использует ее имя для соответствия правилам. Если какая-либо из этих проверок не пройдена, команда не выполняется.