comando sudo passwd

ciao a tutti!

sto realizzando una paginetta web dalla quale sia possibile cambiare la propria password di Linux (server Linux con Apache).

In giro per internet ho trovato qualcosa, ma non riesco a far funzionare il tutto.

1- l'utente inserisce username, password e 2 volte la nuova password

2- (dopo alcuni controlli) eseguo un comando creato su misura:

echo '<pre>'; // cosi' visualizzo l'output che mi esce in modo leggibile
passthru("cambio_passwd utentexyz pass1 pass2", $output);
echo '</pre>';

questo e' il comando cambio_passwd:

#!/usr/bin/expect -f
set new_password [lindex $argv 2]
set old_password [lindex $argv 1]
set nome [lindex $argv 0]
spawn sudo passwd $nome
expect "assword:"
sleep 1
send "$old_password\r"
expect "assword:"
sleep 1
send "$new_password\r"
expect "assword:"
sleep 1
send  "$new_password\r"
expect eof

purtroppo per qualche motivo si arena tutto appena viene lanciata la prima riga del passwd.  :tichedoff:

questo e' l'output:

spawn sudo passwd utentexyz
Password:
Sorry, try again.
Password:
Sorry, try again.
Password:
Sorry, try again.
sudo: 3 incorrect password attempts

Qualcuno ha qualche idea? Grazie!!!  :-\

ro

inviato 9 anni fa
ro679
X 0 X

Ma il comando se lo lanci dalla shell funziona?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

no, neanche da shell, a meno che non lo lanci loggato come lo stesso utente di cui voglio cambiare la psw:

[utente@host]$ cambio_passwd utente pippo2006 topolino2007
spawn sudo passwd utente
Password:
Changing password for user utente.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

altrimenti viene fuori lo stesso input scritto sopra.

risposto 9 anni fa
ro679
X 0 X

Allora credo che sia un problema di diritti... Solo root può cambiare le password degli altri....

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

UDITE UDITE ho trovato la soluzione a furia di spremermi il cervello!!!   :2funny:

ve la posto qui per futuri mal di testa!!!

 :D

allora, il file cambio_passwd e':

#!/usr/bin/expect -f
# wrapper to make passwd(1) be non-interactive
# username is passed as 1st arg, passwd as 2nd
set nome [lindex $argv 0]
set password [lindex $argv 1]
#
spawn sudo passwd $nome
expect "assword:"
sleep 1
send "$password"
send "\n"
expect "password: "
sleep 1
send "$password"
send "\n"
expect eof

la cosa piu' importante e' dare a apache (server web) i permessi per lanciare "sudo passwd" senza dover dare la password. quindi nel file sudoers si aggiunge:

# User privilege specification
apache ALL=NOPASSWD: /usr/bin/passwd

poi dalla pagina php si lancia il comando: "cambio_passwd nomeutente nuovapassword"

 :clapping:

sto lavorando al controllo dell'esistenza dell'utente e della sua password quando li inserisce per cambiarli... (a proposito qualche idea???)

a presto.... :lamo:

risposto 9 anni fa
ro679
X 0 X

/etc/passwd

ma arrivarci da apache non è semplice!

Visto che hai i permessi per passwd usalo:

passwd -S nomeutente

se l'utente non c'è ti risponderà:

passwd: Unknow user 'nomeutente'

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda