sudoをする前にsudoの機能を確認できますか?

sudoをする前にsudoの機能を確認できますか?

私は小さなユーティリティプログラムを書いています。必要に応じてsudo何かを実行しようとします。

つまり、ファイル権限が現在のユーザーが特定のファイルで作業することを許可していない場合(そしてルールがsudoそれを許可する場合)、私のユーティリティはsudoファイル所有者として何かを実行したいと思います。

システムログがsudo失敗した試みのノイズでいっぱいにならないようにしたいので、この機能を事前に確認したいと思いました。sudo失敗した場合、それ自体が報告したとおり:「このイベントは報告されます。」

したがって、プログラムで確認したいと思います。user <x>合格できますか?command <y>sudo

問題は/etc/sudoersマッピングが含まれていますが、rootが所有しているため、通常のユーザーが読めないことです。

実行するサブプロセスを作成しようとしていますsudo -l(現在のユーザーがsudoを実行できるコマンドを出力します)。次に、出力を解析します。ただし、これは少し脆弱なようです。出力には私が望む情報が含まれていますが、人間が読めるように設計されているようです(プログラミング方法で消費するのではありません)。将来の出力が同じ形式に準拠するか、異なるプラットフォームにわたって保証できるかはわかりません。

プログラムで出力を解析するのはsudo -l安全であると考えられますか?それ以外の場合、sudoコマンドが成功するかどうかを事前に決定するためのより良いオプションはありますか?


(関連するsudoルールの背景)

ベストアンサー1

sudoのマニュアルページによると:

 -l, --list  If no command is specified, list the allowed (and forbidden)
             commands for the invoking user (or the user specified by the
             -U option) on the current host.  A longer list format is used
             if this option is specified multiple times and the security
             policy supports a verbose output format.

             If a command is specified and is permitted by the security
             policy, the fully-qualified path to the command is displayed
             along with any command line arguments.  If command is
             specified but not allowed, sudo will exit with a status value
             of 1.

したがって、これは次のように要約されます。

if sudo -l -U $USER shutdown > /dev/null
then
   ## $USER can
else
   ## $USER cannot
fi 

Muruが指摘したように、必要に応じて使用または使用しないでください-U $USER-U $USERTOTEST

おすすめ記事