Linux Debianサーバの自動更新方法

いちごパック > サーバ > Linux Debianサーバの自動更新方法

サーバが受ける攻撃

LinuxカーネルやLiunx上で動くサーバは、常に全世界からアクセス可能な状態にあります。 これは、常に攻撃の危機にさらされていることを意味します。 サーバは次のような攻撃を受けることを予め想定し、備えておく必要があります。
  • カーネルやサーバの不具合を狙った攻撃
  • サーバ管理者のミスや知識不足を狙った攻撃

  • このページでは、ソフトウェアの更新を自動的に行う方法を説明します。 カーネルやサーバの不具合を狙った攻撃の多くは、Linux上で動くソフトウェアを更新し、攻撃される前に不具合を修正することで防げます。
    サーバ管理者のミスは、インストールするパッケージを必要最低限に絞り込むと減らせます。 知識不足に対しては、利用するパッケージが受ける攻撃を調べておくと良いでしょう。

    コマンドの自動実行

    cronは、定期的に指定コマンドを実行するソフトウェアであり、 多くのLinuxには標準でインストールされています。 このcronに更新用のコマンドを実行させれば、サーバ上のソフトウェアを自動更新できます。
    cronは2つのテーブルをチェックします。
    第1のテーブルは、rootユーザ向けの /etc/crontab というファイルです。 Debianでは、このファイルは次のコマンド実行が指定されています。
    実行間隔 実行されるファイル
    1時間ごと /etc/cron.hourly/ 以下の実行ファイル
    1日ごと /etc/cron.daily/ 以下の実行ファイル
    1週間ごと /etc/cron.weekly/ 以下の実行ファイル
    1か月ごと /etc/cron.monthly/ 以下の実行ファイル
    /etc/cron.hourly/ などに chmod +x で実行権限を与えたファイルを置いておけば、指定の条件で実行してくれます。
    第2のテーブルは、crontab というコマンドで管理するユーザ単位のテーブルです。 このテーブルは、管理者が許可したユーザであればだれでも編集できます。 このテーブルは、次のコマンドで編集できます。
    % crontab -e
    

    自動更新設定

    Linuxサーバとして使われるDebianでは、ソフトウェアの更新にapt-getを使います。 ソフトウェアのパッケージ構成を変えずに、バージョンの更新のみを行う場合は次のコマンドを使います。
    % sudo apt-get update
    % sudo apt-get upgrade
    
    updateはパッケージ一覧の取得コマンド、upgradeはパッケージ一覧の最新版への更新コマンドです。
    ソフトウェアのパッケージ構成が変わった場合に、パッケージ構成も含めて更新を行う場合は次のコマンドを使います。
    % sudo apt-get update
    % sudo apt-get dist-upgrade
    
    dist-upgradeはパッケージ構成も含めて更新する更新コマンドです。
    自動化するのであれば不要なパッケージを自動削除できると便利です。 ダウンロードできなくなったパッケージは、次のコマンドで削除できます。
    % sudo apt-get autoclean
    

    また、apt-getには自動化に便利なオプションがいくつかあります。
  • -y オプションをつけると、すべての質問に自動でyesと答えます。
  • -o quiet=1 や -o quiet=2 オプションをつけると、出力を減らせます。
  • -o APT::Get::Show-Upgraded=true オプションをつけると、quietにかかわらずアップグレードされたパッケージ一覧を出力します。

  • これらを使うと、例えば、次のような自動実行用のシェルスクリプトが書けます。 このスクリプトをcronに実行させれば、パッケージの自動更新が実現できます。
    #! /bin/sh
    /usr/bin/apt-get update
    /usr/bin/apt-get autoclean -y
    /usr/bin/apt-get dist-upgrade -y -o APT::Get::Show-Upgraded=true
    

    自動更新設定 (cron-apt版)

    Debianでは先に説明したコマンドを実行する、cron-aptと呼ばれるスクリプトがあります。 cron-aptでは、ダウンロード後に更新があることをメールで通知し、更新自体は手動で行う操作にも対応しています。
    cron-aptを使う場合は、まずcron-aptスクリプトをインストールします。
    % sudo apt-get install cron-apt
    

    このスクリプトは /etc/cron-apt/config にしたがい、 ACTIONDIRフォルダ内のファイルをファイル名順に開いて、 上から1行ずつ順に実行していくものです。
    /etc/cron-apt/config は例えば次のように設定します。 説明は /usr/share/doc/cron-apt/ に置かれています。
    APTCOMMAND="/usr/bin/apt-get"
    ACTIONDIR="/etc/cron-apt/action.d"
    MAILTO="root@example.com"
    MAILON="upgrade"
    SYSLOGON="always"
    OPTIONS="-o quiet=1"
    
    例えば、/etc/cron-apt/action.d に次の2ファイルを置けば、 先に説明したシェルスクリプトと同じ動作になります。
  • ファイル 0-update
  • update
    
  • ファイル 3-download
  • autoclean -y
    dist-upgrade -y -o APT::Get::Show-Upgraded=true