web-dev-qa-db-ja.com

読み取り専用のバインドマウント?

私はmount-o bindを使用して、chroots内のディレクトリをマウントします。これは非常にうまく機能します。問題は、これらのバインドマウントされたディレクトリの一部をchrootでのみ読み取ることです。

出来ますか?そうでない場合-それを達成する他の方法はありますか?

ローカルホストのマウントにNFSを使用することを考えていましたが、やり過ぎのようです。

9
user13185

この記事 によると可能です。最近のカーネルが必要です。

mount --bind -o ro /vital_data /untrusted_container/vital_data
6
Zoredache

LWN記事 からの直接回答:

mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data

Linux2.6.26以降でサポートされています。

16
blueyed

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)として指定することができます。

4
Anton Valqk

mount --bind/vital_data/untrusted_container/vital_data

mount -o remount、ro、bind/untrusted_container/vital_data

2番目のマウントでは、「remount、ro、bind」を使用する必要があります。そうしないと、/ vital_dataの他のすべてのインスタンスも読み取り専用になります。

2
rexo