Какой API я вызываю, чтобы установить пароль пользователя в Linux? - PullRequest
3 голосов
/ 28 апреля 2009

Я знаю о passwd(1) и crypt(3). То, что я ищу, это C API для вызова, который установит пароль пользователя в файлах passwd / shadow, без необходимости программно обходить файлы и перезаписывать запись для рассматриваемого пользователя. Приложение запускается как root.

Существует ли такой API?

РЕДАКТИРОВАТЬ: думаю, я должен указать, что пароль синхронизируется между различными системами, поэтому мы не можем просто вызвать систему («passwd») и позволить пользователю вводить любой пароль, который он хочет, когда passwd запрашивает их. Нам нужно знать пароль, чтобы мы могли программно обновлять другие системы с тем же паролем.

Ответы [ 7 ]

4 голосов
/ 28 апреля 2009

Скорее всего, это будет зависеть от того, какой механизм использует рассматриваемая система ...

... что приводит меня к другому предложению: используйте существующие инструменты, чтобы различные системы аутентифицировали пользователей вместо общего хранилища - например, LDAP или любого другого каталога или главной системы, доступной на вашем сайте. Или настроить один. Желательно не NIS + ^^

Не изобретай велосипед, как они, якобы, говорят.

Откуда вы взяли бы простой текстовый пароль для начала? Если это там, зачем вообще пароли? (Да, я знаю, что я укол, когда дело доходит до этих вещей, извините - пусть начнутся отрицательные голоса;)

4 голосов
/ 29 апреля 2009

Как 8jean прокомментировал выше, похоже, что / usr / sbin / chpasswd может быть самым простым способом. В противном случае я бы пошел с комментарием Нохи об использовании таких функций, как fgetpwent () - или fgetspent () для работы с теневым файлом - чтобы просмотреть список пользователей и изменить записи, которые мне нужно изменить. Спасибо всем!

2 голосов
/ 28 апреля 2009

Может быть, звонок по запросу - это то, что вы ищете. Попробуй мужик. По поиску в quicks я нахожу страницу с примерами. Это может помочь.

http://linux.omnipotent.net/article.php?article_id=10935

Проверьте getpwnam на предмет поиска, изменения записи и использования putpwent.

2 голосов
/ 28 апреля 2009

Использование / etc / passwd и / etc / shadow для хранения пароля? Синхронизированы ли UID между системами? Вы можете просто скопировать / перезаписать строку в файле / etc / shadow для конкретного пользователя.

И ответом «не делай этого» будет использование NIS-сервера и изменение пароля только один раз.

0 голосов
/ 28 апреля 2009

Вы могли бы взглянуть на источник passwd, но сначала я бы попробовал более простой и ленивый способ: я просто связал passwd и посмотрел, что происходит.

0 голосов
/ 28 апреля 2009

Возможно, вы хотите PAM ? Не уверен, но большинство дистрибутивов используют его ...

Добавлено: Похоже, Mac OS X использует openssl для управления хэшированием паролей. Может быть возможно сделать что-то подобное в Linux, но для ваших нужд вы должны быть совместимы с уровнем аутентификации, используемым ОС.

0 голосов
/ 28 апреля 2009

Лучше всего выполнить команду passwd с соответствующими аргументами и позволить ей беспокоиться о проблемах обработки файлов, шифрования и блокировки файлов. На каком-то уровне что-то должно «программно пройтись по файлам», несмотря ни на что. Если у вас действительно нет больших проблем с производительностью, вам лучше полагаться на существующий код и опыт, а не пытаться дублировать существующий код.

...