ルートのJail / Sandboxプロセスをオーバーライドし、変更を追跡します。

ルートのJail / Sandboxプロセスをオーバーライドし、変更を追跡します。

私が達成したいこと

権限のないユーザーでプロセスを実行したいが、プロセスによって変更されたすべてのファイルは、シャドウフォルダーでのみ変更する必要があります。また、必要に応じてネットワーク機能を無効にしたいと思います。

私が試したこと

  • lowerdirとupperdirを使用したオーバーレイの/インストール/temp/fakerootunshare -rnchroot /temp/overlay
    • 問題:マウントするにはルートが必要であり、オーバーレイはネストされたマウント(マイホームディレクトリ)を無視します。
  • unshare -rmn、lowerdir、およびupperdirを使用して/オーバーレイをインストールします。/temp/fakeroot
    • /tmp問題:次のフォルダのサブフォルダなので、インストール中にエラーが発生しました。/
  • fuse-overlayfs、、、unshare -rnchroot
    • 問題:5.16以降のカーネルでのみネストされたインストールでは読み取ることができますが、書き込むことはできません。
    • 注:カーネルの制限に耐えることはできますが、ネストされたインストールのため使用できません。

選択肢が存在することを知っていますが、有望には見えません。

  • Overlayroot:起動時にマウントする必要があり、変更の増分を保存しません。
  • overlayroot-chroot:上記の内容に基づいて作成されました。
  • mergefsは、すべてのファイルシステムを1つにマージするために使用されます。これがどのように行われるのかわかりません
  • Dockerを使用:ルートが必要で、変更デルタを保存しません。

これを行う方法を知っている人はいますか?

答え1

上記のいくつかのコマンドを組み合わせたソリューションを見つけました。

  1. mkdir -p /tmp/overlay-test/{upper,workdir,mount}
  2. unshare -- map-root-user --net --mountまたは短いunshare -rnm
  3. mount.mergerfs / /tmp/overlay-test/view -o use_ino,posix_acl=true(オプションはオプションです)
  4. mount -t overlay overlay -o lowerdir=/tmp/overlay-test/view,upperdir=/tmp/overlay-test/upper,workdir=/tmp/overlay-test/workdir /tmp/overlay-test/mount
  5. mount --rbind /dev /tmp/overlay-test/mount/devそしてmount --rbind /proc /tmp/overlay-test/mount/proc
  6. chroot /tmp/overlay-test/mount /bin/bash

一般的なアイデアは、unshareroot以外のユーザーがファイルシステムをマウントできる環境を作成することです。次に、mergefsを使用して、すべてのサブインストール(たとえば、多くのディストリビューションのホーム)を単一のフォルダにマージします。この単一フォルダは、オーバーレイのサブディレクトリとして使用できます。コマンドを実行するには、オーバーレイフォルダにマッピングする必要がdevあります。procとにかく、ユーザーはこれらのフォルダに書き込むことができないため、これは問題ではありません。最後に、chrootoverlayed-merged-rootfsに切り替えることができます。すべての変更は1つのディレクトリでのみ行われますupper。完了したら、すべてのインストールを削除してクリーンアップすることを忘れないでください。

関連情報