私はmount-o bindを使用して、chroots内のディレクトリをマウントします。これは非常にうまく機能します。問題は、これらのバインドマウントされたディレクトリの一部をchrootでのみ読み取ることです。
出来ますか?そうでない場合-それを達成する他の方法はありますか?
ローカルホストのマウントにNFSを使用することを考えていましたが、やり過ぎのようです。
この記事 によると可能です。最近のカーネルが必要です。
mount --bind -o ro /vital_data /untrusted_container/vital_data
LWN記事 からの直接回答:
mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data
Linux2.6.26以降でサポートされています。
Squeezeでは、以前は次のもののみを使用していました。
mount --bind /src /dst
その後
mount -o remount,ro /dst
今DebianWheezyであなたはしなければなりません:
mount -o remount,ro,bind /dst
リソースビジーメッセージを取り除くために:.
編集:Debian Jessieでは、mountはスマートにしようとし、sub dirsをマウントします。これは、すでにbindでマウントされている場合、再帰的になり、悪いことが起こります:)
Util-linuxを再び「ばかげた」ものにする特別なオプションがあります。解決策はこれです:
mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/
その後、-bind $ prefix/sbinを別のディレクトリにマウントできます。
マニュアルページから:
共有サブツリー操作。 Linux 2.6.15以降、マウントとそのサブマウントを共有、プライベート、スレーブ、またはバインド不可としてマークすることができます。共有マウントは、そのマウントのミラーを作成する機能を提供し、いずれかのミラー内のマウントとアンマウントが他のミラーに伝播するようにします。スレーブマウントはマスターから伝播を受け取りますが、その逆はありません。プライベートマウントには、伝播機能はありません。バインドできないマウントは、バインド操作でクローンを作成できないプライベートマウントです。詳細なセマンティクスは、カーネルソースツリーのDocumentation/filesystems/sharedsubtree.txtファイルに記載されています。サポートされる操作は次のとおりです。
mount --make-shared mountpoint mount --make-slave mountpoint mount --make-private mountpoint mount --make-unbindable mountpoint
次のコマンドを使用すると、特定のマウントポイントの下にあるすべてのマウントのタイプを再帰的に変更できます。
mount --make-rshared mountpoint mount --make-rslave mountpoint mount --make-rprivate mountpoint mount --make-runbindable mountpoint
--make- *操作が要求された場合、mount(8)はfstab(5)を読み取りません。必要な情報はすべてコマンドラインで指定する必要があります。 Linuxカーネルでは、単一のmount(2)syscallで複数の伝播フラグを変更することはできず、フラグを他のマウントオプションと混在させることはできないことに注意してください。
Util-linux 2.23以降、mountコマンドでは、いくつかの伝播フラグを一緒に、また他のマウント操作と一緒に使用できます。この機能は実験的なものです。伝播フラグは、先行するマウント操作が成功したときに、追加のmount(2)システムコールによって適用されます。このユースケースはアトミックではないことに注意してください。 fstab(5)の伝播フラグをマウントオプション(private、slave、shared、unbindable、rprivate、rslave、rshared、runbindable)として指定することができます。
mount --bind/vital_data/untrusted_container/vital_data
mount -o remount、ro、bind/untrusted_container/vital_data
2番目のマウントでは、「remount、ro、bind」を使用する必要があります。そうしないと、/ vital_dataの他のすべてのインスタンスも読み取り専用になります。