在我的 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
防止 nonadminsftp 用户使用密码进行连接:$ 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
防止 nonrootadmin 获得 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 可以使用密码登录
我错过了什么?
提前致谢
感谢@muru,以下配置现在可以正常工作:
我之前加
nonrootadmin
过sftpaccess
群。在我从组中删除此用户后......
nonrootadmin
现在可以使用 SSH。