Вопрос

Какой лучший способ добавить пользователя / группу в 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);

Спасибо!

Это было полезно?

Решение

Я заметил, что самые основные утилиты, которые добавляют и изменяют пользователей, делают это напрямую, часто по-разному. Функции, которые вы можете использовать для изменения пассив и тень файлы выставлены в <pwd.h> И в <sys/types.h>, и они часть Glibc.

fetgetpwent., getpwnam., вот, getpwent_r., outpwent., SetPwent.

Мы можем посмотреть, как Busybox (через Тинилогин) делает это, как пример. В busybox/loginutils/adduser.c, они помещают пользователя в файл PASSWD, создавая структуру Passwd, а затем вызовов putpwent. Отказ Для добавления пароля пользователя в файл тени они просто звонят fprintf и напишите строку напрямую.

Для аутентификации пользователей современный путь, есть Linux-pam.. Отказ Но насколько добавляю пользователей, вы можете увидеть в pam_unix_passwd.c. что они называют Unix_Update_db (), который вызывает различные функции в libpwdb., который вы должны добавить в качестве зависимости в ваш проект, если вы его используете.

Это, как говорят, я виновен в том, чтобы написать пару коммунальные услуги для анализа баз данных Passwd и Shadow и изменять их напрямую. Это работало нормально, но это было в встроенной системе, где я мог крепко контролировать все. Мне не приходилось беспокоиться о таких вещах, как условия гонок с другими программами, модифицирующими passwd db.

Если вам нужно добавить группу, то же самое касается Групповая база данных.

Другие советы

Вы можете попробовать использовать либера библиотека.

Одно из приложений, которые распространяются с Libuser, luseradd, программа, которая, кажется, является кроссплатформой useradd утилита. В его ядре, luseradd использует Libuser's lu_user_add Функция для физического создания пользователя.

Увидеть docs/html Папка в исходном распределении для документирования.

Добавление пользователя немного слишком высокого уровня для того, чтобы быть системным вызовом для него. Насколько я знаю, для этого тоже нет широко используемых библиотек. Ваша лучшая ставка, вероятно, будет использовать system Позвоните, чтобы вызвать useradd Программа с соответствующими вариантами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top