我在 Ubuntu 中创建了一个用户并为他们提供了密码验证访问权限,以便他们可以使用 ssh 登录,但我想限制他们的使用范围,位于以下位置的自定义主文件夹:
/var/www/daniel (is a root folder with correct permissions)
/var/www/daniel/home (which is owned by daniel:daniel and 755 permissions)
在
/etc/ssh/sshd_config (i've enabled internal sftp)
Match User daniel
PasswordAuthentication yes
AllowTCPForwarding no
ForceCommand internal-sftp
ChrootDirectory %h
X11Forwarding no
重新启动 ssh 服务
然后当我尝试登录时,我可以看到
auth.log
用户登录成功,但随后会根据此错误终止会话
Accepted password for daniel ssh2
pam_unix(sshd:session): session opened for user daniel by (uid=0)
systemd-logind[508]: New session 63 of user daniel.
pam_unix(systemd-user:session): session opened for user daniel by (uid=0)
error: /dev/pts/2: No such file or directory
pam_unix(sshd:session): session closed for user daniel
Session 63 logged out. Waiting for processes to exit.
有任何想法吗?
更新
我已经执行了下面的操作https://unix.stackexchange.com/questions/160461/chroot-gone-wrong-cant-ssh-with-user:
mount --bind /dev /var/daniel/dev
mount --bind /dev/pts /var/daniel/dev/pts
错误似乎已经消失,但授权后它直接将我注销
Accepted password for daniel
pam_unix(sshd:session): session opened for user daniel by (uid=0)
systemd-logind[508]: New session 130 of user daniel.
systemd: pam_unix(systemd-user:session): session opened for user daniel by (uid=0)
pam_unix(sshd:session): session closed for user daniel
systemd-logind[508]: Session 130 logged out. Waiting for processes to exit.
答案1
查看/etc/passwd
。
通常是用户主目录/home/USER
,在这种情况下变量%h
映射到文件路径/home/daniel
。
/bin/bash
如果用户能够通过 SSH 登录,您还需要提供 chroot 内的路径或类似的 shell。
答案2
在 Ubuntu 上已经使用这个好几年了。
Subsystem sftp /usr/lib/openssh/sftp-server
Match Group sftp
AllowTcpForwarding no
ChrootDirectory %h
ForceCommand internal-sftp
PasswordAuthentication yes
X11Forwarding no
chroot 目录必须由 root 拥有,并且用户无权写入。内部目录可以写入。这样做是为了避免主文件可以更改库预加载。但如果这是错误的,您将在 auth.log 中收到错误。
您还必须将客户端限制为 sftp,而不是使用终端打开正常的 ssh 会话。