C ++ Добавить пользователя Linux
-
28-09-2019 - |
Вопрос
Какой лучший способ добавить пользователя / группу в 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
Программа с соответствующими вариантами.