제가 이해한 바는 /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
고정된 기본 옵션 목록이라고 되어 있지만,시스템 테이블Wikipedia 페이지에는 "기본 설정은 각 파일 시스템의 파일 시스템 수준에서 정의됩니다"라고 나와 있습니다.
답변2
man mount
좋은 목록이 있습니다. 그러나 개별 파일 시스템은 자체 플래그를 정의할 수 있습니다. -> 각 파일 시스템에 대해 별도의 목록이 있습니다. 그러나 마운트 매뉴얼 페이지에 나열된 몇 가지 공통 플래그가 있습니다.
exec
기본 플래그입니다. 기본 마운트 플래그 목록은 man mount에도 있습니다(AFAIK 커널 sys_mount() 시스템 호출에는 그러한 것이 없습니다). 하지만 허용하지 않는 경우에는 를 사용해야 합니다 noexec
.
답변3
의 파일은 유틸리티 /proc
가 아닌 커널에 의해 생성됩니다 . mount
커널은 기본 커널 설정의 옵션을 무시합니다. 유틸리티의 기본값이 mount
항상 커널 기본값과 일치하는 것은 아닙니다. 다음 위치에 있는 소스 코드에서 커널 버전의 기본값을 확인할 수 있습니다.fs/proc_namespace.c
. 예를 들어 버전 3.15부터noexec
해당하는 경우 표시하고, noexec
그렇지 않은 경우에는 exec
아무것도 표시하지 않습니다 .