设置 sftp 用户帐户并限制对一个文件夹的读/写访问权限

设置 sftp 用户帐户并限制对一个文件夹的读/写访问权限

我想sftp在 Ubuntu 服务器上创建仅对一个特定文件夹具有读/写权限的用户帐户。我希望此用户有权通过 传输文件到我的服务器sftp。我的服务器托管在 Digital Ocean 上。

我已经关注本教程在 Digital Ocean 上,它似乎完全符合我的要求,但我却被困住了Step 4

步骤 4 建议你尝试这个命令:

ssh sammyfiles@localhost

结果应该是:

Error message
This service allows sftp connections only.
Connection to localhost closed.

相反,我的结果是:

packet_write_wait: Connection to 207.154.238.143 port 22: Broken pipe
Connection closed

接下来它指示运行这个,这显然应该可以工作:

sftp sammyfiles@localhost

结果应该是:

SFTP prompt
Connected to localhost.
sftp>

但我得到的却是:

forge@BitCloud:~$ sftp misjah@localhost
misjah@localhost's password: 
packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
Couldn't read packet: Connection reset by peer

如果我想sftp从外部与这个新创建的用户联系,我会收到同样的消息:

prmbair:~ primozrome$ sftp [email protected]
[email protected]'s password: 
packet_write_wait: Connection to 207.154.238.143 port 22: Broken pipe
Connection closed
prmbair:~ primozrome$ 

我究竟做错了什么?

评论更新: 问题似乎出在sshd_config-ChrootDirectory行。如果我使用,ChrootDirectory %h那么 sftp 到用户主目录就可以正常工作,但如果我使用ChrootDirectory /home/user/uploads(仅限于一个文件夹),那么:

packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe. 
Couldn't read packet: Connection reset by peer. 

任何想法?

答案1

https://man.openbsd.org/sshd_config

ChrootDirectory 指定在认证后 chroot(2) 到的目录路径名。在会话启动时,sshd(8) 检查路径名的所有组件是否都是 root 拥有的目录,并且其他任何用户或组都无法写入。

我遇到了同样的问题,解决方案是避免使用用户主目录中的目录,因为 /home/user 目录不应归 root 所有,而是在 /var/sftp/uploads 等目录中创建一个目录,其中 /var/sftp/ 由 root 所有,而 /var/sftp/uploads 由 sftp 用户所有。然后我可以在 uploads 中 chroot sftp 用户。

ChrootDirectory /var/sftp

在 /etc/ssh/sshd_config 中

答案2

我认为权利方面存在错误...

ls -l您能向我们展示一下目录中该命令的返回结果/var/sftp吗?

我认为/var/sftp有 755 个权限,但不是/var/sftp/uploads因为chmod如果我们不告诉它,命令不是递归的,所以您必须输入:( sudo chmod 755 -R /var/sftp递归的 -R 参数)。使用-R,中的所有子目录/var/sftp都将拥有 755 个权限。

你能尝试一下吗?

祝你好运 !

答案3

要解决此问题,您不仅需要更改文件夹的权限,还需要确保将文件夹所有者设置为 root。您可以使用以下命令实现此目的:sudo chown root:root /var/sftp

sudo chmod 755 /var/sftp

相关内容