Product SiteDocumentation Site

8.9. その他の設定: 時刻同期、ログ、共有アクセス…

この節にリストされている多くの要素は、GNU/Linux システムの設定のあらゆる側面を極めたいと思う人なら誰でも、知っておくと良い知識です。しかしながらここでは、各要素を簡単に紹介し、頻繁に文書を参照するだけに留めます。

8.9.1. タイムゾーン

タイムゾーンは初回インストール時に設定され、tzdata パッケージを使って設定されます。タイムゾーンを変更するには、dpkg-reconfigure tzdata コマンドを使ってください。このコマンドを使えば、対話的に変更したいタイムゾーンを選ぶことが可能です。タイムゾーンの設定は /etc/timezone ファイルに保存されます。さらに、/usr/share/zoneinfo ディレクトリに含まれるタイムゾーンに対応するファイルが /etc/localtime の中にコピーされます。さらに /etc/localtime には、夏時間を使う国向けに夏時間が有効な場所で日付を処理するためのルールが含まれています。
一時的にタイムゾーンを変更したい場合、TZ 環境変数を使ってください。TZ 環境変数に設定した値はシステムデフォルトで設定された値よりも優先されます。
$ date
2015年  2月 19日 木曜日 19:25:18 JST
$ TZ="Pacific/Honolulu" date
2015年  2月 19日 木曜日 00:25:18 HST

8.9.2. 時刻同期

時刻同期は、コンピュータ上では不必要の操作のようにも見えますが、ネットワーク上では極めて重要です。ユーザは日付と時間を変更することを許可されていないので、混乱を防ぐためには時刻情報を正確に保つことがとても重要です。さらに、ネットワーク上のすべてのコンピュータの時刻を同期させておけば、異なるマシン間でログからの情報を相互参照しやすくなります。従って、攻撃を受けた際に不正アクセスを受けた複数のマシンで時系列順に操作を再構成することが簡単になります。時刻が同期されていなかった場合、統計目的で複数のマシンからデータを集めても、意味を成しません。

8.9.2.1. ワークステーション向けの設定

ワークステーションは (エネルギーを節約するためだけだったとしても) 日常的に再起動されますから、NTP と同期するのは起動時だけで十分です。これを行うには、ntpdate パッケージをインストールします。必要なら /etc/default/ntpdate ファイルを変更して NTP サーバを変更することも可能です。

8.9.2.2. サーバ向けの設定

サーバはめったに再起動されませんし、サーバのシステム時間を正確にすることはとても重要です。恒久的に正確な時間を保つためには、ntp パッケージの提供する NTP サーバをローカルにインストールするべきです。デフォルトの設定では、NTP サーバは pool.ntp.org と同期し、ローカルネットワークからの要求に対して時刻を提供します。/etc/ntp.conf ファイルを編集すれば NTP サーバを設定することも可能です。最も重大な影響をおよぼす設定項目は、この NTP サーバがどの NTP サーバを参照するかです。ネットワークに多くのサーバがある場合、公開 NTP サーバと同期するのは 1 台のローカルタイムサーバだけにして、そのローカルタイムサーバを他のサーバに対する時間ソースとして使ってみると良いかもしれません。

8.9.3. ログファイルの循環

ログファイルのサイズは素早く増加しますから、ログファイルをアーカイブに保管することが必要です。これを実現する最も一般的なやり方はアーカイブを循環させることです。つまり、ログファイルは日常的にアーカイブに保管され、最新の X 個のアーカイブが保存されます。logrotate はログファイルの循環を担当しているプログラムであり、/etc/logrotate.conf ファイルと /etc/logrotate.d/ ディレクトリ内に含まれるすべてのファイルに書かれた指示に従います。管理者が Debian の定義するログ循環ポリシーを改変したい場合、これらの設定ファイルを変更するかもしれません。logrotate(1) man ページでは、これらの設定ファイルで利用できるすべてのオプションが説明されています。ログ循環で保存されるファイルの数を増加させたかったり、削除せずにアーカイブ専用の特定のディレクトリにログファイルを移動させたいと思うかもしれません。また、電子メールでログを送信してログを別の場所にアーカイブすることも可能です。
logrotate プログラムは cron スケジューリングプログラム (第 9.7 節「cronatd を使ったスケジューリングタスク」で説明されています) によって毎日実行されます。

8.9.4. 管理者権限の共有

しばしば、複数の管理者が同じネットワーク上で仕事をする場合があります。root パスワードの共有は的確なやり方ではありません。root パスワードを共有することでコマンドの実行者が隠匿されるため、root 権限を乱用される危険性が生まれます。この種の問題に対する解決策が sudo プログラムです。sudo プログラムは特定のユーザに特別な権限で特定のコマンドを実行することを可能にします。sudo の最も一般的な用途として、信頼できるユーザが root 権限でコマンドを実行できるようにするという用途があります。これを行うには、ユーザは単純に sudo command を実行し、自分のパスワードを使って認証するだけです。
sudo パッケージがインストールされると、sudo Unix グループのメンバーは完全な root 権限を与えられます。他の権利を委譲するには、管理者は visudo コマンドを用いなければいけません。visudo コマンドを使うことで、管理者は /etc/sudoers 設定ファイルを変更することが可能です (繰り返しになりますが、これは vi エディタまたは EDITOR 環境変数で表されるその他のエディタを実行します)。username ALL=(ALL) ALL のような行を追加することで、指定されたユーザは root としてコマンドを実行することが可能になります。
より洗練された設定を使うことで、特定のコマンドに必要な権限を特定のユーザに与えることも可能です。設定できる要素のすべての詳細を確認するには sudoers(5) man ページをご覧ください。

