设置 SFTP 以使用 Filezilla 登录服务器并访问我的主目录之外的文件

设置 SFTP 以使用 Filezilla 登录服务器并访问我的主目录之外的文件

我在 AWS 上有一个 ec2 实例,其中已经安装了一些 Wordpress。我想进行设置,让更多人处理自己的项目,如果我仍愿意,我也可以使用终端进入服务器。

我一直在关注以下教程 如何在 Ubuntu 上设置受限的 SFTP 服务器?还有一些其他的。我认为它们都只是教用户如何sftp进入他们自己的主文件夹,而且步骤一直在说addUser,但是有些用户已经存在,删除他们可能会导致一些问题。

如何授予现有用户使用 SFTP 进行 Wordpress 项目的权限?

假设我的所有 Wordpress 项目都已在 下,/var/www/并且已设置好www-data:www-data

设置这样的事确实很新颖。

在此先感谢您的帮助。

答案1

更新:最近,我将此答案转换为一个有用的脚本,并开始广泛地将其与 VSCode 及其 SSH 功能一起使用。该脚本现已在 GitHub 上提供:bindfs-到-home-bash


在这里,我假设您能够成功地通过 ssh/sftp 连接到您的用户的主目录,并且您想要(与您的用户一起)编辑由和-/var/www拥有的文件和文件夹(不更改其所有权)。user:groupwww-data:www-data

这里我也假设主题在 /var/www 中工作时如何避免使用 sudo?不能满足您的需求。例如,您不想更改 下的权限/var/www

我认为解决此任务最简单、最明确的方法是将/var/www(或其中的某个目录)挂载到用户的主目录中,并将所有者更改为您的用户和 :group。这可以通过以下工具实现bindfs

sudo apt update && sudo apt install bindfs

在这里,我们将把整个目录挂载/var/www到名为 also 的目录中www/,该目录位于用户的主目录中。

mkdir "$HOME/www"
sudo bindfs -u $(id -u) -g $(id -g) --create-for-user=www-data --create-for-group=www-data /var/www "$HOME/www"
  • 该命令替换$(id -u)$(id -g)返回当前用户的 UID 和 GID。

  • 如果您想要为另一个用户执行上述命令,请使用$(id -u <user>)$(id -g <user>)。其中<user>是实际用户名。

  • 有关所用参数的更多详细信息,请bindfs阅读其手册页 -man bindfs

  • 如果您想要卸载~/www$HOME/www),请使用以下命令:

      sudo fusermount -u ~/www
    

要在系统启动时自动安装,/var/www~/www在底部添加以下行/etc/fstab

bindfs#/var/www /home/<user>/www fuse force-user=<uid>,force-group=<gid>,create-for-user=www-data,create-for-group=www-data 0 0
  • 笔记:您应该<user>用实际的用户名替换;还应该将<uid>和替换<gid>为 的实际 UID 和 GID <user>,您可以通过以下命令找到它们:id -u <user>id -u <user>

  • 要查看结果,请重新启动系统或执行:

      sudo mount -a    # maybe you should execute `sudo fusermount -u ~/www` first 
    

以下是动画演示了其工作原理:

在此处输入图片描述

我发现这种方法的唯一限制是,当你更改绑定目录的所有权时,这也会更改源目录的所有权。例如,下一个命令不是一个好主意:

chown -R $(id -u):$(id -g) $HOME/www

也许有一个合适的bindfs命令选项可以防止这种情况发生,但我现在还不能确定。

笔记:

相关内容