将密码存储在磁盘上的安全策略

标签 security unix passwords cryptography

我正在构建一套需要定期访问数据库的批处理作业,这些作业在 Solaris 10 机器上运行。由于(不可更改的)设计约束,我们需要使用某个程序来连接它。所述界面要求我们通过命令行传递纯文本密码以连接到数据库。这是一种糟糕的安全做法,但我们坚持下去。

我正在努力确保我们的事情得到妥善保护。由于处理是自动化的(即我们不能提示输入密码),而且我不能在磁盘之外存储任何东西,所以我需要一种安全存储密码的策略。

以下是一些基本规则

  • 该系统有多个用户。
  • 我们可以假设我们的权限得到了适当的执行(即,如果带有 a 的文件被修改为 600,它将无法公开读取)
  • 我不介意任何具有 super 用户访问权限的人查看我们存储的密码

  • 这是我到目前为止所拥有的
  • 将密码存储在 password.txt
  • $chmod 600 密码.txt
  • 进程在需要时从 password.txt 中读取
  • 不再需要时用零覆盖缓冲区

  • 虽然我确信有更好的方法。

    最佳答案

    这不是密码学的解决方案。无论使用何种密码,攻击者都可以平等地访问 key 。 Cyrpto 并不能解决所有问题。

    chmod 400 是最好的,这使它只读。 chmod 600 是读写,这可能是也可能不是要求。还要确保它被需要它的过程所控制。这真的是你能做的最好的。即使您与其他用户共享机器,他们也不应该能够访问它。希望这是一台专用机器,在这种情况下没有太大的威胁。 SELinux 或 AppArmor 将帮助加强系统免受跨进程/跨用户攻击。

    编辑:
    shred是您安全删除文件所需的工具。

    编辑:根据 Moron/Mike 的评论,unix 命令 ps aux将显示所有正在运行的进程以及用于调用它们的命令。例如,以下命令将公开给系统上的所有用户:wget ftp://user:password@someserver/somefile.ext .一个安全的替代方法是使用 CURL 库。您还应该禁用您的 shell 历史记录。在 bash 中,您可以通过设置环境变量 export HISTFILE= 来做到这一点。

    关于将密码存储在磁盘上的安全策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2868416/

    相关文章:

    C- 服务器/客户端,等待其他客户端然后退出

    unix - 使用 AWK/SED 根据唯一 ID 连接两个变量

    php mail onclick on link执行mysql命令

    c# - 如何存储数据库密码

    php - Argon2id 如何在 PHP 中存储盐?

    c - 缓冲区溢出在 x86 上需要 16 个字节,但在 x64 上需要 29 个字节

    java - Spring Controller 下载文件不受文件系统限制

    linux - 如何在文件中仅添加带有制表符/空格的那些行,带有 esc 字符?

    php - 如何防止 PHP 中的 SQL 注入(inject)?

    ruby-on-rails - 从控制台调用 Rails Controller (传递凭据和/或 session ID)