TCP/IP とデータ通信

第 13 章 UUCP の構成と保守

この章では、マシンに関連したデータベースファイルを変更した後で、UUCP 操作を起動する方法について説明します。この章には、Solaris 環境が動作するマシンで UUCP を構成し保守するための、手順と障害の解明についての情報が記載されています。

UUCP のログインの追加

リモートマシンからの UUCP (uucico) 着信要求が正しく取り扱われるように、各リモートマシンはローカルシステム上にログインを持っていなければなりません。

UUCP 接続を介してローカルシステムにアクセスすることを許可されているリモートマシンについては、次の例に示すようなエントリを /etc/passwd ファイルに入力します。


Ugobi:*:5:5:gobi:/var/spool/uucppublic:/usr/lib/uucp/uucico 

リモートマシンのログイン名は慣例的に、そのマシン名の前に大文字の U を付けたものです。8 文字を超える名前は使用できないので、一部を短縮した名前や省略名を使用しなければならない場合もあります。

上記のエントリは、Ugobi からのログイン要求に /usr/lib/uucp/uucico が応答することを示しています。ホームディレクトリは /var/spool/uucppublic です。パスワードは /etc/shadow ファイルから取得されます。パスワードとログイン名は、リモートマシンの UUCP 管理者と協議して決める必要があります。リモート側の管理者は、ログイン名と暗号化されていないパスワードを含む正しいエントリを、リモートマシンの Systems ファイルに追加する必要があります。

同様に、ローカルマシンの管理者も、ローカルマシンの名前とパスワードについて、UUCP を介して通信する相手方のすべてのマシンの UUCP 管理者と協議する必要があります。

UUCP の起動

UUCP には、次に示す 4 つのシェルスクリプトが付属しています。これらのスクリプトは、リモートマシンをポーリングし、転送を再スケジュールし、古いログファイルと成功しなかった転送を処理します。

UUCP を円滑に運用するには、これらのスクリプトを定期的に実行する必要があります。Solaris の全体インストールを行なった場合は、これらのスクリプトを実行するための crontab ファイルが、インストールプロセスの一環として自動的に /usr/lib/uucp/uudemon.crontab の中に作成されます。全体インストールでない場合は、UUCP パッケージをインストールするときにこのファイルが作成されます。

UUCP シェルスクリプトは手動でも実行できます。次に示すのは、uudemon.crontab のプロトタイプです。このファイルは、マシンの運用の都合に合わせて適宜変更することができます。


#
#ident  "@(#)uudemon.crontab    1.5     97/12/09 SMI"
#
# This crontab is provided as a sample. For systems
# running UUCP edit the time schedule to suit, uncomment 
# the following lines, and use crontab(1) to activate the
# new schedule.
#
#48 8,12,16 * * * /usr/lib/uucp/uudemon.admin
#20 3 * * * /usr/lib/uucp/uudemon.cleanup
#0 * * * * /usr/lib/uucp/uudemon.poll
#11,41 * * * * /usr/lib/uucp/uudemon.hour

注 -

デフォルトでは、UUCP の操作は無効にされています。UUCP を有効にするには、タイムスケジュールを編集し、ファイル uudemon.crontab の適切な行のコメントを解除してください。


uudemon.crontab ファイルを有効にするには、スーパーユーザーになって次のように入力します。


# su uucp
# crontab < /usr/lib/uucp/uudemon.crontab

uudemon.poll シェルスクリプト

デフォルトの uudemon.poll シェルスクリプトは、1 時間に 1 回 /etc/uucp/Poll ファイルを読み取ります。Poll ファイル内のマシンのどれかに対するポーリングがスケジュールされると、作業ファイル (C.sysnxxxx) が /var/spool/uucp/nodename ディレクトリに入れられます。nodename は、そのマシンの UUCP ノード名です。

このシェルスクリプトは、1 時間に 1 回ずつ uudemon.hour の前に実行されるようにスケジュールされているので、uudemon.hour が呼び出されたときには、作業ファイルが存在しています。

