为什么 /proc/mounts 中没有列出 exec 选项?

为什么 /proc/mounts 中没有列出 exec 选项?

我的理解是/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)情况下不显示任何内容。

相关内容