在Linux/UNIX上的纯文本文件中模糊网络代理密码


9

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

这意味着不必把网络密码在apt.conf文件以及通常的http_proxy, ftp_proxyhttps_proxy环境变量定义在~/.profile

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

我也意识到在技术上不可能从拥有root用户身份的人那里获得密码,但是我想知道是否有某种方法可以阻止密码以防止意外发现。 Windows以用户身份与管理员一起操作,但以某种方式存储网络密码(可能以某种方式存储在注册表中的深处),以便在典型使用情况下,您不会以纯文本绊倒它

我只问自那一天以后,我完全无意中发现,在比较跨系统的配置文件时,有人以这种方式删除密码。

@monjardin - 公钥认证不是这个网络上的替代方案,我很害怕。另外我怀疑它在大多数命令行工具中是受支持的。我不介意其他用户有网络访问权限,他们可以使用我的凭据访问网络,我只是不希望他们以我的密码在纯文本中发生。

0

公钥验证是您的有效选择吗?


0

只要所有这三个东西都是真实的,你的运气了:

  1. Server需要网络接入
  2. 用户需要在服务器(根)
  3. 你不”绝对控制权t想要用户有服务器的网络访问

如果你不能删除#2或#3,你唯一的选择就是删除#1。设置承载所有软件更新的内部服务器。让其他用户保持锁定状态,并且不要让其他服务器访问网络。

你试图做的任何事情只是自欺欺人。


3

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


1

除非您使用的特定工具允许使用混淆格式,或者您可以创建某种类型的工作流程以从混淆模式转为按需使用,否则您可能会失败。

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

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


2

有很多方法可以隐藏密码:您可以使用rot13格式或BASE64存储凭据,或使用CVS使用的相同password-scrambling algorithm。真正的窍门是让你的应用程序意识到加扰算法。

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

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

,将设置credsfoobar:password,然后你就可以在http_proxy

嵌入

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


0

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

  0

期间有效不幸的是,我没有在网络上的代理政策没有发言权。在我工作的两所大学中,我都遇到过这种情况。 20 9月. 082008-09-20 15:47:09


0

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

一个明显的攻击媒介将是一个特权用户修改这个本地代理与输入的密码做别的事情(因为他们可以与其他任何东西,如请求它的电子邮件客户端或窗口系统本身),但至少你会安然无恙的观看。


6

通过以下方法,您不必以纯文本保存代理密码。你只需要在交互式只要你需要HTTP/HTTPS/FTP访问输入密码:

  • 使用OpenSSL的纯文本代理密码到一个文件进行加密,例如用AES256加密:

OpenSSL的ENC -AES-256-CBC -in pw.txt退房手续pw.bin

  • 保护编码文件
  • 使用(不同的)密码
  • 删除明文pw.txt
  • 在eg中创建别名〜/。别名设置你的http_proxy/https_proxy/ftp_proxy这两个环境变量(设置$ USER /代理/ $ PORT适当的值)

别名MYPROXY ='PW =`OpenSSL的AES-256-CBC -d -in PW .bin`; PROXY = “HTTP:// $ USER:$ @ PW代理:$ PORT”; export http_proxy = $ PROXY;导出https_proxy = $ PROXY;出口ftp_proxy这= $ PROXY”

  • 你应该source这个文件到你的正常shell环境(在某些系统中,这是自动完成的)
  • 型‘MYPROXY’并输入您的OpenSSL密码,您用于加密文件
  • 完成。

注意:在shell会话持续期间,用户环境内的密码是可用的(并且可读)。如果你想在使用后从环境中清除它,你可以使用别名:

别名clearproxy ='export http_proxy =;导出https_proxy =;出口 ftp_proxy这=”

+2

请注意,您可以在“myproxy”中使用'read -s PW'来获得类似的结果(每次需要时只需从命令行读取密码) 09 11月. 152015-11-09 09:51:09


0

我做了修改的方案:

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

alias myproxy='read -p "Username: " USER;read -s -p "Password: " PW 
PROXY="$USER:[email protected]:80"; 
export http_proxy=http://$PROXY;export Proxy=$http_proxy;export https_proxy=https://$PROXY;export ftp_proxy=ftp://$PROXY' 

从下次登录进入myproxy和输入您的用户名/密码组合!现在,随着sudo -E

-E工作,--preserve-ENV 表示该用户希望保留其现有 环境变量的安全策略。

例如, sudo -E apt-get update

备注:代理服务器设置仅shell会话