8.9.5. マウントポイントのリスト

/etc/fstab ファイルには、起動時に自動マウントされるものやリムーバブルストレージデバイス用の手作業でマウントするものを含めて、すべての考え得るマウントポイントがリストされています。それぞれのマウントポイントは空白区切りフィールドを持つ各行によって表現されます。
  • ファイルシステム。このフィールドではマウント元のファイルシステムのありかを指定します。ここにはローカルデバイス (ハードドライブパーティション、CD-ROM) またはリモートファイルシステム (NFS など) を指定します。
    このフィールドではしばしば、UUID= を前に付けたファイルシステムの一意的な ID が使われることがあります (ID は blkid device を使えばわかります)。一意的な ID を使うことで、ディスクを取り付けたり取り外したことや異なる順番でディスクが検出されたことによりデバイスの名前が変わっても問題がなくなります。
  • マウントポイント。このフィールドではデバイス、リモートシステム、パーティションがマウントされるローカルファイルシステムの場所を指定します。
  • ファイルシステムタイプ。このフィールドではマウントされたデバイスで使われているファイルシステムを定義します。ext4ext3vfatntfsbtrfsxfs などがその例です。
    既知のファイルシステムの完全なリストは mount(8) man ページに書かれています。swap は swap パーティション専用の特殊値です。そして automount プログラムに自動的にファイルシステムを検出させるための特殊値です (この値はディスクリーダと USB メモリで特に便利です。なぜなら、機器ごとに異なるファイルシステムを使っている可能性があるからです)。
  • オプション。ファイルシステムごとに多くのオプションがあり、これらの値は mount man ページに書かれています。最もよく使われるものを以下に挙げます。
    • rw または ro。これはデバイスが読み書き可能状態または読み取り専用でマウントされることを意味しています。
    • noauto。これは起動時の自動マウントを無効化します。
    • nofailnofail オプションを使えば、デバイスが見つからなかった場合にも起動処理が中断されなくなります。nofail オプションを使うデバイスは起動中に取り外されている可能性のある外付けドライブ上のデバイスだけにしてください。なぜなら、systemd は起動処理を続行する前に自動的にマウントされなければならないすべてのマウントポイントが実際にマウントされていることを確認するからです。nofail オプションは x-systemd.device-timeout=5s オプションと併用することが可能であるという点に注意してください。両者を併用することで、systemd は 5 秒間だけデバイスを探索し、その後起動処理を続行するようになります (systemd.mount(5) を参照してください)。
    • useruser オプションを使うことですべてのユーザが対象のファイルシステムをマウント可能になります (user オプションを指定しなければ、マウントおよびアンマウント操作をできるのは root ユーザだけに限られます)。
    • defaultsdefaults オプションを使うとデフォルトオプション群を指定したことになります。デフォルトオプション群とは rwsuiddevexecautonouserasync です。defaults の後に nosuidnodev などを付ければ、suiddev をブロックし、これらのオプションを無効化することも可能です。user オプションを追加すればこれが再有効化されます。なぜなら defaultsnouser を含むからです。
  • ダンプ。このフィールドにはほぼ必ず 0 を設定します。1 を設定した場合、dump ツールに対してこのパーティションにはバックアップされるデータが含まれることが伝えられます。
  • パス。このフィールドは起動時にファイルシステムの完全性がチェックされるか否かと、チェックが実行される順番を意味します。0 の場合、完全性はチェックされません。ルートファイルシステムに対しては 1 を設定するべきです。他の恒久的なファイルシステムに対しては 2 を設定するべきです。

例 8.6 /etc/fstab ファイルの例

# /etc/fstab: 固定ファイルシステムの情報。
#
# <ファイルシステム> <マウントポイント> <タイプ> <オプション> <ダンプ> <チェック順>
proc            /proc           proc    defaults        0       0
# インストール中に / は /dev/sda1 にありました
UUID=c964222e-6af1-4985-be04-19d7c764d0a7 / ext3 errors=remount-ro 0 1
# インストール中に swap は /dev/sda5 にありました
UUID=ee880013-0f63-4251-b5c6-b771f53bd90e none swap sw  0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto 0       0
/dev/fd0        /media/floppy   auto    rw,user,noauto  0       0
arrakis:/shared /shared         nfs     defaults        0       0
この例の最後のエントリはネットワークファイルシステム (NFS) を表しています。すなわち arrakis サーバの /shared/ ディレクトリがローカルマシンの /shared/ にマウントされます。/etc/fstab ファイルのフォーマットは fstab(5) man ページに書かれています。

8.9.6. locateupdatedb

locate コマンドを使うと、名前の一部を知っているだけのファイルの場所を見つけ出すことが可能です。結果はほぼ一瞬で返されます。なぜなら locate コマンドはシステムのファイルのすべての場所を保存するデータベースを参照しているからです。さらにこのデータベースは updatedb コマンドを使って毎日更新されます。locate コマンドには複数の実装があり、Debian は標準的なシステム向けに mlocate を選んでいます。
mlocate は賢明なので、システムのすべてのファイルについて知っているデータベースを使っている (なぜなら、mlocateupdatedb 実装は root 権限で実行されるからです) にも関わらず、コマンドを実行したユーザがアクセスできるファイルだけを返します。さらなる安全性のために、管理者は /etc/updatedb.conf の中で PRUNEDPATHS を使って、いくつかのディレクトリのインデックス化を避けることが可能です。