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