如何使用 chroot 用户在其主目录中设置 SFTP 服务器?

Nit*_*esh 24 sftp chroot home-directory

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

chown root:root /home/user/
chmod 755 /home/user/
Run Code Online (Sandbox Code Playgroud)

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

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

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

我如何从这里开始?最终的想法是让其他机器上的每个用户使用 FileZilla 登录到他们的 chroot 主目录,然后能够上传目录和文件。所有这些都在 SFTP 中(因为它更安全)

Lek*_*eyn 29

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

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

SubSystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)

找到该行UsePAM yes并对其进行注释:

#UsePAM yes
Run Code Online (Sandbox Code Playgroud)

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

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

sudo groupadd ssh-users
sudo gpasswd -a youruser ssh-users
Run Code Online (Sandbox Code Playgroud)

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

AllowGroups ssh-users sftp
Run Code Online (Sandbox Code Playgroud)

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

sudo chown root:sftp-user /home/sftp-user
sudo chmod 750 /home/sftp-user
Run Code Online (Sandbox Code Playgroud)

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

sudo mkdir /home/sftp-user/public
sudo chown sftp-user: /home/sftp-user/public
sudo chmod 750 /home/sftp-user/public
Run Code Online (Sandbox Code Playgroud)

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


小智 12

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

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

来源

我遇到了一个非常相似的错误,修复我的目录权限为我解决了这个问题。

  • 这是我的问题。通过为我添加的用户添加详细信息,它对我有用:`Match User ftpusername`,然后是`ChrootDirectory %h`,然后是`ForceCommand internal-sftp`。除了设置`chown root /home/ftpusername`之外,我不需要注释掉UsePAM或进行任何其他更改。在我完成 chown 之前,我无法通过 sftp 连接。 (4认同)

小智 10

我正在使用 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
Run Code Online (Sandbox Code Playgroud)
  1. 创建组 sftp:

    groupadd sftp

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

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

  3. 为 sftp 设置与 ssh 一起使用的权限:

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. 重启服务:

    service ssh restart

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

  • 在 12.04 上不,它是“ssh”而不是“sshd” (2认同)