Это не имеет ничего общего с вашим сценарием. В оболочке Bash ;
рассматривается как команда завершения для строки команд, а затем сразу после нее является вторичной командой. Таким образом, ваш материал был обработан следующим образом.
Выполнить команду до ;
:
./copycron.sh /дом/яблоко /дом/пирог
Выполните вторую команду после ;
:
перезагрузка
Поскольку вы выполняли, вероятно, как корень
или суперпользователя, он успешно перезагрузился.
Однако, если вы сделаете что-то более конкретное и выполните другую произвольную команду после ;
вместо этого вы заметите, что команда запускается. Два ваших аргумента к вашему сценарию останутся /дом/яблоко
и /дом/пирог
соответственно. Скрипт никогда не видит ;перезагрузка
часть, потому что это не анализируется как аргумент. Это ограничение Bash, а не что-то в вашем скрипте.
Вы можете проверить это с помощью следующего сценария, а затем вызвать команду:
ФАЙЛ: argecho.sh
#!/бин/баш
echo "Аргументы, разделенные пробелами: $*"
эхо ""
эхо "------"
эхо ""
КОМАНДА ДЛЯ ВЫПОЛНЕНИЯ:
./argecho.sh foo bar baz /tmp/something.txt;echo Я сделал что-то еще
ВЫВОД:
$ ./argecho.sh foo bar baz /tmp/something.txt;echo Я сделал что-то еще вне сценария, понимаете?
Аргументы, разделенные пробелами: foo bar baz /tmp/something.txt
------
Я сделал что-то еще вне сценария, понимаете?
Вы заметите, что «эхо» и другие аргументы в нем не были включены в ваши аргументы в вашем сценарии. Это стандартное поведение Bash.
Основываясь на ваших изменениях, вы обеспокоены тем, что кто-то собирается захватить команды вашего репозитория Jenkins и выполнить вредоносную команду, изменив сценарий с sh 'copycron "${Workspace}" "${targetdir}"'
к sh copycron /home/boot;shutdown
К сожалению для вас, вы ничего не можете исправить, это приведет к тому, что вы не сможете должным образом контролировать, кто имеет доступ к репозиториям команд. Такие субъекты угроз будут иметь гораздо больше возможностей нанести ущерб вашей системе, а не просто выполнить простую команду, подобную вышеупомянутым изменениям. Скорее всего, они установят вредоносное ПО в вашу систему, чем что-либо еще, и если вы не защитите свои репозитории команд должным образом, чтобы никто не мог просто «случайно редактировать их», отсутствие контроля над репозиториями — это то, что вас погубит.
Здесь мы не можем сделать реальное укрепление, если пользователь jenkins также имеет неограниченные привилегии sudo. Его просто нет, потому что это будет зависеть от того, насколько правильно вы защитите свои системы или создадите альтернативный механизм развертывания, который является более безопасным и не требует полного судо
работать со всем.