私が達成したいこと
権限のないユーザーでプロセスを実行したいが、プロセスによって変更されたすべてのファイルは、シャドウフォルダーでのみ変更する必要があります。また、必要に応じてネットワーク機能を無効にしたいと思います。
私が試したこと
- lowerdirとupperdirを使用したオーバーレイの
/
インストール/temp/fakeroot
unshare -rn
chroot /temp/overlay
- 問題:マウントするにはルートが必要であり、オーバーレイはネストされたマウント(マイホームディレクトリ)を無視します。
unshare -rmn
、lowerdir、およびupperdirを使用して/
オーバーレイをインストールします。/temp/fakeroot
/tmp
問題:次のフォルダのサブフォルダなので、インストール中にエラーが発生しました。/
fuse-overlayfs
、、、unshare -rn
chroot
- 問題:5.16以降のカーネルでのみネストされたインストールでは読み取ることができますが、書き込むことはできません。
- 注:カーネルの制限に耐えることはできますが、ネストされたインストールのため使用できません。
選択肢が存在することを知っていますが、有望には見えません。
- Overlayroot:起動時にマウントする必要があり、変更の増分を保存しません。
overlayroot-chroot
:上記の内容に基づいて作成されました。- mergefsは、すべてのファイルシステムを1つにマージするために使用されます。これがどのように行われるのかわかりません
- Dockerを使用:ルートが必要で、変更デルタを保存しません。
これを行う方法を知っている人はいますか?
答え1
上記のいくつかのコマンドを組み合わせたソリューションを見つけました。
mkdir -p /tmp/overlay-test/{upper,workdir,mount}
unshare -- map-root-user --net --mount
または短いunshare -rnm
mount.mergerfs / /tmp/overlay-test/view -o use_ino,posix_acl=true
(オプションはオプションです)mount -t overlay overlay -o lowerdir=/tmp/overlay-test/view,upperdir=/tmp/overlay-test/upper,workdir=/tmp/overlay-test/workdir /tmp/overlay-test/mount
mount --rbind /dev /tmp/overlay-test/mount/dev
そしてmount --rbind /proc /tmp/overlay-test/mount/proc
chroot /tmp/overlay-test/mount /bin/bash
一般的なアイデアは、unshare
root以外のユーザーがファイルシステムをマウントできる環境を作成することです。次に、mergefsを使用して、すべてのサブインストール(たとえば、多くのディストリビューションのホーム)を単一のフォルダにマージします。この単一フォルダは、オーバーレイのサブディレクトリとして使用できます。コマンドを実行するには、オーバーレイフォルダにマッピングする必要がdev
あります。proc
とにかく、ユーザーはこれらのフォルダに書き込むことができないため、これは問題ではありません。最後に、chroot
overlayed-merged-rootfsに切り替えることができます。すべての変更は1つのディレクトリでのみ行われますupper
。完了したら、すべてのインストールを削除してクリーンアップすることを忘れないでください。