有没有更简单的方法为新用户添加公钥认证?

有没有更简单的方法为新用户添加公钥认证?

我正在艰难而痛苦地在新的 Web LEMP 服务器上使用 Ubuntu 12.04 设置安全用户。我最初打算设置类似 vsftpd 或 proftpd 的东西,但许多人建议直接使用 SFTP,所以我会这样做。最终,我有一个主要用户(我使用它只是为了防止 root 登录)。我创建了这个新用户,生成了一个公钥对,将公钥上传到用户~/.ssh目录authorized_key,更改了 SSH 端口号,删除了 root 登录,并设置passwordauthentication为 NO,以便强制用户使用他/她的密钥登录。很简单(虽然在 PC 上工作似乎比我的 OSX/NIX 同行更令人头疼)。

我现在正在尝试创建新用户(为我的 Web 开发人员),这些用户将仅具有 SFTP 访问权限,并且仅限于他们负责的 Web 目录。每个目录的格式如下:

/var/www/sitename.com/public/

我现在开始头疼了。创建新用户?简单。添加密码?其实不需要,因为我需要公钥/私钥(而且他们永远不会有 sudo 访问权限),但没关系。然而,我在以下方面遇到了困难:

  • 我该如何实际将此新用户的公钥存储在服务器上?如果我以 root 用户身份登录并authorized_keys在其主目录中创建文件,则该文件将具有 root 所有者和组权限,并且他们无法登录服务器。同样,这些新用户无法登录并自行创建它,嗯,因为他们不允许通过密码登录。

(注意:我也在努力设置 sftp 并将它们限制到各自的网络目录中,但我想我以后可以自己解决这个问题)。

有什么建议吗?

编辑

目前流程是这样的:

  • 从个人处获取公钥
  • 执行以下命令:
#sudo mkdir -p /home/newuser/.ssh
#sudo nano /home/newuser/.ssh/authorized_key
#(将密钥复制到一行并保存)
#chown -R 新用户:新用户 /home/新用户
#chmod 700 /home/newuser/.ssh
#chmod 600 /home/newuser/.ssh/authorized_key

我想这并不是太糟糕,但如果我们有大量开发人员(再加上我需要花费大量时间为他们设置 SFTP 部分并限制目录),这似乎是一个巨大的痛苦。

答案1

您需要更改文件的所有权并适当地设置权限。

$ chown -R newuser /path/to/home/.ssh
$ chmod 700 /path/to/home/.ssh
$ chmod 600 /path/to/home/.ssh/authorized_keys

为了使此过程更简单、可重复且可审计,请使用配置管理系统进行用户管理。所有广泛使用的配置管理系统(puppet、chef、ansible 等)都具有创建用户和部署密钥的功能。使用配置管理系统的一大额外好处是,您还可以将配置保存在源代码控制中。

答案2

我该如何在服务器上实际存储这个新用户的公钥?如果我以 root 用户身份登录并在其主目录中创建 authorized_keys 文件,则该文件将具有 root 所有者和组权限,并且他们无法登录服务器。

使用他们在申请账户时提供给您的公钥为他们创建它。适当地对其进行 chown。适当地对其进行 chmod。完成。

答案3

/home/newuser/.ssh/authorized_key

当心那个拼写错误:)

它是“authorized_keys”。这让我沮丧了至少半个小时。

相关内容