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

Rub*_*ben 7 security r

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

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

  1. 脚本中的纯文本存储(可能经常最终被共享,或者在Dropbox中)
  2. 配置脚本中的纯文本存储
  3. 你可以做password = readline("Password: ")但当然密码最终以控制台中的明文形式出现(因此在控制台日志等中),所以不妨将它存储在纯文本配置文件中.
  4. 我发现这个小技巧可以避免在终端中显示密码,但system("stty -echo")在OS X Mavericks上运行会导致错误stty: stdin isn't a terminal,所以我想它不会特别便携.
  5. tcltk.有不幸的效果使Rstudio崩溃并且难以安装.
  6. 钥匙扣.它不是在CRAN上,所以我认为我不能将它作为一线方法使用,我还想更详细地了解密码存储在各种系统中的位置和方式(即最终会以明文形式显示)视窗?).
  7. 访问令牌,OAuth等似乎也有类似的问题.

我不知道任何使用PGP进行连接的R包?对于新手用户来说可能也有点困难.

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

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

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

Mir*_*ert 1

一些安全解决您的问题的建议。这些解决方案适用于所有编程语言。

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

对于大多数应用来说,第 2 点就足够了。

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

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

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