나는 이 작업을 수행하기 위해 성공적으로 마운트를 사용했습니다.
sudo mount -o bind dir dir &&
sudo mount -o remount,bind,suid dir
두 번의 호출이 필요합니다 mount
. 더 짧은 시간 안에 작업을 수행할 수는 없습니다. 어쨌든 매뉴얼에는 두 번의 마운트 시스템 호출이 필요하다고 나와 있습니다.
하지만, 무엇을 넣어야 할지 모르겠습니다 /etc/fstab
.
내가 시도한 것은 다음과 같습니다.
/home/system/dir /home/system/dir none bind
/home/system/dir /home/system/dir none remount,bind,suid
그리고
/home/system/dir /home/system/dir none remount,bind,suid
답변1
바인드 마운트의 예상 동작을 트리거하기 위해 단일 항목을 사용하는 구문 해결 방법을 생각해 냈습니다 /etc/fstab
. 그렇지 않으면 for는 트리거되지 않습니다 suid
(그러나 for는 트리거됩니다 nosuid
). 참을성이 없다면 답변의 마지막 줄로 바로 가셔도 됩니다.
/etc/fstab
통과체계시작 시 및 통해산앞으로는 중복 항목이 지원되지 않습니다.체계각 항목을 설치 단위로 변환합니다. 같은 이름을 가진 두 개의 유닛이 있으면 문제가 발생할 것 같습니다.산자체적으로 동일한 문제가 있을 수 있습니다. 동일한 이름을 가진 두 항목을 구별할 방법이 없으므로
/etc/fstab
첫 번째 항목만 있을 수 있지만 어쨌든 다른 동작을 기대할 수 있습니다.따라서 다음 방법으로 이 문제를 처리해 보십시오.둘입학은
/etc/fstab
어려울 것 같습니다.이것산명령(혼자서 또는 함께체계) 반대의 경우만 잘 처리한다.
"부정적" 옵션(예:
nosuid
바인드 마운트)을 지정할 때 가장 최근 옵션이면 충분합니다.산명령(또는체계그렇지 않은 경우산) 올바르게 두 개를 방출합니다.mount(2)
시스템 호출 중 두 번째 호출은 추가MS_REMOUNT
플래그를 사용합니다. "긍정적" 옵션만 지정된 경우(시스템 호출에서 누락된 플래그로 변환됨) 이전 "부정적" 옵션을 복원하려는 의도가 있더라도 단일 마운트 시스템 호출이 실행됩니다.예를 들어 두 시스템 호출의 동작을 트리거하는 다른 옵션을 지정하면
bind,nodev
추가 "공격적인" 옵션(예:suid
withbind,nodev,suid
)도 두 번째 마운트 시스템 호출에서 시작됩니다(반대 플래그가 없기 때문에).suid
이것은 strace 예제에서 잘 작동합니다 .743790 mount("/home/system/dir", "/home/system/dir", 0x563792444220, MS_NODEV|MS_BIND, NULL) = 0 743790 mount("none", "/home/system/dir", NULL, MS_NODEV|MS_REMOUNT|MS_BIND, NULL) = 0
누락된
MS_NOSUID
존재MS_REMOUNT
로 인해 마운트 지점이 로 설정됩니다suid
. 이는 또한 상위 마운트에 설정된 다른 모든 기본 옵션이 연결된 바인드 마운트에 대해 명시적으로 다시 작성되어야 함을 의미합니다. 그렇지 않으면 해당 옵션은 사라집니다. 여기에 옵션을 지정하지 않으면suid
바인드 마운트가 다시 마운트됩니다.수에이드MS_NOSUID
두 경우 모두 두 번째 마운트 시스템 호출에서 플래그가 누락되어 발생하기 때문입니다. 두 번째 시스템 호출을 트리거하는 옵션은 여전히 존재해야 하며, 그렇지 않으면 전혀 실행되지 않습니다.
OP의 의도는 이곳에서 루트 없는 컨테이너를 실행하는 것이라고 추측하므로 이 동작을 계속 실행하려면 무해한 옵션을 사용해야 합니다. 내가 찾을 수 있는 유일한 후보자mount(2)
was MS_NOATIME
또는 MS_NODIRATIME
and MS_RELATIME
, 마지막 것은 오늘의 기본값이며 확실히 이미 존재합니다.
Linux 2.4부터 위의 일부플래그는 설치별로 설정할 수 있습니다., 다른 것들은 마운트된 파일 시스템의 슈퍼블록에 적용됩니다. 즉, 동일한 파일 시스템의 모든 마운트가 이러한 플래그를 공유한다는 의미입니다. (이전에는 모든 플래그가 슈퍼블록별로 이루어졌습니다.)
이것각 장착 지점 표시아래에 명시된 바와 같이:
- Linux 2.4부터:
MS_NODEV
및 플래그MS_NOEXEC
는MS_NOSUID
마운트 지점별로 설정할 수 있습니다.- 또한 Linux 2.6.16부터:
MS_NOATIME
및MS_NODIRATIME
.- 또한 Linux 2.6.20부터:
MS_RELATIME
.[...]
Linux 2.6.16부터
MS_RDONLY
슈퍼블록은 기본 파일 시스템뿐만 아니라 마운트 지점별로 설정하거나 지울 수 있습니다.[...]
따라서 오늘 실행된 항목의 궁극적으로 예상되는 효과는 다음과 같습니다.
/home/system/dir /home/system/dir none bind,relatime 0 0
단순히 다시 설정 relatime
하면 두 번째 마운트 syscall이 트리거되고 변경이 다시 허용됩니다 suid
. 이 경우 /home
플래그가 있으면 rw,nosuid,relatime
평소 대로 처리된다는 /home/system/dir
플래그가 있습니다.rw,relatime
설정값바이너리, 다른 것은 변경되지 않았습니다.
suid
그러나 일관성, 문서화/이해를 위해 그리고 향후 변경/개선을 방지하려면 의도된 목적을 명확하게 명시하는 것이 가장 좋습니다 .
/home/system/dir /home/system/dir none bind,relatime,suid 0 0