단계 복사

단계 복사

.unshareoverlayfs/tmp/proc​ 을 adduser(를 su) 새 사용자로 추가할 수도 있습니다 .

그러나 마운트를 설정할 때 overlayfs하위 레이어는 압축이 풀린 tarball이고 상위 레이어는 임시 디렉터리입니다. su새 사용자인 경우 위 단계를 반복하면 권한 거부 문제가 발생하여 실패합니다. 새로 생성된 사용자에게 오버레이 파일 시스템에서 읽을 수 있는 권한이 없는 것과 관련이 있는 것으로 의심되지만 adduser확실하지 않습니다. 로 demsg설정했는데도 /proc/sys/kernel/printk로그가 표시되지 않습니다.6

단계 복사

작동하는 것(압축이 풀린 타르볼)

터미널에서 새 설치 및 사용자 네임스페이스에 대한 공유 해제

unshare -pf --user --mount-proc --kill-child /bin/bash

다른 터미널 사용 newuidmapnewgidmap새로운 프로세스에서:

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

다른 터미널 사용 newuidmapnewgidmap새로운 프로세스에서:

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).

관련 정보