質問

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);

ありがとう!

役に立ちましたか?

解決

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

fgetpwent, getpwnam, getpw, getpwent_r, putpwent, setpwent

Busybox(via」を調べることができます ティニロギン)例として、それを行います。の busybox/loginutils/adduser.c, 、彼らはPassWD構造を構築することにより、ユーザーをPassWDファイルに入れてから呼び出します putpwent. 。 Shadowファイルにユーザーのパスワードを追加するために、彼らは単に呼び出す fprintf 文字列を直接書きます。

ユーザーに現代的な方法を認証するために、あります Linux-Pam. 。しかし、ユーザーを追加する限り、 pam_unix_passwd.c 彼らが呼ぶこと unix_update_db(), 、さまざまな関数を呼び出します libpwdb, 、プロジェクトを使用する場合、プロジェクトへの依存関係として追加する必要があります。

そうは言っても、PassWDとShadowデータベースを解析して直接変更するために、いくつかのユーティリティを作成したことで有罪です。うまくいきましたが、これはすべてを厳しく制御できる組み込みシステムにありました。 PassWD DBを変更する他のプログラムで、人種条件のようなことを心配する必要はありませんでした。

グループを追加する必要がある場合、同じことが グループデータベース.

他のヒント

あなたはを使用してみるかもしれません Libuser 図書館。

Libuserで配布されているアプリケーションの1つは luseradd, 、クロスプラットフォームのように見えるプログラム useradd 効用。その中心で、 luseradd Libuser'sを使用します lu_user_add ユーザーを物理的に作成する機能。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top