首页 > 解决方案 > 通过命令行安全地发送密码而不暴露在 ps/wmic (Windows,Unix) 中

问题描述

我们在 Windows 和 Unix 中有一个启动器应用程序,它执行(使用 exec 系统调用启动应用程序)一个应用程序,如 RDP、putty、MSSQL。为了调用它,我们将参数传递给诸如用户名、密码、IP 之类的参数。最近我们发现,使用 wmic 或 ps 可以找出传递给它的参数,从而暴露密码等敏感信息。有什么方法可以掩盖这些密码或隐藏所有参数。注意:我的启动器从其他服务获取参数,因此在调用应用程序后要求输入密码不是一个选项!密码必须作为参数传递给应用程序。有什么解决办法吗?

标签: securityprocessexecwmicps

解决方案


这是不可能安全地传递程序参数的(至少在 Linux 上不能以可靠的方式)。

一种可能的解决方法是传递包含该密码的文件名(或其他一些资源 - 例如对某些数据库条目的一些“引用”),或使用其他一些进程间通信工具(例如在 Linux 上,fifo(7)shm_overview(7)pipe(7)unix(7)等...) 来传递这些敏感信息。您也可以考虑使用环境变量(参见environ(7)getenv(3))。

在 Linux 上,还可以查看proc(5)以了解它能够显示关于进程的内容 - 通过/proc/1234/pid 1234 的进程。也许你想要seccomp设施。

在 Unix 上,请注意setuid机制-难以理解-。小心使用它(它是大多数安全或身份验证机制的基本块,例如sudo and login),因为一个简单的错误可能会打开一个巨大的漏洞

对于编写在 Unix 和 Windows 上都可以工作的软件,我建议在某个文件(例如 in /tmp/secretpassword)中传递密码,并通过一些程序参数给出该文件的名称/tmp/secretpassword(或D:\foo\bar在 Windows 上的某些名称),并确保明智地使用该文件权限机制,以确保不需要文件的人无法读取该文件。


推荐阅读