몇 가지 복잡한 요구 사항으로 인해 다음 두 줄을 입력해야 했습니다 /etc/fstab
.
/dev/xvdg1 /srv/storage ext4 $OPTIONS1 0 2
/srv/storage/dir /var/opt/dir none bind,$OPTIONS2 0 0
이제 내 질문은: $OPTIONS2의 모든 마운트 옵션 $OPTIONS1을 다시 나열해야 합니까, 아니면 두 번째 줄(바인드 마운트 줄)이 $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
이 두 마운트 지점의 출력이 이후에 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)