「HMAC does not match」エラーについて
結構前からNextCloudのログで以下のエラーが頻繁に発生するようになっています。ネットで調べたり、ChatGPTに聞いても具体的な対処方法はありません
"Message":"HMAC does not match.","Code":0,"Trace":[{"file":"/var/www/html/nextcloud/lib/private/Security/Crypto.php","line":98,
上記のエラーの原因ですが、以下が考えられます。
多くの場合、致命的なエラーではなく無視しても Nextcloud の動作に問題はありません。
ただし、現状では修正方法がよくわからないので、ログに継続して出力されるので困ります
- Nextcloud が内部的にデータの整合性チェック(HMAC)を行った際に不一致になった
- 破損したセッション情報
- キャッシュの不整合
- 共有リンクのトークン破損
- アップロード/ダウンロード時の一時ファイル破損
対策:「該当エラー行だけをログから削除する」方法
エラーの対処方法がわからないので、ログファイルから「HMAC does not match」エラーが含まれる行を削除する方法での対策を実施することにしました。
NextCloudのログファイルは以下のあります。ディレクトリは使用されている環境によって変わります
/var/www/html/nextcloud/data/nextcloud.log
上記のファイルで、「HMAC does not match」エラーが含まれる場合は、その行を削除して一次ファイルに保存します。そのご本来の「nextcloud.log」にリネームして置き換えます。
上記の処理を、シェルスクリプトにしてCronで実行すると、定期的に「HMAC does not match」エラーが削除されます
ワンライナーでの対応
シェルスクリプトを使わずにワンライナーでCronで実行する場合は以下になります。
例:毎日 03:00 に HMAC ログだけ削除
0 3 * * * sed -i '/HMAC does not match/d' /var/www/html/nextcloud/data/nextcloud.log
シェルスクリプトでの対応
シェルスクリプト版は以下となります。このシェルスクリプトを手動で実行して「HMAC does not match」を含む行を削除してもいいですし、Cronで定期的に実行しても良いかと思います
$ vim clean_hmac_log.sh
#!/bin/bash
LOGFILE="/var/www/vhosts/html/nextcloud/data/nextcloud.log"
TMPFILE="${LOGFILE}.tmp"
# "HMAC does not match" を含む行があるか判定
if grep -q "HMAC does not match" "$LOGFILE"; then
echo "HMAC ログが見つかったため削除処理を実行します"
# 該当行を除外して一時ファイルへ
grep -v "HMAC does not match" "$LOGFILE" > "$TMPFILE"
# 上書き
mv "$TMPFILE" "$LOGFILE"
echo "削除処理が完了しました"
else
echo "HMAC ログはありません(処理なし)"
fi
# 実行権を付与します
$ sudo chmod +x clean_hmac_log.sh


