如何设置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无法组合AllowUsers
和AllowGroups
(登录必须同时满足这两个规则),因此您需要创建一个额外的组,例如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
选项运行ssh
或sftp
以调试消息。 对于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
-
创建组sftp:
groupadd sftp
-
使用附加的新sftp组直接创建用户:
sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false
-
为sftp设置与ssh一起使用的权限:
chown root:root HomeFolder
chmod 755 HomeFolder
-
重启服务:
service ssh restart
请注意,必须为root用户提供新sftp用户的主文件夹。
只是想在目录树中添加该文件夹权限需要以某种方式设置。
sshd的严格所有权/权限要求规定chroot路径中的每个目录必须由root拥有,并且只能由所有者写入。
资源
我有一个非常类似的错误,修复我的目录权限为我解决了这个问题。
这是一个分步指南,允许:
- SFTP访问用户bob的/ home / bob / uploads
- 用SSH锁定bob
- 使用用户名/密码而不是密钥:
首先,编辑/ 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