Re: lug-bg: passwd i chfn prez web?
- Subject: Re: lug-bg: passwd i chfn prez web?
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Wed, 2 Jun 2004 19:48:59 +0300
On Tue, Jun 01, 2004 at 08:24:03PM +0300, Anton Zinoviev wrote:
> На 1.VI.2004 в 19:53 (+0300) часа Peter Pentchev писа:
> >
> > Пффт.. това е доста по-сложно :( Както каза Васил, passwd(1) по принцип
> > не е направено за ползване в не-интерактивен режим - имам чувството, че
> > в някои реализации направо си проверява за tty и те отсвирва, ако не
> > намери.
>
> Предполагам, че Samba прави това вече по някакъв начин, защото ето
> какво пише в smb.conf:
>
> ; For Unix password sync. to work on a Debian GNU/Linux system, the following
> ; parameters must be set (thanks to Augustin Luton
> ; <aluton@xxxxxxxxxxxxxx> for sending the correct chat script for
> ; the passwd program in Debian Potato).
> passwd program = /usr/bin/passwd %u
> passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n .
Да, вярно е, че Samba прави нещо подобно, само че това не значи, че го
прави лесно :( Не знам дали досега си се сблъсквал с този проблем:
нуждата да parse-ваш това, което всякакви откачени локализирани или
просто изпонамодифицирани и изпонапрепачвани програми плюят, вместо
това, което ти *очакваш* да изплюят, но във всеки случай не е добра идея
:(
Още повече, че цялата история със setup-ване на твой си виртуален
терминал и прихващане на целия вход/изход не е проста. Правил съм я
навремето на C, след като я направих, не я ползвах, защото беше
отвратително... Направих го след това с expect (който е повече или
по-малко правен за това), после се опитах да го интегрирам с външна
програма и много бързо се отказах... Основният проблем в тази ситуация
може да се изрази точно с две думи: shell injection.
Виж по-долу за може би малко по-добро решение :)
> > Струва ми се, че ще стане малко по-просто, отколкото да се опитваш да
> > автоматизираш диалога с passwd(1);
>
> Да. Просто без sudo и специални права ми изглежда по-сигурно.
Ммм. Трябваше ми известно време, за да разбера какво точно ти се струва
несигурно, но накрая май ми просветна: като оставим настрана
възможността за дупки в самото sudo (която не може да бъде *напълно*
пренебрегната, но според мен не трябва да бъде основното, от което да се
водим), остава малкият проблем с това, че ако позволим на уеб-сървъра да
прави chpass, то едно малко malicious скриптче ще може наистина да смени
паролата на произволен потребител по този начин. Въх! Кофти :)
Ако наистина това е това, което те притеснява, може би идейката, която
Васил Колев ми подхвърли вчера вечерта, ще ти се стори свястна: на
http://devel.ringlet.net/sysutils/passwdif/passwdif.pl има малко
скриптченце, което чете от стандартния вход три реда: username, old
password, new password, след което проверява дали паролата на акаунта
username наистина е old password и ако е, я променя на new password.
Да, това пак използва chpass/usermod/chpasswd/pw/whatever (между
другото, ще трябва да го пипнеш, за да го настроиш точно какво да ползва
при теб), но не изпълнява *никоя* от тези програми, преди да е успяло с
помощта на съвсем нормалните и стандартни getpwent() и crypt() да е
проверило, че потребителят наистина е този, за когото се представя, а и
след това променя само неговата парола. Надявам се да ти хареса - не е
нещо завършено или изпипано, нахвърлях го тази сутрин набързо, но може и
да свърши работа :) Да, трябва да работи като root, но мисля, че няма
голяма опасност да направи някоя глупост :)
А ако не искаш да разчиташ на sudo, винаги можеш да промениш първия ред
на passwdif и да го пускаш през suidperl (брррррррррррррррр! :)
Поздрави,
Петър
--
Peter Pentchev roam@xxxxxxxxxxx roam@xxxxxxxx roam@xxxxxxxxxxx
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
If this sentence didn't exist, somebody would have invented it.
Attachment:
pgp5B_Gq7K2U_.pgp
Description: PGP signature
|