尝试在已安装的硬盘驱动器上设置 SFTP 服务器,并遵循大量教程中的说明,在登录时始终收到“client_loop:发送断开连接:连接重置”。
我首先创建一个名为 sftp 的组,然后将用户分配给该组,其主目录位于 HDD 中:
sudo useradd -g sftp -d /media/linux/MyHDD/NAS/USERNAME -s /sbin/nologin USERNAME-nas
sudo passwd USERNAME
其中 USERNAME 是我的个人用户名
然后,我尝试将 USERNAME 文件夹之上的所有内容的所有权设置为 root,并将 USERNAME 文件夹设置为用户:
sudo chown -R root:root /media
sudo chown -R USERNAME:sftp /media/linux/MyHDD/NAS/USERNAME
编辑 sshd_config 文件以包含:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /media/linux/MyHDD/NAS/USERNAME
ForceCommand internal-sftp
AllowTcpForwarding no
X11 Forwarding no
不要忘记重新启动 sshd 服务
sudo systemctl restart sshd
由于我想在我的 Linux 计算机上访问此文件夹,因此我将媒体文件夹的权限设置为 777
sudo chmod -R 777 /media
完成所有这些后,当尝试登录 sftp 并输入密码时,我会看到:
sftp -P PORTNO USERNAME@IP
client_loop: send disconnect: Connection reset
Connection closed
我不知道这是权限问题还是所有权问题。我在这方面花了很长时间,似乎无法弄清楚,所以任何帮助将不胜感激。
答案1
ChrootDirectory /media/linux/MyHDD/NAS/USERNAME
[...]
sudo chown -R USERNAME:sftp /media/linux/MyHDD/NAS/USERNAME
[...]
sudo chmod -R 777 /media
“ChrootDirectory”功能要求 chroot 目录及其父目录具有某些所有权和权限:
Chroot目录
指定身份验证后 chroot(2) 的目录路径名。在会话启动时 sshd(8) 检查路径名的所有组成部分都是 root 拥有的目录,任何其他用户或组都无法写入。 chroot 后,sshd(8) 将工作目录更改为用户的主目录。 ChrootDirectory 的参数接受 TOKENS 部分中描述的令牌。
设置 chroot 目录的方式存在两个问题:
首先,/media
、/media/linux/MyHDD/NAS/USERNAME
以及其间的所有目录都不能是全局或组可写的。它们需要是模式 755 而不是 777。
其次,/media/linux/MyHDD/NAS/USERNAME
它本身必须由 root 拥有。其中的目录和文件可以由用户拥有,但USERNAME
目录本身必须由root拥有。