更新:下面的代码已更新,以反映标记答案中标识的变化,因此可以按预期工作。
我正在尝试在我的服务器上建立仅使用 SFTP 的用户,这些用户被限制在他们的主目录中。尝试连接到服务器时,我收到管道损坏错误:
debug1: Authentication succeeded (password).
Authenticated to xxxx.xxxxxxxx.com ([XX.XX.XX.XX]:22).
debug2: fd 5 setting O_NONBLOCK
debug3: fd 6 is O_NONBLOCK
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email protected]
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: send packet: type 1
packet_write_wait: Connection to XX.XX.XX.XX port 22: Broken pipe
Couldn't read packet: Connection reset by peer
我已确定这与我试图监禁用户有关。我的尝试sshd_config
包括:
Subsystem sftp internal-sftp
Match Group sftponly
ForceCommand internal-sftp -d /%u
PasswordAuthentication yes
ChrootDirectory /home/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sftponly
是我为 sftp 用户创建的组的名称。 的所有者和组只有所有者具有写入权限(/home/sftp
)。root
0711
$ chown root:root /home/sftp
$ chmod 0711 /home/sftp
下面是我创建用户的方法(在本例中为batman
),请注意,我是通过 Perl 脚本执行此操作的,因此我使用了chpasswd
:
$ adduser --quiet --disabled-password --shell /bin/false --no-create-home --gecos "User" batman
$ echo "batman:batman123" | chpasswd
$ usermod -a -G sftponly batman
$ install -d -m 0755 /home/sftp/batman -o batman -g sftponly
注意:我手动创建用户主目录,而不是传递--system
参数添加用户,因为当我稍后尝试更改目录所有权时最终收到错误:
chown:无效的组:'batman:batman'
如果我更新我的sshd_config
,并将 chroot 目录更改为:
ChrootDirectory /home/sftp
我可以成功访问服务器,并且不再收到管道损坏错误。但是,我在/home/sftp
登录时看到的是所有其他用户目录的列表,而不是/home/sftp/batman
我期望的那样。
我该如何改进/修复这个问题,以便用户:
- 只能访问自己的目录(
/home/sftp/batman
) - 登录后,将显示在 内
/
(实际上是/home/sftp/batman
) - 无法导航到
/home/sftp
(因此他们无法看到其他用户的列表)
答案1
我已通过应用以下权限成功实现此目的:
$ chown batman:sftponly /home/sftp/batman
$ chmod 0755 /home/sftp/batman
$ chmod 0711 /home/sftp
然后ChrootDirectory
从/home/sftp/%u
改为/home/sftp
,
最后在用户登录后将用户移至其主目录:
ForceCommand internal-sftp -d /%u
现在,当batman
他们登录时,他们会进入/home/sftp/batman
,这对用户来说似乎如此/batman
。更重要的是,如果他们尝试退出到/home/sftp
,他们会收到错误(从而阻止他们查看其他用户目录):
目录 /:权限被拒绝 - 无法检索目录列表