バインドマウントのみを読み取りますか?


9

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

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

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

回答:



16

LWN記事からの直接の回答:

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

Linux 2.6.26以降でサポートされています。


4

Squeezeでは、以前は次のもののみを処理していました。

mount --bind /src /dst

その後

mount -o remount,ro /dst

Debian Wheezyでは、次のことを行う必要があります。

mount -o remount,ro,bind /dst

リソースビジーメッセージを取り除くために:

編集:Debian Jessieでは、mountはスマートになり、サブディレクトリをマウントします。すでにバインドされている場合は再帰的になり、悪いことが起こります:)

util-linuxを強制的に再び「愚か」にする特別なオプションがあります。ソリューションはこれです:

mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/

その後、-bind $ prefix / sbinを別のディレクトリにマウントできます。

manページから:

共有サブツリー操作。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)の伝播フラグをマウントオプションとして指定できます(プライベート、スレーブ、共有、バインド不可、rprivate、rslave、rshared、runbindable)。


2

mount --bind / vital_data / untrusted_container / vital_data

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

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


いいえ、ありません(少なくともLinux 3.19ではできません)。bindオプションを追加する必要性をどこで経験しましたか?
カールリヒター

1
@KarlRichter-私はそれをテストしていませんが、man 2 mountそれbindが必要であることを示しています: "Linux 2.6.26以降、このMS_REMOUNTフラグはMS_BINDマウントポイントごとのフラグのみを変更するために使用できます。これは、" read基になるファイルシステムを変更せずにマウントポイントの-only "フラグを指定します。mountflagsas:MS_REMOUNT | MS_BIND | MS_RDONLYを指定すると、他のマウントポイントに影響を与えることなく、このマウントポイントを読み取り専用でアクセスできるようになります。(Ubuntu 19.10、Linux man-pagesリリース5.0.2、日付:2019-08-02)
mpb

1
@KarlRichter -更新:によるとunix.stackexchange.com/a/128388の、より新しいバージョンlibmountの呼び出しmount()機能二回の単一の呼び出し中/usr/bin/mountのプログラム。したがってlibmount、の2つの呼び出し/usr/bin/mountが必要かどうかを決定するのは、カーネルバージョンではなくのバージョンです。
MPB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.