Запретить отображение аргумента командной строки в истории bash или ps -ef с помощью bash-скрипта - PullRequest
0 голосов
/ 26 апреля 2019

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

Одним из аргументов командной строки этого инструмента является простой текстовый пароль.

Сценарий выглядит примерно так:

#!/bin/bash

# script.sh
# some setup code 

<cli-tool-executable> -arg1 <arg1> -arg2 <arg2> ... -password <password>

и я вызываю это из кода Java через apache commons exec , выполняя что-то вроде

CommandLine commandLine = new CommandLine("bash");

// bash script that runs the tool
commandLine.addArgument("script.sh");

// add other arguments
commandLine.addArgument(...);

// execute
new DefaultExecutor().execute(commandLine);

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

В идеале, я бы хотел, чтобы пароль был каким-то образом запутан или вообще не отображался.

Я потратил лучшую половину дня, пытаясь найти другие решения для этого, и в процессе обнаружил, что:

  • Есть несколько потенциально хакерских способов сделать это с кодом C, которые не обязательно безопасны или рекомендуются
  • Не желательно когда-либо передавать пароли таким образом (вполне очевидно), и всегда лучше делать это через файл, права доступа которого контролируются каким-либо безопасным способом, или через среду и передавая как stdin, или только через сам код. К сожалению, это не вариант для меня (инструмент не поддерживает его - он просто ожидает параметр командной строки с именем -password со строковым паролем, который не считывает никакие переменные окружения или что-либо подобное).
  • Я все еще не до конца уверен, возможно ли то, что я пытаюсь сделать,

Я пытался поместить вещи в переменные окружения и передать их в аргумент -password, я попытался поместить их в файл и попытаться сделать cat passwordfile в аргументе пароля, но во всех случаях я пробовал это не кажется, не показывает аргумент пароля.

У кого-нибудь есть идеи / рекомендации по этому поводу? Спасибо.

1 Ответ

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

Может быть, это длинный выстрел, но вы можете запустить свою команду в экземпляре docker bash (с соответствующей настройкой безопасности).Например, с Dockerfile

FROM bash:4.4
COPY script.sh /
CMD ["bash", "/script.sh"]

В качестве альтернативы для исследования есть API механизма докера (нажмите на вкладку HTTP), в основном большинство из того, что является клиентом докераделает.

...