ステップコピー

ステップコピー

.を 新しいユーザーとして追加することもできます。unshareoverlayfs/tmp/procaddusersu

ただし、マウントを設定すると、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 -

上記のステップは私sunewuser

うまくいかない(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)

関連情報