OverlayFS는 권한이 없는 사용자 네임스페이스에서는 작동하지 않습니다.

OverlayFS는 권한이 없는 사용자 네임스페이스에서는 작동하지 않습니다.

OverlayFS 마운트는 권한이 없는 사용자 네임스페이스 내에서 액세스할 때 이상하게 작동합니다. 예를 들어 설명하는 것이 가장 좋습니다.

~# uname -a
Linux host 4.1.0-1-amd64 #1 SMP Debian 4.1.3-1 (2015-08-03) x86_64 GNU/Linux
~# runuser - test -c id
uid=2000(test) gid=2000(test) groups=2000(test)
~# cat /etc/subuid /etc/subgid | grep test
test:200000:65536
test:200000:65536
~# cd ~test
/home/test# mkdir -p upper/test1 lower/test2 target target.work
/home/test# chown -R test:test upper lower target target.work
/home/test# mount -t overlay -o lowerdir=lower,upperdir=upper,workdir=target.work overlay target
/home/test# mount | grep test
overlay on /home/test/target type overlay (rw,relatime,lowerdir=lower,upperdir=upper,workdir=target.work)

오버레이가 설치되어 예상대로 작동합니다.

/home/test# runuser - test
~$ cd target
~/target$ ls -l
total 8
drwxr-xr-x 2 test test 4096 Sep 15 13:50 test1
drwxr-xr-x 2 test test 4096 Sep 15 13:50 test2
~/target$ mkdir test3
~/target$ mkdir test2/test2-3
~/target$ mkdir test1/test1-3

이제 권한이 없는 사용자 네임스페이스를 사용해 보겠습니다.

~/target$ ^D
/home/test/target# cd ..
/home/test# umount target
/home/test# rm -rf upper lower target target.work
/home/test# mkdir -p upper/test1 lower/test2 target target.work
/home/test# chown -R 200000:200000 upper lower target target.work
/home/test# mount -t overlay -o lowerdir=lower,upperdir=upper,workdir=target.work overlay target
/home/test# mount | grep test
overlay on /home/test/target type overlay (rw,relatime,lowerdir=lower,upperdir=upper,workdir=target.work)

권한이 없는 네임스페이스를 허용해야 합니다.

/home/test# sysctl -w kernel.unprivileged_userns_clone=1

좋습니다. 다음을 시도해 보겠습니다.

/home/test# runuser - test
~$ lxc-usernsexec -m u:0:200000:65536 -m g:0:200000:65536 -m u:65536:2000:1 -m g:65536:2000:1 -- /bin/bash
~# cd target
~/target# ls -l
total 8
drwxr-xr-x 2 root root 4096 Sep 15 13:57 test1
drwxr-xr-x 2 root root 4096 Sep 15 13:57 test2

여태까지는 그런대로 잘됐다.

~/target# mkdir test3
~/target# mkdir test2/test2-3
~/target# mkdir test1/test1-3
mkdir: cannot create directory 'test1/test1-3': Permission denied

이것이 무너지는 곳입니다. Aufs는 동일한 시나리오에서 잘 작동합니다(데비안 4.1 커널에서는 aufs가 더 이상 지원되지 않는다는 점만 제외).

작동하게 하는 방법이 있나요?

답변1

target.work/work마운트가 루트에 속하기 때문이라고 생각합니다 . 마운트한 후 해당 디렉토리를 삭제해 볼 수 있습니까? 그러나 위의 디렉터리가 아닌 아래에 있는 디렉터리만 필요한 더 간단한 복사 사례를 찾았습니다.

# from user
mkdir -p upper lower/test2 target target.work
# from root
mount -t overlay -o lowerdir=lower,upperdir=upper,workdir=target.work overlay target
# from user again
unshare -Ur touch target/test2/1

설치 후 연결 하면 chown user:user target.work/work모든 것이 잘 작동합니다. 이것을 overlayfs 버그로 간주해야 할지 아니면 기능으로 간주해야 할지 잘 모르겠습니다 :)

답변2

눈치채셨는지 모르겠지만 두 번째 설치가 잘못되었습니다.

-m g:0:2000000:65536해야 한다 -m g:0:200000:65536. 귀하의 명령에는 추가 0.

귀하의 단계를 수행했지만 오류를 발견하지 못했습니다.

root@clone-newuser:/home/test# mount -t overlay -o lowerdir=lower,upperdir=upper,workdir=target.work overlay target
root@clone-newuser:/home/test# runuser - test
test@clone-newuser:~$ lxc-usernsexec -m u:0:100000:65536 -m g:0:100000:65536 -m u:65536:1000:1 -m g:65536:1000:1 -- /bin/bash
root@clone-newuser:~# ls
lower  target  target.work  upper
root@clone-newuser:~# cd target
root@clone-newuser:~/target# ls
test1  test2
root@clone-newuser:~/target# mkdir test3
root@clone-newuser:~/target# mkdir test2/test2-3
root@clone-newuser:~/target# mkdir test1/test1-3
root@clone-newuser:~/target#

그러나 저는 약간 더 새로운 커널을 사용하고 있습니다.

root@clone-newuser:/home/test# uname -srm
Linux 4.1.7-040107-generic x86_64

이것이 당신에게 도움이 될지 정말로 모르겠습니다.

관련 정보