C ++ Linuxユーザーを追加します
-
28-09-2019 - |
質問
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
適切なオプションを備えたプログラム。