uudemon.hour シェルスクリプト

デフォルトの uudemon.hour シェルスクリプトは次のことを行います。

デフォルトでは、uudemon.hour は 1 時間に 2 回実行されます。リモートマシンへの呼び出しの失敗の頻度が高いと予測される場合は、このスクリプトの実行頻度を増やすこともできます。

uudemon.admin シェルスクリプト

デフォルトの uudemon.admin シェルスクリプトは次のことを行います。

  1. p オプションと q オプション付きで uustat コマンドを実行する。q は、キューに入っている作業ファイル (C.)、データファイル (D.)、実行ファイル (X.) の状態を報告する。p は、ロックファイル (/var/spool/locks) 中に列挙されているネットワークプロセス用のプロセス情報を表示する

  2. 結果の状態情報を、メールにより uucp 管理ログインに送る

uudemon.cleanup シェルスクリプト

デフォルトの uudemon.cleanup シェルスクリプトは次のことを行います。

  1. /var/uucp/.Log ディレクトリから個々のマシンに関するログファイルを取り出し、それらをマージし、他の古いログ情報とともに /var/uucp/.Old ディレクトリに入れる

  2. 7 日以上経過している作業ファイル (C.)、7 日以上経過しているデータファイル (D.)、2 日以上経過している実行ファイル (X.) を、スプールファイルから削除する

  3. 配達できなかったメールを送信元に戻す

  4. その日に収集した状態情報の要約を、メールにより UUCP 管理ログイン (uucp) に送る

TCP/IP を介した UUCP の実行

/etc/inetd.conf 中で UUCP を有効にする

TCP/IP ネットワーク上での UUCP を実行するには、この節で説明するようにいくつかの変更が必要になります。

