当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我一直在尝试设置一个 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 不能组合 AllowUsersAllowGroups (登录必须同时满足这两个规则),所以您必须创建一个额外的组,例如 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 选项运行 sshsftp 以调试消息。对于 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

Source

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

第三种思路

我正在使用 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:\n groupadd sftp

  2. 使用附加的新 sftp 组直接创建用户:\n sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false

  3. 为 sftp 设置与 ssh 一起使用的权限:\n chown root:root HomeFolder \n chmod 755 HomeFolder

  4. 重启服务:\n service ssh restart

注意,新 sftp 用户的主文件夹必须是 root 所有者。

第四种思路

这是允许的分步指南:

  1. 用户 bob 对 /home/bob/uploads 的 SFTP 访问

  2. 将 bob 锁定在 SSH 之外

  3. 使用用户名/密码而不是密钥:

首先,编辑您的\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)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12879.html,未经允许,请勿转载。