如果目录所有者不是 root,SFTP 将断开连接

如果目录所有者不是 root,SFTP 将断开连接

我在 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 访问?

相关内容