/etc/inetd.conf の中で、次のエントリの前にコメントマーク (#) が付いていないことを確認します。


uucp stream tcp nowait root /usr/sbin/in.uucpd in.uucpd 

TCP/IP 用に Systems ファイルエントリを修正する

/etc/uucp/Systems ファイルのエントリには、次のフィールドがあります。

System-Name Time TCP Port networkname Standard-Login-Chat

典型的なエントリは次のようになります。


rochester Any TCP - ur-seneca login: Umachine password: xxx

networkname フィールドには、TCP/IP ホスト名を明示的に指定できます。これは、一部のサイトにとっては重要な点です。上の例に示したサイトの UUCP ノード名 rochester は、TCP/IP ホスト名 ur-seneca と違っています。rochester という TCP/IP ホスト名を持ち、UUCP を実行する別のマシンがあっても問題はありません。

Systems ファイル内の Port フィールドには - を指定します。これは、uucp と指定するのと同じです。ほとんどの場合、networkname はシステム名と同じで、Port フィールドは - となります。これは、services データベースから標準 uucp ポートを使用することを意味します。in.uucpd デーモンは、認証のためにリモートマシンがログインとパスワードを送ることを想定しているので、gettylogin と同様に、ログインとパスワードを要求します。

UUCP のための /etc/inet/services の検査

次に示す /etc/inet/services のエントリは、UUCP 用のポートを設定します。


uucp 540/tcp uucpd # uucp daemon

このエントリを変更する必要はありません。しかし、マシンがネームサービスとして NIS または NIS+ を実行する場合は、/etc/services/etc/nsswitch.conf エントリを変更して、まず files、次に nis または nisplus が検査されるようにする必要があります。

セキュリティ、保守、障害追跡

UUCP の設定が終われば、その後の保守は簡単です。この節では、セキュリティ、保守、障害追跡に関連する UUCP の作業について説明します。

UUCP のセキュリティの設定

デフォルトの /etc/uucp/Permissions ファイルは、UUCP リンクに関する最大限のセキュリティを提供します。デフォルトの Permissions ファイルには、エントリは入っていません。

定義する各マシンについて、以下に示す追加パラメータを設定できます。

典型的な Permissions のエントリは次のようになります。


MACHINE=datsun LOGNAME=Udatsun VALIDATE=datsun
COMMANDS=rmail REQUEST=yes SENDFILES=yes

このエントリでは、(システム内のどこかからではなく、通常の UUCP ディレクトリとの間での) ファイルの送信と受信が可能となり、ログイン時に UUCP ユーザー名の認証が行われます。

日常の UUCP の保守

UUCP の保守に必要な作業の量はさほど多くはありません。uudemon.poll シェルスクリプト」で述べたように、crontab ファイルを正しい場所に配置してあることを確認する以外に注意する必要があるのは、メールファイルと公共ディレクトリが大きくなるという点だけです。

UUCP に関連する電子メール

UUCP のプログラムとスクリプトが生成する電子メールメッセージは、すべてユーザー ID uucp に送られます。管理者がユーザー uucp として頻繁にログインしていないと、メールが蓄積されている (このためディスク空間を浪費している) ことに気付かない場合があります。この問題を解決するには、/etc/aliases の中に別名を 1 つ作り、root か自分自身、そして他の UUCP 保守責任者に、電子メールをリダイレクトします。aliases ファイルを変更した後で、newaliases コマンドを実行するのを忘れないようにしてください。

公共ディレクトリ

ディレクトリ /var/spool/uucppublic は、UUCP がデフォルトでファイルをコピーできる場所として、すべてのシステムに対して提供されているディレクトリです。すべてのユーザーが、/var/spool/uucppublic への移動、その中のファイルの読み書きを行う権限を持っています。しかし、スティッキビットが設定されているため、このディレクトリのモードは 01777 です。したがって、ユーザーには、このディレクトリにコピーされ uucp に所有されているファイルを削除することはできません。このディレクトリからファイルを削除できるのは、root または uucp としてログインした UUCP 管理者だけです。このディレクトリ内に無秩序にファイルが蓄積するのを防ぐために、定期的に整理する必要があります。

このような定期的な整理がユーザーにとって面倒な場合は、スティッキビットを削除するよりも、各ユーザーに uutouupick を使用するよう奨励してください。スティッキビットはセキュリティのために設定されています (uutouupick の使い方については、uuto(1C) のマニュアルページを参照してください)。このディレクトリのモードの制限の度合を強めて、たとえば特定のユーザーグループだけに使用を限定することもできます。だれかがディスク空間を使い切ってしまうことが望ましくないのであれば、そのディスクへの UUCP アクセスを拒否することもできます。

UUCP の障害追跡

ここでは、UUCP に関する一般的な問題を解決するための手順について説明します。

障害のあるモデムや ACU の検査

モデムや ACU で、適正に動作していないものがないかどうかを、いくつかの方法で検査できます。

/etc/uucp/Systems ファイルの検査

特定のマシンと接続しようとすると障害が発生する場合は、Systems ファイルの中の情報が最新のものであるかどうかを確認してください。次のようなマシンに関する情報が、最新でなくなっている可能性があります。

伝送のデバッグ

特定のマシンに接続できない場合は、Uutryuucp を使って、そのマシンに対する通信を検査できます。

  1. 接続を調べるために、/usr/lib/uucp/Uutry -r machine を入力し、Return を押します。

    machine には、接続に問題のあるマシンのホスト名を指定します。このコマンドは次のことを行います。

    1. デバッグ機能を指定して転送デーモン (uucico) を起動する。root としてログインしていれば、さらに多くのデバッグ情報が得られます。

    2. デバッグ出力を /tmp/machine に送る。

    3. デバッグ出力を端末に表示する (tail -f).

      出力を終了するには Control-c を押します。この出力を保存したい場合は、/tmp/machine から出力内容をコピーします。

  2. Uutry を使っても問題の原因が分からない場合は、 uucp -r file machine¥!/dir/file と入力し Return キーを押すことによって、ジョブをキューに入れてみます。

    file には転送したいファイル、machine には転送先のマシンを指定します。/dir/file には、相手のマシンのどこにファイルを転送するかを指定します。r オプションを指定すると、ジョブはキューに入りますが、転送は開始されません。

  3. ここで、再度 Uutry を使用します。

    それでも問題が解決できないときは、ご購入先への連絡が必要になります。デバッグ出力を保存しておいてください。これは問題の診断に役立ちます。

Uutry-x n オプションを使用して、デバッグのレベルを増減することも考えてみてください。n はデバッグレベルを指定します。Uutry のデフォルトのデバッグレベルは 5 です。

デバッグレベル 3 では、接続がいつどのように確立されたかについての基本的な情報は提供されますが、転送自体について提供される情報は多くはありません。これに対して、デバッグレベル 9 では、転送処理に関するすべての情報が網羅されます。デバッグは転送の両端で行われるという点に注意してください。比較的大きいテキストについて 5 より高いレベルのデバッグを行いたい場合は、相手サイトの管理者に連絡して、デバッグを行う時期について同意を得てください。

エラーメッセージの検査

UUCP のエラーメッセージには、ASSERTSTATUS の 2 つの種類があります。

プロセスがアボートされた場合は、ASSERT メッセージが /var/uucp/.Admin/errors に記録されます。この種類のメッセージには、ファイル名、sccsid、回線番号、テキストが含まれています。この種類のメッセージが出るのは、一般にシステムに問題がある場合です。

STATUS エラーメッセージは /var/uucp/.Status ディレクトリに格納されます。このディレクトリ内には、ローカルコンピュータが通信しようとした各リモートマシンについて、それぞれファイルが作られます。これらのファイルには、試行した通信と、その通信が成功したかどうかについての状態情報が入っています。

基本情報の検査

以下のコマンドを使用して、基本的なネットワーク情報を検査するために使用できます。

UUCP のエラーメッセージ

この節には、UUCP に関連したエラーメッセージを示します。

UUCP の ASSERT エラーメッセージ

表 13-1 に ASSERT エラーメッセージをリストします。

表 13-1 ASSERT エラーメッセージ

エラーメッセージ 

説明と処置  

CAN'T OPEN

open() または fopen() が失敗した 。

CAN'T WRITE

write()fwrite()fprint()、または類似のコマンドが失敗した 。

CAN'T READ

read()fgets()、または類似のコマンドが失敗した。

CAN'T CREATE

creat() 呼び出しが失敗した。

CAN'T ALLOCATE

動的割り当てが失敗した 。 

CAN'T LOCK

LCK (ロック) ファイルを作成しようとしたが失敗した。場合によっては、これは重大なエラーとなる。

CAN'T STAT

stat() 呼び出しが失敗した 。

CAN'T CHMOD

chmod() 呼び出しが失敗した 。

CAN'T LINK

link() 呼び出しが失敗した 。

CAN'T CHDIR

chdir() 呼び出しが失敗した 。

CAN'T UNLINK

unlink() 呼び出しが失敗した 。

WRONG ROLE

内部ロジックの問題 。 

CAN'T MOVE TO CORRUPTDIR

不良な C. ファイルまたは X. ファイルを、/var/spool/uucp/.Corrupt ディレクトリに移動しようとしたが、失敗した。このディレクトリが存在しないか、モードまたは所有者が正しくない。

CAN'T CLOSE

close() または fclose() 呼び出しが失敗した 。

FILE EXISTS

C. ファイルまたは D. ファイルを作成しようとしたが、そのファイルがすでに存在している。これが起こるのは、シーケンスファイルのアクセスに問題がある場合である。これは一般にソフトウェアエラーを示す。

NO uucp SERVICE NUMBER

TCP/IP 呼び出しを試みたが、/etc/services 内に UUCP に関するエントリがない。

BAD UID

ユーザー ID がパスワードデータベース内にない。ネームサービス構成の検査が必要。 

BAD LOGIN_UID

前記と同じ 。 

BAD LINE

Devices ファイル内に不良な行がある。引数が足りない行が 1 つ以上ある。

SYSLST OVERFLOW

gename.c の内部テーブルがオーバーフローした。1 つのジョブが 30 を超えるシステムに接続しようとした。

TOO MANY SAVED C FILES

前記と同じ 。 

RETURN FROM fixline ioctl

失敗するはずのない ioctl(2) が失敗した。システムドライバに問題がある。

BAD SPEED

Devices ファイルまたは Systems ファイルの中に不適正な回線速度がある (Class フィールドまたは Speed フィールド)。

BAD OPTION

Permissions ファイルの中に不適正な行またはオプションがある。ただちに修正が必要。

PKCGET READ

おそらくリモートマシンがハングアップした。処置は不要。 

PKXSTART

リモートマシンが回復不可能な状態でアボートした。通常これは無視できる。 

TOO MANY LOCKS

内部的な問題がある (システムのご購入先にお問い合わせください)。 

XMV ERROR

ファイルまたはディレクトリのどれかに問題がある。この処理の試行の前に宛先のモードが検査されていると考えられるので、スプールディレクトリに問題がある可能性が高い。 

CAN'T FORK

forkexec を実行しようとしたが失敗した。現行ジョブは失われず、後で再試行される (uuxqt)。処置は不要。

UUCP の STATUS エラーメッセージ

表 13-2 に一般的な STATUS エラーメッセージを示します。

表 13-2 UUCP の STATUS エラーメッセージ

エラーメッセージ 

説明と処置 

OK

状態は良好。 

NO DEVICES AVAILABLE

現在この呼び出し用に使用可能なデバイスがない。 該当のシステムについて Devices ファイル内に有効なデバイスがあるかどうかを確認してください。そのシステムの呼び出しに使用するデバイスが Systems ファイル内にあるかどうかを検査してください。

WRONG TIME TO CALL

Systems ファイルに指定されている日時以外の時点で、システムに対する呼び出しが行われた。

TALKING

会話中。 

LOGIN FAILED

特定のマシンのログインが失敗した。ログインまたはパスワードが正しくないか、番号が正しくないか、きわめて低速のマシンであるか、Dialer-Token-Pairs スクリプトによる処理が失敗した。 

CONVERSATION FAILED

起動に成功した後で対話が失敗した。一方の側がダウンしたか、プログラムがアボートしたか、回線 (リンク) が切断されたことが考えられる。 

DIAL FAILED

リモートマシンがまったく応答しない。ダイヤラが不良であるか、電話番号が正しくないことが考えられる 。 

BAD LOGIN/MACHINE COMBINATION

あるマシンが、Permissions ファイルの条件を満たしていないログインとマシン名を使って、ローカルマシンを呼び出そうとした。偽装の疑いがある。

DEVICE LOCKED

使用しようとしている呼び出しデバイスは、現在ロックされ、他のプロセスに使用されている。 

ASSERT ERROR

ASSERT エラーが発生した。/var/uucp/.Admin/errors ファイルにエラーメッセージが入っているかどうかを検査し、「UUCP のエラーメッセージ」を参照してください。

SYSTEM NOT IN Systems FILE

システムが Systems ファイルの中に記述されていない。

CAN'T ACCESS DEVICE

アクセスしようとしたデバイスが存在しないか、またはモードが正しくない。Systems ファイルと Devices ファイルの中の該当のエントリを検査してください。

DEVICE FAILED

デバイスがオープンできない 

WRONG MACHINE NAME

呼び出されたマシンは、予期したのとは異なる名前を示している。 

CALLBACK REQUIRED

呼び出されたマシンは、そのマシンがローカルマシンをコールバックする必要があることを示している。 

REMOTE HAS A LCK FILE FOR ME

リモートマシンは、ローカルマシンに関連する LCK ファイルを持っている。そのリモートマシンがローカルマシンを呼び出そうとしている可能性がある。そのマシンの UUCP のバージョンが古い場合は、プロセスがローカルマシンに接続しようとして失敗し、LCK ファイルがそのまま残されたことが考えられる。UUCP のバージョンが新しく、そのマシンがローカルマシンと通信していない場合は、LCK を持っているプロセスはハングする。

REMOTE DOES NOT KNOW ME

リモートマシンの Systems ファイルの中に、ローカルマシンのノード名がない。

REMOTE REJECT AFTER LOGIN

ローカルマシンがログインのために使用したログインが、リモートマシンが予期している内容に一致していない。 

REMOTE REJECT, UNKNOWN MESSAGE

理由は不明だが、リモートマシンがローカルマシンとの通信を拒否した。リモートマシンが標準バージョンの UUCP を使用していないことが考えられる。 

STARTUP FAILED

ログインは成功したが、初期ハンドシェークに失敗した。 

CALLER SCRIPT FAILED

通常、これは DIAL FAILED と同じ。しかしこれが頻発する場合は、Dialers ファイル内の呼び出し側スクリプトに原因があることが考えられる (Uutry を使って検査してください)。

UUCP の数値エラーメッセージ

表 13-3 に、/usr/include/sysexits.h ファイルにより生成されるエラー状態メッセージの終了コード番号を示します。これらのすべてが現在 uucp で使用されているわけではありません。

表 13-3 番号による UUCP のエラーメッセージ

メッセージ番号 

内容 

説明 

64

Base value for error messages 

エラーメッセージはこの番号から始まる。 

64

Command Line Usage Error 

コマンドの使い方に誤りがある。たとえば、引数の数が正しくない、誤ったフラグ、誤った構文など。 

65

Data Format Error 

入力データになんらかの誤りがある。これはユーザーデータだけに使用されるもので、システムファイルには使用されない。 

66

Cannot Open Input 

入力ファイル (システムファイルでない) が存在しないか、または読み取れない。これには、メーラーに対する "No message" のようなエラーも含まれる (この種のエラーが捕捉できるようになっている場合)。 

67

Address Unknown 

指定されたユーザーが存在しない。これは、メールアドレスやリモートログインに使用される。 

68

Host Name Unknown 

ホストが存在しない。これは、メールアドレスやネットワーク要求に使用される。 

69

Service Unavailable 

サービスが使用不可。これは、サポートプログラムまたはファイルが存在しない場合に起こることがある。このメッセージは、何かが正常に働かずその理由が分からない場合の包括的なメッセージでもある。 

70

Internal Software Error 

内部ソフトウェアエラーが検出された。これは、可能な場合は、オペレーティングシステム関係以外のエラーに限定される。 

71

System Error 

オペレーティングシステムエラーが検出された。これは、「フォーク不可」や「パイプ作成不可」などのような状態を示す。たとえば、getuidpasswd ファイル内に存在しないユーザーを戻した場合などが含まれる。

72

Critical OS File Missing 

/etc/passwd/etc/utmp などのシステムファイルのどれかが、存在しないか、オープンできない。あるいは、構文エラーなどのようなエラーがある。

73

Can't Create Output File 

ユーザーが指定した出力ファイルが作成できない。 

74

Input/Output Error 

あるファイルについて入出力を行なっているときにエラーが起こった。 

75

Temporary Failure. User is invited to retry 

一時的な障害。実際のエラーではない何かを示す。たとえば sendmail では、これは、メーラーが接続を確立できなかったため、後で要求を再試行する必要があることなどを意味する。

76

Remote Error in Protocol 

プロトコルの交換中に、リモートシステムが「使用不可」を示す何かを戻した。 

77

Permission Denied 

この操作を行うための適正なアクセス権がユーザーにない。これはファイルシステムの問題を示すものではなく (その場合は NOINPUTCANTCREAT などが使用される)、より高いレベルのアクセス権が必要であることを意味する。たとえば、kre は、メールを送ることのできる学生を制限するために、このメッセージを使用する。

78

Configuration Error 

構成にエラーがある。 

79

Entry Not Found 

エントリが見つからない。 

79

Maximum Listed Value 

エラーメッセージの最大番号。