У меня есть код 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, которые не обязательно безопасны или рекомендованы.
- Нежелательно когда-либо передавать пароли таким образом (совершенно очевидно), и всегда лучше делать это через файл, права доступа которого контролируются каким-либо безопасным способом, или через среду и передачу как стандартный ввод, или просто через код сам. К сожалению, ни один из вариантов для меня не подходит (инструмент не поддерживает его - он просто ожидает параметр командной строки с именем -password со строковым паролем, который не считывает какие-либо переменные среды или что-то подобное).
- Я все еще не совсем уверен, что то, что я пытаюсь сделать, вполне возможно
Я пытался помещать вещи в переменные среды и передавать их в аргумент -password, я пытался поместить их в файл и пытался сделать cat passwordfile
в аргументе пароля, но во всех случаях, которые я пробовал, это не похоже на показать аргумент пароля.
Есть у кого идеи/рекомендации по этому поводу? Спасибо.
secret=7;sleep $secret &
, вы найдетеsleep 7
сps -f
. Как этого избежать? - person Walter A   schedule 27.04.2019