AIX 7 - 한 번도 사용된 적이 없는 사용자 계정이 잠겨 있는지 확인하는 명령

AIX 7 - 한 번도 사용된 적이 없는 사용자 계정이 잠겨 있는지 확인하는 명령

AIX 7에서 시스템에서 한 번도 로그인한 적이 없는 사용자 계정을 확인하고 해당 계정이 잠겨 있는지 확인하는 명령을 작성하려고 합니다. 한 번도 로그인한 적이 없고 잠겨 있지 않은 사용자 계정이 있는 경우 이 정보가 출력됩니다.

또한 UID가 100보다 큰 사용자 계정만 쿼리해 보았습니다.

UID가 100보다 큰 사용자 목록을 확인하는 명령을 성공적으로 작성했지만 이제 마지막 로그인/잠금 상태를 확인하는 명령을 작성하는 데 어려움을 겪고 있습니다.

cat /etc/passwd | awk -F: '$3 > 100 { print $1 }'

"lsuser -a account_locked" 및 "lsuser -a time_last_login" 명령으로 실험을 시도했지만 성공하지 못했습니다.

누구든지 나를 도와줄 수 있나요?

답변1

하나 적응해볼게요이전 솔루션입력하다:

lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100'

그러면 콜론으로 구분된 형식의 출력이 제공됩니다.

#name:account_locked:time_last_login:id
abcdef:false:1517991441:1594
ghijkl:false:1466418488:3430
mnopqr:false:1437508829:1081
stuvwx:false::2393
yz:false::2616

빈 필드는 값이 없음을 의미합니다(예: 마지막 두 필드의 "account_locked" 필드). 데이터와의 상관관계를 볼 수 있도록 헤더 행을 남겨두었는데, 건너뛰고 싶다면 awk첫 번째 행을 건너뛰도록 스크립트를 조정하세요.

lsuser -C -a account_locked time_last_login id ALL | awk -F: 'NR > 1 && $4 > 100'

보고서에 UID를 표시하지 않으려면 awk처음 세 필드만 인쇄하도록 명령문을 조정하세요.

lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 { print $1":"$2":"$3 }'

마지막으로 어떤 계정이 잠겨 있지 않고 로그인한 적이 없는지에 대한 질문에 대답하십시오.

lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 && $2 == "false" && $3 == "" { print $1 }'

기존 명령으로 시작하려면 이를 사용하여 사용자 이름을 매개변수로 생성한 lsuser다음 awk위와 동일한 필터를 사용할 수 있습니다.

for username in $(awk -F: '$3 > 100 { print $1 }' < /etc/passwd)
do
  lsuser -C -a account_locked time_last_login "$username" | awk -F: '$2 == "false" && $3 == "" { print $1 }'
done

AIX 사용자 이름에는 공백, 탭 또는 줄바꿈을 포함할 수 없습니다., IFS 변수가 올바르게 설정되어 있으면 실수로 분할될 위험이 없습니다.

답변2

다음 명령을 사용하면 잠긴 모든 계정 목록을 얻을 수 있습니다.

lsuser -a account_locked ALL | grep '=true$' | awk '{ print $1 }'

이 명령을 사용하면 모든 사용자의 마지막 로그인을 보고 한 번도 로그인한 적이 없는 사용자를 필터링할 수 있습니다.

lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1,"never"; else print $1,$3;}'

로그인한 적이 없는 사용자만 인쇄하려면 다음 명령을 단순화할 수 있습니다.

lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1}'

기록되지 않은 목록과 잠긴 목록을 얻으려면 명령과 exec 결과를 리디렉션해야 합니다.

comm -13 file.locked file.notlogged

따라서 스크립트는 다음과 같아야 합니다.

lsuser -a account_locked ALL | grep '=true$' | awk '{ print $1 }' >file.locked
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1}'>file.notlogged
comm -13 file.locked file.notlogged

관련 정보