URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 67
[ Назад ]

Исходное сообщение
"Нужно изменять пароль из программы"

Отправлено romanSA , 05-Июл-01 19:04 
Требуется изменить пароль пользователя из программы. Программа работает под root-ом.
ОС: BSDI BSD/4.1 . Очень желательно делать все без "хака" (только системный API, на крайний случай - запуск внешней программы). PASSWD(1) не подходит т.к. там пароли нужно задавать в открытую и их видно даже из PS.
Заранее благодарен за ответ.

romanSA.


Содержание

Сообщения в этом обсуждении
"RE: Нужно изменять пароль из программы"
Отправлено Арлекин , 10-Июл-01 11:50 
man getspnam  // для shadow.h
man getpwnam  // для pwd.h

"RE: Нужно изменять пароль из программы"
Отправлено romanSA , 10-Июл-01 15:26 
Извините, как "читать пароли" я знаю. Но нужно их именно изменять. И потом, SHADOW-пароли хранятся на разных *NIX-ах в различных файлах. (А в BSD getspnam и др. "SHADOW"-процедур вообще нет).

"RE: Нужно изменять пароль из программы"
Отправлено Арлекин , 11-Июл-01 16:41 
Извиняю.
Функцией проверки правильности пароля можно зашифровать новый пароль, после чего просто переписать нужный файл (в моем случае shadow) в нужном формате. Как называются во фрях шадовские функции я не знаю ( на работал на ней ни разу, хотя хотелось бы рискнуть)- я бы просто посмотрел shadow.h, если  он есть, ессно.

"RE: Нужно изменять пароль из программы"
Отправлено romanSA , 12-Июл-01 19:58 
Вот этого я и не хотел... В смысле, переписывать "нужный файл в нужном формате". Хотелось, что-либо стандартное, да видно нету...
А "нужные файлы" в разных *NIX-ах и лежат по-разному и форматами несколько различаются.
Да, к сведению, в BSD нет _специальных_ функций доступа к shadow-паролям. Просто если root вызывает getpwnam () или аналогичное, то в поле pw_password _всегда_ лежит шифрованный пароль. И не надо вызывать никаких getspnam ().

В общем, как ни грустно, приходётся закрыть эту проблему к-либо "кустарным" методом.

Спасибо за советы.


"RE: Нужно изменять пароль из программы"
Отправлено Арлекин , 13-Июл-01 10:49 
Да не за что.
Просто, как я думаю, системные проги смены паролей делают то-же самое - переписывают файл. Скажем, в Солярке и RH62, /etc/shadow вообще имеет права доступа - чтение только руту и бину. И прикол в том, что системная прога в процессе смены пароля делает 2 chmod-a и благополучно переписывает его. Не думаю, что в этом есть что-то хакерское.
ЗЫ:
Кстати, а ты не пробовал использовать popen(...); ?

"RE: Нужно изменять пароль из программы"
Отправлено romanSA , 13-Июл-01 12:19 
Лучше не popen(), а fork() + exec*() - можно организовать взаимодействие с запускаемым процессом так, как тебе угодно. К слову, именно так я сейчас и сделал (Вызываю соответствующую системную программу /usr/sbin/adduser или /usr/sbin/useradd или ещё что-либо (зависит от задачи и ОС). Т.к. ключи команды тоже зависят от ОС, то вся исполняемая строка хранится в config-е, а исходный код прекрасно работает под BSD/Linux/AIX без изменений. В строку подставляются соответствующие параметры (напр. логин, "зашифрованный пароль" и др.) и далее она исполняется. Перехватить ввод/вывод/код возврата не составляет труда.) .