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

我一直在尝试设置一个SFTP服务器,其中有多个用户chroot到他们的主目录。 我按照本指南的建议( Archive.org链接 ),然后在用户的目录上执行以下命令

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

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

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

写入失败:管道损坏
无法读取数据包:连接由同行重置

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

该文章还介绍了如何获得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 

如果不禁用此function,我的SSH服务器将在重新加载/重新启动时崩溃。 由于我不需要PAM的花哨function,这很好。

为了提高安全性,请限制可以登录的用户。 如果您忘记将SFTP用户添加到sftp组,则可以为他们提供免费的shell访问权限。 不是一个好的方案。 由于SSH无法组合AllowUsersAllowGroups (登录必须同时满足这两个规则),因此您需要创建一个额外的组,例如ssh-users 。 添加允许通过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以获取详细信息。 使用-vvv选项运行sshsftp以调试消息。 对于sftp ,该选项必须出现在主机之前,如sftp -vvv user@host

我正在使用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. 为sftp设置与ssh一起使用的权限:

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. 重启服务:

    service ssh restart

请注意,必须为root用户提供新sftp用户的主文件夹。

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

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

资源

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

这是一个分步指南,允许:

  1. SFTP访问用户bob的/ home / bob / uploads
  2. 用SSH锁定bob
  3. 使用用户名/密码而不是密钥:

首先,编辑/ etc / ssh / sshd_config文件:

 sudo nano /etc/ssh/sshd 

向下滚动并修改:

 PasswordAuthentication yes 

并在底部添加:

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

按Ctrl-X退出并保存。

现在添加用户:

 sudo useradd bob sudo passwd bob 

现在添加组并禁用ssh:

 sudo groupadd sftpusers sudo usermod -g sftpusers bob sudo usermod -s /usr/bin/rssh bob sudo usermod -d /home/bob bob 

现在设置权限:

 sudo chown root:root /home/bob/ sudo chmod 755 /home/bob/ sudo mkdir /home/bob/uploads sudo chown bob /home/bob/uploads sudo service sshd restart 

所有这些都以root用户身份登录(Amazon Linux AMI上的ec2-user)

另请注意,将Match指令添加到配置文件时,任何与您匹配的指令无关的指令可能会停止工作。 而不是评论不兼容的所有内容,只需将包含Match指令的任何部分移动到配置文件的末尾。

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

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

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

完成后一定要再次开始ssh! 命令:service ssh start