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