如何在R和服务器之间建立安全的密码保护连接

时间:2014-03-21 15:58:20

标签: r security

我编辑了这个问题,以澄清为什么我再次提出这个问题(我有弱Google-Fu,发现这些相当古老的1 2 3只有在发布后才会重复)。

访问我在野外看到的受密码保护的资源的方法。

  1. 脚本中的纯文本存储(可能经常最终被共享,或者在Dropbox中)
  2. 配置脚本中的纯文本存储
  3. 您可以执行password = readline("Password: ")但当然密码最终会以控制台中的明文形式出现(因此也会出现在控制台日志等中),因此也可以将其存储在纯文本配置文件中。
  4. 我发现这个little trick是为了避免在终端中显示密码,但在OS X Mavericks上运行system("stty -echo")会导致错误stty: stdin isn't a terminal,所以我想这不会特别便携式的。
  5. Using tcltk。导致Rstudio崩溃并难以安装的不幸影响。
  6. keychain。它不在CRAN上,所以我不认为我可以将它作为一线方法使用,我还想更详细地了解密码存储在各种系统中的位置和方式(即最终会以明文形式显示)视窗?)。
  7. 访问令牌,OAuth等似乎也有类似的问题。
  8. 我不知道任何使用PGP进行连接的R包?对于新手用户来说可能也有点困难。

    我主要不是要求自己,但我想为那些可能存储明文密码的非技术用户提供一些明智的默认设置,以便能够访问Dropbox中的敏感数据。

    与其他提出类似问题的人不同,如果我有更好的方法,我也可以改变服务器端的事情。

    我目前缺少最佳实践方法吗?我对交互式会话的关注是因为我认为大多数非技术类型都使用R,但当然如果它在例如knitr报告生成。

1 个答案:

答案 0 :(得分:1)

安全解决问题的一些建议。这些解决方案符合所有编程语言。

  1. 建立与不使用R的资源的安全连接,如SSL隧道。
  2. 如果您需要R中的安全密码来建立安全连接,那么您可以从安全配置文件中读取此密码,并在不再使用密码时删除此密码变量。安全配置文件是不属于您的代码存储库(Git,SVN,...)的配置文件。您必须独立于代码管理您的秘密。这意味着将您的代码和秘密分开。一种简单的方法是将您的私有和安全秘密放在您的私有和安全的用户主目录中。然后,您已将安全问题委派给操作系统。您的秘密现在保存为您的操作系统和主目录。请检查主目录的权限,如果已关闭则启用文件系统加密。请注意,这就像Maven处理密码一样。
  3. 如果加密密码/密码配置文件,您将获得更高的安全性。然后你有第二道防线。
  4. 对于大多数应用来说,第2点就足够了。

    请注意,请确保您的密码未随代码一起部署。您需要第二种方法来管理和部署您的秘密到生产系统。

    请注意,请确保如果您的程序卡住了,那么您的秘密就不再存在于内存中。

    请注意,始终使用算法进行加密。不要实现自己的安全算法,这是一项高度复杂的任务。更好地使用强加密算法的标准实现。