
ユーザープロセスの場合は、ディレクトリを他の場所にマウントしたいが、root権限を持たないユーザースペースにマウントしたいと思います。 mount --bind /origin /destに似ていますが、vfsラッパーがあります。ユーザーモードで微調整されたchrootと同じです。
プログラムは、必要なパスを「置き換える」ためにシステムコールをファイルにラップします。次のコマンドラインを使用して呼び出すことができます。
バインディングvfs /fake-home:/home ls /home
私はこれがすでに存在すると確信しています! :)
答え1
あなたはそれを使用することができますプロットあなたの例とほぼ同じ方法です。
proot -b /fake-home:/home ls /home
BindFS / FUSEとは異なり、PRootはユーザーに属していないファイルとディレクトリをバインドできます。
答え2
これオウムプログラムはユーザーが要求した操作を実行できます。システムコールを傍受し、特定のパスをリダイレクトします(たとえば、/anonftp
FTPを介してリモートファイルに透過的にアクセスするために始まるすべてのパスが再マップされます)。また、完全にユーザー空間で実行されます。
しかし、一般的で一般的なネットワークプロトコルの印象的な配置にもかかわらず、parrot
あなたが必要とするように、単純なファイルシステム - >ファイルシステムの書き換えを実行するモジュールはありません。 Cプログラミングを知っていれば、追加するのはとても簡単です。
または、ファイルシステムバインディング(続きを走るヒューズ) は
mount --bind
ユーザー空間のように動作します。 (しかし、これはあなたの質問で言及したリダイレクトとは反対です/home
。)/fake-home
答え3
VFSはすでにファイルシステムのルートではなくマウントを許可します。 fstabエントリにまたはオプションをuser
追加します。users
vfs.usermount=1
/etc/sysctl
しかし、これらのどれもchrootのような制御機能を提供しません。このbind
オプションは、権限を変更したり、同じファイルシステムとコンテンツへの2番目のmtabエントリである「代替」アクセスを許可しません。バンドルインストールの修正は元のインストールに影響します。
さらに進む前に最終目標を明確にするようにします。
答え4
mount --bind
mount_namespacesを使用すると、他のプロセスでユーザーを見ることはできません。ただし、通常はmount --bind
rootユーザーにのみ適用されます(セキュリティ上の理由から)。したがって、root以外のユーザーにmount_namespacesを便利にするには、まず次のものを使用する必要があります。ユーザーネームスペース新しい名前空間で「ローカルルート」になると、これは許可されます。
次のようにシェルで使用できます。この例では、chrootディレクトリを準備するときのユーザーとマウントスペースの使用を具体的に示しています(これは通常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
ディレクトリに別のマウントポイントが含まれている場合(私の場合はそうです)、mount --bind
新しいuser&mount名前空間にのみ適用されるため(代わりに)使用しています。/dev/
おそらく、これについての説明は、ユーザーが一般に権限のないユーザーには見えないこと、つまり「サブインストール」によって隠されたサブディレクトリを表示する方法がないことです。ベースは剥がさないで、--rbind
許してください。