Python 通过明文文件或命令行安全地将凭据传递给程序

Python 通过明文文件或命令行安全地将凭据传递给程序,python,security,passwords,pipe,Python,Security,Passwords,Pipe,我有一个程序(不是我写的),我想使用。它使用我想保密的用户名和密码对在线服务进行身份验证。身份验证信息可以通过两种方式传递给程序:直接作为命令行参数传递,或者通过明文配置文件传递,这两种方式都不是特别安全的 我想写一个Python脚本来管理这个程序的启动,并使我的凭证远离机器其他用户的窥视。我正在Linux环境中运行。我对命令行方法的担忧是,用于运行程序的命令行通过/proc文件系统对其他用户可见。同样,纯文本配置文件可能容易被具有相应权限的人(如系统管理员)读取 有没有人对这样做的好方法有什么

我有一个程序(不是我写的),我想使用。它使用我想保密的用户名和密码对在线服务进行身份验证。身份验证信息可以通过两种方式传递给程序:直接作为命令行参数传递,或者通过明文配置文件传递,这两种方式都不是特别安全的

我想写一个Python脚本来管理这个程序的启动,并使我的凭证远离机器其他用户的窥视。我正在Linux环境中运行。我对命令行方法的担忧是,用于运行程序的命令行通过
/proc
文件系统对其他用户可见。同样,纯文本配置文件可能容易被具有相应权限的人(如系统管理员)读取


有没有人对这样做的好方法有什么建议?如果我有办法将命令行中使用的参数与系统的其余部分区分开来,或者有办法生成一个只需读取一次的配置文件(从概念上讲,如果我可以将配置数据从脚本传输到程序),我会避免出现我的凭证可能被系统上的其他人读取的情况。

这是一个棘手的问题。如果您可以访问相关程序的源代码,则可以在启动后更改argv[0]。在大多数*nix版本中,这都会起作用

从安全角度来看,配置文件方法可能更好

如果可以在运行时指定配置文件,则可以生成临时文件(请参见mkstemp),在其中写入密码,然后调用子流程。您甚至可以添加一个小延迟(给子流程时间来完成它的工作),甚至可能删除配置文件


当然,最好的解决方案是将相关程序更改为从stdin读取密码(但听起来您已经知道了)

在这种情况下,您唯一能做的就是将凭据存储在文本文件中,然后拒绝机器的所有其他用户读取或写入密码的权限。实际上,只为这个脚本创建一个用户。加密没有多大作用,因为您仍然需要在脚本中保留密钥,或者脚本可以在某个地方读取密钥,所以这是相同的基本攻击。

它们在您的python脚本中是否仍然可见?抱歉,我想详细说明一下。我的计划是将凭据存储在Python脚本的加密配置文件中,这样它们就不会以明文形式存储在任何地方。然后密钥不会仍然存储在Python脚本中,从而允许任何具有这两种权限的人解密配置文件并检索原始内容吗?我明白你的意思了。假设我可以安全地将凭据传递给控制Python脚本。我主要关心的是如何将它们提供给外部程序,而不将明文信息持久地放在文件系统中。