задать пароль пользователю через скрипт [nix]

clevel

Новичок
задать пароль пользователю через скрипт [nix]

Ночи доброй!

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

Группа создается просто pw groupadd name
Юзер - pw useradd -n name -g name -d /usr/hosting/domain
чтобы выставить пароль, я ставлю pw usermod name -hfd
после этого на новой строчке консоли мне предлагается ввести пароль.

Как мне сделать это через скрипт? Есть подозрение, что fd параметр - ввод через консольи есть другие вариант.
Подскажите, плз, куда копать.

Ман читал через man pw, гуглил на эту тему, но дельного совета не нашел.
Заране спасибо.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Это можно сделать через вызов внешней комманды, но скрипт должен под рутом работать (т.е. не под апачем вызовы браузера обрабатывать).
Можно, конечно, извратиться и написать демона, который будет запускаться под рутом и ждать, отдавать ему имя пользователя с паролем - и этот демон будет заводить пользователя.
Собственно, примерно то, что делает Plesk.
Но вначале я бы много раз подумал, а не маюсь ли я дурью.
 

clevel

Новичок
насчет запуска под рутом я в курсе.
Команды, как это делается, я написал.
Меня интересет именно технический вопрос - как задать пароль через скрипт.а не через консоль ручками...

Дурью как раз не маюсь - у меня система пишется управления доменами и хостингом.
Для каждого виртуального хоста - своя юзер/группа.
И вот для автоматизации и нужно через скрипт делать.
А пароль - куда ж без него. юзер иначе по фтп к себе попасть не сможет :(

-~{}~ 15.05.07 10:22:

Решил проблему собственными силами:

<?
$f = popen("/usr/sbin/pw usermod domain-hfd","w");
fwrite($f, "pass");
pclose($f);
?>
 

AmdY

Пью пиво
Команда форума
Активист
и вообще добавление юзвера через редактирование /etc/shadow не следует.
 

boombick

boombick.org
по-хорошему, shadow вообще не предназначен для редактирования вручную :)
 

kamatoz

Новичок
Почему бы вообще пользователей и группы не хранить, например, в ldap?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
clevel - именно это я и имел ввиду, но лучше это делать от демона, а не как в Плеске под рутом веб-сервер запускать.

kamatoz - чтобы не дописывать для ftp-сервера авторизацию через ldap
 

clevel

Новичок
я для себя сделал такую схему:
веб-панель для менеджеров работает как простой вирутальный хост, под своей непривелигированной юзер/группой. Данные проверяются на предмет валидности и инъекций. После этого добавляются в базу данных.

По крону запускается скрипт, права рута, который берет инфу из базы, еще раз проверяет на валидность и уже после этого создает юзер/группу.

Держать демона для таких целей не считаю целесообразным.
Для уменьшения нагрузки на базу - делаю файл-флаг - когда последний раз добавлялись таски в базу. Скрипт по крону запускается, скажем, раз в пять минут. Проверяет файл-фоаг. Если нет обновлений - умирает. Есть - тогда коннект к базе и вперед.
 

ys

отодвинутый новичок
>kamatoz - чтобы не дописывать для ftp-сервера авторизацию через ldap

можно заюзать r.a.d.i.u.s.
Безбожно тупой но работающий протокол.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
clevel - впринципе, от демона мало отличается, для этой задачи неважно. Кстати, а почему не очередь в файлах, вообще без базы?

ys - а пермиссии на файлы? :)
 

kamatoz

Новичок
grigori
Это какой фтп сервер сам лезет в /etc/passwd,shadow,group и тд для авторизации? )
 

Активист

Активист
Команда форума
kamatoz
не грузи, тут php клаб, а не сис админ.

Alexandre
Что значит, редактировать через Web =)
Речь шла о смене пароля. Естественно крон, естественно скрипт, который обрабатывает данные.

Правильная реализация процессов панели управления сервером заключается в следующем:

1. Закрытая база данных, в которой хранится информация о всех юзерах (лимиты и квоты, чья база, кто юзер чей владелец, чей домен кто владелец, биллинг) , и на этом, все.

2. Всей действия которые делает юзер, сохраняются в фаил инструкцию, структуру которой программист продумывает сам, например, появился новый пользователь, в файл инструкции ложится

add_new_user vasya_pubkin 123 no_ssh ......
change_password petya_ivanov 456
add_new_domain petya_ivanov petya.ru

После скрипт, запускаемый по крону от рута, обрабатывает эти данные, и вносит все изменения в систему.

Еще почитай о PAM авторизации
 

clevel

Новичок
grigori, выбор обусловлен тем, что очень много чего делается в этой системе: регистрация домена через выбранного регистратора, заведение днс зон на первичном bind сервере, обновление данных через сокеты на вторичном (у провайдера), заведение виртуального хоста (вот тут работаем с юзер/группой, создаем диры, копируем нужные файлы, делаем конфиг для апача и nginx), создание почты (postmaster и т.д.), доп. фичи типа счетчика ливинет..

Поэтому я продумал структуру тасков и привел их к единой схеме. В дальнейшем будет расширение кол-ва типов тасков.
Так что коннект к базе данных в данном случае - незначительный расход ресурсов по сравнению со всеми другими операциями.

Вопрос в другом: например, запускаю скрипт, в полночью, он считывает спсиок таксов, начинает их отрабатывать.
Через пять минут запускается вторая копия по крону.
Самый простой вариант - ставить первым скриптом лок-файл. Второй скрипт смотрит - есть ли лок. файл. Если есть - и он не старше 10 мин, скажем, то выходим. Есди нет - действуем по схеме первого скрипта.

Первый скрипт завершает работу - киляет лок-файл.

Скользкие моменты:
1. скрипт считал список таксов.. Работает, никому не мешает. Менеджер решил исправить такс - например, отложил (снял публикацию) или удалил. Поулчается, что нужно либо перед каждым таксом запрос делать - точно выполняем. Либо опять лок файлы делать.
2. при лок файле и выходе второй копии скрипта работает схема однопоточного выполнения тасков. При нескольких таксах - это нормально. но если будет много заданий, это начнет долго исполняться (продложительность).
Как можо сделать систему локов, чтобы таски распределялись между копиями скрипта равномерно и отрабатывались параллельно

Заранее спасибо :)

-~{}~ 18.05.07 12:42:

kamatoz
у меня стоит фтп - сервер proftpd
я создаю в системе юзера, даю ему путь до папки вирт. хоста - и все.. Он может смело по фтп с данными логином/паролем зайти, все закачать...
 

kamatoz

Новичок
clevel
немного оффтопик, конечно. Но, натравив pam на ldap можно получить все то же самое. И пути и пароли и маппинг прав в системе (эт уже nss) и многое другое. Просто, удобно, попробуй покопать в эту сторону.
 

clevel

Новичок
kamatoz.. а зачем? у меня сервак под хостинг сайтов на моей цмс... зачем мне это все наворачивать?

У меня патч на апч стоит. чтобы секурность была, от нужной юзер/группы стартует.. Фтп от даннйо юзер/группы работает...

Связка у одного из хостеров взята. Отрабатана годами.
 
Сверху