
GCP の CentOS 7 コンピューティング エンジン VM で SFTP アップロードに使用されているディレクトリにストレージ バケットをマウントする際に、gcsfuse の使用に問題があります。最初は、次のようにマウントする基本的な手順を使用してマウントしようとしました。
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
これにより、ファイルとディレクトリの作成が可能になりました。ただし、SFTP の通常の使用例のように、jail ユーザー ディレクトリを chroot するために必要なファイルまたはディレクトリを chown/chmod することはできませんでした。
これを克服するために、マウントされた SFTP ストレージ ドライブへのシンボリック リンクを作成しました。これで問題は解決しましたが、SFTP にファイルを置くと正しく同期されるものの、バケットにファイルを置いた場合、マウントされた SFTP ディレクトリに同期されませんでした。rsync をいくつか試してみましたが、どの方向を試しても、いずれにしてもファイルが失われました (後で gcsfuse はリンクをサポートしていないことを知りました)。
さらに調査してみると、githubプロジェクトが見つかりましたKubernetes GCS SFTPセットアップ用有望そうでした。私はコンテナを一切使用していませんが、マウントがどのように行われるか、また使用されている SFTP 構成に興味がありました。そこで、次のようなマウントを作成しました。
gcsfuse --uid 1000 --gid 1001 -o nonempty wraheem /test_sftp/wraheem/upload
これにより、アップロード ディレクトリがユーザーごとに別のバケットにマウントされ (理想的ではありませんが、動作させることができれば OK)、ユーザー フォルダーにルート所有権を配置しながら、ユーザーにアップロード フォルダーの権限を与えて、ユーザーを 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 がユーザー ディレクトリを所有し、ユーザーがサブディレクトリを所有するという jail パターンを持つ他の通常のディレクトリでは正常に機能します。
マウント自体を見ると、次のことがわかりました。
wraheem on /test_sftp/wraheem/upload type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions)
私にとって目立ったのは、ファイルを追加でき、ls -l を実行するとフォルダーとファイルのアクセス許可が設定されているにもかかわらず、user_id と group_id がゼロ (root) に設定されていることです。
drwxr-xr-x. 1 wraheem wraheem 0 Aug 22 20:16 upload
権限があってもマウント ポイントは root が所有しているので問題にならないのではないかと思います。テストとして、デフォルトのリモート ディレクトリを /media (root が所有) に設定してみましたが、FileZilla で以前とまったく同じエラーが発生しました。
SFTP にこの方法で gcsfuse を使用した人はいますか? または、構成の問題の手順を私が見逃した箇所がわかる人はいますか?
皆さんが思いつく限りの助けをいただければ幸いです。現時点では、これが SFTP に使用できるかどうか疑問に思っています...