概要
セキュリティ更新はシステムの安全性を保つために重要です。一般には公開から30日以内に適用することが推奨されます。CentOS 7ではyum-cronを使って、セキュリティアップデートだけを自動的に適用するように設定できます。本稿ではroot権限を持つCentOS 7サーバーを前提とします。
重要: 自動更新を有効にする前に、バックアップとロールバック手順を用意してください。自動更新は利便性を高めますが、想定外の不具合を招く可能性もあります。
目次
- 前提条件
- ステップ 1: yum-cronをインストール
- ステップ 2: yum-cronをセキュリティ更新専用に設定
- ステップ 3: 自動更新から除外するパッケージを設定
- ステップ 4: yum-cronのログ確認と検証
- 運用チェックリスト(担当別)
- テストケースと受け入れ条件
- トラブルシューティングとよくある問題
- 代替アプローチと運用上の考え方
- 1行用語集
- まとめ
前提条件
- CentOS 7サーバー
- root権限(またはsudo)
- メール通知を使う場合はSMTP/ローカルMTA(Postfixやssmtp等)の設定
ステップ 1 - yum-cron をインストール
yum-cronはCentOSのリポジトリにあるコマンドラインツールです。以下でインストールします。
yum -y install yum-cron
インストール後、サービスを起動して自動起動を有効化します。
systemctl start yum-cron
systemctl enable yum-cron
これでyum-cronがインストールされ、サービスが動作する状態になります。
ステップ 2 - yum-cronをセキュリティ更新用に設定する
yum-cronはデフォルトで3種類の更新モードを持ちます: default(通常のyum upgrade相当)、minimal(必要最小限)、security(セキュリティパッケージのみ)。本稿ではsecurityモードに設定します。
設定ファイルを編集します。
cd /etc/yum/
vim yum-cron.conf
(任意のエディタを使って構いません。)
ファイル内で以下の項目を変更します。まずupdate_cmdをsecurityにします。
update_cmd = security
通知の表示を有効にします。
update_messages = yes
更新をダウンロードして適用する設定も有効にします。
download_updates = yes
apply_updates = yes
この設定により、セキュリティ更新が公開されると自動でダウンロードされ、適用されます。
メール通知の設定
yum-cronは通知方法としてSTDOUT(標準出力)かメール送信を選べます。本稿はメール送信を使用する例です。emit_viaをemailにします。
emit_via = email
さらに送信元・送信先・メールホストを指定します。例:
email_from = root@hakase-labs
email_to = [email protected]
email_host = hakase-labs
注: email_hostはローカルMTAまたはSMTPリレーのホスト名です。メールが届かない場合はPostfixやssmtpなどのMTAが正しく設定されているか確認してください。
設定を保存したらyum-cronを再起動します。
systemctl restart yum-cron
これで毎日、セキュリティ更新が自動ダウンロード・適用されます。
ステップ 3 - 除外パッケージを設定する
カーネルや特定のパッケージを自動更新から除外したいことがあります。設定ファイルの[base]セクションにexclude行を追加します。
cd /etc/yum/
vim yum-cron.conf
ファイル下部の[base]セクションに例のように追加します。
exclude = mysql* kernel*
この例ではmysqlで始まるパッケージとkernelを自動更新から除外します。保存して終了後、サービスを再起動します。
systemctl restart yum-cron
除外設定はワイルドカードを使えます。自動更新でバージョンや互換性問題を回避したい重要なパッケージがある場合に使ってください。
重要: 除外したパッケージも定期的に手動で検査・更新してください。特にカーネルは手動でテスト済みの手順に基づき更新するのが一般的です。
ステップ 4 - yum-cronログを確認して検証する
yum-cronはcronジョブとして動作し、ログは/var/logに出力されます。cronログを確認してyum関連の実行を探します。
cd /var/log/
cat cron | grep yum-daily
更新されたパッケージ一覧を確認するにはyum.logを参照します。
cat yum.log | grep Updated
ログで定期実行と更新結果(成功・失敗)を確認できます。メール通知も設定してあれば、更新結果がメールで届きます。
運用チェックリスト(担当別)
システム管理者(Admin):
- yum-cronがインストール・起動していることを確認する
- yum-cron.confのバックアップを保持する
- 除外パッケージリストを定期的に見直す
- メール通知先が有効であることを確認する
セキュリティ担当:
- 重要な更新(例:カーネルやDB)についてはステージング環境で事前検証する
- 既知の脆弱性に対する対応ポリシーを文書化する
開発者:
- 自動更新がアプリケーション互換性に与える影響を理解する
- 必要に応じて非互換な更新を除外するリクエストを提出する
テストケースと受け入れ条件
テスト1: セキュリティ更新が公開されたときにyum-cronがダウンロードして適用する
- 手順: テスト用の脆弱性パッケージ(モック)をローカルリポジトリに追加して公開する
- 期待結果: yum.logに「Updated」の記録があり、メール通知が届く
テスト2: 除外したパッケージが自動更新されない
- 手順: excludeに設定したパッケージで脆弱性更新を公開
- 期待結果: yum.logに更新の記録が無い、または更新がスキップされた旨がログに現れる
トラブルシューティングとよくある問題
メールが届かない
- 対処: ローカルMTA(Postfixなど)のメールキューを確認。/var/log/maillogを確認してエラー原因を特定してください。
更新が適用されない
- 対処: /var/log/cron と /var/log/yum.log を確認。SELinuxの制約やネットワーク接続(リポジトリが到達可能か)をチェック。
サービスが起動しない
- 対処: systemctl status yum-cron で状態を確認。journalctl -u yum-cron で詳細ログを確認します。
代替アプローチと運用上の考え方
- 手動運用と自動運用のハイブリッド: 自動でセキュリティ更新を適用しつつ、主要サービス(DB、アプリ)は手動で更新して検証する。
- ステージング環境でのロールアウト: 本番環境に展開する前にテスト環境で更新を適用して問題がないか確認する。
- 構成管理ツールの併用: AnsibleやSaltStackで更新ポリシーを管理すると複数サーバーに一貫した設定を適用可能。
リスクと軽減策(簡易)
リスク: 自動更新で予期せぬ破壊的変更が発生する
- 軽減策: 重要パッケージを除外、ロールバック手順(スナップショットやパッケージの保持)を用意
リスク: メール通知が届かず更新状況が把握できない
- 軽減策: 監視システム(Prometheus/Alertmanager等)と連携して冗長な通知経路を持つ
1行用語集
- yum-cron: yumの自動更新をスケジューリングするデーモン
- update_cmd=security: セキュリティ関連の更新のみを対象にする設定
- exclude: 自動更新から除外するパッケージ(ワイルドカード可)
まとめ
CentOS 7でyum-cronを使うと、セキュリティ更新を自動的にダウンロードして適用できます。メール通知や除外設定を組み合わせることで、安全性と運用の安定性を両立できます。自動更新を導入する際はバックアップ、ステージング検証、ロールバック手順を必ず用意してください。
参考