쉘 스크립트에서 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하지만 한 번에 하나의 사용자 이름을 사용해야 합니다.

따라서 사용자 목록으로 시작하여 /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 변수는 값을 얻지 못합니다.

관련 정보