最近,我一直在寻找在不通过命令行或不使用文件系统条目的情况下将敏感信息从一个进程传递到另一个进程(在进程启动时)的可能性。这是在 Linux 上,但这个问题也适用于其他系统。
特别是,访问 MySQL 服务器的密码应从脚本传递到 MySQL 客户端。为此,您可以通过命令行-pPASSWORD
(在这种精确的情况下,MySQL 客户端程序非常友好,可以覆盖命令行文本,将可见的密码字符串替换为 ,XXX
但这是一个很糟糕的解决方案。
我考虑改用进程环境。该脚本在进程环境中设置密码,然后启动的子进程可以从那里读取它。事实上,MySQL 客户端允许这样做并查找环境变量MYSQL_PWD
。这看起来非常安全且优雅,因为除了 root 和流程所有者之外的任何人都无法咨询流程环境,至少据我所知。
但是,MySQL 5.1 手册指出:
这种 [通过环境] 指定 MySQL 密码的方法必须被认为是极其不安全的,不应使用。某些版本
ps
包括一个选项来显示正在运行的进程的环境。在某些系统上,如果您设置MYSQL_PWD
,您的密码会暴露给任何其他运行 ps 的用户。即使在没有这种版本的系统上ps
,假设没有其他方法可供用户检查进程环境也是不明智的。”
那么问题是:通过流程环境传递敏感数据真的不安全吗?是否有系统允许在不验证权限的情况下咨询另一个进程的环境?显然,超级用户可以随意获取密码,但话又说回来,他一开始就不需要它。