系统管理员团队如何安全地共享密码?


83

在少数几个人之间共享数百个密码的最佳实践是什么?这些密码可以保护关键任务数据,只有小型团队才能看到。



11
BTW数百是一个非常令人不安的数字。当团队的一名成员被解雇时会发生什么?更新数百个密码将很痛苦。
Zoredache

2
其次是“数百个非常令人不安的数字”。我认为您可能需要首先备份并重新考虑如何管理整个安全事务,而不是尝试在当前所获得的东西上贴上石膏。
Maximus Minimus 2010年

Answers:


14

我可能会写一个托管在公司Intranet上的基于Web的自定义解决方案。(请访问http://lastpass.com以获得灵感或使用它。共享密码是它的功能之一,尽管它可能不适用于您的卷。)

编辑:当然,最好的解决方案,不要分享。将明文密码存储在任何介质中都是危险的,尤其是在存储密码的目的是共享它们时。几乎有无数种解决方案,每一种都会带来相关的风险。为什么不将它们放在加密的磁盘映像上,将该映像刻录到一张CD上,将该CD放入只有一个武装警卫才能打开的保险箱中,并让授权人员出示带照片的ID才能对其进行解锁?

关键是我们并不真正了解您的情况。为什么要共享数百个关键任务密码?它们是用于后台Intranet,VPN,还是出于某些原因以明文形式保留的客户密码?您是否需要在同一安装中与之共享的所有人员?像加密CD或存储在保险箱中的打印表之类的物理转移是否真的有效?还是您的系统管理员遍布全球,使电子方式共享它们成为唯一的解决方案?


50
IMO建立自己的安全/加密系统几乎永远不是解决问题的正确方法。
Zoredache

2
@Zoredache,那真是令人讨厌。虽然,我确实认为用于托管密码的基于Web的解决方案很愚蠢-但他确实做了msanford所说的Intranet。仍然有风险。其他所有联网解决方案均相同。
d -_- b 2010年

2
@ Zoredache,OP没有建立自定义的加密系统,听起来他需要的只是一个安全的数据库。@sims我认为,精心设计的基于Web的解决方案没有错。投票赞成的答案恰恰表明了这一点(基于Web的= http;基于Web的=在线存储)。诚然,当我第二次阅读该问题时,我同意共享密码吨的基本模型似乎是不必要的,并且可以找到更好的解决方案。但是OP并没有给我足够的信息来做出判断……
msanford 2010年

2
> @Zoredache,这真是一堆废话。<嗯,Sims,面对大多数加密专家,您马上就要飞起来了。设计加密非常困难,因此值得进行加密仍然更加困难。schneier.com/essay-037.html 有时,越小的邪恶(您知道的那个)是更好的选择,当您面对未知的邪恶时(即未经测试,未经同行审查的设计可能具有错误,可能有安全漏洞等)
艾利·佩恩

1
@Avery-设计密码系统很困难,应该交给专家,是的。使用久经考验的工具(例如共享文本文件上的GPG)或Keepass(使用AES和SHA-256的.NET实现)不是在设计您自己的系统。
mfinni 2010年

38

最佳做法是不共享密码。使用sudo之类的工具允许用户从其自己的帐户获取所需的访问权限。如果您有几个用户,则每个用户都应在需要的地方拥有自己的帐户。LDAP(Unix / Linux)和Active Directory是从公共数据库授予对多台服务器的访问权的很好的解决方案。

当需要密码的书面副本时,请将其密封在一个签名并注明日期的信封中。使用时更改密码。更改密码后,请密封一个新信封。

对于确实需要共享的密码,请使用诸如Keepass之类的密码工具之一,该工具可以将其数据库存储在网络上。具有用于多个平台的客户端的工具更好。考虑是否需要多个数据库。请记住,您需要真正信任可以访问此数据的每个人。


对于在* nix服务器上具有可能的特权升级的管理员,非特权用户帐户+1,我将其与仅对sshd使用dsa / rsa认证相结合。如果您正在使用Linux下的图形工具,还可以使用自定义的policykit配置。
亚伦·泰特

12
这个。取消用户使用共享凭据时的访问权限绝对是一场噩梦。尽可能通过用户唯一帐户委派访问权限。总是在某些情况下不可避免地会使用通用密码,但是“数百”个共享密码会尖叫出关键的设计缺陷。
克里斯·索普

4
我同意通常不共享密码,但是在很多情况下有必要共享密码,例如具有单个登录名的网络设备,所有sysadmin都使用相同登录名进行订购的供应商站点以及SQL sa用户或本地admin密码,必要。这就是为什么我认为KeePass最适合此用途的原因:它可以在多个平台上工作,具有很高的安全性,并且可以轻松地组织数百个密码。
Paul Kroon 2010年

2
我们对此有所不同,在这里我们写下了root密码,但是锁定了只有系统团队才能打开密钥的保险箱。我们的root密码本身长16个字符,并且以几乎无法记住的方式生成。是的,那里存在一些不安全因素,但是如果有人闯入保险柜,我怀疑我们会有更大的问题。
Frenchie 2010年

2
对于我们的团队来说,这是一个真实的用例场景:在不支持单个帐户多次登录的基于Web的应用程序中共享密码。因此,如果团队中需要一个以上的人才能访问该帐户,则需要一种共享该帐户密码的方法。
Jordan Reiter 2012年

11

我们已经为此目的使用了KeePass。这是一个很棒的小程序,它将所有密码存储在加密的数据库文件中。还有其他安全功能,例如需要密钥文件和主密码才能访问密码。这允许多层安全性(将密钥文件和数据库分开),同时始终使每个人都可以使用所有不同的密码方便使用。例如,您可以从USB驱动器上运行该应用程序和密钥文件,但将数据库存储在网络中的某个位置。这将需要用于网络共享的凭证,主密码以及带有密钥文件的物理USB驱动器。


KeePass似乎支持多种平台,这对我来说是一个巨大的胜利(我在混合平台环境中工作)。“自动类型”功能看起来也很有用。
艾利·佩恩

2
在网络上保留密码的愚蠢想法。
d -_- b 2010年

1
@Sims-那么您如何分享它们?KeePass将加密文件用于商店。它只是每个人都可以访问的Unix服务器上GPG加密文本文件的更有用的版本。
mfinni 2010年

1
@Sims-我通常会同意您的意见,但这必然是安全与生产力的关系。我不想将服务器的根密码放在这样的目录中,但是仅具有一次登录的第2层交换机的管理员密码就是一个很好的选择。有一点是,与安全漏洞发生后的清理相比,以更安全的方式处理事情需要花费更多的工作。另外,除了所有加密功能之外,您还具有文件AD / NTFS的安全性,并且通过将文件(可以命名为任意文件)放置在随机位置来稍微模糊。
Paul Kroon 2010年

我没想到Windows机器。但是,是的,如果该开关只能有一个用户,那么我想这是有道理的。否则,如Bill所说,对共享密码说不,这也是我关于密钥的观点。
d -_- b 2010年

5

在少数几个人之间共享数百个密码的最佳实践是什么?

很简单,有两种口味:

  1. 你没有,简单明了。如果选择执行此操作,则将密码身份验证推迟到外部可信机构并从那里控制身份验证。

  2. 可以,但是这样做的话,您将拥有外部访问控制,这些访问控制的密码或安全性令牌未记录在您使用的系统内部(即,密码记录受另一个可用性有限的密码保护)。这有很多问题。

这些密码可以保护关键任务数据,只有小型团队才能看到。

您应该认真考虑将安全验证服务与目录服务集成在一起以解决该问题。DS / AS组合创建了一个可信任的“机构”,可以充当所有用户和设备的仲裁者。用户帐户的访问可以从身份验证中使用的实际密码中提取出来,从而很容易将密码与访问策略“断开连接”。通过禁用用户帐户来控制密码;因此,如果管理员离开,您只需关闭他们的帐户,他们的访问权限就会消失(因为该人的密码仅基于DS / AS确认该帐户有效的有效性来授予访问权限)。

仅当您处于允许设备/程序将其身份验证请求分流到外部源的环境中时,这才起作用,因此这可能不是您的解决方案。如果您有很大一部分设备/程序可以接受外部身份验证,那么我将继续执行此操作,只要将数百个密码合并为一个可管理的列表(例如十几个)即可。如果您决定走这条路,那么有几种现成的,知名的和经过测试的解决方案。

  • 活动目录。 可能是该组中最著名的,它为您提供了Kerberos作为身份验证选项,并为基本DS提供了LDAP。
  • 桑巴/温宾德。 将此视为“ Active Directory Light”,您不会获得AD的所有功能,而会获得基于NT4的较旧模型(认为LANMAN哈希)。这将被Samba 4的AD集成所取代,并且可能会“消失”。
  • Novell目录服务。 我对其了解不足,无法推荐它,但我知道它仍然存在。许多政府机构仍在使用NDS,因此,如果您在该“部门”从事工作,那么您会很感兴趣。Novell最近将NDS移植为可作为Linux服务运行,但我不知道它是否仍是活跃产品(大约在2005年)。
  • LDAP + Kerberos。 基本上,这是“本地生成的” Active Directory,减去所有“不错的功能”。但是,它们也是具有稳定,成熟的代码库的已知组件,因此这些服务的集成通常是使事情正常运行所需的“定制”程度。
  • SSH密钥+(在此处插入系统管理程序,可能是puppet)。 仅在全面使用SSH并且以这种方式访问​​所有设备的情况下有用。可以根据需要分发和撤消密钥,并且随着SSH密钥授予访问权限,密码变得“无关紧要”。使用像puppet这样的系统,您可以通过在命令中发出命令来添加/撤消SSH密钥来更新数百台计算机。
  • 以上几种组合。

还有一个问题,您需要多少安全性。您没有指定“关键任务”是指核弹头可能落在城市上,还是“关键任务”是指最新一批的Furbies不会进入城镇。如果有描述风险/威胁评估的内容,那将真的有帮助。


2

一些东西:

  • 正如其他人所说,这是一个坏主意。使用LDAP等
  • 如果您出于任何原因致力于此操作,请至少合并密码。100个非托管密码表示您不更新密码。
  • 把它们放在纸上。要求工作人员用不同颜色的墨水在纸上签名,以便于确定是否复印了纸。
  • 如果您使用的是Unix,请使用S / KEY生成一次性密码。将其存放在安全的地方。

您还需要超越将纸质密码放在保险箱中或加密密码的机械安全措施。继续阅读有关具有成熟安全模型的组织如何保护密钥和安全组合的信息。我不建议您做您想做的事情,但是如果您这样做:

  • 将要使用密码的人无法控制对密码的访问。不同管理链下的一群不同的人需要控制对保险箱,抽屉等的访问。如果您有财务小组,则他们可能是候选人。也许是营销副总裁等
  • 打开保险柜并且有人拥有密码时,需要有书面记录。
  • 密码必须在签出后的24小时内更改。

像这样的程序令人头疼,但会激励人们采取更理智的做法。如果您不执行我所描述的操作,请不要费心进行锁定密码的操作,因为总有一天您会遭到破坏。


2

我知道这是一个老问题,但最近我遇到了一个称为Corporate Vault的基于开源Web的解决方案,这可能对某些人很有趣。我还没有机会尝试一下。


1

我们使用一个名为Password Safe的程序。它非常好而且非常安全,您可以将数据库设置在网络驱动器上,并将需要访问的每个用户和密码提供给保险箱本身,然后安全地存储所有加密的用户名和密码。


1

https://pypi.python.org/pypi/django-pstore/对共享密码(以及您可能希望共享的任何其他数据)使用每用户GPG加密。服务器永远不知道任何密码,只保存加密的数据。每个人都使用自己的私钥来解密共享的机密。

该系统包括权限管理:并非每个人都具有完全访问权限。



0

SPB钱包是一个很好的应用程序,我们曾经使用过幽灵般的PW安全设备,但SPB钱包可以让您同步到网络共享,也可以同步到您的iPhone(如果您获得了该应用程序)。它还具有一个内置的密码生成器,您可以从简单的密码生成极其复杂的密码。您还可以在仍带有星号的密码时复制密码,因此,如果有人在找,您可以复制并粘贴密码而没有人看到密码。一旦在定义的时间内没有活动,PC应用程序将自动锁定。


0

另一个选项是Azure Key Vault,它可以安全地存储您的秘密,并允许您以编程方式允许对其进行访问,轻松地旋转密码等。没有很好的UI,但是如果您可以使用命令行访问,那就很好了。


0

我们的最佳做法是共享尽可能少的密码。

因此,我们例如:-在根目录的根目录中使用my.cnf来输入数据库的密码-使用ssh密钥登录服务器,并拥有一个仅通过控制台允许的根密码(因此,您必须对服务器具有物理/ bmc访问权限) )-尽可能使用ldap(ssh,bmc,switchs,redmine等)

但是,在少数情况下,我们无法使用此方法(例如root密码)。然后,我们在共享存储上使用keepass,但在那里只需要保留10个密码。


-1

很好的问题。我会对其他答案感兴趣。

这是我的工作,但首先我建议尽可能使用预共享密钥。我不知道这在Windows系统中是否可行。

由于密码的数量应该很小(在可能的情况下使用密钥),因此我在没有NIC的系统上使用以gpg加密的纯文本文件。因此(1)您需要物理访问权限,并且(2)密码。

为了清晰而编辑


钥匙?如USB密钥一样?打开锁的物理钥匙?智能卡钥匙?GPG密钥?密码短语仅存在于您脑海中的湿件中?上面的组合?
艾利·佩恩

车钥匙!JK。为了澄清,我的意思是ssh键。这就是为什么我说过可能无法在Windows中使用预共享密钥。
d -_- b 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.