LINUX.ORG.RU
ФорумAdmin

Web интерфейс для смены пароля в unix


0

0

Просьба помочь в таком деле: Хочу сделать web интерфейс для смены пароля пользователя в юниксе, при этом сам скрипт не должен иметь полномочий рута, то есть предполагается использовать программу passwd, вызываемую тем пользователем, который хочет сменить пароль. Но только как с ней взаимодействовать программно? С помощью манипуляций с каналами на STDIN ей можно пихнуть только одну строчку (Ответ на вопрос "Current Unix password"), интерактива не получается. Или может что-то ещё есть? Какие-нибудь надстройки же существуют, млин. Буду признателен за любую подсказку.


Ответ на: комментарий от mutronix

Не понял мысль. Мне необходимо, чтобы каждый юзер мог бы себе поменять системный пароль на тот, какой он сам захочет. На веб хостингах этот механизм давно же уже отработан: есть форма - текущий пароль, новый и подтверждение, заполняешь, отсылаешь ,и готово - заходи по ssh c новым паролем. Где взять такой скрипт или хотя бы описание технологии найти?

nikng
() автор топика
Ответ на: комментарий от Deleted

Понятно, но этот вариант пока не рассматривается. Можно интегрировать с LDAP, можно ещё что-то, но это всё запасной вариант, мне не хочется сейчас это трогать, потому как сервер постоянно в работе, занят плотно и переносить базу паролей сейчас не хочется.

nikng
() автор топика
Ответ на: комментарий от nikng

У меня форма написана на php, на perl-е перепишу на днях, под ssl.
Пароли хранятся в БД и в /etc/passwd, каждые 5 минут вызывается прога
на перле, для синхронизации /etc/passwd паролей с новыми паролями в БД.
Вот модули перл которые я использую:

use DBI;
use Passwd::Linux;
use Crypt::PasswdMD5;

LifeWins
()
Ответ на: комментарий от LifeWins

Любопытно. Только у меня платформа HPUX 11.23 Там свой Perl. Прога синхронизирующая от рута работает, это понятно. Нормальная схема вообще-то, не такой уж большой огород, можно попробовать. А текстами не поделишься? Если нет, то ничего, я сам, просто время поджимает.

nikng
() автор топика
Ответ на: комментарий от nikng

Нет, текстами не поделюсь.
Но идея такая:
1. сохраняем старые пароли юзеров, так, на всякий случай,
   например в таблице pwd_process, столбец processed::bool говорит
   о статусе данного входа, замена сделана или нужно менять пароль;

2. плюс, юэер может захотеть изменить свой логин, храним новый логин
   в этой же таблице pwd_process:
 login     | text                        | 
 new_login | text                        | 
 epassword | text                        | 
 processed | boolean                     | default false
 chdate    | timestamp                   | default now()

3. пишем в цикл на перле в порядке chdate обновляем пароли:
     ....
    my (@user_entry) = mgetpwnam();
    $user_entry[1] = unix_md5_crypt($item->{epassword}, '');
    
    if ($item->{login} ne $item->{new_login}) {
        $user_entry[0]= $item->{new_login};
    }    
    setpwinfo(@user_entry);

И ошибки не забываем проверять.
Что-то в этом духе...

LifeWins
()
Ответ на: комментарий от LifeWins

Вместо 
 my (@user_entry) = mgetpwnam();

это

foreach my $item (@EpwdArray) {
 my (@user_entry) = mgetpwnam($item->{login});

LifeWins
()
Ответ на: комментарий от LifeWins

Спасибо, технология ясна. Попробую.

nikng
() автор топика

Хм... Если скрипт работает от рута, и попробовать нечто, вроде

#!/bin/sh
#
# Begin
#

OLD_PASSWD_STR=`cat /etc/passwd | grep ^$USERNAME`
OLD_PASSWD=`awk -F':' '{print $2}'`
NEW_PASSWD=`md5sum $PASSWD`
NEW_PASSWD_STR=`echo $OLD_PASSWD_STR | sed 's/$OLD_PASSWD/$NEW_PASSWD/'`

sed -i 's/$OLD_PASSWD_STR/$NEW_PASSWD_STR/' /etc/passwd

#
# End of file
#

З.Ы.: простите мне мой кривой баш, но нашло...:))

scholz
()
Ответ на: комментарий от nikng

#!/usr/bin/expect -f

set timeout -1
spawn /usr/bin/passwd
match_max 100000
expect "(current) UNIX password: "
send -- "MyOldPass\r"
expect "Enter new UNIX password: "
send -- "MyNewPass\r"
expect "Retype new UNIX password: "
send -- "MyNewPass\r"
expect eof


#Пароли передать как параметры.

sdio ★★★★★
()
Ответ на: комментарий от LifeWins

Похоже, что expect - то, что мне нужно.

nikng
() автор топика
Ответ на: комментарий от LifeWins

> 2 scholz : > ммм, а что, разве пароли не в шедов хранятся и не мд5?!

Да, с /etc/passwd - ошибся, а вот с md5 - вроде указал. Я сейчас в венде, посему не уверен, что "md5sum $FOO" будет работать, но главное суть:)

scholz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.