[PHP-users 9552] Re: phpで useradd+passwd する方法
TAKAHASHI Masayoshi
php-users@php.gr.jp
Tue, 27 Aug 2002 23:59:11 +0900
高橋征義です。
加藤昌也 <kato@nil.co.jp>さん:
> > useradd と、 passwd との同様を機能を phpで記述したいのです。
(略)
> この話題は毎月のように質問されています。
> 過去ログをまず調べてみましょう。
私も調べてみましたが、毎月のように質問されているわりには、
これといっていい投稿(のまとめ)はないように見えました。
というわけで、書いてみました。何か間違い等があればご指摘
いただけるとうれしいです。
------------------------------------------------------------------
Q. useraddコマンドのように、ユーザを追加する機能をPHPで実現するには?
A. いくつかの方法があります。
1) sudo等を使ってuseraddを実行する。
useraddは通常、限られたユーザでしか実行できません。
そのため、sudoなどを使って、PHPの実行ユーザ(nobodyや
apacheなど)からuseraddを実行できるようにする必要があります。
sudo等の使い方はOSのマニュアルを参照してください。
もっとも、sudoなどで管理者用アカウント以外に管理用コマンドの
実行権限を与えてしまうのは、セキュリティ的に最適な方法では
ありません。下記 2)も参照してください。
(参考URL:
[PHP-users 8418]
http://ns1.php.gr.jp/pipermail/php-users/2002-July/008423.html
[PHP-users 7451]
http://ns1.php.gr.jp/pipermail/php-users/2002-May/007459.html )
2) ユーザ追加用の情報をいったんどこかに保存し、後で自動的に
ユーザの追加を行う。
1)の問題を避けるため、直接登録せず、別途useraddの実行権限を
持つプログラムが登録させることもできます。
例えば、以下のようなやり方が考えられます。
・追加情報登録DB(もしくはファイル)などを用意し、そこに
ユーザ名とパスワード(をcryptしたもの)を登録する。
Web上では、「ユーザ登録情報を記録しました。登録は後ほど
行われます。登録完了後、結果をメールでお送りします」など
と表示させる。
・そして、シェルスクリプトやコマンドライン用PHPスクリプトで、
追加情報登録DBの情報を元に、useraddを行い、結果をメール
で送信するスクリプトを書き、それを定期的に実行させる
(定期実行にはcronを利用する)。
こうすると、Webサーバで実行されるPHPスクリプトと、ユーザの
登録を行うスクリプトを分離できるので、実行権限の設定が
簡潔になります。しかし、リアルタイムで更新できるわけでは
ないので、用途によっては不便かもしれません。
定期実行させる時間間隔等は、使用する環境によって判断して
ください。また、メールではなくどこかにログを吐かせる、と
いう方法もよいでしょう。
3) DBを使ってユーザ管理を行うようにし、そのDBに登録する。
要するにユーザ管理を行うためのユーザ情報を変更したいわけ
ですから、ユーザ管理自体を /etc/* 等のファイルではなく、
PostgreSQLなどのDBで行うようにさせてしまえば、あとはDBの
操作でユーザが登録できるようになるわけです。
もっとも、この方法では、ユーザ情報の管理に汎用のDBを使う
ことになるわけですから、セキュリティの確保には細心の注意を
払う必要があります。
詳しくはOSやDBのマニュアルを読み込み、それぞれのセキュリ
ティモデルとその設定方法をちゃんと理解した上で使いましょう。
(参考URL:
[PHP-users 8460]
http://ns1.php.gr.jp/pipermail/php-users/2002-July/008465.html )
------------------------------------------------------------------
ところで、[PHP-users 7449]
( http://ns1.php.gr.jp/pipermail/php-users/2002-May/007457.html )
のスレッドでは、sudoなしで登録できているようにみえるのですが、
これはどういう方法を使っているのでしょうか?
あと、上の1)のURLにある方法では、useraddが失敗した場合のエラー
処理がないですね。これってsystemの第二引数などを使って判断する
ことになると思うんですが、どう書くのがいいんでしょう?
# 元メールによれば「エラーにはなりませんが、ユーザー・パス共に登録
# できていたせんでした。」とのことですが、これはuseraddの問題だけ
# ではなく、「適切にエラー報告が行えていない」というPHPスクリプト側
# の問題でもある、と考えるべきでしょう。
# ま、エラーハンドリングは何かとめんどくさくて手抜きがちになりやすい
# ところですが。
# ……ちなみに私は「そもそもuseraddってナニ?」と思ってしまう
# FreeBSDユーザだったりします(^_^;
高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp
情報量の少ない質問・回答を撲滅するにはFAQが必須ではないかと。