memo

2023-02-25

一般ユーザーで他人が所有しているファイル・ディレクトリを上書きしつつコマンドを実行する方法

例えば /etc/hosts を一時的に上書きしてコマンド実行したいとか、そういう要望に対して。

  • 方針としては namespace を作ってその中で bind mount するという感じで実現できる。

    • bwrap を使う場合の例:

      $ bwrap --bind / / --dev /dev --proc /proc --tmpfs /tmp --share-net --bind ~/hosts /etc/hosts /bin/bash

    • systemd-run を使う場合の例:

      $ systemd-run --user -t -p PrivateUsers=yes -p BindPaths=~/hosts:/etc/hosts /bin/bash

      (一般ユーザーで (--user を付けて) 実行する場合は、よくわからんが PrivateUsers=yes の設定も必要らしい)