サーバが受ける攻撃
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 というコマンドで管理するユーザ単位のテーブルです。
このテーブルは、管理者が許可したユーザであればだれでも編集できます。
このテーブルは、次のコマンドで編集できます。
自動更新設定
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はパッケージ構成も含めて更新する更新コマンドです。
自動化するのであれば不要なパッケージを自動削除できると便利です。
ダウンロードできなくなったパッケージは、次のコマンドで削除できます。
また、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
ファイル 3-download
autoclean -y
dist-upgrade -y -o APT::Get::Show-Upgraded=true