问题描述
我一直在尝试设置一个 SFTP 服务器,让多个用户 chroot 进入他们的主目录。我遵循了 this guide ( Archive.org link ) 的建议,然后在用户目录上执行了以下命令
chown root:root /home/user/
chmod 755 /home/user/
每个用户的主目录中都有一个名为 public
的附加文件夹,该文件夹归其用户所有,以便他们根据需要创建目录并上传和删除文件。 (这在我之前提到的指南中已建议)
现在,当我执行 sftp -P 435 user@localhost
时,我收到此错误:
\\n
Write failed: Broken pipe
\\n Couldn’t read packet: Connection reset by peer\\n
我该如何从这里开始?最终的想法是让其他机器上的每个用户都使用 FileZilla 登录到他们的 chroot 主目录,然后能够上传目录和文件。所有这些都在 SFTP 中(因为它更安全)
最佳思路
那篇文章还介绍了如何获得 chrooted shell 访问权限,但由于您只想要一个 sftp-only 帐户,请按照以下说明操作:
编辑 /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 不能组合 AllowUsers
和 AllowGroups
(登录必须同时满足这两个规则),所以您必须创建一个额外的组,例如 ssh-users
。添加允许通过 SSH 登录的用户(下面的 youruser
):
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
。
次佳思路
只是想在目录树上添加该文件夹权限,需要以某种方式设置。
\\n
sshd’s strict ownership/permissions requirements dictate that every\\n directory in the chroot path must be owned by root and only writable\\n by the owner.
\\n
我遇到了一个非常相似的错误,修复我的目录权限为我解决了这个问题。
第三种思路
我正在使用 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:\n
groupadd sftp
-
使用附加的新 sftp 组直接创建用户:\n
sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false
-
为 sftp 设置与 ssh 一起使用的权限:\n
chown root:root HomeFolder
\nchmod 755 HomeFolder
-
重启服务:\n
service ssh restart
注意,新 sftp 用户的主文件夹必须是 root 所有者。
第四种思路
这是允许的分步指南:
-
用户 bob 对 /home/bob/uploads 的 SFTP 访问
-
将 bob 锁定在 SSH 之外
-
使用用户名/密码而不是密钥:
首先,编辑您的\xa0/etc/ssh/sshd_config\xa0 文件:
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)