.を 新しいユーザーとして追加することもできます。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)
。