我的 ssh 服务器已经正常工作了 4 年,所以我只想添加一个用户 + chroot 他到特定文件夹。
> useradd -m -c /home/thomas -s /bin/sh thomas
> passwd thomas
> chmod 755 /home/thomas
> chown root: /home/thomas
> service ssh restart
当我这样做时,我能连接通过ssh
并且我的sftp
连接有效。问题是我想 chroot 到特定文件夹。
> vim /etc/ssh/sshd_config
在文件末尾添加:
Match user thomas
ChrootDirectory /home/%u
当我只添加这个时,这不应该改变什么,对吧?配置应该是相同的,我仍然应该能够连接或使用 sftp...所以我重新启动,service ssh restart
并且无法再与 sftp 连接。
万一:
root@xx:/etc/nginx/sites-enabled# /usr/sbin/sshd -v
sshd: illegal option -- v
OpenSSH_6.0p1 Debian-4+deb7u6, OpenSSL 1.0.1t 3 May 2016
usage: sshd [-46DdeiqTt] [-b bits] [-C connection_spec] [-c host_cert_file]
[-f config_file] [-g login_grace_time] [-h host_key_file]
[-k key_gen_time] [-o option] [-p port] [-u len]
root@xx:/etc/nginx/sites-enabled#
我究竟做错了什么?
答案1
该sshd_config
手册指出
必须
ChrootDirectory
包含支持用户会话所需的文件和目录。对于交互式会话,这至少需要一个 shell(通常为sh(1)
)和基本/dev
节点(例如null(4)
、zero(4)
、stdin(4)
、stdout(4)
、stderr(4)
和tty(4)
设备)。对于使用 SFTP 的文件传输会话,如果使用进程内 sftp 服务器,则不需要额外的环境配置,但使用日志记录的会话可能需要/dev/log
在某些操作系统上的 chroot 目录中(请参阅sftp-server(8)
参考资料)。
您应该创建该dev
目录,然后将/dev/MAKEDEV
脚本复制到那里。使用脚本创建所需的设备文件。
对于交互式用户,您还需要在 chroot 中安装必要的二进制文件和关联的库。
对“进程内 sftp 服务器”的引用意味着ForceCommand internal-sftp
应该在您的块中使用Match
。
注意:摘录自 OpenSSH 7.5,因为我无权访问任何较旧的 SSH 实现。