- PR -

ユーザ自動登録

1
投稿者投稿内容
kami
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 95
お住まい・勤務地: 大手町
投稿日時: 2006-06-13 16:34
お疲れ様です、kamiです。

只今、暇をもてあまし、日頃できない勉強をこの際に、と思っているこの頃です。

さて、今回の投稿に関しての内容はタイトル通りです。

予定環境:
OS :RedHat9
言語 :C++,php
コンパイラ:gcc

にて、行おうと思っています。

タイトルのシーケンスを自分なりに考えた結果を下に記述します。
Web上から登録以来(php)
アドレスチェック
アドレス確認(メールを送ってURLをクリックさせて使用しているか認証する奴です。)
アドレス重複確認
名前その他の確認は置いといて、、、。
上記アドレス周りの確認が取れたら、DBに仮登録(登録内容)
毎日午前3時半(時間は適当)(C++)
DBより登録を実行するデータを取得
LinuxUserに登録
DBを仮登録から正規登録へ(基本的にフラグ)(でも、別テーブルでもいいかなと思っています。)

以降、FTP接続可能な状況へ・・・・。

と、したいと思っています。
LinuxUserに登録せずにFTPのユーザ管理をDBで行い、そのDBに登録する事によってFTPを使えるようにすればいいじゃん。 と、いわれそうですが、、、(^^;

tok2やジオシティーズのような自動登録をイメージしています。
で、FTPをDBで管理しない場合に、LinuxUserとしてアカウントを発行する場合、/etc/passwdファイルへの書き込みをする際にパスワード設定などはどの用にすればいいのでしょうか?

kami:x:511:100::/home/kami:/sbin/nologin

また、実際にそのような動作を作成された方へですが、気をつける点や工夫点などがありましたら、よろしくご教授の程お願い致します。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-06-15 12:53
引用:
/etc/passwdファイルへの書き込みをする際にパスワード設定などはどの用にすればいいのでしょうか?



RedHat9は最初からshadowを使うようになっていると思うので、
/etc/passwd は
kami:x:511:100::/home/kami:/sbin/nologin
の記述でよいのではないでしょうか?

passwd(5)のmanを見てみてください。

[ メッセージ編集済み 編集者: Java僧 編集日時 2006-06-15 12:54 ]
kami
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 95
お住まい・勤務地: 大手町
投稿日時: 2006-06-16 14:11
java増様、返信ありがとうございます。

誤解を招くような書き方をしまして、申し訳ないです。
kami:x:511:100::/home/kami:/sbin/nologin
は、現在のpasswdファイルから持ってきたものです・・・。

前述したように、仮登録となったデータをDBから取得した際には
実際に入力された値="123456"とかになります。

で、C++の方でpasswdファイルに追記するときに多分"123456"のままじゃまずいなと・・・。
現在のpasswdファイルを見て思ったのです。
その際に、どうするのかな?って思ってたりします。

以上です。
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 2006-06-16 15:31
> で、C++の方でpasswdファイルに追記するときに多分"123456"のままじゃまずいなと・・・。
> 現在のpasswdファイルを見て思ったのです。
> その際に、どうするのかな?って思ってたりします。

暗号化されたパスワードを /etc/shadow に追記するのですよね。

C/C++ でしたら
CRYPT(3)
を参照してみては如何でしょうか。

ちなみに,
/usr/sbin/useradd (USERADD(8))
ですと -p オプションの引数に crypt(3) によって暗号化されたパスワードを渡せば
よいようです。

perl でも crypt 関数を利用すれば C/C++ と同じように処理できるようです。

RedHat Linux9 だと多分 MD5/DES が利用可能かと思いますので,SALT をお使いの環境に
あわせてください。
dovecot 付属のドキュメント auth.txt には perl の例が記載されいますし,
google 等の検索エンジンで調べていただくと他の用例等含めて出てくるかと思います。

脱字を訂正しました。

[ メッセージ編集済み 編集者: NeXT 編集日時 2006-06-16 15:34 ]
kami
ベテラン
会議室デビュー日: 2004/08/21
投稿数: 95
お住まい・勤務地: 大手町
投稿日時: 2006-06-20 10:12
NeXT様、返信ありがとうございます。

>/usr/sbin/useradd (USERADD()
>ですと -p オプションの引数に crypt(3) によって暗号化されたパスワードを渡せば
>よいようです。

上記がちょっと不明だったので、質問させて下さい。

コマンドの実体の実行ファイルをC++の方から別アプリケーション起動(?)で、起動させる際に暗号化した値を引数として与えればよい、という解釈でよろしいでしょうか?
(う〜ん、、、上記だとuseraddを起動する際にオプション指定するのと違うのだろうか?)

結構悩み悩みですので、表現や言い方がおかしい場合には指摘いただければと思います。

暗号化の種類や方法についてはGoogle先生で調べて見ます。

以上です、よろしくお願いいたします。
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 2006-06-22 15:03
>>/usr/sbin/useradd (USERADD()
>>ですと -p オプションの引数に crypt(3) によって暗号化されたパスワードを渡せば
>>よいようです。
>
> 上記がちょっと不明だったので、質問させて下さい。
>
> コマンドの実体の実行ファイルをC++の方から別アプリケーション起動(?)で、起動させ
> る際に暗号化した値を引数として与えればよい、という解釈でよろしいでしょうか?
>(う〜ん、、、上記だとuseraddを起動する際にオプション指定するのと違うのだろうか?)

「コマンドの実体の実行ファイル〜」の箇所がわからないのですが,
C/C++ の SYSTEM(3) 関数中で USERADD(8) を呼び出すということで
しょうか。

C/C++ はわからないのですが,コマンドラインからでしたら,例えば
パスワード: 123456
SALT: $1$foobarzoo$
として
$ /usr/bin/perl -e "print crypt( '123456', '¥$1¥$foobarzoo¥$' )"
とすると
$1$foobarzo$C3Ihd21vcLBnunQmk/kab0
が返りますので,これを
# /usr/sbin/useradd -p "¥$1¥$foobarzo¥$C3Ihd21vcLBnunQmk/kab0" ...略
といったふうに渡してやればよいかと思います。

RHEL4 + MD5 有効な環境で確認しましたが,RedHat9 + MD5 有効な環境でも
同様にできるかと思います。

どのように各種パラメタが格納されるかについては,実際に /etc/{passwd, shadow}
ご覧になればよいかと思います。
1

スキルアップ/キャリアアップ(JOB@IT)