2016-12-05 167 views
1

我有有密码,在命令中使用明文shell脚本:shell脚本调用另一个脚本密码

--username = 'USER' 
--password ='abc100' 

我不希望密码采用明文形式在这里shell脚本。有没有一种方法可以保持这个shell脚本密码的保护或不以明文形式传递密码并引用另一个受密码保护的文件?

+0

听起来像一个愚蠢的命令,希望密码作为参数。你指的是什么命令? – andlrc

+0

您是否允许提示用户输入密码?如果是这样,您可以使用'read -s'将它存储在命令和变量中 – Inian

+0

@andlrc - 我有一个云调用命令,它需要我传递我想要登录的云实例的密码。 –

回答

1

要很好地解决这个问题,了解这个密码代表什么以及妥协会带来什么样的风险是非常重要的。了解谁可以访问存储该脚本和密码文件的计算机,设置机器的方式,需要运行此脚本的人等,这一点也很重要。如果不理解完整的需求,很难给出正确的答案和风险。

假设损害此密码可能会产生严重的负面影响,并假设许多不应该有此密码的人需要运行此脚本,但在我看来,将此密码存储在每个需要运行的人的机器。您可能需要考虑让拥有更多受限访问权限的机器数量更少,并存储此密码,并通过使用OAuthBearer tokens用于自动访问)等身份验证机制的Web服务提供脚本的功能。然后,问题就变成了个人用户如何访问调用Web服务所需的承载令牌;虽然承载令牌也很敏感,但它们至少对每个用户都是唯一的(提供一种更好地检测折中和滥用的方法,尽管这仍然是您需要实现的)。在这个意义上,这个问题与原来的问题类似,但是风险较低。

假设我们现在正在谈论存储持票人令牌,您如何存储它将取决于有多少不同的用户可以访问同一台机器/文件系统。例如,如果许多不同的人可以在同一台机器上拥有root访问权限,那么您可以做的事情很少。但是,如果每台计算机只有一个用户,并且只有该计算机的所有者才能获得root权限,则可以使用UNIX权限来限制/控制对文件的访问。例如,您可以创建一个专用于此特定脚本的用户+组,并让该脚本始终以该权限运行(例如,通过粘性位),并以不可读的方式存储持票人令牌信息用户/组(作为防止同一用户运行的其他程序访问该凭证的方式)。在许多人使用同一台计算机的设置中,可以信任可以作为root用户运行的人员,您可以将凭证存储在用户主目录中的文件夹中,该文件夹仅供该用户访问(并且不可读/可写同一组或其他用户);但是,这确实会冒该用户读取数据所运行的其他程序的风险。您可以尝试让脚本加密/解密磁盘上文件的内容(例如,将密钥嵌入到脚本中对数据进行加密/解密),但除非脚本被高度模糊处理并定期通过旋转该密钥更新,否则会做的很少。您还可以对不记名令牌施加短暂期满,以便令牌需要经常刷新,作为其他程序在其不再使用后滥用令牌的缓解措施。

相关问题