在authorized_keys的中心位置是个好主意吗?


29

我正在配置云服务器以运行以下堆栈:Ruby,Passenger,Apache;在Ubuntu 10.04(Lucid Lynx)下。

在希望使服务器更易于管理的过程中,我在上设置了RSA密钥rootwww-data这样我就可以ssh进入服务器了。我不喜欢的事情是,www-data.ssh目录坐在/var/www这是Apache的默认目录设置。我担心的是,如果apache的配置不正确,则.ssh目录可能会暴露出来。

我在整个解决方案来到移动~/.ssh/authorized_keys通过改变文件到一个中心位置AuthorizedKeysFile/etc/ssh/sshd_config。它具有2个优点:单一位置的密钥,不必担心糟糕的Apache配置。我可以想到的一个缺点是,现在每个用户都可以在服务器上登录(显然是中央密钥文件的双刃剑。)

在此配置中我有什么想念的吗?我是否过度暴露自己,还是比单个authorized_keys文件更好的解决方案?

在服务器管理方面,我是绿色的,但完全可以因做坏事而被称为坏名。:D


1
至少在互联网上公开(只读)公钥并不是最大的风险……(它可能使攻击者了解他们是否可以使用从其他地方获得的私钥登录服务器,但是这样做不会'不允许他们仅通过获取该信息即可登录...)(严重的问题是id_rsa文件中是否有文件~/.ssh,他们设法读取了该文件)
Gert van den Berg 2016年

Answers:


51

所有密钥文件都可以集中在同一目录中,而不能混合在同一文件中。

只需这样设置sshd_config文件:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

在您的服务器上:

  • www-数据键将在 /etc/ssh/authorized_keys/www-data
  • 根密钥将在 /etc/ssh/authorized_keys/root

关于访问权限,sshd接受以下设置:

/etc/ssh/authorized_keys拥有root:root并拥有模式755。密钥文件拥有root:root并拥有模式644。

其他模式可能可行,但我尚未对其进行测试。


3
+1,但我不会设置其他位。为用户设置%u文件的所有权,这样就不必要了。
亚伦·科普利2012年

1
恶意用户可以向其〜/ .ssh / authorized_keys添加更多公钥以授予他人访问权限的一个很好的解决方案。
bbaassssiiee

我刚刚确认用户授权密钥文件的模式600不起作用;它必须是模式644
Luis E.

@bbaassssiiee绝对不能解决该问题。他们可以与想要访问的任何人共享私钥(当然可以减轻这种可能性,但是此答案绝对不会为零)
DylanYoung

1
@DylanYoung我承认可以共享私钥。但是使用chattr,我可以撤消对authorized_keys文件的写访问权,这样我就可以专门分发这些文件,并在每个文件中维护一行。
bbaassssiiee

15

一般来说,我不会按照您的建议去做。它打破了常见的假设(例如~/.ssh/authorized_keys为您的用户服务,并引入了您已经在问题中提到的问题。如果在实施之前发现明显的问题,则意味着您的解决方案不是理想的选择。

在安全方面,我还认为让每个人共享一个服务帐户是一个很糟糕的主意:现在只有您一个人,而且您知道自己是进行更改的人。在5年内,当您有5位管理员时,您将想知道谁更改了哪些内容,并仔细查看审核日志以了解谁在什么时候使用了什么密钥才是王道。
最好让人们自己登录并使用sudo或类似的方式来提升他们的特权并执行他们需要做的任何事情。


如果您仍然想集中化SSH密钥,建议您使用Puppet radmind之来管理authorized_keys文件/将文件分发到适当的~user/.ssh/目录(或自行开发将SCP固定到位的解决方案)。
当您扩展到多个服务器时,您可能还希望查看OpenSSH较旧版本的LDAP公钥补丁(或OpenSSH 较新版本中的AuthorizedKeysCommand指令和适当的脚本),以便您可以集中用户而不必分发他们的密钥遍布您的整个网络,但这对您而言可能很遥远。


1
+1为共享参数。简短地说,是因为花了我一点时间才意识到其含义:根本不应该有〜www-data / .ssh目录,因此,Web浏览器没有安全风险。
thiton 2011年

感谢您的反馈!如果我对您的理解正确。我应该既不能通过ssh密钥访问root也不www-data可以通过ssh密钥访问吗?
加文·米勒

1
拥有~www-data/.ssh目录并不是一件可怕的事(拥有适当的权限不会造成很大的风险),但是如果您要使用目录~www-data/.ssh,最好不要使用webroot ~www-data(移动webroot或move www-data的主目录)。用户的差异是恕我直言的更大论点-我知道如果我看到jsmith登录信息,便知道是John Smith。如果我看到www-data登录信息,则需要进一步挖掘以找出是谁。
voretaq7 2011年

之所以需要www-data的ssh密钥,是因为我正在使用Beanstalk(SCM和部署工具)通过SFTP进行部署。然后,我应该为Beanstalk创建一个单独的帐户来执行ftp'ing吗?那里最好的解决方案是什么?
加文·米勒

1
在大多数系统上AuthorizedKeysFile/etc/ssh/sshd_config默认情况下为%h/.ssh/authorized_keys。这%h是主目录的占位符。是什么使您无法将其设置为/some/folder/ssh_keys_by_user/%h/甚至/root/ssh_keys/%u。您甚至可以授予相应用户对该个人文件的写访问权限(并且只有他自己)才能将该文件链接到标准位置(使用ln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys),并且不会违反上述假设。
con-f-use
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.