grep /var/log/maillog Linux 사용자 이름만을 기반으로 사용자에게 이메일을 보냅니다.

grep /var/log/maillog Linux 사용자 이름만을 기반으로 사용자에게 이메일을 보냅니다.

Postfix와 SquirrelMail을 실행하는 Linux CentOS 기반 학습 환경이 있지만 내 작업은 더 일반적입니다.

메일 로그에서 이메일을 찾아야 해요받는 사람특정 시간 범위 내의 특정 사용자를 기준으로오직그의 Linux 사용자 이름에.

내 메일 로그를 볼 수 있지만 메일 로그를 읽은 경험이 없으며 두 가지 질문이 있습니다.

  1. 로그에서 본 패턴은 신뢰할 수 있습니까? 즉, 수신 이메일의 로그가 항상 패턴 to=<EMAIL>에 포함되어 있습니까?

    Jan 2 20:31:17 tmcent01 postfix/local[27450]: B58C4330038: to=<[email protected]>, orig_to=<postmaster>, relay=local, delay=9.7, delays=9.6/0.03/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
    
  2. Linux 사용자 이름은 사용자의 이메일 이름과 어떻게 일치합니까? (사용자 이름@도메인)이 항상 일치하는 것은 아닙니다. 그렇죠? 별칭을 지정할 수 있습니까? 에 대한 정규식을 작성할 때 이를 어떻게 고려합니까 grep?

처음 두 번의 시도에서 삼진을 당했습니다.

sudo grep "to=<jsmith@" /var/log/maillog | grep 1[2-4]:[0-5][0-9]:[0-5][0-9]
sudo grep -w "jsmith" /var/log/maillog | grep 1[2-4]:[0-5][0-9]:[0-5][0-9]

답변1

다음은 시도해 볼 수 있는 간단한 샘플 스크립트입니다. 사용자의 별칭에 대한 공용 /etc/aliases 파일을 검색합니다.

#!/bin/bash

# Arguments: 
# $1 = user name to be searched for
# $2 = location for e-mail log file

# First, let's create a temporary working directory.
WORKDIR=$(mktemp -d)
cd "${WORKDIR}" || exit

# Create a file for user's user name and all aliases.
echo "to=<""$1" > search_key.txt

# Then, let's find out possible alises for the user.
# Awk is used just to separate the first column.
grep "$1" /etc/aliases | awk 'BEGIN { FS=":" }; {print "to=<" $1}' >> search_key.txt

# Next, search for e-mails sent for all these.
grep -f search_key.txt "$2"

# Finally, remove the working directory.
rm -rf "${WORKDIR}"

# All done.

답변2

로그에서 본 패턴은 신뢰할 수 있습니까? 즉, 수신 이메일 로그가 항상 포함되어야 합니까?

예, Postfix에서 처리되는 모든 이메일에는 to=...라는 항목이 있지만 여기에는 로컬로 전송되지 않은 이메일도 포함됩니다. 또한 이메일 주소의 메일함 부분이 개별 로컬 사용자의 메일함 부분과 반드시 ​​동일할 필요는 없습니다. Postfix는 여기에 확장/교체를 적용할 수 있고 MDA는 여기에 확장/교체를 적용할 수 있습니다.

원하는 정보를 캡처하는 신뢰할 수 있는 유일한 메커니즘은 MTA가 아닌 MDA를 검색하는 것입니다.

관련 정보