2009-12-10 9 views
3

У меня есть приложение Tomcat, которое требует нескольких паролей при запуске.
В моей текущей конфигурации используется объект Java Properties для загрузки паролей из файла password.conf.Чтение пользовательского ввода от Tomcat startup

Теперь существует требование, чтобы пароли не разрешались в «ясном» режиме в системе. Я предложил шифровать файл паролей, но это не вариант.

Было бы идеально, если бы начальный скрипт Tomcat мог просто читать пароли с ключами пользователя из командной строки и передавать его в мое приложение.

Поскольку Tomcat запускается в качестве Daemon, я не думаю, что могу использовать любой Java-интерфейс командной строки ввода-вывода, например Scanner, для чтения в пароле.

Есть ли у кого-нибудь умные решения?

Благодаря PR

ответ

3

Здесь два решения является одним решением, которое я могу думать:

Easy - установить переменную среды в обертке сценария оболочки и прочитать это как свойство системы. т.е .:

echo "What is the password" 
stty -echo 
read server_password 
stty echo 
# error check 
export server_password 

Тогда в Java:

password = System.getenv("server_password"); 

Harder - зашифровать пароль с помощью асимметричного шифрования, а затем передать пароль, вам нужно будет расшифровать его в коде Java.

Только мои идеи манжеты.

EDIT Удалено зашифровать идею пароля, потому что, хотя это может помешать кому-либо определить пароль, это не мешает кому-либо использовать зашифрованный пароль для запуска приложения.

EDIT 2: включено Запущенная -echo за @mpobrien предложение

+0

Мне действительно нравится ваше «легкое» предложение. Это будет полезно для принятия новых требований. – praspa

+1

вот подсказка для дополнительной безопасности - отключение символа при появлении запроса пароля, используя «stty -echo» Подробнее здесь: http://www.askdavetaylor.com/prompting_users_for_passwords_in_a_shell_script.html – mpobrien

+0

@mpobrien очень хорошая точка. Вы должны обязательно отключить эхо. – jabbie

0

Вы можете изменить сценарий запуска для кота, чтобы передать аргументы командной строки с самим стартом команды. Вероятно, они должны быть в виде -Dkey = value. Это позволит вам установить свойства системы при запуске. Ваше приложение может прочитать их через System.getProperty (имя), чтобы получить пароли или не запускать, если свойство не было предоставлено.

Обратите внимание, что команда запуска для tomcat может быть записана на диск на некоторых системах, так что будут записываться также флаги -D и ваш пароль с ними. Вам просто нужно убедиться, что это не зарегистрировано.

+1

Это плохая идея, потому что эта информация будет передана в ясном виде. Простой ps -ef отобразит пароль. – jabbie

+0

Требование не состояло в том, чтобы пароли были очищены в системе ... – FelixM

+0

У меня был пример аналогичного требования. Мы закончили тем, что смогли просто зашифровать пароль в текстовый файл и прочитать его во время выполнения. Вы можете передать пароль с помощью двух -D-флагов и выполнить какую-то операцию для получения фактического пароля. Просто не называйте их -DpasswordOne -DpasswordTwo. Это может сделать безопасность безвестности. – Gennadiy

0

Ум, умное решение - это зашифрованный файл паролей, почему это было исключено?

Другим решением может быть чтение паролей из базы данных или какого-либо другого сервера.

+0

Не очень хорошая идея, если вам нужно вытащить ее из зашифрованного файла паролей, то это означает, что ключ будет храниться или закодирован где-то еще, так что это не намного лучше, чем хранить их в ясности (если вы не предложите пользователь для ключа, но затем вы вернетесь к той же проблеме). У вас будет такая же проблема, если вы хотите вытащить пароль из базы данных - плюс, тогда вам нужно будет убедиться, что эти источники данных также безопасны ... – mpobrien

+0

Очевидно, есть школа мысли там, где утверждается, что файл с расшифрованным паролем по-прежнему «находится в ясности» ... – praspa

+0

Если файл зашифрован, но ключ находится где-то в пределах досягаемости в системе, его нельзя считать безопасно зашифрованным. – mpobrien

0

В ответ на предложение переменные окружения выше, переменные среды под Linux доступны в:

/proc/[pid]/environ 

Таким образом, открытого текста пароля в переменная среды может быть прочитана тривиально корнем или владельцем процесса tomcat.

Для получения дополнительной информации см https://serverfault.com/questions/133147/proc-pid-environ-missing-variables

Это сообщение относится как комментарий к другому ответу. Но у меня еще нет репутации, чтобы добавлять комментарии; Это мой первый пост. Я извиняюсь. Я чувствовал, что последствия безопасности пароля открытого текста в среде гарантировали ответ.

Смежные вопросы