سؤال

ما هي أفضل طريقة لإضافة مستخدم/مجموعة في Linux باستخدام C ++ هل هناك مكتبة يمكنني الاتصال بها؟ لا أريد أن أبدأ في فعل أشياء مثل:

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

يمكننا أن ننظر في مدى انشغال Box (عبر تينيلوجين) هل ، كمثال. في busybox/loginutils/adduser.c, ، وضعوا مستخدمًا في ملف passwd عن طريق إنشاء بنية passwd ثم الاتصال putpwent. لإضافة كلمة مرور المستخدم في ملف الظل ، فإنهم ببساطة يتصلون fprintf واكتب السلسلة مباشرة.

لمصادقة المستخدمين بالطريقة الحديثة ، هناك Linux-Pam. ولكن فيما يتعلق بإضافة المستخدمين ، يمكنك أن ترى في pam_unix_passwd.c التي يسمونها UNIX_UPDATE_DB (), ، الذي يدعو وظائف مختلفة في libpwdb, ، والتي يجب عليك إضافتها كاعتماد على مشروعك إذا كنت تستخدمه.

ومع ذلك ، فأنا مذنب في كتابة مرافق زوجين لتحليل قواعد بيانات Passwd و Shadow وتعديلها مباشرة. لقد كان الأمر جيدًا ، لكن هذا كان على نظام مضمن حيث يمكنني التحكم بإحكام في كل شيء. لم يكن لدي ما يدعو للقلق بشأن أشياء مثل ظروف السباق مع برامج أخرى تعدل Passwd DB.

إذا كنت بحاجة إلى إضافة مجموعة ، فإن الشيء نفسه ينطبق على قاعدة بيانات المجموعة.

نصائح أخرى

قد تحاول استخدام libuser مكتبة.

أحد التطبيقات التي يتم توزيعها مع libuser luseradd, ، وهو برنامج يبدو أنه منصات متقاطعة useradd خدمة. في الصميم، luseradd يستخدم libuser lu_user_add وظيفة لإنشاء المستخدم جسديا.

انظر docs/html مجلد في توزيع المصدر للوثائق.

تعد إضافة مستخدم عالية المستوى جدًا بحيث يكون هناك استدعاء نظام له. بقدر ما أدرك ، لا توجد أي مكتبات تستخدم على نطاق واسع لهذا أيضًا. من المحتمل أن يكون أفضل رهان لك هو استخدام system دعوة لاستدعاء useradd البرنامج مع الخيارات المناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top