## poppassd のインストール方法

田中啓

    pegira@po.jah.ne.jp

1999/01/27

Linux がインストールされているマシンに poppassd をインストールする方法を記述 します。ただし、「NIS」を使用していない場合に限定します。

## poppassd ってなに？

メールサーバのパスワードを変更する事ができる「電子メールクライアントソフト」が あります (Eudora , NUPOP , P ちゃん , p-chng , POPパスワード , POPパスワード チェンジャ 等)。しかし、サーバ側で対応したデーモン(サービス)が動作していない と「電子メールクライアントソフト」からパスワードを変更することはできません。 ちなみにメールをサーバに送信できるのは、サーバで「SMTP デーモン」が動いているからです。 同じくメールをサーバから受信できるのは、サーバで「POP3 デーモン」が動いているからです。 よって、パスワードを変更するデーモンをサーバにインストールしておくと、サーバに telnet して、 `/usr/bin/passwd` コマンドを使用してパスワードを変更するといった面倒な操作 をしなくても、パスワードを変更できるようになります。

poppassd とは unix 用のパスワードを変更するデーモンまたはそのプロトコルの名前です。

## poppassd のプロトコル

単純なプロトコルです。 FTP サーバーが応答するように、サーバーの応答が必ずあるはずです。 サーバの応答の先頭の数字が意味を持ってます。

      100番台：前進
      200番台：成功
      300番台：さらに情報が必要
      400番台：一時的な失敗
      500番台：永久的な失敗

サンプルを以下に示します。

      S: 200 hello\r\n
      E: user yourloginname\r\n
      S: 300 please send your password now\r\n
      E: pass yourcurrentpassword\r\n
      S: 200 My, that was tasty\r\n
      E: newpass yournewpassword\r\n
      S: 200 Happy to oblige\r\n
      E: quit\r\n
      S: 200 Bye-bye\r\n
      S: <closes connection>
      E: <closes connection>

## 試した環境

      Machine    : CPU=Pentium200 Memory=40MB HDD=1GB
      OS         : linux kernel 2.0.35 (Slackware3.6)
      C-Compiler : gcc version 2.7.2.3
      Library    : libc 5.4.46

ディストリビューション Slackware3.6 でインストールした「Linux マシン(BOX)」なので、 パスワードシステムは「shadow パスワード」システムになっています。

## poppassd のソースの入手

poppassd は Eudora というメールクライアントソフトに添付されています。 Eudora を販売している会社である Qualcomm 社の FTP サイト ftp://ftp.qualcomm.com/eudora/servers/unix/password/ にもソースが置いてあります。 Linux 用のソースは ftp://ftp.qualcomm.com/eudora/servers/unix/password/linux.tar のファイルです。 ただし、この Qualcomm 社の poppassd は「shadow パスワード」に対応していません。

しかし、世の中には「shadow パスワード」に対応した poppassd を作っている人がいます。 Roy Smith さんと Daniel L. Leavitt さんの作った poppasd を改良した John Norstad さんです。 1993/8/31 にリリースされたバージョン 1.2 が最新バージョンです。 John Norstad さんの poppassd は sunsite 等に収録されています。 ftp://sunsite.sut.ac.jp/pub/archives/linux/system/mail/pop/poppassd-src.tar.gz

その後、John Norstad さんのバージョン 1.2 を元にして Christoph Lameter さんが改良しました。 改良版のバージョン 1.2-8 が 1997/11/13 にリリースされました。 主な変更内容はパスワードの変更方法を `/usr/bin/passwd` コマンドから `/usr/sbin/newusers` コマンドへ変更した事です。

この変更により、`/usr/bin/passwd` コマンドが受け付けない短いパスワードや、 アルファベットだけの シンプルなパスワードが入力された場合に poppassd がハングアップするバグ等が修正されています。 Christoph Lameter さんは Debian （Linux のディストリビューションの一つ）のメンテナーでもあります。 バージョン 1.2-8 は Debian のパッケージ等に収録されています。

結論 Debian のパッケージに入っているソースを使用します。 Debian JP Project のサイト等からソースファイルをダウンロードします。 ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/ 等から ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/poppassd_1.2.orig.tar.gz と ftp://ftp.jp.debian.org/debian/dists/stable/main/source/mail/poppassd_1.2-8.diff.gz をダウンロードします。 または Debian の CD-ROM のソースディレクトリからコピーしても良いでしょう。

## poppassd のインストール方法

1. 適当な作業ディレクトリに `poppassd_1.2.orig.tar.gz` をコピーします。 または ftp で Get します。

2. `poppassd_1.2.orig.tar.gz` を展開します。

         tar zxvf poppassd_1.2.orig.tar.gz

   `poppassd-1.2.orig/` ディレクトリに以下の ファイルが展開されます。

         -rw-r--r--   1 hogehoge users         363 May  7  1995 Makefile
         -rw-r--r--   1 hogehoge users         138 May  7  1995 README
         -rw-r--r--   1 hogehoge users        4817 May  7  1995 info
         -r--r--r--   1 hogehoge users         685 Sep 16  1996 poppassd-src.tar.gz.lsm
         -rw-r--r--   1 hogehoge users       21102 May  7  1995 poppassd.c

