3

と について知っていpasswd(1)ますcrypt(3)。私が探しているのは、passwd/shadow ファイルにユーザーのパスワードを設定する C API を呼び出すことです。プログラムでファイルを調べたり、問題のユーザーのエントリを上書きしたりする必要はありません。アプリケーションはルートとして実行されます。

そのような API は存在しますか?

編集: パスワードは異なるシステム間で同期されているため、単純に system("passwd") を呼び出して、passwd が要求したときにユーザーが必要なパスワードを入力できるようにすることはできません。同じパスワードで他のシステムをプログラムで更新できるように、パスワードを知る必要があります。

4

7 に答える 7

4

これは、問題のシステムが使用するメカニズムによって異なる可能性があります...

...別の提案があります。既存のツールを使用して、代わりに、LDAPやサイトで利用可能なディレクトリやマスターシステムなど、さまざまなシステムが共通のストアに対してユーザーを認証するようにします。または1つ設定します。できればNIS+ではありません^^

彼らが言うように、車輪の再発明をしないでください。

クリアテキストのパスワードはどこから入手しますか?それがそこにあるのなら、なぜパスワードを持っていることさえわざわざするのですか?(ええ、私はこれらのことに関しては私が刺されていることを知っています、申し訳ありません-反対票を始めましょう;)

于 2009-04-28T19:53:46.710 に答える
4

8jean が上でコメントしたように、/usr/sbin/chpasswd が最も簡単な方法のようです。そうでなければ、fgetpwent() やシャドウ ファイルを処理するための fgetspent() などの関数を使用して、ユーザーのリストを調べ、変更する必要があるレコードを変更するという noha のコメントに従っていたでしょう。みんな、ありがとう!

于 2009-04-28T22:25:04.243 に答える
2

たぶん、putpwent呼び出しはあなたが探しているものです。男putpwentを試してみてください。クイック検索で、いくつかの例を含むページを見つけました。それは役立つかもしれません。

http://linux.omnipotent.net/article.php?article_id=10935

エントリを変更してputpwentを利用するよりも、getpwnamで検索してください。

于 2009-04-28T19:44:26.547 に答える
0

おそらくあなたはPAMが欲しいですか?わかりませんが、ほとんどのディストリビューションで使用されています...

追加: MacOSXopensslがパスワードハッシュの管理に使用しているようです。Linuxでも同様のことができるかもしれませんが、ニーズに応じて、OSで使用される認証レイヤーと互換性がある必要があります。

于 2009-04-28T18:58:54.410 に答える
0

passwd のソースを見ることもできますが、最初はもっと簡単で怠惰な方法を試してみます。

于 2009-04-28T19:10:32.523 に答える