如何设置一个 SFTP 服务器,让用户在其主目录中进行 chroot?

如何设置一个 SFTP 服务器,让用户在其主目录中进行 chroot?

我一直在尝试设置一个 SFTP 服务器,让多个用户 chroot 到他们的主目录。我遵循了本指南Archive.org 链接),然后在用户目录上执行以下命令

chown root:root /home/user/
chmod 755 /home/user/

每个用户的主目录中都有一个名为的附加文件夹public,该文件夹由其用户拥有,以便他们可以根据需要创建目录并上传和删除文件。(这是我之前提到的指南中建议的)

现在当我执行时sftp -P 435 user@localhost,出现此错误:

写入失败:管道损坏,
无法读取数据包:对端重置连接

我该怎么做?最终的想法是让其他机器上的每个用户使用 FileZilla 登录到他们的 chrooted 主目录,然后能够上传目录和文件。所有这些都在 SFTP 中完成(因为它更安全)

答案1

该文章还描述了如何获取 chrooted shell 访问权限,但由于您只想要一个仅限 sftp 的帐户,只需按照以下说明操作:

编辑/etc/ssh/sshd_config并添加以下行:

SubSystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

找到这一行UsePAM yes并注释掉:

#UsePAM yes

如果不禁用此功能,我的 SSH 服务器将在重新加载/重新启动时崩溃。由于我不需要 PAM 的花哨功能,所以这没问题。

为了提高安全性,请限制可以登录的用户。如果您忘记将 SFTP 用户添加到sftp组中,则将授予他们免费的 shell 访问权限。这不是一个好的情况。由于 SSH 无法结合AllowUsersAllowGroups(登录必须同时满足两个规则),因此您必须创建一个额外的组,例如ssh-users。添加允许youruser通过 SSH 登录(如下)的用户:

sudo groupadd ssh-users
sudo gpasswd -a youruser ssh-users

并添加下一行到/etc/ssh/sshd_config

AllowGroups ssh-users sftp

现在继续修改用户主目录的权限以允许 chrooting(示例用户sftp-user):

sudo chown root:sftp-user /home/sftp-user
sudo chmod 750 /home/sftp-user

sftp-user创建一个可以自由放置任何文件的目录:

sudo mkdir /home/sftp-user/public
sudo chown sftp-user: /home/sftp-user/public
sudo chmod 750 /home/sftp-user/public

如果您在运行中遇到任何问题,请检查/var/log/syslog/var/log/auth.log了解详细信息。使用选项运行sshsftp-vvv查看调试消息。对于sftp,选项必须出现在主机之前,如sftp -vvv user@host

答案2

只是想添加目录树中的文件夹权限需要以某种方式设置。

sshd 的严格所有权/权限要求规定 chroot 路径中的每个目录都必须由 root 拥有,并且只能由所有者写入。

来源

我遇到了非常类似的错误,修复目录权限后,问题就解决了。

答案3

我正在使用 Ubuntu LTS 12.04,经过很多痛苦之后,这个对我有用。

我的设置/etc/ssh/sshd_config

Subsystem sftp internal-sftp -f AUTH -l VERBOSE
UsePAM yes
Match group sftp
  ChrootDirectory %h
  ForceCommand internal-sftp
  AllowTcpForwarding no
  1. 创建组 sftp:

    groupadd sftp

  2. 直接创建用户并附加新的 sftp 组:

    sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false

  3. 设置使用 ssh 进行 sftp 的权限:

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. 重启服务:

    service ssh restart

请注意,新 sftp 用户的主文件夹必须被赋予 root 所有者。

答案4

还要注意,在将 Match 指令添加到配置文件时,任何与匹配无关的指令都可能停止工作。与其注释掉所有不兼容的内容,不如将包含 Match 指令的任何部分移到配置文件的末尾。

此外,可能需要将 chroot 目录及其父目录的权限设置为 755,并将所有者设置为 root:root。就我个人而言,我将 chroot 目录 sshd_config 设置为 %h,即用户的主目录,然后将他们的主目录设置为我想要的位置,例如 /var/www/examplewebsite.com。有些人可能更喜欢将 chroot 主目录配置为静态部分,后跟用户名,例如 /var/www/%u,但这当然需要确保用户的 chroot 目录与其用户名匹配。

要解决连接问题,请停止 ssh 服务,确保先打开一个或两个 SSH 会话进行测试,然后以调试模式交互启动守护程序以检查连接调试信息,因为这可以帮助您识别任何问题,并搜索如何修复它们。

命令:service ssh stop ; /usr/sbin/sshd -d

完成后一定要重新启动 ssh!命令:service ssh start

相关内容