cron을 통해 전송된 자동 생성 이메일 알림에 일부 출력 라인이 누락된 것을 발견했습니다. AVC 오류가 없음을 확인한 후 이메일 콘텐츠의 MD5 체크섬을 추가하여 전송 중에 이메일 무결성이 손상되었는지 여부를 확인하고 싶습니다. 이메일을 생성하는 다음 스크립트가 있습니다.
{
echo -e "\nUptime";
uptime;
last -x --since yesterday;
} | mail -s "Info" user
MD5 체크섬만 얻으려면 다음을 수행할 수 있다는 것을 알고 있습니다.
{
echo -e "\nUptime";
uptime;
last -x --since yesterday;
} | openssl md5
하지만 체크섬을 이메일 콘텐츠와 어떻게 결합합니까?
답변1
MD5 체크섬이 특별히 필요한 경우 내용을 파일로 파이프하여 체크섬을 만든 다음 파일과 체크섬(구분 기호 포함)을 메시지로 파이프할 수 있습니다.
MD5 사용
MD5 합계를 사용하려는 경우 스크립트를 다음과 같이 편집하면 임시 파일에 쓰고 체크섬을 생성하고 추가한 다음 메일을 보낼 수 있습니다.
#!/bin/sh
outfile=$(mktemp)
echo -e "\nUptime" > $outfile 2>&1
uptime >> $outfile 2>&1
last -x --since yesterday >> $outfile 2>&1
md5=$(md5sum $outfile | cut -f1 -d' ')
echo-e "\n==============================\n${md5}\n" >> $outfile 2>&1
cat $outfile | mail -s "Info" user
rm $outfile # don't forget this - clean up your /tmp!
이렇게 하면 모든 STDERR 및 STDOUT 메시지가 로그 파일에 캡처되어 이메일로 전송되고 맨 아래에 MD5 체크섬이 추가되므로 출력을 다시 파일에 넣고 일치하는지 다시 확인할 수 있습니다.
GPG 사용
또는 서버에서 메시지에 서명하기 위해 GPG 키를 생성(또는 기존)할 수 있습니다. 이 키는 자동화된 방식으로 메시지에 서명하도록 설정되므로 보안을 유지해야 하거나 높은 수준의 신뢰가 필요한 항목에는 이 키를 사용하지 않는 것이 좋습니다. 컴퓨터가 손상되면 이 키도 손상될 수 있기 때문입니다.
가장 쉬운 방법은 gpg --gen-key
서버(또는 무엇이든)에서 GPG 키를 생성하는 것입니다. 대부분의 세부정보는 중요하지 않지만 비밀번호는 무엇입니까? 이를 통해 다음을 수행할 수 있습니다.
- 빈 비밀번호를 설정하세요(권장되지 않음- 비밀번호 없는 키를 절대 생성하지 마세요)
- 비밀번호를 설정하고 제한된 파일에 저장(
chmod 400
) - 비밀번호를 설정하고 GPG 명령에 전달하세요.
이 예에서는 적절한 권한이 있는 파일에 추가된 비밀번호가 있는 키를 보여줍니다. 다음과 같이 키를 생성하고 비밀번호를 설정하세요.
~ » gpg --gen-key
# enter in details for key
...
pub 2048R/B44FD582 2015-02-28 [expires: 2015-03-01]
Key fingerprint = CFAD 2D53 BB7F CA22 147C 9300 E858 EE8A B44F D582
uid mytestkey (This is my key) <[email protected]>
sub 2048R/D3AEDE76 2015-02-28 [expires: 2015-03-01]
~ » echo -n 'mypassphrase' > ~/.ssh/gpgsignkey
~ » chmod 400 ~/.ssh/gpgsignkey
~ » gpg -a --export [email protected] > myserver.key.asc
이제 서명에 사용할 수 있는 키가 서버에 있고, 암호는 안전한 위치의 제한된 파일에 있으며(~/.ssh는 매우 엄격하게 보관됨) myserver.key.asc
가져올 수 있는 공개 키가 있습니다. 로컬 컴퓨터에서 수신된 메시지를 확인하세요.
그런 다음 cron 작업을 수정하여 명령을 실행하는 스크립트를 실행한 다음 gpg를 통해 출력을 파이프하여 메일 서버로 전달되는 메시지에 서명할 수 있습니다.
#!/bin/sh
outfile=$(mktemp)
echo -e "\nUptime" > $outfile 2>&1
uptime >> $outfile 2>&1
last -x --since yesterday >> $outfile 2>&1
cat $outfile | gpg --clearsign -u [email protected] --passphrase-file /root/.ssh/gpgsignkey | mail -s "Info" user
rm $outfile
그런 다음 공개 키를 이메일 클라이언트(지원하는 경우) 또는 기타 키 확인 메커니즘으로 가져오고 수신한 메시지가 실제로 전송된 메시지인지 확인할 수 있습니다.