我在 Debian 11 上,使用 openssh-server 8.4,尝试构建一个用于 HTML 上传的 sftp 服务器。
上传目标目录为“/var/www/html”,用户名为“sftp-user”。
另外,这里假设服务器域名为example.com。
我将“/etc/ssh/sshd_config”文件中的“子系统”行更改为
Subsystem sftp internal-sftp
,并添加以下行以将端口 22 仅更改为 sftp。
Match LocalPort 22
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
在该行之后,我添加了以下行来指定上传目标目录:
Match user sftp-user
ChrootDirectory /var/www/html
PermitTunnel no
AllowAgentForwarding no
ForceCommand internal-sftp
我在这里使用 systemctl 重新启动了 sshd。
/var/www/html 目录的所有者用户应该是 www-data,因此我创建了一个名为“uploders”的组,并使用以下命令指定该组拥有该目录的所有权。并将用户“sftp-user”添加到“uploaders”组。
groupadd uploaders
chown -R /var/www/html www-data:uploaders
gpasswd -a sftp-user uploaders
最后执行以下命令,指定“/var/www/html”的模式,使该组也可以读写。
chmod -R 0775 /var/www/html
并尝试使用 sftp 命令访问服务器:
sftp -P 22 [email protected]
但是,会输出以下消息并且连接会关闭。
Connection to example.com closed by remote host.
Connection closed.
Connection closed
但是,如果我将“/var/www/html/”的所有者更改为 root,我就可以毫无问题地访问它。
如前所述,该目录必须由 www-data 拥有,并且不能更改。有没有办法即使目录所有者不是 root 也可以启用 sftp 访问?