いくつかの複雑な要件のため、次の2行を入力する必要がありました/etc/fstab
。
/dev/xvdg1 /srv/storage ext4 $OPTIONS1 0 2
/srv/storage/dir /var/opt/dir none bind,$OPTIONS2 0 0
私の質問は次のとおりです。$ OPTIONS2のすべてのマウントオプション$ OPTIONS1を再リストする必要がありますか、それとも2番目の行(バインドマウント行)が$ OPTIONS1のオプションを継承しますか?
ちなみに、$ OPTIONS1で使用されている実際のオプションは次のとおりです。
rw,auto,async,noatime,nodiratime,barrier=0,delalloc
到着予定時刻:実際に私が使用していますが、UUID=...
それは/dev/xvdg1
重要ではありません。
答え1
短い答えは「おそらく」です。これは、渡すオプションと適用方法によって異なります。渡すオプションが厳密にスーパーブロックフラグである場合は、バンドルインストールの一部としてオプションを再リストする必要はありません。渡すオプションにvfsmountフラグが含まれている場合は、vfsmountフラグを再リストする必要があります。 「スーパーブロックフラグ」は基本ファイルシステムの一部であることを意味し、「vfsmountフラグ」はカーネルの一部を意味すると考えることができます(カーネルは実際にはorをすべて適用するので、これは技術的には正しくありませんが)。
これはすべてのファイルシステムに適用されるため、これを行うには、noexec
またはnodev
パラメータを使用する必要があります(参照:nosuid
このスレッドカーネルメーリングリストから有用な情報を入手してください。
$ truncate -s 10M container
$ mkfs.ext4 container
$ mkdir mountpoint binded
$ sudo mount -o loop container mountpoint
$ sudo chown "$EUID" mountpoint
$ sudo mount -o bind mountpoint binded
$ cat > mountpoint/script << 'EOF'
> #!/bin/bash
> echo "This works."
> EOF
$ chmod +x mountpoint/script
$ binded/script
This works.
$ sudo mount -o remount,noexec mountpoint
$ binded/script
This works.
$ mountpoint/script
bash: mountpoint/script: Permission denied
同じスクリプトであっても、noexec
ファイルシステムごとに適用されます。これはスーパーブロックフラグではなくvfsmountフラグであるためです。つまり、ファイルシステムではなくカーネルの機能です。
mount
これら 2 つのマウントポイントの出力が後に続くnoexec
ことがなく、どのように見えるかを確認します。
$ mount
[...]
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/mountpoint type ext4 (noexec,relatime,data=ordered)
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/binded type ext4 (relatime,data=ordered)
ただし、再マウントバインディング自体を使用すると、期待noexec
どおりに機能します。
$ sudo mount -o remount,noexec binded
$ mount
[...]
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/mountpoint type ext4 (noexec,relatime,data=ordered)
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/binded type ext4 (noexec,relatime,data=ordered)
ただし、デフォルトのファイルシステムのプロパティであるオプションは通常、バインドマウントで再実行する必要はありません(そして、サポートされているオプションの多くはファイルシステムによって定義されているため、エラーが発生する可能性があります)。簡単なデモはro
読み取り専用オプションですが、これは他のスーパーブロックフラグにも当てはまります。
$ sudo mount -o remount,ro mountpoint
$ > mountpoint/test
bash: mountpoint/test: Read-only file system
$ > binded/test
bash: binded/test: Read-only file system
今回はフラグが自動的に保持されます。
$ mount
[...]
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/mountpoint type ext4 (ro,noexec,relatime,data=ordered)
/tmp/tmp.hoiHQYPEFX/container on /tmp/tmp.hoiHQYPEFX/binded type ext4 (ro,noexec,relatime,data=ordered)