隐藏 ps 中命令的参数

隐藏 ps 中命令的参数

我在 Linux 服务器上运行一个应用程序,当我运行该应用程序时,我以命令行形式提供密码,如下所示:

 ./myapplication --smtp-password mypassword

在我们的应用程序中,到目前为止我们还没有构建 加密/解密 ,因为它应该是一个非常简单的监控应用程序,并且它是非常简单的“ping”和运行状况检查并在失败时发送电子邮件。

任何管理员(我们还有另外三名管理员)都可以使用 ps 列出进程,查看命令参数,并找出密码。

有办法隐藏吗?

答案1

更好的方法是重写,myapplication以便它通过其他方式(如标准输入)获取密码。环境是另一个选项,但对于具有相同 euid(或 euid 0)的进程来说,通过 .environ 仍然可见/proc/<pid>/environ

如果不是,在 4.2 之前版本的 Linux 上,您可以通过确保密码不在命令行的前 4096 字节中来限制暴露,这样其他进程就无法通过读取获取它/proc/<pid>/cmdline(就像ps这样做)。 4.2及以上版本不再截断/proc/<pid>/cmdline

例如,与zsh

.${(l:4094::/:):-myapplication} --smtp-password=secret

运行 myapplication 时,第一个参数的大小为 4095 字节(4096 字节会超出 PATH_MAX 限制),类似于.//////[...]///myapplication,因此您的密码将超出 4095 断点。

请注意,审核日志和 shell 历史文件是命令行上传递的秘密字符串的其他关注领域。

答案2

在Linux系统上,您可以通过/proc使用适当的挂载来隐藏进程信息hidepid设置,例如mount -o remount /proc -o hidepid=2.但是,这不会向具有 root 访问权限的任何人隐藏进程信息。更好的解决方案是不在命令行中包含敏感数据。

相关内容