プロが教えるわが家の防犯対策術!

c言語でunixにおけるパスワード変更のプログラムを作っています。
etc/shadowのパスワードの部分を書き換えたいのですがいまいちファイルの取り扱いがよくわかりません。

ファイルの中のユーザを検索して、ファイルの一部分を書き換えるのには
どうしたらよいのでしょうか?

よろしくおねがいします。

A 回答 (2件)

演習問題としてですか?



もし実用的にそれをしたいというなら、ファイルのロックの問題とかもありま
すし、どんなセキュリティホールを作ってしまうかわからないので、独自に作
るのはやめた方が無難だと思います。それよりは、passwd や chpass を外部
プログラムとして呼び出すように設計する方がいいでしょう。

演習問題としてなら、UNIXでは、ファイルのある部分(10byte程度)だけ変更
するというのは、基本的には困難です(というより無理です)。全体をメモリ
に読み込んで、必要な部分を変更して、全体を書き出すということになるでしょ
う。

メモリに読み込む際には、1行ずつ読み、(動的に確保した)別々の配列に入
れ、先頭が該当するユーザ名なら、パスワード部を適当に変更します。変更す
るには、パスワードの暗号化アルゴリズムとして、何を使うかを決めた上で、
暗号化関数を呼びます。通常は crypt でいけるでしょう。

ただし、異常な長さの行があるときとか、異常な行数とか、最後の行に改行が
ないとか、フォーマットが変とか、そういうのに完全に対応するには、ちょっ
とした経験がいると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

演習問題としてやります。
後半でおっしゃっていただいているのを
試してみたいと思います。

で、できたら前半のも・・・(無理かも・・・)

なにぶん経験が浅いものですから・・・(^-^;

がんばってみようとおもいます。
本当にへんとうありがとうございました。

お礼日時:2002/01/17 20:46

UNIX処理系によってはPAMという枠組みが用意されていて


「pam_」で始まる名前の関数で統一的に扱えるようになっているものがあります。
(最近の、linux、Solaris、FreeBSDなどで使えるようです。)

PAMがない場合は、前の方がおっしゃっている通りだと思います。
    • good
    • 0
この回答へのお礼

PAMですか・・・
初めて聞きました。
調べないとだめですね。調べてみます。

ありがとうございました。

お礼日時:2002/01/17 20:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!