0.poppassd のインストールの方法 (1.2-8) Linux がインストールされているマシンに poppassd をインストールする方法を記述します。 ただし、「NIS」を使用していない場合に限定します。 1.poppassd ってなに? メールサーバのパスワードを変更する事ができる「電子メールクライアントソフト」があります。 (Eudora , NUPOP , Pちゃん , p-chng , POPパスワード , POPパスワードチェンジャ 等) しかし、サーバ側で対応したデーモン(サービス)が動作していないと 「電子メールクライアントソフト」からパスワードを変更することはできません。 ちなみにメールをサーバに送信できるのは、サーバで「SMTP デーモン」が動いているからです。 同じくメールをサーバから受信できるのは、サーバで「POP3 デーモン」が動いているからです。 よって、パスワードを変更するデーモンをサーバにインストールしておくと、サーバに telnet して、 /usr/bin/passwd コマンドを使用してパスワードを変更するといった面倒な操作をしなくても、 パスワードを変更できるようになります。 poppassd とは unix 用のパスワードを変更するデーモンまたはそのプロトコルの名前です。 2.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: E: 3.試した環境 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 パスワード」システムになっています。 4.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 のソースディレクトリからコピーしても良いでしょう。 5.poppassd のインストール方法 5.1.適当な作業ディレクトリに poppassd_1.2.orig.tar.gz をコピーします。 または ftp で Get します。 5.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 5.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 5.4.poppassd-1.2.orig/ にパッチファイルをコピーします。 cp poppassd_1.2-8.diff poppassd-1.2.orig/ 5.5.カレントディレクトリを poppassd-1.2.orig/ に移動します。 cd poppassd-1.2.orig/ 5.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 5.7.メイクします。 make コマンドでメイクします。 make メイクすると実行ファイル poppassd ができます。 (エラーが出てメイクに失敗した場合は「make でエラーが出る場合」を参照してください。) 5.8.インストールします。 5.8.1.su コマンドでスーパーユーザになります。(root のパスワードを入れるのを忘れないように) su 5.8.2.make install で poppassd を /usr/sbin/ にインストールします。 make install 5.8.3./etc/services を変更します。 /etc/services ファイルに poppassd 106/tcp の 1 行を追加します。(TCP ポート 106 番のサービスが poppassd であるという意味です。) 5.8.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.8.5.inetd デーモンに設定が変更された事を通知します。(reboot すれば新しい設定で動作します。) kill -HUP または reboot 5.9.manpage をインストールします。 debian/ ディレクトリに Christoph Lameter さんが書いた poppassd.8 があるのでインストールしましょう。 (英語のマニュアルが必要でない場合はインストールしなくても良いです) 5.9.1.su コマンドでスーパーユーザになります。 su 5.9.2.install コマンドでインストールします。 カレントディレクトリを debian/ ディレクトリに移動してから下記の様なコマンドでインストールしましょう。 install -c -m 644 poppassd.8 /usr/man/man8 5.9.3.man コマンドを使用して poppassd のマニュアルを読めるかをテストします。 man poppassd マニュアルが表示されれば poppassd の manpage のインストールに成功です。 6.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 をリンクする必要があります。 7.インストールに成功して、テストの結果にも問題無いが、パスワードが変更されない場合 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 をインストールすれば問題を解決できます。 7.1./usr/sbin/newusers のインストールの方法 7.1.1.適当なディレクトリに shadow-980724.tar.gz をコピーします。 または ftp で Get します。 7.1.2.shadow-980724.tar.gz を展開します。 tar -zxvf shadow-980724.tar.gz 7.1.3.configure で Makefile 等を作成します。 configure が正常に動作すれば、あなたのマシンのパスワードシステムに対応した バイナリを作成するように Makefile を作成します。 configure 7.1.4.メイクします。 make メイクに成功したら src/ ディレクトリに newusers ができあがっているはずです。 -rwxr-xr-x 1 hogehoge users 2837 Jan 20 21:46 newusers 7.2.インストールします。 7.2.1.スーパーユーザモードになってから su 7.2.2.install コマンドでインストールします。 カレントディレクトリを src/ ディレクトリに移動してから下記の様なコマンドでインストールしましょう。 install -o root -g bin -m 500 newusers /usr/sbin 8.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. 9.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 10.筆者メールアドレス等 名前 :田中 啓(たなか ひらく) 所属 :(株)メイテック 東京ネットワーク・テクノロジー・センター 電子メール :mailto:h-tanaka@tsys.meitec.co.jp ウェブページ:http://www.jah.ne.jp/~pegira/ 校正 :中野武雄、長谷川靖 配布条件 :GPL