如何仅允许使用 RSA 密钥的 SSH,以及使用密码和 chroot 的 SFTP?

如何仅允许使用 RSA 密钥的 SSH,以及使用密码和 chroot 的 SFTP?

在我的 Ubuntu 16.04 LTS 服务器上,我想做以下事情:

  • 允许具有 sudo 权限的非 root 管理员用户使用 RSA 密钥(无密码)通过 SSH 进入服务器
  • 允许选定的非管理员用户通过 SFTP 将文件上传到自己的主目录,并使用密码登录
  • 防止非管理员用户访问文件系统的其余部分

我正在使用新安装的 Ubuntu 16.04.3 LTS 版本,因此一切都处于其默认出厂状态。

我读过了这个问题并仔细阅读答案,但我还是无法找到解决方案。

我已经创建了一个nonrootadmin具有 sudo 权限的用户。

我创建了一个nonadminsftp属于该sftpaccess组的用户。/home/nonadminsftp/目录如下所示:

$ ls -al ~nonadminsftp
total 24
drwxr-xr-x 3 root         root       4096 Oct 25 00:52 .
drwxr-xr-x 5 root         root       4096 Oct 24 22:29 ..
-rw-r--r-- 1 nonadminsftp sftpaccess  220 Sep  1  2015 .bash_logout
-rw-r--r-- 1 nonadminsftp sftpaccess 3771 Sep  1  2015 .bashrc
drwxr-xr-x 3 nonadminsftp sftpaccess 4096 Oct 25 00:50 ftp
-rw-r--r-- 1 nonadminsftp sftpaccess  655 May 16 13:49 .profile

其各自的条目/etc/passwd如下:

nonrootadmin:x:1000:1000::/home/nonrootadmin:/bin/bash
nonadminsftp:x:1002:1002::/home/nonadminsftp:/usr/sbin/nologin

我对该文件所做的更改/etc/sshd/sshd_config如下:

PermitRootLogin no
#PasswordAuthentication no

AllowUsers nonrootadmin nonadminsftp
Subsystem sftp internal-sftp
Match group sftpaccess
#ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp

我所见过的解决方案建议取消注释其中 3 行,但我发现:

  • PasswordAuthentication no阻止非管理员 ftp 用户使用密码连接:

    $ sftp [email protected]
    Permission denied (publickey).
    Couldn't read packet: Connection reset by peer
    
  • ChrootDirectory %h阻止非rootadmin用户进行连接:

    $ ssh [email protected]
    packet_write_wait: Connection to 12.34.56.78 port 22: Broken pipe`
    
  • ForceCommand internal-sftp阻止非rootadmin获取SSH访问权限:

    $ ssh [email protected]
    This service allows sftp connections only.
    Connection to mydomain.com closed.`
    

注释掉以下几行:

  • nonrootadmin 确实可以使用 RSA 密钥进行 SSH 访问
  • nonadminsftp 可以使用 FTP 客户端(例如 FileZilla)进行连接

但:

  • nonadminsftp 未登录chroot/home/nonadminsftp目录
  • nonrootadmin 可以使用密码登录

我缺少的是什么?

提前致谢

答案1

感谢@muru,以下配置现在可以正常工作:

PermitRootLogin no
PasswordAuthentication no

AllowUsers nonrootadmin nonadminsftp
Subsystem sftp internal-sftp

Match group sftpaccess
# The following directives only apply to users in sftpaccess
PasswordAuthentication yes
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

我之前曾将其添加nonrootadmin到该sftpaccess组。在我将此用户从组中删除后...

$ sudo gpasswd -d nonrootadmin sftpaccess
$ getent group ftpaccess
ftpaccess:x:1002:nonadminsftp

...nonrootadmin现在可以使用 SSH。

相关内容