我有一个Tomcat应用程序,启动时需要多个密码 我当前的配置使用Java Properties对象从password.conf文件加载密码。
现在要求系统中的“清除”不允许使用密码。我曾建议加密密码文件,但这不是一个选项。
如果Tomcat的启动脚本可以简单地从命令行读取用户密钥的密码并将其提供给我的应用程序,那将是理想的选择。
由于Tomcat作为守护进程启动,我认为我不能利用任何像扫描器这样的Java命令行I / O来读取密码。
有没有人有任何聪明的解决方案?
由于 PR
答案 0 :(得分:3)
这里是两个解决方案是我能想到的一个解决方案:
Easy - 在shell脚本包装器中设置环境变量,并将其作为系统属性读取。即:
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 删除了加密密码的想法,因为它可能会阻止某人确定密码,但不会阻止某人使用加密密码来启动应用程序。
编辑2:根据@mpobrien建议纳入stty -echo
答案 1 :(得分:0)
您可以修改tomcat的启动脚本,将命令行参数传递给start命令本身。这些应该是-Dkey = value的形式。这将允许您在启动时设置系统属性。您的应用程序可以通过System.getProperty(名称)读取这些内容以获取密码,或者如果未提供该属性,则无法启动。
请注意,某些系统上的tomcat启动命令可能会记录到磁盘上,因此也会记录-D标志,并记录您的密码。您只需确保未记录此内容。
答案 2 :(得分:0)
嗯,聪明的解决方案是加密的密码文件,为什么会被排除?
另一种解决方案可能是从数据库或其他服务器读取密码。
答案 3 :(得分:0)
为响应上面的环境变量建议,linux下的环境变量可用于:
/proc/[pid]/environ
因此,环境变量中的明文密码可以由root或tomcat进程的所有者轻松读取。
有关详细信息,请参阅https://serverfault.com/questions/133147/proc-pid-environ-missing-variables
这篇文章属于对另一个答案的评论。但我还没有声誉添加评论;这是我的第一篇文章。我道歉。我觉得环境中明文密码的安全性后果需要回应。