我正在提取处理注册的Web应用程序的一部分,另一部分将被重写。
这个想法是注册部分可以作为单独的应用程序存在,与用于创建和设置帐户的应用程序的其余部分的接口。显然有很多方法可以做到这一点,其中大多数是基于网络的解决方案,如SOAP,但我想使用更简单的解决方案:安装脚本。
值得关注的是,某些敏感数据,特别是新帐户的管理员密码,将通过bash传递。
我正在考虑在应用程序之间共享一个小类,以便密码可以传递已经哈希,但我也必须传递盐,所以它似乎仍然是(小)安全风险。其中一个问题是bash日志记录(我可以为单个命令禁用它吗?)但我确定还有其他问题吗?
这将在同一个私人服务器上,所以风险似乎很小,但我不想冒任何机会。
感谢。
答案 0 :(得分:2)
使用$ HISTFILE环境变量,取消设置(这适用于所有用户):
echo "unset HISTFILE" >> /etc/profile
然后再将其重新设定。
有关$ HISTFILE变量的更多信息:http://linux.about.com/cs/linux101/g/histfileenviron.htm
希望这有帮助!
答案 1 :(得分:2)
来自bash
的手册页:
<强> HISTIGNORE 强> 用冒号分隔的模式列表,用于决定哪些模式 命令 行应保存在历史列表中。每种模式 是 锚定在行的开头并且必须匹配 com- 完整行(不附加隐含的'*')。每种模式 是 在指定的检查之后对线进行测试 应用HISTCONTROL。除了正常的外壳 图案 匹配字符,'&amp;'匹配以前的历史记录行。 “&安培;” 可以使用反斜杠进行转义;反斜杠是 去除 在尝试比赛之前。第二个及以后 的线条 多行复合命令未经过测试,并已添加 到了 历史,无论HISTIGNORE的价值如何。
或者,根据您的评论,您可以将密码存储在受保护的文件中,然后从中读取。
答案 2 :(得分:1)
将盐透明处理是没有问题的(盐通常以透明方式存储),盐的目的是避免始终使用相同的散列进行相同的密码散列(因此具有相同密码的用户将具有相同的散列,对于每个可能的密码,彩虹表只需要一个哈希值。)
更有问题的是通过命令行参数传递敏感数据,同一个框中的窃听者可以看到任何命令的参数(在Linux上它们出现在/ proc // cmdline上,在大多数Unix上都可以看到{ {1}};某些系统将/ proc //上的权限仅限于进程的ps
以确保安全性。
您可以做的是通过文件传递敏感信息,不要忘记在创建文件之前将owner
设置为非常严格的设置。
答案 3 :(得分:1)
Bash通常不记录在脚本中执行的命令,而只记录在交互式会话中(取决于适当的设置)。要显示此信息,请使用以下脚本:
#!/bin/bash
echo "-- shopt --"
shopt | grep -i hist
echo "-- set --"
set -o | grep -i hist
echo "--vars --"
for v in ${!HIST*}
do
echo "$v=${!v}"
done
像这样运行:
$ ./histshow
并将输出与来源的输出进行比较:
$ . ./histshow
在第一种情况下,请注意HISTFILE
未设置且set
选项history
为off
。在第二种情况下,获取脚本会在交互式会话中运行它,并显示您的设置。
我只能通过在脚本中执行set -o history
并通过设置HISTFILE
然后进行显式{{}来将其历史记录记录到文件中来使脚本保留内存中的历史记录1}}。