3. バージョン 1.2 から 1.2-8 にバージョンアップするためのパッチファイル (`poppassd_1.2-8.diff`)を作成します。

   `poppassd_1.2-8.diff.gz` を `gzip` で展開すれば パッチファイルを作成する事ができます。

         gzip -d poppassd_1.2-8.diff.gz

   `poppassd_1.2-8.diff` パッチファイルができました。

         -rw-r--r--   1 hogehoge users       21211 Jan 11 12:09 poppassd_1.2-8.diff

4. `poppassd-1.2.orig/` にパッチファイルを コピーします。

         cp poppassd_1.2-8.diff poppassd-1.2.orig/

5. カレントディレクトリを `poppassd-1.2.orig/` に移動します。

         cd poppassd-1.2.orig/

6. パッチをあてます。

   `patch` コマンドを使ってパッチをあてました。

         patch -p1 < poppassd_1.2-8.diff

   パッチが正常にあたると以下のようにファイルが変更されるはずです。

         -rw-r--r--   1 hogehoge users         375 Jan 11 12:12 Makefile
         -rw-r--r--   1 hogehoge users         363 May  7  1995 Makefile.orig
         -rw-r--r--   1 hogehoge users         138 May  7  1995 README
         drwxr-xr-x   2 hogehoge users        1024 Jan 11 12:12 debian/
         -rw-r--r--   1 hogehoge users        4817 May  7  1995 info
         -r--r--r--   1 hogehoge users         685 Sep 16  1996 poppassd-src.tar.gz.lsm
         -rw-r--r--   1 hogehoge users       11888 Jan 11 12:12 poppassd.c
         -rw-r--r--   1 hogehoge users       21102 May  7  1995 poppassd.c.orig

7. メイクします。

   `make` コマンドでメイクします。

         make

   メイクすると実行ファイル poppassd ができます (エラーが出てメイクに失敗した場合は「make でエラーが出る場合」を参照してください)。

8. インストールします。

   1. `su` コマンドでスーパーユーザになります (root のパスワードを入れるのを忘れないように)。

            su

   2. `make install` で poppassd を `/usr/sbin/` にインストールします。

            make install

   3. `/etc/services` を変更します。

      `/etc/services` ファイルに

            poppassd     106/tcp

      の 1 行を追加します(TCP ポート 106 番のサービスが poppassd であるという意味です)。

   4. `/etc/inetd.conf` を変更します。

      `/etc/inetd.conf` ファイルに

            poppassd stream tcp nowait root /usr/sbin/poppassd poppassd

      の一行を追加します。 6 番めの「`/usr/sbin/poppassd`」はあなたが poppassd をインストールした パスを書く必要があります(`/usr/sbin/poppassd` で poppassd サービスを起動するという設定です)。

      tcpd を使用している場合は

            poppassd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/poppassd

      の方が望ましいです(Slackware3.6 の場合は tcpd を使用するのが一般的です)。

   5. inetd デーモンに設定が変更された事を通知します (reboot すれば新しい設定で動作します)。

            kill -HUP </usr/sbin/inetd のプロセスID>

      または

            reboot

9. manpage をインストールします。

   `debian/` ディレクトリに Christoph Lameter さんが書いた `poppassd.8` があるのでインストールしましょう (英語のマニュアルが必要でない場合はインストールしなくても良いです)。

   1. `su` コマンドでスーパーユーザになります。

            su

   2. `install` コマンドでインストールします。

      カレントディレクトリを `debian/` ディレクトリ に移動してから下記の様なコマンドでインストールしましょう。

            install -c -m 644 poppassd.8 /usr/man/man8

   3. `man` コマンドを使用して poppassd のマニュアルを読めるかをテストします。

            man poppassd

      マニュアルが表示されれば poppassd の manpage のインストールに成功です。

## make でエラーが出る場合

筆者の環境では make でエラーが出ました。 エラーメッセージは

      poppassd.c:146: conflicting types for `crypt'
      /usr/include/unistd.h:639: previous declaration of `crypt'

