セキュリティ対策の重要な項目として、パッケージなどのソフトウェアを最新版にアップデートする、ということが挙げられます。しかし、Linuxにおいては、Windowsのように毎月第2水曜日にアップデートが発表されず、随時アップデートが出ている状況です。そこでdnf-automaticを使用して、毎日決まった時間にアップデートを確認して、対象があれば適用することを半自動化する方法を紹介します。
dnf-automaticパッケージのインストール
まず、dnf-automaticをサーバにインストールします。
# dnf install dnf-automatic
dnf-automaticの初期設定からの変更
つぎに、/etc/dnf/automatic.conf を編集して設定します。設定ファイルの変更点は以下の通りです。
# cp -p /etc/dnf/automatic.conf /etc/dnf/automatic.conf.org
# vi /etc/dnf/automatic.conf
# diff /etc/dnf/automatic.conf /etc/dnf/automatic.conf.org
22c22
< apply_updates = yes
---
> apply_updates = no
39c39
< emit_via = command_email
---
> emit_via = stdio
68c68
< command_format = "mail -Ssendwait -s {subject} -r {email_from} {email_to}"
---
> # command_format = "mail -Ssendwait -s {subject} -r {email_from} {email_to}"
72c72
< stdin_format = "{body}"
---
> # stdin_format = "{body}"
78c78
< email_to = 送信先のメールアドレス
---
> email_to = root
ここでは、アップデート実行時にメールで通知する設定をしています。特にメールサーバでなかったり、メールを送付する必要がないサーバは、わざわざpostfixなどを動かす必要があるので、ご自身の環境から上記メールの設定を実施するのかご判断ください。
メールの通知機能を使用しなければ、apply_updatesの部分のみの変更でOKです。
あると便利なのでメール通知の機能を紹介していますが、実は私も全てのサーバでメールの通知はしていません。それそれぞのサーバから同時に通知されるためです。ですが、メール通知がないと、本当にそのサーバでアップデートが実行されたかは不明です。どちらが良いかは運用から判断してください。
dnf-automaticのサービスの起動
サービスの自動起動の設定を有効にするのと、サービスを起動させます。
# systemctl enable dnf-automatic.timer
# systemctl start dnf-automatic.timer
パッケージが自動でアップデート(更新)されるか動作確認
以下のコマンドでサービスの起動を確認します。
# systemctl status dnf-automatic.timer
実際にアップデートが実行されるとメールが通知されますので、メールが届いているか確認します。
(もちろん、メールが送付できる環境であることが前提です)
メール以外での確認の方法は、/var/log/messages にて dnf-automatic でgrepするとログが抽出できます。
# grep dnf-automatic /var/log/messages
アップデートが実行される時間の確認は、/etc/systemd/system/timers.target.wants/dnf-automatic.timer のファイルの中身を確認してください。(デフォルトは6時)
ただし、デフォルトのままですと、RandomizedDelaySec=60m となっております。この場合、1時間の間のどこかで実行となりますので、ある程度時間を決め打ちしたい場合は、「m」を削除して、60秒とすれば、ほぼ6時に実行されることになります。
また、# systemctl list-timers コマンドで登録されていることも確認します。
もし、時間等を変更した場合は、# systemctl daemon-reload を実行してください。systemd で管理されている Unit ファイル群に変更が加えられた場合に反映するコマンドになります。
なお、# systemctl restart dnf-automatic.timer ではダメです。こちらは、/etc/dnf/automatic.confを書き換えたときなどに実施します。
失敗事例
しばらく様子見して、うまく動いていなかったようなので、/var/log/messagesを確認したところ、
「epel-release-8-18.el8.noarch.rpm の公開鍵がインストールされていません」
「エラー: GPG の確認に失敗しました」
といった内容が出力されていました。そこで、「dnf update epel-release」を手動で実行しました。
その際にGPGキーをインポートするか聞いてきたので「 y 」を押下してインポートをしました。
この後、正常に動作することを確認しております。
その他、依存関係に失敗してもアップデートできない場合があります。例えば、kernelのアップデートを止めている環境で、カーネルのバージョンに依存するパッケージがある場合などです。
あと、注意事項として、dnf-automaticが動作しているからといって、安心というわけではありません。サービスやOSの再起動は必要になる場合があります。詳細は、こちらに記載していますので、ご確認ください。
Linuxのサイバー攻撃対策としてのまとめ
OSにインストールされているプログラムを最新にして、セキュリティの穴(脆弱性)を無くすことで、サイバー攻撃対策を実施する方法を紹介しました。CentOSを含むLinuxサーバのインストール直後に一度設定しておけば、新しいパッケージが追加されても自動アップデートされるので、手間が省けます。おススメな設定ですので是非実施ください。
また、OSインストール直後のサービスの自動起動の設定については、AlmaLinuxのインストール後に必ず実施すべき自動起動しているサービスの見直しで紹介していますので、参考にしてください。こちらもセキュリティ対策として有効な一つになります。
今回はここまでになります。最後までご覧いただきありがとうございました。