私が理解したのは、カーネルの/proc/mounts
デフォルトを含むファイルシステムのすべてのマウントオプションをリストする必要があることです。それで、exec(他のものの中で)がここにリストされていないのを見て驚きましたか?
たとえば、fstab のルートおよび基本ファイルシステムは次のとおりです。
/dev/mapper/vg0-xen_root / ext4 noatime,errors=remount-ro 0 1
/dev/mapper/vg1-xen_home /home ext4 defaults 0 2
そして/proc/mountsにどのように現れるか:
/dev/mapper/vg0-xen_root / ext4 rw,noatime,errors=remount-ro,user_xattr,barrier=1,data=ordered 0 0
/dev/mapper/vg1-xen_home /home ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
ファイルシステムに依存しないデフォルト値は次のとおりですman mount
。
defaults
Use default options: rw, suid, dev, exec, auto, nouser, and async.
いくつかのデフォルト値(例rw
:)がリストされ、他のデフォルト値(例exec
:)がリストされないのはなぜですか?ファイルシステムに関連する完全なインストールオプションセットを取得する方法はありますか?
答え1
exec
その理由は逆になる可能性があり、リストされていnoexec
ますnoexec
。したがって、noexec
存在しない場合、ユーザーはそれがexec
有効であることを知ります。これはdev
/に似ていますnodev
。例外はrw
基本リストにありますが、リストされているようです。
注: mount(8) のマニュアルページにはこれがdefaults
固定されたデフォルトオプションのリストとなっていますが、システムテーブルウィキペディアページには、「デフォルト設定は各ファイルシステムのファイルシステムレベルで定義されています」と記載されています。
答え2
man mount
良いリストがあります。ただし、個々のファイルシステムは独自のフラグを定義できます。 - >各ファイルシステムに別々のリストがあります。ただし、マウントのマニュアルページにリストされているいくつかの共通フラグがあります。
exec
デフォルトのフラグです。デフォルトのマウントフラグのリストはman mountにもあります(AFAIKカーネルsys_mount()システムコールにはそのようなものはありません)。ただし、許可しない場合はを使用する必要がありますnoexec
。
答え3
のファイルは、ユーティリティ/proc
ではなくカーネルによって生成されます。mount
カーネルは、デフォルトのカーネル設定のオプションを無視します。ユーティリティのデフォルト値がmount
必ずしもカーネルのデフォルト値と一致するわけではありません。次の場所にあるソースコードでカーネルバージョンのデフォルト値を確認できます。fs/proc_namespace.c
。たとえば、バージョン3.15からnoexec
該当する場合は表示し、noexec
そうでない場合はexec
何も表示しません。