でした。 「`poppassd.c` をコンパイルしようとしたんだけど 146 行で宣言している ``crypt`' が以前に宣言された型と違います」というエラーです。 `poppassd.c` ファイルの 146 行の内容は

      char *crypt (char *, char *);   /* To permit long shadow passwords */

です。

`crypt()` 関数の宣言は `unistd.h` に含まれて います。`poppassd.c` では `unistd.h` をインク ルードしています。よって、冗長なので削除したりコメントアウトしても問題ありません。 `poppassd.c` ファイルの 146 行を削除しましょう。 コメントアウトするためには以下の様に変更します。

      C 言語の /* */ でコメントアウトする場合

      /* char *crypt (char *, char *);*/   /* To permit long shadow passwords */

      C++ 言語の // でコメントアウトする場合

      // char *crypt (char *, char *);   /* To permit long shadow passwords */

変更したら、また `make` コマンドでメイクします。

すると、またエラーが出ました。 エラーメッセージは

      cc -o poppassd  poppassd.o -lcrypt
      /usr/i486-linux/bin/ld: cannot open -lcrypt: No such file or directory

でした。 「リンクしようとしたけど `crypt` というライブラリファイルが無い」 というエラーです。`crypt` ライブラリに含まれていそうで poppassd が使用している関数は `crypt()` だと推測されます (ソースを読んで推測しました)。 `crypt()` 関数は `libc.so` (`libc.so` の実体は `libc.so.5.4.46`) に含まれているので `-lcrypt` 指定は必要ありません。 よって Makefile ファイルの 6 行目のライブラリの指定をコメントアウトします。 メイクファイルのコメントマークは # です。

      LIBS    = -lcrypt # -lshadow

の一行を

      LIBS    = # -lcrypt # -lshadow

に変更しました。

変更したら、また `make` コマンドでメイクします。 筆者は上記の 2 ヶ所の変更でメイクに成功しました。

注意）`libc.so` に含まれている関数はライブラリのバージョンによって 違う場合があります。`libc.so.5.4.46` 以外のライブラリを使用している 場合は `libcrypt.so` 等が必要な場合があります。 例えば、ライブラリが glibc2 の場合は `libc.so.6` に `crypt()` 関数が入っていませんので `libcrypt` を リンクする必要があります。

## インストールに成功して、テストの結果にも問題無いが、パスワードが 変更されない場合

poppassd は `/usr/sbin/newusers` コマンドを使用してパスワードを 変更しています。`/usr/sbin/newusers` コマンドがインストールされてない 場合、 syslog に下記の様な エラーメッセージを出力しているはずです。

      poppassd&lsqb;695&rsqb;: can't exec /usr/sbin/newusers: No such file or directory

上記に該当する場合は `/usr/sbin/newusers` コマンドをインストールする 事により問題が解決します。

`/usr/sbin/newusers` コマンドは「shadow パスワード」パッケージに 入っています。Slackware3.6 に含まれている「shadow パスワード」パッケージのファイル名は `shadow-980724.tar.gz` です。 あなたのシステムのパスワードシステムが「shadow パスワード」でない場合でも、 「shadow パスワード」に対応していない `/usr/sbin/newusers` をインストール すれば問題を解決できます。

### /usr/sbin/newusers のインストールの方法

1. 適当なディレクトリに `shadow-980724.tar.gz` をコピーします。 または ftp で Get します。

2. `shadow-980724.tar.gz` を展開します。

         tar -zxvf shadow-980724.tar.gz

3. `configure` で `Makefile` 等を作成します。

   `configure` が正常に動作すれば、あなたのマシンのパスワード システムに対応したバイナリを作成するように `Makefile` を 作成します。

         configure

4. メイクします。

         make

   メイクに成功したら `src/` ディレクトリに `newusers` ができあがっているはずです。

         -rwxr-xr-x   1 hogehoge users        2837 Jan 20 21:46 newusers

### インストールします

1. スーパーユーザモードになってから

         su

2. `install` コマンドでインストールします。

   カレントディレクトリを `src/` ディレクトリに 移動してから下記の様なコマンドでインストールしましょう。

         install -o root -g bin -m 500 newusers /usr/sbin

## poppassd のテスト方法

サーバで

      telnet localhost 106

して poppassd に接続します。 あとはプロトコルを手で入力して確かめましょう。

成功例です。

      trying 127.0.0.1...
      Connected to localhost.
      Escape character is '^&rsqb;'.
      200 kiwi poppassd v1.2 hello, who are you?
      user hogehoge
      200 your password please.
      pass pswd1234
      200 your new password please.
      newpass newpass0
      200 Password changed, thank-you.
      quit
      200 Bye.
      Connection closed by foreign host.

現在のパスワードが正しくない場合の例。

      Trying 127.0.0.1...
      Connected to localhost.
      Escape character is '^&rsqb;'.
      200 kiwi poppassd v1.2 hello, who are you?
      user hogehoge
      200 your password please.
      pass pswd1233（正しくないパスワード）
      200 your new password please.
      newpass newpass0
      500 Invalid user or password
      Connection closed by foreign host.

## poppassd 関連のリンク

- 本家 Qualcomm： http://www.qualcomm.com/

- Debian： http://www.debian.org/

- DebianJP： http://www.jp.debian.org/

poppassd のクライアントソフト

  p-chng： http://www.nets.or.jp/~chaya/

  POPパスワード： http://member.nifty.ne.jp/nya-n/

  POPパスワードチェンジャ： http://www.vector.co.jp/soft/win95/net/se054124.html

## 筆者メールアドレス等

    名前　　　　：田中 啓（たなか ひらく）
    電子メール　：pegira@po.jah.ne.jp
    ウェブページ：http://www.jah.ne.jp/~pegira/
    校正　　　　：中野武雄、長谷川靖
    配布条件　　：GPL

(SGML conversion: yuji senda, 2001/03/12)