web-dev-qa-db-ja.com

ユーザースペースの別の場所(mount --bindなど)にディレクトリをバインドできるLinux vfsツールはありますか?

ユーザープロセスの場合、他の場所にディレクトリをマウントしたいのですが、ルート権限のないユーザースペースにマウントします。 mount --bind/Origin/destのようなものですが、vfsラッパーがあります。ユーザーモードで微調整されたchrootのように。

プログラムは、syscallをファイルにラップして、必要なパスを「置換」します。次のようなコマンドラインで呼び出すことができます。

bindvfs/fake-home:/ home ls/home

このalredyが存在すると確信しています! :)

7
Keymon

PRoot は、例とほぼ同じ方法で使用できます。

proot -b /fake-home:/home ls /home

BindFS/Fuseとは異なり、PRootは、所有していないファイルやディレクトリをバインドできます。

2
Cedric

parrot プログラムは、システムコールを傍受し、特定のパスをリダイレクトします(たとえば、/anonftpで始まるすべてのパスは、FTP経由でリモートファイルに透過的にアクセスするために再マップされます)。また、完全にユーザースペースで実行されます。

ただし、一般的および一般的でないネットワークプロトコルの印象的な配列にもかかわらず、parrotには、要求されたような単純なファイルシステム->ファイルシステムの書き換えを行うモジュールがありません。 C言語プログラミングを知っていれば、これを追加するのは非常に簡単です。

または、 bindfsFuse の上で実行されます)は、ユーザースペースではmount --bindのように機能します。 (ただし、これは、質問で述べたように、/home/fake-homeにリダイレクトする場合とは逆の方向に進みます。)

2
Riccardo Murri

VFSは、ファイルシステムの非ルートマウントをすでに許可しています。 userまたはusersオプションをfstabエントリに追加し、vfs.usermount=1/etc/sysctlにあることを確認できます。

ただし、これによってchrootのようなコントロールが得られることはありません。 bindオプションは、権限を変更したり、「代替」アクセスを許可したりすることはありません。これは、まったく同じファイルシステムとコンテンツの2番目のmtabエントリです。バインドマウントの変更はオリジナルに影響します。

先に進む前に、必ず最終目標を明確にしてください。

1
nzwulfin

mount_namespacesを使用すると、他のプロセスでは見られないmount --bindを実行できます。ただし、通常、mount --bindはrootユーザーのみに制限されています(セキュリティ上の理由から)。したがって、mount_namespacesをroot以外のユーザーが使用できるようにするには、最初に ser_namespaces を使用して、新しい名前空間の「ローカルルート」になり、この操作が許可されるようにする必要があります。

このようにシェルでこれを試すことができます-この例は、chrootディレクトリの準備でのuser&mountスペースの使用を具体的に示しています(そしてchroot操作も通常特権があります):

unshare --user --map-root-user --mount-proc --pid --fork
mkdir -p newroot/dev
mount --rbind /dev newroot/dev
....other chroot preparation....
chroot newroot
su - user1

ディレクトリに他のマウントポイントが含まれている場合(私の場合はmount --rbindが機能する)、新しいuser&mount名前空間ではこれのみが機能するため、(mount --bindの代わりに)/dev/を使用していることに注意してください。

おそらく、これについての説明は、ユーザーは、通常は特権のないユーザーには表示されないもの、つまり「サブマウント」によって隠されたサブディレクトリを表示する方法を取得するべきではないということです。サブマウントを削除しないために、--rbindのみが許可されます。