とても理解できない非常に奇妙な問題に直面しました。ユーザーXに対して複数のsudoルールが存在することを確認するために、rootとしてスクリプトを実行しています。私が実行したとき:
su $USER -c "sudo -l > $USER_sudo_rules.lst"
複数行にまとめられます。行は次のようになります。
(oracle) NOPASSWD: /opt/oracle/oracle_base/product/*/OPatch/opatch lsinventory
(oracle) NOPASSWD: /usr/bin/cat /opt/oracle/*/diag/tnslsnr/*/listener_*/trace/*
ただし、出力は次のようになります。
(oracle) NOPASSWD: /opt/oracle/oracle_base/product/*/OPatch/opatch
lsinventory
(oracle) NOPASSWD: /usr/bin/cat
/opt/oracle/*/diag/tnslsnr/*/listener_*/trace/*
理由はわかりません。sudo -l
出力を操作して操作するために、さまざまな他のツール(cat、less、foldなど)にさまざまな配管を試しましたが、効果がないようです。たぶんそれらを統合するために少し後処理をするかもしれませんが、もっときれいなものがあることを願っています。 SHELLはRedhatのkshです。この「$USER_sudo_rules.lst」ファイルは、事前定義された「sudoルールのリスト」と比較され、ホストに正しいルールが存在することを確認します。