0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AlmaLinux8の自動セキュリティアップデートシェルスクリプト

Last updated at Posted at 2024-09-12

動作対象

  • AlmaLinux 8
  • 通知メールを送信したい場合は、dnf install mailxの実施および別途メール送信設定が必要

このスクリプトについて

dnf-automaticを使ったパッケージの自動アップデートのようなことをシェルスクリプトで作成してみました。異なる点としては、カーネルアップデートを適用させるためにOS再起動もできるようになっています。

  • --reboot オプションでOS再起動も指定できるようになっています。
  • dnf autoremove, dnf clean all で次回起動以降のディスクスペース節約する処理追加。(※依存されなくなったものを削除dnf autoremoveはまずいという環境では任意で当スクリプトから消してください)

設置手順

  • /root ディレクトリにsecurity_update.shを設置。(場所は任意)
  • オーナー・グループを、chown root:root security_update.shに設定。
  • パーミッションを、chmod 744 security_update.shに設定。
  • crontab にスクリプトを追記。
(例)28日午前4時にセキュリティアップデート後再起動する。
# Linuxセキュリティアップデート
0 4 28 * * root /root/security_update.sh --reboot

シェルスクリプト

  • セキュリティアップデートのみにしている。
  • 通知メールアドレス、メール送信処理もしています。
  • dnf 以外にもsnap 更新もしています。
  • /var/log/update_log/update_log にメール通知内容と同じ内容でログを出すようにしています。
  • リブート前に、systemctl stop httpdしているが実施するかは任意。apachectl -k graceful-stopではないのは、apachectl を使用して httpd に引数を渡すことはサポートされなくなるため。(まぁ、なんとかなるっしょ!でとりまアパッチ停止しま~す、か~ら~の~OS再起動しま~す)
security_update.sh
#!/bin/bash

function usage {
    cat <<EOF
AlmaLinux8のセキュリティアップデートシェルスクリプト

使用方法: $(basename ${0}) [引数]
   もしくは: $(basename ${0}) [help|--help|-h]  ヘルプ(このメッセージ)を表示し終了する
   もしくは: $(basename ${0}) [version|--version|-v]  バージョン情報を表示し終了する

引数:
   --reboot             セキュリティアップデート後にOS再起動を実施する

説明:
   AlmaLinux8のセキュリティアップデートを実施します。
   root権限ユーザーでの実施をしてください。
EOF
}


function version {
    echo "$(basename ${0}) version 1.0 "
}


function proc() {
    mailaddress="通知メールアドレス"
    folderpath="/var/log/update_log"
    filepath=${folderpath}/update_log

    if [ ! -d $folderpath ]; then
        mkdir ${folderpath}
    fi
    if [ ! -e $filepath ]; then
        touch ${filepath}
    fi

    dnf autoremove
    dnf clean all
    dnf upgrade --security -y 2>&1 | tee ${filepath}
    snap refresh 2>&1 | tee -a ${filepath}
    cat ${filepath} | mail -s "【通知】 - AlmaLinux 8 SECURITY UPDATE" ${mailaddress}

    if [ $# = 1 ]; then 
        if [ $1 = "--reboot" ]; then 
            systemctl stop httpd
            reboot
        fi
    fi
}


case ${1} in 
    help|--help|-h)
        usage
    ;;
    version|--version|-v)
        version
    ;;
    *)
        proc $1
    ;;
esac

さいごに

たぶん設置しても大丈夫だろう的な温度感で著者は考えているためOS再起動失敗したらのことを考慮していないまま◯◯社で本番設置しています。ワンオペ職場のためコードレビューしてもらえません😢。親切な兄貴、姉貴からここ問題ありそう的な指摘をもらえたらありがたいです。ぺこりん子。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?