Linux日記: 2005年

RHELでサーバ構築 その4 (2005.11.26)

NTPのセットアップ

NTPはNetwork Time Protocolの略で、ネットワークに接続されたコンピュータの内蔵時計の時刻を合わせるための技術です。 サーバは何かトラブルがあったとき等にログをたどって状況を把握するためにも時計が正確であることが重要ですし、LAN内に限ってもコンピュータごとに時計がずれていてはネットワーク上のファイルもどれが本当に新しいものなのかタイムスタンプから判別できなくなってしまいます。

RHELで作るファイルサーバ その2でログオン時にドメインコントローラに時刻を同期させるバッチファイルを作成したのも、LAN内のコンピュータをサーバに同期させるためです。 また、Windows XPには「自動的にインターネット時刻サーバーと同期する」機能が標準で有効になっていますが、ドメインに参加するとオフになるようになっています。 いずれにしても、今回のLANにはドメインに参加できるProfessional EditionだけでなくHome EditionのPCもあるので、ログオン時の同期だけではLAN内の全ての機器の時計を同期させることができません。 というわけで、ドメインコントローラのサーバをインターネット上のサーバと接続して時計を同期させ、同時にLAN内向けのNTPサーバとしようというわけです。


まだntpをインストールしていなければ、up2date -i ntpFedora CoreCent OSなら、yum install ntpでインストールします。

まずはサーバが同期するサーバの相手を選びますが、あまり遠い先のサーバに接続するのも好ましくないので、プロバイダがNTPサーバを提供していればそれを選ぶのが良いでしょう。 ここでは インターネットマルチフィード時刻情報提供サービス for publicのサーバを例にとって記述しています。

/etc/ntp.conf をこんな感じに編集してLANのアドレス、インターネット上のサーバの指定をします。

# デフォルトは全てのアクセスを拒否
restrict default ignore

# 自分自身とLAN内は許可 (CLIENT NETWORK)
restrict 127.0.0.1
restrict 192.168.X.0 mask 255.255.255.0 notrust nomodify notrap

# 接続先のサーバ (OUR TIME SERVER)
server   210.173.160.27   # ntp1.jst.mfeed.ad.jp
server   210.173.160.57   # ntp2.jst.mfeed.ad.jp
server   210.173.160.87   # ntp3.jst.mfeed.ad.jp
restrict 210.173.160.27 noquery
restrict 210.173.160.57 noquery
restrict 210.173.160.87 noquery

(中略。driftfileauthenticatekeysの指定はデフォルトのままいじってません)

接続先のサーバはntp自体はサーバ名で書いて大丈夫なような話もあるんですが、こちらの環境ではIPアドレスで記述しないとうまく接続できませんでした。 仕方がないので nslookup ntp1.jst.mfeed.ad.jp 等としてIPアドレスを確認して記述します。 もちろんサーバを1つしか指定しなくても動作しますが、せっかくなので複数指定することにしました。

試しに、/sbin/service ntpd start してみて、/usr/sbin/ntpq -p で同期状況を確認します。 出力結果のうちサーバ名に「*」がついているのが同期中のサーバです。 複数のサーバを指定しておくと、時刻の正確さやフレを評価して、自動的にどのサーバに同期するかを決めてくれるようです。 デーモンを動かしてすぐだと「*」も「+」も付きませんのでしばらく待ちましょう。 正常に同期に成功していたら、/sbin/chkconfig ntpd onで自動起動するようにしておきます。

# /usr/sbin/ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp1.jst.mfeed. ote-ntp1.jpnap.  2 u   11   64  177    3.378    5.250   0.913
+ntp2.jst.mfeed. fs-monntp2.mfee  2 u    6   64  177    3.758    5.160   0.810
*ntp3.jst.mfeed. ote-ntp1.jpnap.  2 u   62   64   77    3.831    6.579   0.434
 LOCAL(0)        LOCAL(0)        10 l   64   64   77    0.000    0.000   0.015

今度は、Windowsクライアント側から時刻修正を使ってみます。 あ、サーバのファイアウォールが有効だったら、NTPのポートであるUDP 123も空けておく必要があります。 手順は以前書いた話と同じですね。 (2006/2加筆) RHEL 3だとNTPサービスが起動・停止する際に自動的にiptablesの設定を書き換えるようになってました。 なので、特に手でファイアウォール設定を変更する必要は無いみたいですね。

Windowsクライアントのタスクバーの時計上で右クリックして、日付と時刻のプロパティの「インターネット時刻」で、サーバーの欄を myserver とかドメインコントローラにしたサーバの実際のサーバ名かIPアドレスを入力し、「今すぐ更新」を押してしばらく待ちます。
お、問題ないですね。 というわけで「自動的にインターネット時刻サーバと同期する」もチェックしておきます。

今回のクライアントにはWindows 2000はありませんが、Windows 2000の場合はこのようなGUIが用意されていないので、コマンドプロンプト等からAdministrators権限のあるユーザで、net time /setsntp:myserver とすればいいみたいです。

SSHでリモート接続

UNIX系のサーバは昔々はtelnetでリモート接続して使うのが普通でしたが、セキュリティ上の問題等もあり、今はsshを使うのが普通みたいですね。 RHELやFedoraでは標準でsshデーモンが起動するように設定されているかと思います。

クライアントはWindowsなのでsshのクライアントソフトを用意しないといけません。 よく使われているのはTeraTermとかみたいです。 なんかターミナルソフトとして昔よく使った記憶があるんですが、sshやUTF-8にも対応して進化し続けていたんですね。 どうやら元の作者から許可を得て別プロジェクトとして拡張されたもののようですが。

