Mam "proste" pytanie: Jak mogę bezpiecznie zmienić hasło użytkownika z poziomu skryptu PHP, bez przyznawania uprawnień administratora Apache lub innych szalonych luk w zabezpieczeniach?Zmiana hasła użytkownika Linuksa ze skryptu PHP
Tło: CentOS 6, Apache 2.2.13, PHP 5.3.3
Jestem świadomy polecenia pam_chpasswd(), która jest częścią biblioteki PECL PAM. Jednak ta funkcja nie działa, chyba że proces hosta (httpd) odczytał dostęp do pliku/etc/shadow. (NIEPOPRAWNA POMYSŁ! Nie wiem, jak ta biblioteka pomaga, jeśli wymaga tak wysokich uprawnień ...)
Idealną sytuacją, o ile widzę, jest wywołanie skryptu powłoki za pomocą "sudo -u [nazwa użytkownika użytkownika zmieniającego jego hasło] ' Spowoduje to uruchomienie skryptu "AS" użytkownika, więc powinien mieć pozwolenie na zmianę własnego hasła. A sudo wymagałoby, aby użytkownik wysłał swoje dotychczasowe hasło w celu uwierzytelnienia, co uniemożliwiłoby jednemu użytkownikowi zmianę hasła innego użytkownika.
Ale to nie działa z jakiegoś powodu ... podczas otwierania procesu z popenem proces ten nigdy nie jest wykonywany. Mam ustawiony skrypt powłoki, aby zrzucić jakiś tekst do publicznie zapisywalnego pliku w/tmp. Ale nigdy nie dociera do tego punktu.
$cmd = "/usr/bin/sudo -S -u$username /file_to_execute.sh";
$handle = popen ($cmd, "w"); // Open the process for writing
fwrite ($handle, "$current_password\n"); // Send the user's current password to sudo (-S option)
fwrite .... (write the username, current password, and new password, so the script can change it)
$result = pclose($handle);
Gdybym dostęp Ten skrypt PHP (http: //server/script.php), funkcja natychmiast kończy się niepowodzeniem i $ wynik = 1
Gdybym zmodyfikować plik sudoers (visudo) i dodać linia:
$
domyślne: requiretty apache
skrypt zamarza na około 10 sekund, po czym nie powiedzie się ($ wynik = 1)
Wszelkie sugestie dotyczące robi to są bardzo mile widziane!
Każda z tych prac? http://stackoverflow.com/questions/127459/using-shell-execpasswd-to-change-a-users-password?rq=1 – Aknosis