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
その後、公開鍵を電子メールクライアント(サポートされている場合)またはその他の鍵検証メカニズムにインポートして、受信したメッセージが実際に送信されたメッセージであることを確認できます。