我在使用 gcsfuse 将存储桶安装到 GCP 中 CentOS 7 计算引擎 VM 上用于 SFTP 上传的目录中时遇到困难。我最初尝试使用基本说明进行安装,安装方式如下:
GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse al-dev-sftp /sftp
但我无法在挂载的目录中创建文件/目录。经过研究,我按如下方式挂载了驱动器:
GOOGLE_APPLICATION_CREDENTIALS=/root/service_account.json gcsfuse -o allow_other --gid 0 --uid 0 --file-mode 777 --dir-mode 777 al-dev-sftp /sftp
它允许创建文件和目录。但是,我无法根据需要 chown/chmod 任何文件或目录,以 chroot jail 用户目录,这是 SFTP 的正常用例。
为了解决这个问题,我创建了指向已安装的 SFTP 存储驱动器的符号链接,这很好,直到我们注意到将文件放在 SFTP 上可以正确同步,但如果我们将文件放在存储桶中,它就不会同步回已安装的 SFTP 目录。我尝试进行一些 rsync,但无论我尝试哪个方向,我们都会丢失文件。(我后来读到 gcsfuse 不支持链接)。
经过进一步的研究,我发现了一个 Github 项目用于 kubernetes gcs sftp 设置看起来很有希望。我没有使用任何容器,但我对挂载方式以及使用的任何 SFTP 配置感兴趣。这促使我创建了一个像这样的挂载:
gcsfuse --uid 1000 --gid 1001 -o nonempty wraheem /test_sftp/wraheem/upload
这会将我的上传目录挂载到每个用户的单独存储桶中(虽然不理想,但如果我能让它工作那么就可以了),并且我可以将根所有权放在用户文件夹上,同时授予用户上传文件夹的权限,从而完美地将用户囚禁在 SFTP 中。
问题在于,当用户通过 SFTP(在 filezilla 中)登录并尝试导航到他们的上传文件夹时,他们会收到一条错误消息:
Status: Retrieving directory listing of "/test_sftp/wraheem/upload"...
Command: cd "/test_sftp/wraheem/upload"
Error: Directory /test_sftp/wraheem/upload: no such file or directory
这显然是存在的。
我的 sshd 配置条目是:
Match User wraheem
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /test_sftp/wraheem
AllowTcpForwarding no
它可以与任何其他具有 root 拥有用户目录且用户拥有子目录的监狱模式的普通目录配合使用。
我查看了坐骑本身并看到了以下情况:
wraheem on /test_sftp/wraheem/upload type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
让我印象深刻的是,尽管我可以添加文件,但 user_id 和 group_id 被设置为零(root),并且在执行 ls -l 时设置了文件夹和文件权限:
drwxr-xr-x. 1 wraheem wraheem 0 Aug 22 20:16 upload
我想知道即使我有权限,挂载点是否归 root 所有,所以这根本无关紧要。作为测试,我尝试将默认远程目录设置为 /media(归 root 所有),并在 filezilla 中得到与之前完全相同的错误。
有人以这种方式使用 gcsfuse 进行 SFTP 吗?或者有人能看出我错过了配置问题中的哪一步吗?
谢谢你们能想到的任何帮助;我想知道这是否可以用于 SFTP......