루트 권한이 있습니다. /etc/passwd
가 있는 파일 행에서 선택하고 , 사용자 이름(필드 1)을 가져오고, 사용된 경우 /bin/bash
로그 파일에서 찾습니다 . 을 사용하여 사용자 이름을 찾았지만 확인 방법을 모르겠습니다. 그들은 sudo로 사용됩니다. 사용자 이름과 sudo를 사용하는 방법은 무엇입니까 ? 아니면 다른 명령을 사용해야 합니까?/var/log/auth.log
sudo
grep
cut
grep
답변1
다른 방향에서 보면: 최근 사용자를 모두 가져오고 sudo
로그인 셸이 사용된 사용자를 나열합니다.bash
sed -nE 's/.*[0-9] ([^ ]+) sudo:.*/\1/p' </var/log/auth.log | sort -u |
while read user; do
getent passwd "$user" |
awk -F ':' '$NF == "/bin/bash" { print $1 }'
done
이 sed
표현식은 이미 사용된 사용자의 사용자 이름을 추출하고 sudo
이를 sort -u
정렬하고 중복을 제거한 다음 루프를 통해 나머지 사용자가 /bin/bash
로그인 셸로 설정되었는지 테스트합니다. 있는 경우 사용자 이름을 인쇄하십시오.
auth.log
파일이 정말 크고 각 사용자에 대해 한 번만 구문 분석하고 싶지 않다면 bash
이 순서대로 수행하는 것이 좋습니다. 대신 getent
로그 파일의 각 사용자에 대해 한 번씩 실행합니다. 하지만 우리는 이것을 개선할 수 있습니다...
제안된 순서대로:
getent passwd |
awk -F ':' '$NF == "/bin/bash" { printf("s/.*[0-9] (%s) sudo:.*/\\1/p\n", $1) }' |
sed -nE -f - /var/log/auth.log | sort -u
여기서 awk
스크립트는 sed
스크립트를 생성합니다. 내 Ubuntu 테스트 시스템에서 이 스크립트는 다음과 같습니다.
s/.*[0-9] (root) sudo:.*/\1/p
s/.*[0-9] (ubuntu) sudo:.*/\1/p
s/.*[0-9] (myself) sudo:.*/\1/p
s/.*[0-9] (otheruser) sudo:.*/\1/p
sed
그런 다음 이 스크립트는 로그 파일에 대해 실행되어 가장 최근에 사용한 사용자의 이름을 auth.log
인쇄합니다 . 결과를 정렬하고 중복 항목을 제거합니다.bash
sudo
여기서는 로그 파일을 여러 번 구문 분석하지 않으며 여러 번 호출할 필요도 없습니다 getent
.
답변2
/etc/passwd
이것은 쉘을 사용하여 in 각 사용자를 반복한 /bin/bash
다음 grep
in 사용자에 대해 루프를 수행한 /var/log/auth.log
다음 다섯 번째 필드가 "sudo:"이고 여섯 번째 필드가 다음을 사용하는 awk
사용자 이름인지 확인합니다 ( 다음에도 쉘이 있습니다 :sort
uniq
sudo
/bin/bash
/etc/passwd
for user in $(awk -F: '$7 == "/bin/bash"{print $1}' /etc/passwd);do
grep "$user" /var/log/auth.log|\
awk -v user="$user" '$5 == "sudo:" && $6 == user {print user}'
done | sort | uniq