![如何在 Archlinux 服务器上创建 chroot 的 SFTP 访问?](https://linux22.com/image/680269/%E5%A6%82%E4%BD%95%E5%9C%A8%20Archlinux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%88%9B%E5%BB%BA%20chroot%20%E7%9A%84%20SFTP%20%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我已按照以下说明进行操作维基百科和极客设置一个用户,该用户只能通过 SFTP(SSH)访问服务器,而不需要/bin/false
在其主目录的 chrooted 环境中使用 Shell()。
没什么特别的,但它根本不起作用,access denied
当我尝试登录时我不断收到消息。以下是我到目前为止尝试过的:
SFTP 用户和组
此处的用户:user
是组的成员sftp
。主目录是/srv/sftp/user
。Shell 通过以下方式禁用/bin/false
用户输入:
0 ✓ root@host ~ $ grep -i user /etc/passwd
user:x:1002:1000::/srv/sftp/user:/bin/false
团体参赛:
0 ✓ root@host ~ $ grep -i sftp /etc/group
sftp:x:1000:user
用户组:
0 ✓ root@host ~ $ groups user
users sftp
主目录配置
主目录和上面的所有目录均归以下人员所有root
:
0 ✓ root@host ~ $ ls -lsha /srv
total 20K
4,0K drwxr-xr-x 6 root root 4,0K 4. Apr 17:00 ./
4,0K drwxr-xr-x 17 root root 4,0K 4. Apr 15:08 ../
4,0K dr-xr-xr-x 2 root ftp 4,0K 30. Sep 2015 ftp/
4,0K drwxr-xr-x 4 root root 4,0K 4. Apr 19:30 http/
4,0K drwxr-xr-x 5 root root 4,0K 4. Apr 17:00 sftp/
0 ✓ root@host ~ $ ls -lsha /srv/sftp
total 12K
4,0K drwxr-xr-x 5 root root 4,0K 4. Apr 17:00 ./
4,0K drwxr-xr-x 6 root root 4,0K 4. Apr 17:00 ../
4,0K drwxr-xr-x 5 root root 4,0K 4. Apr 19:34 user/
0 ✓ root@host ~ $ ls -lsha /srv/sftp/user
total 16K
4,0K drwxr-xr-x 5 root root 4,0K 4. Apr 19:34 ./
4,0K drwxr-xr-x 5 root root 4,0K 4. Apr 17:00 ../
4,0K drwxrwxr-x 6 user sftp 4,0K 4. Apr 20:28 files/
4,0K drwxrwxr-x 2 user sftp 4,0K 4. Apr 19:33 log/
SSHD 配置
SSHD 配置结束:
0 ✓ root@host ~ $ tail -n16 /etc/ssh/sshd_config
# override default of no subsystems
### Subsystem sftp /usr/lib/ssh/sftp-server
Subsystem sftp internal-sftp
### This section must be placed at the very end of sshd_config
# This means that all users in the ‘sftp’ group will be chroot’d
# to their home directory, where they only will be able to run
# internal SFTP processes.
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
PasswordAuthentication yes
SSHD 状态:
0 ✓ root@host ~ $ systemctl status sshd
● sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
Active: active (running) since Mo 2016-04-04 23:48:58 CEST; 1 day 15h ago
Main PID: 9272 (sshd)
Tasks: 3 (limit: 512)
CGroup: /system.slice/sshd.service
├─ 9272 /usr/bin/sshd -D
├─17597 sshd: user [priv]
└─17598 sshd: user [net]
[...]
Apr 06 15:05:24 host sshd[17597]: Failed password for user from 93.***.***.136 port 45516 ssh2
OpenSSH 版本:
0 ✓ root@host ~ $ pacman -Q openssh
openssh 7.2p2-1
更多系统信息
内核版本:
0 ✓ root@host ~ $ uname -a
Linux host 4.4.5-1-ARCH #1 SMP PREEMPT Thu Mar 10 07:38:19 CET 2016 x86_64 GNU/Linux
尝试连接
为了确保密码确实正确,我将其更改为1234
:
0 ✓ root@host ~ $ passwd user
Enter new UNIX password: 1234
Retype new UNIX password: 1234
passwd: password updated successfully
现在测试sftp
:
1 ✗ me@client ~ $ sftp -P12345 user@host
user@host's password: 1234
Permission denied, please try again.
user@host's password: 1234
Permission denied, please try again.
user@host's password: 1234
Permission denied (publickey,password).
Couldn't read packet: Connection reset by peer
这是日志中的内容,根本没有什么帮助:
0 ✓ root@host ~ $ journalctl -n5
Apr 06 15:34:38 host passwd[25269]: pam_unix(passwd:chauthtok): password changed for user
Apr 06 15:35:26 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:30 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:33 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:34 host sshd[25853]: Connection closed by 93.***.***.136 port 45834 [preauth]
我做错了什么?我错过了什么?如何在没有 shell 访问的 Archlinux 服务器上创建 chroot 的 SFTP 访问?
答案1
好的,我忽略的一点与 shell 有关。我尝试按照/bin/false
许多手册中描述的方式登录。但是没有成功。
正如 @Jakuje 指出的那样,/bin/sh
出于测试目的将其更改为允许我通过登录sftp
。太好了!而且我还不知道一个有趣的事实:internal-sftp
已经阻止ssh
登录。
但是,谁还想要/bin/false
或/bin/nologin
作为 shell,这是我最终弄清楚的。检查 shell 是否可用/etc/shells
:
0 ✓ root@host ~ $ cat /etc/shells
#
# /etc/shells
#
/bin/sh
/bin/bash
# End of file
难怪它不起作用!false
并且nologin
未定义!手动添加它们对我来说很有效:
0 ✓ root@host ~ $ cat /etc/shells
#
# /etc/shells
#
/bin/sh
/bin/bash
/bin/false
/bin/nologin
# End of file
现在,只需更改 shell,使用以下命令chsh
:
0 ✓ root@host ~ $ chsh -s /bin/false user
Changing shell for user.
Shell changed.
现在,sftp
可以在变更根环境中工作,无需 shell 访问。