web-dev-qa-db-ja.com

sshfsにマウントされたフォルダにアクセスしているのはどのユーザーですか?

ドライブのネットワークバックアップを実行しようとしています。このプロセスには2台のマシンがあります。

PC1:

  • 2つのハードsdaとsdbを備えた遠隔マシン
  • sdbはバックアップが必要なドライブです
  • rootserの2人のユーザーが存在します

PC2:

  • 私が乗っているマシン
  • ユーザーAlanとして作業し、必要に応じてrootに移行できます

私はPC2で次のことを行います。

sshfs root@PC1:/dev ~/Desktop/netdisk/

うまくマウントします。 〜/ Destkop/netdisk /でsdbを利用できます。次のステップ:

Sudo dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz

エラーが発生します:

dd: opening `netdisk/sdb': Permission denied

Sdbの権限を確認すると:

brw-rw---- 1 root    disk    0, 0 Jan  3 10:47 sdb

私はPC1にroot @ PC1としてsshしたので、それは私がsshfsとしてマウントされたファイルへのルートアクセス権を持っていることを意味しませんか?

この例からはそうではないようですが、ここに私が欠けている概念はありますか?

リモートファイルには、ログインしたリモートユーザー、つまりrootとしてアクセスします。本当に他の方法はありません。

発生するエラーは、ローカル側の権限が原因です。 SSHFSのベースとなっているFuseでは奇妙なことです。デフォルトでは、マウントを行ったユーザーのみがFuseファイルシステムにアクセスできます。ルートでさえアクセスできません。 rootユーザーがアクセスできないようにすることはセキュリティ上の制限ではありません。rootはファイルシステムをマウントしたユーザーまでsu(1)/ setuid(2)できるため、Fuseの内部アーキテクチャの制限です。非rootユーザーとしてマウントを行ったので、その非rootユーザーとしてファイルシステムにもアクセスします。 Sudoでddを実行しても、ここでは何も購入されないので、実行するだけです。

dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz

which( ddの無用な使用 )はに簡略化されます

dd if=~/Destkop/netdisk/sdb | gzip -c > ~/Destkop/ddbackup/image.gz

猫の無駄な使用は、

gzip <~/Destkop/netdisk/sdb >~/Destkop/ddbackup/image.gz

sdbがブロックデバイスであり、リモート側の通常のファイルではない場合、リモートファイルシステムを介して機能することはできません(デバイスエントリがデバイスエントリの場合、ローカルデバイスになるため、望ましくありません) )。 sshを使用してアクセスします。

ssh root@PC1 cat /dev/sdb | gzip >~/Destkop/ddbackup/image.gz

いずれの場合も、リモート側で圧縮を行うことで帯域幅を節約できます。

ssh root@PC1 'gzip </dev/sdb' >~/Destkop/ddbackup/image.gz

sshfsはブロックデバイスを処理できません。すべてをファイルとして扱います。 sshdd、および次のようなコマンドラインリダイレクトを使用してクリエイティブにする必要があります。

PC2-> PC1:

dd of=/home/Alan/Desktop/image.iso < ssh root@PC1 "dd if=/dev/sdb"

またはPC1-> PC2から:

dd if=/dev/sdb | ssh root@PC2"dd of=/home/Alan/Desktop/image.iso"
4
h3rrmiller

マウントオプションallow_otherを使用して、任意のユーザーとしてこのデバイスにアクセスできるようにすることができます。このオプションを使用する場合は、 LinuxカーネルにはFuseに影響する未解決のセキュリティバグがあります であることに注意してください。

sshfs -o allow_other root@PC1:/dev ~/Desktop/netdisk/

user_allow_otherにも/etc/Fuse.confを設定してください。

詳細については、serverfault.comの この回答 を参照してください。

3
Robert Steward