9

C ++を使用してLinuxにユーザー/グループを追加する最良の方法は何ですか?私が呼び出すことができるライブラリはありますか?私は次のようなことを始めたくありません:

fopen("/etc/passwd", "a");
 fprintf(tmp, "%s:x:%d:1:%s:/%s/%s:/bin/ksh\n", username, usernumber, commentfield, userdir, username);
 fclose(tmp);

fopen("/etc/shadow", "a");
 fprintf(stmp, "%s:*LK*:::::::\n", username);
 fclose(stmp);

ありがとう!

4

3 に答える 3

7

ユーザーを追加および変更するほとんどの主要なユーティリティは、直接、多くの場合、さまざまな方法で行っていることに気付きました。passwdおよび shadow ファイルを変更するために使用できる関数は<pwd.h>および で公開されており<sys/types.h>それらは glibc の一部です

fgetpwentgetpwnamgetpwgetpwent_rputpwentsetpwent

例として、( TinyLoginを介して) busybox がどのようにそれを行うかを調べることができます。ではbusybox/loginutils/adduser.c、passwd 構造を作成して passwd ファイルにユーザーを配置し、putpwent. ユーザーのパスワードをシャドウ ファイルに追加するにはfprintf、文字列を直接呼び出して書き込むだけです。

最新の方法でユーザーを認証するには、Linux-PAMがあります。しかし、ユーザーを追加する限り、pam_unix_passwd.cで、それらがunix_update_db()を呼び出していることがわかります。これはlibpwdbのさまざまな関数を呼び出します。これを使用する場合は、プロジェクトに依存関係として追加する必要があります。

そうは言っても、passwd および shadow データベースを解析し、それらを直接変更するためのいくつかのユーティリティを作成したことには罪があります。問題なく動作しましたが、これはすべてを厳密に制御できる組み込みシステム上でした。passwd db を変更する他のプログラムとの競合状態などについて心配する必要はありませんでした。

グループを追加する必要がある場合は、グループ データベースも同様です。

于 2010-06-21T17:48:02.503 に答える
5

libuserライブラリを使用してみてください。

libuser と一緒に配布されるアプリケーションの 1 つは、クロスプラットフォームユーティリティluseraddのように見えるプログラムです。useraddコアでluseraddは、libuser のlu_user_add関数を使用してユーザーを物理的に作成します。

docs/htmlドキュメントについては、ソース配布のフォルダーを参照してください。

于 2010-06-21T16:42:53.223 に答える
3

ユーザーの追加は、システム コールで行うには高レベルすぎます。私の知る限り、これにも広く使用されているライブラリはありません。あなたの最善の策は、呼び出しを使用して、適切なオプションsystemでプログラムを呼び出すことでしょう。useradd

于 2010-06-21T16:34:58.157 に答える