纯密码是通过我的 python 脚本记录的
plain Password is logged via my python script
我有一个示例 python 脚本:sample.py。该脚本将参数作为连接到某个远程服务器的用户名和密码。当我 运行 脚本 sample.py --username --password 时,密码被记录在 linux 消息文件中。我知道这是 linux 行为,但想知道我们是否可以在我的脚本中做任何事情来避免这种记录。我能想到的一种方法是以交互方式提供密码。还有其他建议吗?
这可能有帮助:
$ export HISTIGNORE="your_python_script_name *"
这需要在您调用脚本之前完成,因此您可能想要编写一个 shell 脚本,它只需调用此命令,然后使用参数调用您的 python 脚本。
Python 有 getpass 模块来处理用户和密码信息,尽管这些信息是按照您的建议以交互方式提供的,但具有额外的安全层。使用起来也很简单,有 getpass
和 getuser
方法可用。
示例:
import getpass
password = getpass.getpass() # Prompts "Password:" automatically
快速阅读此答案:Command lines will always be visible
简而言之,您不应将密码作为命令行参数传递,因为它们在很多地方都可见。 MySQL 例如,当您尝试执行您的建议时说 Warning: Using a password on the command line interface can be insecure.
。
通过 getpass
交互传递它肯定能解决问题。
另一种解决方案是复制 sudo -S
,这样您就可以通过标准输入(如果您喜欢冒险,也可以通过其他文件描述符)提供密码。那将变成:
import sys
sys.stdin.readline().rstrip()
rstrip
是删除尾随的新行( sudo -S 也期望),但它也会删除作为密码一部分的任何空格。如果不需要尾随换行:
import sys
sys.stdin.read()
另一种方法是使用环境变量。这依赖于 OS 安全性,但显然 valid 对于任何最近的 Linux,并且由 12 因素推荐。对于成熟的部署环境,这是我最喜欢的方法。
最后,还有将密码存储在文件中并依靠文件系统权限来控制访问的选项。在我看来,这有一种直截了当的简单性。
'best' 解决方案可能是将这些方法结合起来,在各种方法之间进行回退,并对最初使用的不安全方法发出 MySQL 式警告。
我发现最好的方法是通过 sudo 命令禁用它:
Cmnd_Alias 脚本 =
默认值!脚本!系统日志
sudoers.conf 中的上述几行应该有助于防止系统日志中的日志记录。
我有一个示例 python 脚本:sample.py。该脚本将参数作为连接到某个远程服务器的用户名和密码。当我 运行 脚本 sample.py --username --password 时,密码被记录在 linux 消息文件中。我知道这是 linux 行为,但想知道我们是否可以在我的脚本中做任何事情来避免这种记录。我能想到的一种方法是以交互方式提供密码。还有其他建议吗?
这可能有帮助:
$ export HISTIGNORE="your_python_script_name *"
这需要在您调用脚本之前完成,因此您可能想要编写一个 shell 脚本,它只需调用此命令,然后使用参数调用您的 python 脚本。
Python 有 getpass 模块来处理用户和密码信息,尽管这些信息是按照您的建议以交互方式提供的,但具有额外的安全层。使用起来也很简单,有 getpass
和 getuser
方法可用。
示例:
import getpass
password = getpass.getpass() # Prompts "Password:" automatically
快速阅读此答案:Command lines will always be visible
简而言之,您不应将密码作为命令行参数传递,因为它们在很多地方都可见。 MySQL 例如,当您尝试执行您的建议时说 Warning: Using a password on the command line interface can be insecure.
。
通过 getpass
交互传递它肯定能解决问题。
另一种解决方案是复制 sudo -S
,这样您就可以通过标准输入(如果您喜欢冒险,也可以通过其他文件描述符)提供密码。那将变成:
import sys
sys.stdin.readline().rstrip()
rstrip
是删除尾随的新行( sudo -S 也期望),但它也会删除作为密码一部分的任何空格。如果不需要尾随换行:
import sys
sys.stdin.read()
另一种方法是使用环境变量。这依赖于 OS 安全性,但显然 valid 对于任何最近的 Linux,并且由 12 因素推荐。对于成熟的部署环境,这是我最喜欢的方法。
最后,还有将密码存储在文件中并依靠文件系统权限来控制访问的选项。在我看来,这有一种直截了当的简单性。
'best' 解决方案可能是将这些方法结合起来,在各种方法之间进行回退,并对最初使用的不安全方法发出 MySQL 式警告。
我发现最好的方法是通过 sudo 命令禁用它: Cmnd_Alias 脚本 = 默认值!脚本!系统日志
sudoers.conf 中的上述几行应该有助于防止系统日志中的日志记录。