TeraTermのインストールはここで説明するまでもないので省略。 試しにドメインコントローラに接続してみて、問題なくログインできることを確認しました。 ただし、このままだと接続してしまえばセキュアかもしれないですが、ログインする際に入力するユーザ名とパスワードが平文でLANに流れている状態です。 狭くて簡単に見渡せる事務所内で社内の人間がどうにかするとは考えにくいですが、WEPキーやMACアドレス制限をしているとはいえ無線APも利用しているので、やっぱりどうにかしたい。


というわけで、公開鍵認証をするためにはキーペア(秘密鍵、公開鍵)を作成しないといけません。 TeraTerm自身には鍵作成機能がないので、ここでは Windows用の PuTTYgenを使ってキーペアを作ってみます。 PuTTYgenはPuTTYというソフトの一部ですが、http://www.chiark.greenend.org.uk/~sgtatham/putty/download.htmlから単体でも入手可能です。 puttygen.exe を実行して、

  1. Parametersの欄を SSH2 RSA (デフォルト)として、SSH2用(RSA)のキーペアを作成することを指定して、「Generate」ボタンをクリックします。
  2. プログレスバーが進行してキーペアの生成が行われます。メッセージが出ているとおり、乱数を不規則に発生させるため、ウィンドウ内の空白のスペースでマウスを適当に動かします。
  3. 鍵の生成が完了すると、「Keys」の欄に以下にも暗号という内容が表示された画面になるので、パスフレーズを入力します。当たり前ですが実際のアカウントのログインパスワードとは別のものを入れます。
  4. puttygenのメニューで「Conversion」−「Export OpenSSH Key」でファイルを「identity」というファイル名でエクスポートします。 当たり前ですが、この秘密鍵はサーバに接続したいユーザ本人以外はアクセスできないようにローカルにおいてアクセス権限も確認しておきます。
  5. 「Save Private Key」「Save Public Key」で鍵を保存できますが、このファイルはそのままではTeraTermでは使えないみたいです。「Public Key for pasting into OpenSSH authorized_keys file」の欄の内容をコピーしたテキストファイルを作成します。
  6. (5)で作成したテキストファイルを Linuxサーバの~/.ssh/authorized_keysに登録します。まだこのファイルがない場合はテキストファイルをそのままリネームすればよいですし、既にファイルが存在している場合は cat {(5)のテキストファイル} >> ~/.ssh/authorized_keys とでもして追加すればよいでしょう。ちなみにパーミッションを600等にしておかないと接続できません。
  7. TeraTermを起動し、接続先サーバを指定した後、(6)のファイルをTeraTermの「RSA/DSA鍵を使う」の欄に指定し、ユーザ名とパスフレーズ((3)で指定したもの)を入力して接続します。

こうすれば、アカウントのパスワードを使わずにログインできるようになります。

/etc/ssh/sshd_config を編集して、PermitRootLoginでrootの接続を許可/禁止したり、AllowGroupsで接続を許可するグループの指定、PasswordAuthenticationで通常のパスワード入力での接続を許可/禁止したりできます。 というか、ファイアウォールの話もそうですが、LAN環境のセキュリティポリシーの一環としてトータルで検討して決めないといけない問題でしょうね。

logrotate

Sambaをはじめ、Linuxカーネルやさまざまなサービスは動作記録(ログ)を保存します。 当然ログはどんどん溜まっていってしまうので、Red Hatをはじめ、大抵のディストリビューションではlogrotateしてログを整理するようになってます。

RHELだと、週に一回ログを整理し、過去4回分のログを保存する設定がデフォルトです。 変更する場合は、logrotate全体のルールを変更するなら /etc/logrotate.conf、sambaにだけ適用するルールなどは /etc/logrotate.d/ 以下のファイルを編集する必要があります。 とりあえず何かあったときにさかのぼれる履歴が4週間では少々短いので、試しに過去1年分( rotate 52 )を保存し、過去ログは圧縮する(コメントされている compress を有効にする)よう設定を変更してみました。

まぁあんまり負荷がかかりそうなら見直すつもりですが、RHELの標準状態だと weeklyのジョブが動くのは日曜の朝4時ですし、普段の業務時間に影響が出なければいいかな、ということで。

Excel 2003 SP2のバグ回避

しばらくsambaサーバをテストしていて気づいたのですが、なぜかExcelを使ってファイルサーバ上の資源を使っていると、ファイルを保存する際に、「ファイルは前回保存された後、ほかのユーザーによって変更された可能性があります」という警告画面が出てしまう。

まぁ上書きを選んでしまえばいいんですが、どうにもこのままでは気持ち悪い。 というかどういう意味?

Excel エラー画面

Excelの自動保存機能で保存された情報とバッティングするのか? はたまたSGIDビットの問題かと思ったが、そうでもないらしい。 少し調べてみたら、どうやらOffice 2003 SP2のバグらしいということが判明。 どうもExcel 2002以降でネットワーク ドライブ上のファイルとタイムスタンプを比較するようになったみたいなんですが、Excel 2002では この問題は、当初、修正プログラムで修正されましたが、その修正内容は現在 Service Pack に含まれています ということですから、こいつは「バグ」ということなんでしょうね。

というわけで上記ページのとおり、レジストリを以下のとおり編集すればOKでした。 ちなみに、QFE_Saskatchewanの値は、

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options]
"QFE_Saskatchewan"=dword:00000002
レジストリファイルのダウンロード

Return to Previous page一つ前のページに戻る / Return to topこのページのTOPに戻る