当前位置: 首页 > 科技观察

使用此Python模块输入不可见的密码

时间:2023-03-13 13:59:05 科技观察

使用GPG和Python的getpass模块为您的密码提供额外的安全保护。密码对程序员尤为重要。您不应该以未加密的方式存储它们,也不应该向用户显示他们在输入密码时输入的内容。当我决定提高笔记本电脑的安全性时,这对我来说尤为重要。我加密了我的主目录,但是当我登录时,任何以明文形式存储在配置文件中的密码都可能暴露给窥探者。具体来说,我使用一个名为Mutt的应用程序作为我的电子邮件客户端。它允许我在我的Linux终端中阅读和撰写电子邮件,但通常它需要在其配置文件中输入密码。我限制了我的Mutt配置文件的权限,这样只有我能看到它,我是我笔记本电脑的唯一用户,所以我并不真的担心经过身份验证的用户意外看到我的配置文件。相反,我想保护自己,无论是为了吹牛的权利还是版本控制,都不会半心半意地将我的配置发布到网上并泄露我的密码。此外,虽然我不希望我的系统上有不速之客,但我确实想确保入侵者无法仅通过在我的配置上运行cat来获取我的密码。PythonGnuPGPython模块python-gnupg是gpg应用程序的Python包装器。该模块的名称是python-gnupg,您不应将它与名为gnupg的模块混淆。GnuPG(GPG)是Linux的默认加密系统,我从2009年左右开始使用它。我对它很熟悉并且对其安全性有很高的信任度。我决定将我的密码输入Mutt的最佳方法是将我的密码存储在加密的GPG文件中,创建一个GPG密码提示我解锁加密文件,然后将密码提供给Mutt(实际上是offlineimap命令,我用它来同步我的笔记本电脑和我的电子邮件服务器)。在Python中获取用户输入非常容易。调用输入,无论用户输入什么,都将存储为一个变量:print("Enterpassword:")myinput=input()print("Youentered:",myinput)我的问题是,当我在terminal当在上输入密码时,任何人都可以看到我输入的所有内容,任何人都可以看到我的肩膀或滚动浏览我的终端历史记录:$./test.pyEnterpassword:my-Complex-PassphraseEnternowithgetpass可见密码通常情况下,有是一个解决了我的问题的Python模块。这个模块是getpass4,从用户的角度来看,它的行为与输入完全一样,只是它不显示用户输入的内容。您可以使用pip安装这两个模块:$python-mpipinstall--userpython-gnupggetpass4这是我用于创建密码提示的Python脚本:#!/usr/bin/envpython#bySethKenlon#GPLv3#installdeps:#python3-mpipinstall--userpython-gnupggetpass4importgnupgimportgetpassfrompathlibimportPathdefget_api_pass():homedir=str(Path.home())gpg=gnupg.GPG(gnupghome=os.path.join(homedir,".gnupg"),use_agent=True)passwd=getpass.getpass(prompt="输入你的GnuPG密码:",stream=None)withopen(os.path.join(homedir,'.mutt','pass.gpg'),'rb')asf:apipass=(gpg.decrypt_file(f,passphrase=passwd))f.close()returnstr(apipass)if__name__=="__main__":apipass=get_api_pass()print(apipass)如果你想试试,把文件保存为password_prompt.py。如果您使用offlineimap并希望在您自己的密码输入中使用此方案,请将其保存在您可以在.offlineimaprc文件中指向offlineimap的位置(我使用~/.mutt/password_prompt.py)。测试密码提示要查看脚本的运行情况,您首先必须创建一个加密文件(我假设您已经设置了GPG):$echo"helloworld">pass$gpg--encryptpass$mvpass.gpg~/.mutt/通过.gpg$rmpass现在运行Python脚本:$python~/.mutt/password_prompt.pyEnteryourGPGpassword:helloworld键入时没有任何显示,但只要正确输入GPG密码,就会看到测试消息。将密码提示与offlineimap集成我需要将我的新提示与offlineimap命令集成。我为这个脚本选择了Python,因为我知道offlineimap可以调用Python程序。如果您是offlineimap用户,您会明白唯一需要的“集成”是更改.offlineimaprc文件中的两行。首先,添加一行引用Python文件:pythonfile=~/.mutt/password_prompt.py然后将.offlineimaprc中的remotepasseval行更改为调用password_prompt.py中的get_api_pass()函数:remotepasseval=get_api_pass()不在配置文件再次密码!安全问题考虑个人计算机的安全问题有时会让人感到偏执。您的SSH配置真的需要限制为600吗?隐藏在名为.mutt的微不足道的电子邮件中的密码真的很重要吗?也许不会。然而,知道我没有悄悄地在我的配置文件中隐藏敏感数据,这让我更容易将文件提交到公共Git存储库,复制和粘贴片段以支持论坛,并将它们作为我所知道的真实有用的配置文件共享。仅此一点,安全性的提高让我的生活变得轻松多了。有这么多优秀的Python模块可以提供帮助,这很容易做到。