sshfsを使用して、リモートフォルダーを別のサーバーからローカルサーバーにマウントします。リモートフォルダーのマウントは、次のコマンドを使用して問題なく機能します。
sshfs -o allow_other someServerFromSSHConfig:/home/data/somefolder/ /some/local/folder
問題は、(ルート権限に関係なく)chownを使用してファイルの所有者を変更できないことです。
chown: changing ownership of ‘/somefolder/file.img’: Permission denied
フォルダーにアクセスするユーザーは、Fuseグループのメンバーです。 sshfsに追加のマウントオプションを追加して、所有者をuserx:groupx
として設定しても、userx
およびchown -R userx:groupx [...]
を使用して権限を変更することはできません
マウントされたフォルダー内のファイルにユーザー権限を設定できると思いますが、そうではありません。
コメントで言ったように、data @ remote_serverとして接続します。つまり、chown
はまったくできません。 sshfsは単なる大まかな抽象化であり、sftp data@remote_server
内で実行できるアクションに対してのみ許可されます。これもすべての抽象化に漏れがあります。
Root_remote_serverのみがremote_serverでchown
を実行できます。 local_serverのユーザーは関係ありません。
sftp root@remote_server
を実行するには、通常、リモートのPermitRoot yes
でPermitRoot without-password
または/etc/ssh/sshd_config
を実行する必要があります。これは危険です。
PS。 PermitRoot no
オプションがあるため、デフォルトでは、sshdはrootログインをまったく許可しません。したがって、通常はsshfs root @ remote_Hostを実行できません。ルート経由でchownの動作をテストする場合は、PermitRoot without-password
を設定することをお勧めします。これは、公開鍵が/root/.ssh/authorized_keys
に追加されたときにrootがログインできることを意味します。この設定では、rootはrootパスワードを提供するだけではログインできないため、多少安全です。
PS2。もう少しセキュリティが必要な場合は、このファイル共有に対してのみsshdの別のインスタンスを設定できます。 ForceCommand internal-sftp
とchroot
を使用すると、ルートのセキュリティが大幅に向上しますが、新しいTCPポートと新しいファイアウォールの例外を使用する必要があります。
Sshfsがマウントされたフォルダーに特定のファイルの所有権を設定する場合は、uid=USER_ID_N,gid=USER_GID_N
およびidmap=user
オプションを使用してこれを行う必要があります。
# sshfs -o idmap=user sessy@mycomputer:/home/sessy /mnt/sessy -C -p 9876
彼は、リモートユーザー「sessy」のUIDを、このプロセスを実行するローカルユーザー(上記の例では「root」)にマップし、GIDは変更されません。知っておくべきことの1つは、UID(ユーザーID、システム上のユーザーの一意の番号)が2つのホストで必ずしも同じではないことです。 ls -lを実行すると、各ファイルに関連付けられているユーザー名が3列目に出力されます。ただし、ファイルシステムにはUIDのみが保存され、lsはUIDを検索して、それに関連付けられているユーザー名を見つけます。 Unixでは、ユーザー名ではなく、UIDが重要です。したがって、ローカルホストで1000、リモートホストで1003の場合、sshfsマウントされたディレクトリには、ファイルの異なるユーザー名が表示されます。ただし、これは問題ではありません。リモートマシンのsshサーバーが実際にファイルの読み取りと書き込みを行うサーバーだからです。そのため、ls -lに異なるUIDとして表示されますが、変更はすべてリモートホストのsshサーバーを通じて行われ、リモートマシンの正しいUIDが使用されます。ファイルのUIDを調べるプログラムを使用しようとすると、問題が発生する可能性があります(例:lsは間違ったユーザー名を出力します)。
idmap = userオプションは、リモートユーザーが所有するファイルがローカルユーザーが所有することを保証します。 idmap = userを使用しない場合、コンピューターとリモートコンピューターは各ユーザー名に関連付けられた数値ユーザーIDについて異なる考えを持っているため、マウントされたディレクトリ内のファイルは他の誰かが所有しているように見える可能性があります。 idmap = userは、他のユーザーのUIDを変換しません。