poppassd のインストールの方法 (1.2-8)

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

poppassd ってなに?

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

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

poppassd のプロトコル

単純なプロトコルです。
FTP サーバーが応答するように、サーバーの応答が必ずあるはずです。
サーバの応答の先頭の数字が意味を持ってます。
サンプルを以下に示します。
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[695]: 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
    

  5. インストールします。
    スーパーユーザモードになってから
    su
    

    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 '^]'.
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 '^]'.
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

筆者メールアドレス等

名前    :田中 啓(たなか ひらく)
ウェブページ:http://www.jah.ne.jp/~pegira/
校正    :中野武雄、長谷川靖
配布条件  :GPL

name:Tanaka Hiraku ([family name] [last name])
WebPage:http://www.jah.ne.jp/~pegira/
License:GPL

[戻る] [TOP]
last update [1999/01/25]