私のLinuxホストでunshare -m
rootアクセスが拒否されました。
Bubblewrapにはルートは必要bwrap --dev-bind / / --ro-bind-data xxxx xxxx
ありbwrap --dev-bind / / --tmpfs
ません。 (setuidなしbwrap
)
bubblewrapのように、ルートなしでマウントネームスペースをどのように使用できますか(しかしbubblewrapを使用したくありません)。
答え1
ユーザーの名前空間が必要です(例:)unshare -rm
。
答え2
いくつかは自分で降りる選択です。
(何も既に存在しないように)。
- golangでラッパーを作成し、必要な機能を提供します。
- 実行時に使用するラッパーをシェルまたはPythonで作成します。次に、パスワードが必要ないように
sudo
エントリを追加します。sudoers
次に、実行せずに動作するように別のラッパー/エイリアスを作成します。タイプsudo
。
答え3
必要なのは、root以外のユーザーにファイルシステムのディレクトリを再マップし、コマンドの終了時にクリーンアップされる環境で子プロセスを実行するだけであれば、このfaketree
ユーティリティを使用できると思います。ここで見つけることができます。あなたは読むことができますここで説明したブログ投稿。
ドキュメントから引用:
- ルートは必要ありません、pid、およびユーザーの名前空間がシステムで有効になっている限り、すべてのユーザーがそれを実行できます(ほとんどの最新のLinuxディストリビューションではデフォルトで設定されており、含まれているテストを使用してこれを確認できます)。
- ユーザーと同じUID / GIDを使用してコマンドを実行します。、rootとして実行されているように見えるシェルを作成しません(フラグでオーバーライドできます)。
LD_PRELOAD
ptraceや同様のトリックは必要ありません。。これは、修正が必要なLD_LIBRARY_PATH
場合やトレースから保護する必要があるLD_PRELOAD
バイナリだけでなく、静的バイナリにも機能します。- faketreeで実行されるコマンドにのみ影響します。これは、同じユーザーが同じシステム上で異なるパラメータを使用して複数のfaketreeインスタンスを並列に実行できることを意味します。
- 環境変数と権限を正しく伝播します。、さらにグラフィックツールがfaketreeで正しく実行できるようにします。
- FUSEに依存しない、ディスクのパフォーマンスとパフォーマンスは影響を受けません。
- 個々のファイルを上書きできます。、インクルード
/proc
、/sys
ファイル。- 信号を正しく処理しようとします。したがって、CI / CDパイプラインの統合は簡単でなければなりません。 SIGTERMをfaketreeに送信することは子供に伝播され、faketreeは終了する前にすべての子と子孫が終了するまで正しく待ちます。 faketreeのAは、
kill -9
すべての子孫も殺すことを保証します。- ラップされたコマンドがrealpathを呼び出すか、ファイルシステムを確認する場合、コマンドはマウントされた通常のファイルシステムのみを表示できます。