/etc/passwd와 사용자 목록 일치

/etc/passwd와 사용자 목록 일치

간단한 1열 사용자 목록이 있습니다. lastlog 명령에서 나옵니다. 이러한 계정이 비활성화되어 있고 루트 액세스 권한이 없는지 알 수 있어야 합니다. more 만 볼 수 있고 lastlog 명령을 실행할 수 있습니다. 지난 90일 동안 로그인하지 않은 사용자가 아직 활성 상태인지 확인해야 합니다.

지금까지 나는 실행

sudo lastlog -b 90

지난 90일 동안 로그인한 사용자를 알 수 있습니다. 이제 첫 번째 필드를 awk 인쇄하여 실행하면 이것이 간단한 사용자 목록입니다. 이제 기본적으로 /etc/passwd에 해당 쉘이 /bin/bash인지, /etc/shadow에 있으면 !해당 줄에 a가 있는지 확인하고 싶습니다. 어떻게 해야 하나요? for 루프와 while 루프를 시도했는데 제대로 작동하지 않는 것 같나요? 어떤 도움이라도 주시면 감사하겠습니다.

답변1

제가 당신을 제대로 이해하고 있는지 잘 모르겠습니다. 그게 당신이 쫓고 있는 것인가요?

lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$"

분석은 다음과 같습니다.

  • awk '{if (NR > 1) print $1 }'- 첫 번째 줄을 건너뛰고 첫 번째 열을 인쇄합니다(lastlog의 헤더).
  • grep -f - /etc/passwd- 표준 입력을 파일로 사용하여 패턴을 얻고 패턴을 검색합니다./etc/passwd
  • grep "/bin/bash$"- /bin/bash에 대한 grep은 을 $의미합니다 EOL.

몇 가지 참고사항:

  • lastlog -b 90- 그것은 당신에게 기록을 제공합니다나이가 많은90일 이상. 지난 90일 이내에 로그인한 사용자를 원하면 를 사용하세요 lastlog -t 90.
  • (NR > 1)어쨌든 우리는 사용하고 있기 때문에 솔루션을 사용했습니다 awk. 파일의 첫 번째 줄을 건너뛰는 더 간결한 방법은 sed 1d.

편집하다

!/etc/shadow에서 레코드를 필터링하려는 경우에도 비슷한 관용구를 사용할 수 있습니다 . 따라서 완전한 명령은 다음과 같습니다.

lastlog -b 90 | awk '{if (NR > 1) print $1 }' | grep -f - /etc/passwd | grep "/bin/bash$" | cut -d ':' -f 1 | grep -f - /etc/shadow | grep -v ":\!:"
  • cut -d':' -f 1:구분 기호로 사용하여 줄을 분할 하고 첫 번째 필드를 반환합니다.
  • grep -v수단반전 일치(일치하지 않는 줄을 선택하세요).

답변2

느낌표는 '이스케이프 아웃'되어야 합니다. 먼저 백슬래시를 사용하여 검색어를 입력해 보십시오: \! 대신에 ! 따라서 텍스트로 처리되는 대신 명령처럼 실행되지 않습니다. 또한 많은 경우에 다음과 같이 작은따옴표(큰따옴표 아님)로 인용할 수도 있습니다. '!' -- 명령에 따라 그 중 하나를 선택하면 자동으로 수행됩니다.

관련 정보