grepを使用してどのユーザーがsudoを使用しているかを確認するには?

grepを使用してどのユーザーがsudoを使用しているかを確認するには?

root権限があります。/etc/passwdを含むファイル行から選択し、ユーザー名(フィールド1)を取得し、使用されている場合は/bin/bashログファイルで検索します。を使用してユーザー名を見つけましたが、確認方法がわかりません。彼らはsudoとして使用されます。ユーザー名とsudoの使い方は?それとも別のコマンドを使用する必要がありますか?/var/log/auth.logsudogrepcutgrep

ベストアンサー1

別の方向から見ると、最近のユーザーをすべてインポートし、ログインシェルが使用されているsudoユーザーを一覧表示します。bash

sed -nE 's/.*[0-9] ([^ ]+) sudo:.*/\1/p' </var/log/auth.log | sort -u |
while read user; do
    getent passwd "$user" |
    awk -F ':' '$NF == "/bin/bash" { print $1 }'
done

このsed式は、すでに使用されているユーザーのユーザー名を抽出し、sudoそれらsort -uをソートして重複を削除し、ループを介して残りのユーザーがログインシェルに設定されて/bin/bashいるかどうかをテストします。存在する場合は、ユーザー名を印刷します。

auth.logファイルが本当に大きく、各ユーザーに対して一度だけ解析したくない場合は、bashこの順序で実行することをお勧めします。代わりに、getentログファイルの各ユーザーに対して1回実行します。しかし、私たちはこれを改善することができます...

提案された順序で:

getent passwd |
awk -F ':' '$NF == "/bin/bash" { printf("s/.*[0-9] (%s) sudo:.*/\\1/p\n", $1) }' |
sed -nE -f - /var/log/auth.log | sort -u

ここでawkスクリプトはsedスクリプトを生成します。私のUbuntuテストシステムでは、このスクリプトは次のようになります。

s/.*[0-9] (root) sudo:.*/\1/p
s/.*[0-9] (ubuntu) sudo:.*/\1/p
s/.*[0-9] (myself) sudo:.*/\1/p
s/.*[0-9] (otheruser) sudo:.*/\1/p

sedその後、このスクリプトはログファイルに対して実行され、最近使用したユーザーの名前をauth.log印刷します。結果を並べ替え、重複項目を削除します。bashsudo

ここではログファイルを何度も解析せず、何度も呼び出す必要はありませんgetent

おすすめ記事