/nix/store
OCIコンテナが書き込み可能なかのようにマウントされた読み取り専用ディレクトリにアクセスできるようにオーバーレイをインストールする必要があるスクリプトがあります。
ルート/ホイール以外のユーザーにこのスクリプトを実行させたいと思います。最も簡単な方法は何ですか?当初、私は素直に試してみましたが、SUID
これがうまくいかないことに気づきました。これはシェルスクリプトの危険性に対する多くのSUID
回答と記事をもたらしました。そのうちの1つは、なぜそれをいくつかのCプログラムでラップしたのか説明しましたが、安全を解決することはできません。クリーンでない環境問題。
これらの脆弱性を処理するためにスクリプトをラップすることができる単純なラッパー/ユーティリティはありますか?
ご使用の環境では、dockerコンテナに渡されたばかりのENVのみが必要ですが、rootユーザーはbashセッションで同じENV変数を持つことになるので、提案がすべてのユーザーエクスペリエンスを無視して代わりにroot 1を使用して機能する場合、私のユースケースには問題ありません。
local temp_dir=$(mktemp -d)
mkdir -p {$temp_dir/store,$temp_dir/upper-store,$temp_dir/work-store}
# Create Overlay
sudo mount -t overlay overlay \
-o lowerdir=/nix/store,upperdir=$temp_dir/upper-store,workdir=$temp_dir/work-store $temp_dir/store
# Do some sutff with the mounted overlay
sudo umount $temp_dir/store
rm -rf $temp_dir
答え1
これには、使用しているディストリビューションとすべてのユーザーを追加するかどうかに応じて、いくつかの変数があります。ㅏグループ。私はubuntu atmを実行しており、すべてのローカルユーザーはですplugdev
。
したがって、誰もがスクリプトを実行できるようにするには、次の行を追加します/etc/sudoers.d/script
。
%plugdev ALL = NOPASSWD: /path/to/script
sudo
その後、スクリプトからfromの使用を削除することもできます(インストールする&削除)。明らかに、誰もが見ることができるパスにスクリプトを配置する必要がありますが、可能であれば編集できないようにする必要があります。
答え2
ユーザーにマウント/アンマウントアクセスを提供する適切な方法は、sudo
スクリプトにすでに実装されているように使用することです。あるいは、sudo wrapper.sh
システムのロギングが少ない場合は、スクリプトをラップして使用することもできます。
ホイールを使用していないユーザーも実行できることを願っています。
$ man 5 sudoers
ユースケースに合わせてユーティリティを正しく設定する方法について広範なアドバイスを提供します。 Stack Overflowにもこのトピックに3つの答えがあります。