问题 在Linux / UNIX上的纯文本文件中隐藏网络代理密码


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

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

我意识到这一点 apt.conf 你可以设置 chmod 600 (默认情况下,它不是Ubuntu / Debian!)但是在我们的系统中,有些人需要root权限。

我也意识到从技术上来说,从root用户那里获取密码是不可能的,但是我想知道是否有办法 遮蔽 防止意外发现的密码。 Windows以管理员身份运行,但以某种方式存储网络密码(可能以某种方式存储在注册表深处),因此在典型使用中,您不会在纯文本中偶然发现它

我只是问,从前几天开始,我在比较系统间的配置文件时,完全偶然发现了这些人的密码。

@monjardin - 公共密钥认证不是这个网络的替代品我害怕。此外,我怀疑大多数命令行工具都支持它。

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


8192
2017-08-20 21:56


起源



答案:


使用以下方法,您永远不必以纯文本格式保存代理密码。只要您需要http / https / ftp访问权限,您就必须以交互方式输入密码:

  • 使用openssl将纯文本代理密码加密到文件中,例如AES256加密:

openssl enc -aes-256-cbc -in pw.txt -out pw.bin

  • 使用(不同的)密码来保护编码文件
  • 删除纯文本pw.txt
  • 在例如创建别名〜/ .alias设置你的http_proxy / https_proxy / ftp_proxy环境变量(为$ USER / proxy / $ PORT设置合适的值)

别名myproxy ='PW =`openssl aes-256-cbc -d -in pw.bin`; PROXY = “HTTP:// $ USER:$ @ PW代理:$ PORT”; export http_proxy = $ PROXY; export https_proxy = $ PROXY;导出ftp_proxy = $ PROXY'

  • 您应该将此文件提取到正常的shell环境中(在某些系统上,这是自动完成的)
  • 输入'myproxy'并输入用于加密文件的openssl密码
  • 完成。

注意: 在shell会话期间,密码在用户环境中可用(并且可读)。如果您想在使用后从环境中清除它,可以使用另一个别名:

alias clearproxy ='export http_proxy =; export https_proxy =;出口   ftp_proxy这=”


7
2018-01-08 13:18



请注意,你可以使用 read -s PW 在“myproxy”中实现类似的结果(只需在每次需要时从命令行读取密码) - FabienAndre


答案:


使用以下方法,您永远不必以纯文本格式保存代理密码。只要您需要http / https / ftp访问权限,您就必须以交互方式输入密码:

  • 使用openssl将纯文本代理密码加密到文件中,例如AES256加密:

openssl enc -aes-256-cbc -in pw.txt -out pw.bin

  • 使用(不同的)密码来保护编码文件
  • 删除纯文本pw.txt
  • 在例如创建别名〜/ .alias设置你的http_proxy / https_proxy / ftp_proxy环境变量(为$ USER / proxy / $ PORT设置合适的值)

别名myproxy ='PW =`openssl aes-256-cbc -d -in pw.bin`; PROXY = “HTTP:// $ USER:$ @ PW代理:$ PORT”; export http_proxy = $ PROXY; export https_proxy = $ PROXY;导出ftp_proxy = $ PROXY'

  • 您应该将此文件提取到正常的shell环境中(在某些系统上,这是自动完成的)
  • 输入'myproxy'并输入用于加密文件的openssl密码
  • 完成。

注意: 在shell会话期间,密码在用户环境中可用(并且可读)。如果您想在使用后从环境中清除它,可以使用另一个别名:

alias clearproxy ='export http_proxy =; export https_proxy =;出口   ftp_proxy这=”


7
2018-01-08 13:18



请注意,你可以使用 read -s PW 在“myproxy”中实现类似的结果(只需在每次需要时从命令行读取密码) - FabienAndre


喜欢与之集成的应用程序 Gnome Keyring。另一种可能性是使用SSH隧道到外部机器并通过它运行应用程序。看看吧 -D用于创建本地SOCKS代理接口的选项,而不是单个服务 -L 前锋。


3
2017-08-21 14:57





有很多方法可以隐藏密码:您可以将凭据存储在rot13格式或BASE64中,或者使用相同的密码 密码加扰算法 CVS使用的。真正的技巧是让您的应用程序了解加扰算法。

对于环境变量 ~/.profile 你可以存储它们编码,然后在设置变量之前解码它们,例如:

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

那将是固定的 creds 至 foobar:password,然后你可以嵌入 http_proxy 等等

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


3
2017-08-25 21:06





我做了修改后的解决方案:

编辑 /etc/bash.bashrc 并添加以下行:

alias myproxy='read -p "Username: " USER;read -s -p "Password: " PW
PROXY="$USER:$PW@proxy.com:80";
export http_proxy=http://$PROXY;export Proxy=$http_proxy;export https_proxy=https://$PROXY;export ftp_proxy=ftp://$PROXY'

从下次登录进入 myproxy 并输入您的用户/密码组合!现在合作 sudo -E

-E, - pre-env                指示用户希望保留其安全策略的安全策略                现有的环境变量。

例如 sudo -E apt-get update

备注: 代理设置仅在shell会话期间有效


2
2018-05-31 13:38



我更喜欢这种解决方案,因为它更简单。 - Radhwane Chebaane


除非您使用的特定工具允许使用模糊格式,或者您可以创建某种工作流程,以便从模糊处理到按需处理,否则您可能会失败。

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

关于后一个选项,我们在工作中想出了一个“反向加密”密码编码,我们用它来做这样的事情。这只是混淆,因为解码pw所需的所有数据都存储在编码字符串中,但它可以防止人们意外地以纯文本形式查看密码。例如,您可以以这种格式存储上述密码之一,然后编写apt的包装器,动态构建apt.conf,调用真正的apt,并在exit删除apt.conf。你仍然会用明文的pw一段时间,但它最小化了窗口。


1
2017-08-21 15:13





公钥认证是否适合您?


0
2017-08-20 22:31





只要这三件事都是真的,你就不幸了:

  1. 服务器需要Web访问
  2. 用户需要对服务器(root)的绝对控制
  3. 您不希望用户拥有服务器的Web访问权限

如果你不能删除#2或#3,你唯一的选择是删除#1。设置托管所有软件更新的内部服务器。保持一个锁定与其他用户,并不允许其他服务器具有Web访问权限。

你试图做的其他事情只是在愚弄自己。


0
2017-08-21 12:26





我们通过不在rpm,apt或其他类似的更新(病毒数据库,Windows东西等)上要求代理密码来解决这个问题 这是添加到代理的已知存储库的小白名单。


0
2017-09-17 14:57



不幸的是,我对网络上的代理政策没有任何发言权。我在这两所大学都遇到过同样的情况。 - Brendan


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

一个明显的攻击向量是由特权用户修改此本地代理以使用输入的密码执行其他操作(因为他们可以使用其他任何内容,例如请求它的电子邮件客户端或窗口系统本身),但至少你是' d可以避免无意中观看。


0
2017-11-18 21:01