.unshare
overlayfs
/tmp
/proc
을 adduser
(를 su
) 새 사용자로 추가할 수도 있습니다 .
그러나 마운트를 설정할 때 overlayfs
하위 레이어는 압축이 풀린 tarball이고 상위 레이어는 임시 디렉터리입니다. su
새 사용자인 경우 위 단계를 반복하면 권한 거부 문제가 발생하여 실패합니다. 새로 생성된 사용자에게 오버레이 파일 시스템에서 읽을 수 있는 권한이 없는 것과 관련이 있는 것으로 의심되지만 adduser
확실하지 않습니다. 로 demsg
설정했는데도 /proc/sys/kernel/printk
로그가 표시되지 않습니다.6
단계 복사
작동하는 것(압축이 풀린 타르볼)
터미널에서 새 설치 및 사용자 네임스페이스에 대한 공유 해제
unshare -pf --user --mount-proc --kill-child /bin/bash
다른 터미널 사용 newuidmap
및 newgidmap
새로운 프로세스에서:
newuidmap $PID 0 1000 1 1 100000 65536
newgidmap $PID 0 1000 1 1 100000 65536
첫 번째 터미널로 돌아가서 네임스페이스에서 rootfs의 압축을 풀고 마운트를 설정한 다음 chroot를 실행하고 새 사용자를 만듭니다.
mkdir rootfs
tar -xvf alpine-minirootfs-3.15.3-x86.tar -C rootfs
mkdir mountpoint
mount --bind rootfs/ mountpoint/
mkdir -p mountpoint/tmp/
mkdir -p mountpoint/proc/
mount -t tmpfs none mountpoint/tmp/
mount -t proc none mountpoint/proc
cd mountpoint/
pivot_root . .
exec chroot . /bin/sh
# Create the new user and su as it
adduser -s /bin/sh -D newuser
# The below command works
su newuser -
위의 단계는 나 su
에게 newuser
.
작동하지 않는 것(overlayfs)
재정의 fs가 지원하는 마운트 지점을 변경해도 아무런 효과가 없습니다.
위 단계를 반복하여 rootfs를 준비합니다.
터미널에서 새 설치 및 사용자 네임스페이스에 대한 공유를 해제합니다.
unshare -pf --user --mount-proc --kill-child /bin/bash
다른 터미널 사용 newuidmap
및 newgidmap
새로운 프로세스에서:
newuidmap $PID 0 1000 1 1 100000 65536
newgidmap $PID 0 1000 1 1 100000 65536
첫 번째 터미널로 돌아가 네임스페이스에서 rootfs의 압축을 풀고 오버레이 설치를 설정한 다음 chroot하고 새 사용자를 만듭니다.
mkdir rootfs
tar -xvf alpine-minirootfs-3.15.3-x86.tar -C rootfs
mkdir mountpoint
# This is the key difference from above
mount -t overlay none -o lowerdir=$(realpath ./rootfs),upperdir=$(mktemp -d),workdir=$(mktemp -d) $(realpath ./mountpoint)
mkdir -p mountpoint/tmp/
mkdir -p mountpoint/proc
mount -t tmpfs none mountpoint/tmp/
mount -t proc none mountpoint/proc
cd mountpoint/
pivot_root . .
exec chroot . /bin/sh
# Create the new user and su as it
adduser -s /bin/sh -D newuser
# The below command fails with permission denied
su newuser -
#
# su: can't execute '/bin/sh': Permission denied
환경정보
위 명령은 커널을 사용하여 Ubuntu Impish에서 실행됩니다.5.13.0-37-generic
답변1
상위 디렉터리에 대한 권한을 확인하세요. mktemp -p
새 사용자를 위해 읽기 가능하고 실행 가능한 디렉토리를 생성해야 합니다. 아마도 stat /
피벗 루트 호출이 0700
언제 표시되어야 하는지 표시될 것입니다 0755
.
다시 시도하십시오 $(umask 0022; mktemp -p)
.