シェルスクリプトでsudo権限を見つける方法

シェルスクリプトでsudo権限を見つける方法

-aCentOS / RHELはパラメータをサポートしていないため、これを実装する方法を学びたいと思います。

私の質問は次のとおりです。passwd -S <user>各ユーザー名ですべてのフィールドを取得し、元のスクリプトに基づいて出力を解析します。スクリプトを修正する方法は?

#!/bin/bash
passwd -Sa | while read LOGIN PASS_TYPE LAST_CHANGE MIN_AGE MAX_AGE WARN_DAYS INACTIVE_DAYS; do

  # Is this account disabled?
  [[ $PASS_TYPE == LK ]] && DIS="disabled" || DIS=""

  # Can this account sudo?
  #sudo -l -U "$LOGIN" | grep -q not\ allowed && CAN_SUDO="" || CAN_SUDO="sudo"
  sudo -l -U "$LOGIN" | grep -q "(ALL) NOPASSWD: ALL\|(ALL) ALL" && CAN_SUDO="sudo" || CAN_SUDO=""

  # Grab misc. info from passwd entry
  IFS=: read _ PASS USERID GROUPID FULLNAME HOMEDIR SH < <(getent passwd "$LOGIN")

  # Grab login time of the latest entry in the lastlog output
  LATEST="$(last ${LOGIN} | head -1 | cut -c40-)"

  echo "${LOGIN}|${FULLNAME}|${USERID}|${LAST_CHANGE}|${MIN_AGE}|${MAX_AGE}|${WARN_DAYS}|${INACTIVE_DAYS}|${DIS}|${CAN_SUDO}|${LATEST}"

done

答え1

RHELバリアントはpasswdこのオプションをサポートしています-Sが、一度に1つのユーザー名を使用する必要があります。

したがって、ユーザーのリストから始めて、/etc/passwdすべてのpasswdユーザーに対して順番にコマンドを使用します。

#!/bin/bash
for user in $(cut -d: -f1 /etc/passwd); do
    read -r LOGIN PASS_TYPE LAST_CHANGE MIN_AGE MAX_AGE WARN_DAYS INACTIVE_DAYS CRYPT < <(passwd -S $user)
    # Rest of the processing
done

行末に暗号化された情報をキャプチャするために、CRYPTという名前の変数を追加しました。これがなければ、INACTIVE_DAYS変数は値を取得しません。

関連情報