root権限でファイルを読み取り、他のユーザーまたはグループと一緒に保存

root権限でファイルを読み取り、他のユーザーまたはグループと一緒に保存

root権限を必要とするファイルを読み込み、他のユーザーやグループと一緒に別の場所に保存する必要があります。たとえば、root が必要な dmesg を読み取り、ユーザー/グループ権限 770: test /test を使用して別の場所に保存します。ここで問題は、rootとして保存できないことです。これが SElinux ポリシーであり、エラーが発生します。そのため、ファイルを保存するときにプロセス権限を変更する必要があります。

どんな提案がありますか?

答え1

スクリプトはrootとして実行されています。したがって、sudoユーザーとして実行するのを妨げることはありません。ルートとしてファイルに書き込むことはできませんが、別のユーザーとしてファイルに書き込むことができる場合は、次のオプションを使用できます。

target=/path/to/target/file
dmesg | sudo -u test tee "$target" >/dev/null
chmod 770 "$target"

su代わりに使用したい場合は、sudoこのバリアントを使用できます。

target=/path/to/target/file
dmesg | su test -c "tee '$target' >/dev/null'
chmod 770 "$target"

答え2

を使用すると、zsh次のことができます(例root:)。

zmodload zsh/system
umask 0
() {local EGID=123 EUID=456; sysopen -wu3 -m770 -o excl file}

file0770権限でeuid 456とegid 123で作成され、開かれました。

$ ls -nd file
-rwxrwx--- 1 456 123 0 Sep  5 17:05 file

それから実行してください。dmesg >&3記入してください。

(順序が重要です。euidがゼロ以外の場合、egidを変更することはできません。)

関連情報