SFTP Chroot 错误:管道损坏

SFTP Chroot 错误:管道损坏

更新:下面的代码已更新,以反映标记答案中标识的变化,因此可以按预期工作。

我正在尝试在我的服务器上建立仅使用 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)。root0711

$  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,他们会收到错误(从而阻止他们查看其他用户目录):

目录 /:权限被拒绝 - 无法检索目录列表

相关内容