LINUX.ORG.RU
ФорумAdmin

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


0

0

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


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

Тогда сподручней хранить пароли в базе и не париться.

mutronix ★★★★ ()
Ответ на: Re: Web интерфейс для смены пароля в unix от mutronix

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

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

nikng ()
Ответ на: Re: Web интерфейс для смены пароля в unix от Deleted

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

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

nikng ()
Ответ на: Re: Web интерфейс для смены пароля в unix от nikng

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

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

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

LifeWins ()
Ответ на: Re: Web интерфейс для смены пароля в unix от LifeWins

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

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

nikng ()
Ответ на: Re: Web интерфейс для смены пароля в unix от nikng

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

Нет, текстами не поделюсь.
Но идея такая:
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 ()

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

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

#!/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 ()
Ответ на: Re: Web интерфейс для смены пароля в unix от nikng

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

#!/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 ★★★★★ ()
Ответ на: Re: Web интерфейс для смены пароля в unix от LifeWins

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

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

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

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