Re: lug-bg: passwd i chfn prez web?
- Subject: Re: lug-bg: passwd i chfn prez web?
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Tue, 1 Jun 2004 19:53:30 +0300
On Tue, Jun 01, 2004 at 07:43:06PM +0300, Anton Zinoviev wrote:
> На 1.V.2004 в 18:38 (+0300) часа Peter Pentchev писа:
> >
> > Ммм.. въпрос: трябва ти нещо, което да сменя паролата на потребител
> > безусловно, или ти трябва нещо, което да позволява на потребител да си
> > смени паролата, като евентуално преди това въведе старата?
>
> Вече не ми се вижда сигурно да позволя на апачето да променя паролите,
> пък дори и чрез sudo. Затова си представям нещата така: потребителят
> въвежда старата парола и новата парола. После cgi-скриптът използва
> за смяна на паролите passwd. Ако потребителят е pehcno, тогава
> скриптът използва su, за да пусне passwd от името на pencho
> (естествено за целта скриптът подава старата парола на su). Когато
> passwd поиска старата парола на pehcho, скриптът му я подава, а след
> това му казва двукратно и новата парола. По подобен начин може да се
> стартира и chfn.
Пффт.. това е доста по-сложно :( Както каза Васил, passwd(1) по принцип
не е направено за ползване в не-интерактивен режим - имам чувството, че
в някои реализации направо си проверява за tty и те отсвирва, ако не
намери. Ще се наложи да си създадеш виртуален терминал, да parse-ваш
куп глупости... абе не съм много сигурен, че е добра идея :((
Доста по-добър вариант ми се струва нещо като checkpassword, което май
вече веднъж споменах - http://cr.yp.to/checkpwd.html - макар че с него
може да си имаш други проблеми: то изпълнява програмата, която си му
задал, направо със system(), така че е твой ред да проверяваш за shell
injection. Разбира се, нищо не пречи да направиш нещо като sudo
checkpassword true, и просто да проверяваш exit code, така че да си
свършиш работата на два паса:
подготвяш file descriptor 3
sudo checkpassword true
подаваш username NUL oldpass NUL timestamp NUL на файлов дескриптор 3
проверяваш exit code на checkpassword
ако е минало, sudo usermod -p encryptedpass примерно, или нещо като
това, което пратих преди.
Струва ми се, че ще стане малко по-просто, отколкото да се опитваш да
автоматизираш диалога с passwd(1); най-малкото ще се сблъскаш със смешни
проблеми като различни промптове на passwd(1) :)
> Току що пуснах apt-cache search на unstable. Оказа се, че има пакет
> usermin-changepass, само че той изглежда е достатъчно сложен, че да не
> мога да се уверя, че портването му за Debian stable няма да доведе до
> проблеми със сигурността.
Това не е ли част от нещо по-голямо - от самия usermin? Може и да
бъркам де :)
> Вижда ми се странно, никой досега да не е изпрограмирал нещо подобно.
> Но като използвам нещата, които пратиха Петър и Деян, може би ще мога
> аз да го направя. :-)
Причината никой да не е направил нещо подобно като готово решение може
би е, че всички дребни части вече ги има - sudo, chpass/usermod/pw,
checkpassword, CGI.pm, perl taint mode - всичко, което ти трябва, си е
тук, трябва само да подредиш пъзела :P
Поздрави,
Петър
--
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
I am the meaning of this sentence.
Attachment:
pgpokWbTJP3z6.pgp
Description: PGP signature
|