Хочу сделать так, что бы пользователь через web-интерфейс смог поменять свой пароль, а перед этим указал старый для аутентификации. Однако, аутентификация не проходила. Для проверки написал скрипт примерно такого содержания:
#!/usr/bin/perl
# ...
use CGI qw/:standard/;
$USER = param("user");
print "Real UID = $<<BR>\n";
print "Real Username = ".(getpwuid($<))[0]."<BR><BR>\n";
$<=$>;
print "Effective UID = $<<BR>\n";
print "Efective Username = ".(getpwuid($<))[0]."<BR><BR>\n";
print "user = $USER<BR>/n";
print "password = '".(getpwnam($USER))[1]."'<BR>\n";
#------------------------------------------------------------
При вызове из браузера через URL "http://myserver/cgi-bin/pswd.pl?user=user" результат был следующий:
-----------------------------------------
Real UID = 12
Real Username = nobody
Effective UID = 12
Effective Username = nobody
user = user
password = 'x'
-----------------------------------------
Тогда написал стартующий скрипт на С:
-----------------------------------------
#include <unistd.h>
void mail () {
execl("/usr/bin/perl","pswd.pl","/home/html/cgi-bin/pswd.pl",NULL);
}
-----------------------------------------
Скомпилировал в файл pswd, установил биты присваивать UID и GID при исполнении, владельцем сделал root.
Далее вызвал URL: "http://myserver/cgi-bin/pswd?user=user" результат был следующий:
-----------------------------------------
Real UID = 0
Real Username = root
Effective UID = 0
Effective Username = root
user = user
password = 'x'
-----------------------------------------
Т.е. скрипт исполняется с правами root, однако, доступа к паролям скрипт не имеет.
Когда же запускаю скрипт непосредственно из рутовой консоли, то результат следующий:
-----------------------------------------
Real UID = <BR>
Real Username = root<BR><BR>
Effective UID = 0<BR>
Effective Username = root<BR><BR>
user = user<BR>
password = 'icawasdfasdfasdfsadfsadfasdfasdf'<BR>
-----------------------------------------
т.е. пароль отдаётся нормально.
Вот, собственно, и вопрос: как получить (заменить) пароль через CGI-скрипт?
Не надо рассуждений по поводу опасности и незащищённости такого подхода.