Bash에서 이메일 콘텐츠의 MD5 체크섬을 추가하는 방법은 무엇입니까?

Bash에서 이메일 콘텐츠의 MD5 체크섬을 추가하는 방법은 무엇입니까?

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

그런 다음 공개 키를 이메일 클라이언트(지원하는 경우) 또는 기타 키 확인 메커니즘으로 가져오고 수신한 메시지가 실제로 전송된 메시지인지 확인할 수 있습니다.

관련 정보