【问题标题】:Shell script to call another script for passwordShell脚本调用另一个脚本来获取密码
【发布时间】:2016-12-05 07:17:07
【问题描述】:

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

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

我不希望密码在 shell 脚本中以明文形式显示。有没有办法让这个 shell 脚本密码受到保护,或者不以明文形式传递密码并引用另一个受密码保护的文件?

【问题讨论】:

  • 听起来像是一个需要密码作为参数的愚蠢命令。你指的是什么命令?
  • 是否允许提示用户输入密码?如果是这样,您可以使用read -s 将其存储在命令和变量中
  • @andlrc - 我有一个云调用命令,需要我传递我要登录的云实例的密码。
  • 为什么不通过参数传递用户名和密码呢?一直到根?
  • cifs.mount 等采用的一种方案是在用户主目录中的已知位置获取文件,该位置对该用户设置为只读。 (例如,[ -r "$HOME/.config/credentials" ] && . "$HOME/.config/credentials"credentials 文件上设置了chmod 0600 的权限)您还可以将文件名作为参数传递给脚本。 (当然,该脚本必须以普通用户身份运行才能使该方案工作)

标签: bash shell


【解决方案1】:

要很好地解决这个问题,了解这个密码的含义以及它所带来的风险是非常重要的。了解谁有权访问存储此脚本和密码文件的机器、如何设置机器、谁需要运行此脚本等也很重要。如果不了解全部要求,很难给出一个好的答案和风险。

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

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

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多