У меня есть некоторый 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
в аргументе пароля, но во всех случаях я пробовал это не кажется, не показывает аргумент пароля.
У кого-нибудь есть идеи / рекомендации по этому поводу? Спасибо.