在类似Linux / UNIX的纯文本文件中隐藏网络代理密码

时间:2020-03-05 18:41:19  来源:igfitidea点击:

通常,在大型网络中,计算机需要在经过身份验证的代理之后进行操作,与外界的任何连接都需要用户名/密码,这通常是用户登录电子邮件,工作站等所使用的密码。

这意味着必须将网络密码以及通常在〜/ .profile中定义的环境变量http_proxy,ftp_proxy和https_proxy放置在apt.conf文件中。

我意识到,使用apt.conf可以设置chmod 600(在Ubuntu / Debian上默认不是这样),但是在我们的系统上,有些人需要root特权。

我也意识到,从具有root用户访问权限的人那里获取密码在技术上是不可能的,但是我想知道是否存在一种使密码变得模糊以防止意外发现的方法。 Windows以管理员身份与用户一起运行,但以某种方式存储网络密码(可能以某种方式隐藏在注册表的深处),因此在典型的使用中,我们不会以纯文本形式偶然浏览

我只是从那天起才问,在跨系统比较配置文件时,我完全是偶然地以这种方式发现了别人的密码。

恐怕@monjardin不能在此网络上使用公钥身份验证。另外,我怀疑大多数命令行工具都支持它。

@Neall我不介意其他具有Web访问权限的用户,他们可以使用我的凭据访问Web,我只是不希望他们在我的密码中以纯文本形式出现。

解决方案

回答

公钥身份验证是否对我们有效?

回答

只要这三个条件都是正确的,我们就很不走运:

  • 服务器需要Web访问
  • 用户需要对服务器(根)的绝对控制
  • 我们不希望用户具有服务器的Web访问权限

如果我们无法删除#2或者#3,则唯一的选择是删除#1. 设置一个托管所有软件更新的内部服务器。使该服务器与其他用户保持锁定,并且不允许其他服务器进行Web访问。

我们尝试做的其他任何事情只是在欺骗自己。

回答

首选与Gnome Keyring集成的应用程序。另一种可能性是使用SSH隧道连接到外部计算机,并通过该隧道运行应用程序。看一下创建本地SOCKS代理接口的-D选项,而不是单服务-L转发。

回答

除非我们使用的特定工具允许使用混淆的格式,或者我们可以创建某种工作流以将混淆的工作流按需转换为普通的工作流,否则我们可能会很不幸。

在这种情况下,我看到的一件事是创建每个服务器,每个用户或者每个服务器/每个用户的专用凭据,这些凭据只能从特定IP访问代理。它并不能解决核心混淆问题,但是可以减轻别人看到密码的影响,因为它的价值很小。

关于后一种选择,我们在工作中提出了一种"反向加密"密码编码,用于类似这样的事情。这只是混淆,因为对pw进行解码所需的所有数据都存储在编码的字符串中,但是它可以防止人们意外地看到纯文本密码。因此,例如,我们可以以此格式存储上述密码之一,然后为apt编写包装程序,以动态构建apt.conf,调用真正的apt,然后在退出时删除apt.conf。我们仍然会以纯文本形式使用pw一段时间,但是它将窗口最小化。

回答

有很多方法可以使密码模糊:我们可以将证书存储为rot13格式或者BASE64,或者使用与CVS相同的密码加密算法。但是,真正的技巧是使应用程序意识到加扰算法。

对于〜/ .profile中的环境变量,我们可以将其编码后存储,然后在设置变量之前对其进行解码,例如:

encodedcreds="sbbone:cnffjbeq"
creds=`echo "$encodedcreds" | tr n-za-mN-ZA-M a-zA-Z`

这会将creds设置为foobar:password,然后我们可以将其嵌入http_proxy等中。

我假设我们知道这一点,但是需要重复:这不会增加任何安全性。它只是防止意外看到另一个用户的密码。

回答

我们通过不要求rpm,apt或者其他类似更新(病毒数据库,Windows程序等)的代理密码来解决此问题
那是要添加到代理中的已知存储库的一小部分白名单。

回答

我想我们可以创建一个本地代理,通过它指向这些工具,然后让本地代理交互地询问用户要使用的外部代理密码。它可以选择在混淆的内部存储中记住这一点几分钟。

一个明显的攻击媒介是特权用户修改此本地代理,以使用输入的密码执行其他操作(就像其他操作,例如请求它的电子邮件客户端或者窗口系统本身一样),但至少我们会d避免疏忽观看。