我的理解是/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
如果适用则显示;在 no- noexec
(即exec
)情况下不显示任何内容。