Un utente Linux può cambiare la propria password senza conoscere la password corrente?


25

Sto installando alcune ubuntucaselle e utilizzo opscode chefcome strumento di configurazione. Sarebbe abbastanza facile installare chiavi pubbliche per ciascun utente su ciascuno di questi server e disabilitare l'autenticazione con password.

Tuttavia, gli utenti dovrebbero anche avere sudoprivilegi, che per impostazione predefinita richiede una password.

Se voglio usare le chiavi pubbliche degli utenti come metodo di gestione degli accessi e consentire i sudoprivilegi degli utenti , ciò significa che dovrei anche impostare gli utenti con NOPASSWD: ALLin visduo, o c'è un modo in cui un utente può cambiare la propria password se hai solo l'autenticazione con chiave pubblica?



@sr - non sembra che questo sia un modo tradizionale di farlo ...
cwd

Perché vuoi che i tuoi utenti abbiano i privilegi di sudo? Spero che tu sia consapevole del fatto che tu dai un accesso root da questo. Qui potrebbe esserci la possibilità di investire un po 'di tempo e consentire solo un sottoinsieme di comandi da utilizzare in relazione a sudo (che sarebbe forse meno insicuro). Go man sudoersfornirà informazioni sull'avere certi comandi in grado di funzionare con sudo senza la password dell'utente necessaria affatto. È anche possibile aggiungere uno shellscript a / etc / sudoers che consentirebbe un'impostazione di "auto-password" per utente senza la necessità di una password precedente.
umanità e

@humanityANDpeace - Me ne rendo conto. Tutti i membri del nostro team richiedono l'accesso come root ai server cloud che manteniamo. Ora stiamo usando Chef per gestire le chiavi pubbliche degli utenti e abbiamo un gruppo di amministratori di sistema di NOPASSWD: ALLcui fanno parte i membri del team. Se puoi suggerire una soluzione migliore, inseriscilo come risposta.
Cwd

Risposte:


21

Sudo, nella sua configurazione più comune, richiede all'utente di digitare la sua password. In genere, l'utente ha già usato la sua password per autenticarsi nell'account e digitando nuovamente la password è un modo per confermare che l'utente legittimo non ha abbandonato la sua console ed è stato dirottato.

Nella tua configurazione, la password dell'utente verrebbe utilizzata solo per l'autenticazione sudo. In particolare, se la chiave SSH di un utente è compromessa, l'attaccante non sarebbe in grado di elevarsi ai privilegi di root sul server. L'autore dell'attacco potrebbe inserire un registratore di chiavi nell'account, ma questo rilevatore di chiavi sarebbe rilevabile da altri utenti e potrebbe persino essere controllato automaticamente.

Normalmente un utente deve conoscere la sua password corrente per cambiarla con un'altra password. Il passwdprogramma lo verifica (può essere configurato per non farlo, ma questo non è utile o assolutamente auspicabile nel tuo scenario). Tuttavia, root può cambiare la password di qualsiasi utente senza conoscere quella precedente; quindi un utente con poteri sudo può cambiare la propria password senza inserirla al passwdprompt eseguendo sudo passwd $USER. Se sudoè configurato per richiedere la password dell'utente, l'utente deve aver digitato la password sudocomunque.

È possibile disabilitare l'autenticazione della password in modo selettivo. Nella tua situazione, disabiliteresti l'autenticazione della password in ssh, e possibilmente in altri servizi. La maggior parte dei servizi sui più moderni unici (incluso Ubuntu) utilizza PAM per configurare i metodi di autenticazione. Su Ubuntu, vivono i file di configurazione di PAM /etc/pam.d. Per disabilitare l'autenticazione con password, commentare la auth … pam_unix.soriga in /etc/pam.d/common-auth. Inoltre, assicurarsi di avere PasswordAuthentication noin /etc/ssh/sshd_configper l'autenticazione tramite password incorporata disabilitazione di sshd.

È possibile consentire ad alcuni utenti amministrativi di accedere con una password o consentire l'autenticazione della password sulla console. Questo è possibile con PAM (è piuttosto flessibile), ma non saprei dirti come mi viene in mente; fai una domanda separata se hai bisogno di aiuto.


un modo conveniente di usare PAM in combinazione con l'autenticazione con chiave SSH è tramite pam_ssh_agent_auth , che ha il vantaggio di sostituire la richiesta della password con l'autenticazione con chiave (teoricamente ancora più sicura) che SSH può usare comunque
Tobias Kienzler,

quindi stai dicendo sudo passwdcambierebbe la password per l'utente corrente, non per l'utente sudo?
still_dreaming_1

1
@ still_dreaming_1 No, sto dicendo che un utente che può eseguire comandi sudopuò cambiare la propria password. Il comando esatto non ha molta importanza, ma per entrare nel dettaglio, sarebbe sudo passwd bobdove si bobtrova il nome dell'utente o qualcosa di equivalente. Senza alcun argomento, sudo passwdcambierebbe davvero la password per root.
Gilles 'SO-smetti di essere malvagio' il

7

Puoi usare il modulo pam_ssh_agent_auth . È abbastanza semplice da compilare e quindi basta aggiungere la voce

auth       sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

prima delle altre auth(o include) voci in/etc/pam.d/sudo

e

Defaults    env_keep += "SSH_AUTH_SOCK"

a /etc/sudoers(via visudo).

Ora ogni utente può eseguire l'autenticazione sudotramite un agente SSH (inoltrato o locale) o la propria password. Potrebbe essere saggio chiedere ai tuoi utenti di utilizzarli in modo ssh-add -ctale che ogni sudochiamata richieda almeno una conferma.


Su una questione correlata, c'è pam_ssh , che consente di utilizzare la passphrase SSH invece di quella unix per l'accesso, avviando automaticamente un agente e aggiungendo la chiave, offrendo così una possibilità di accesso singolo.
Tobias Kienzler,

1

Sì, è incredibilmente insicuro e consente anche a un utente di accedere alle password degli altri utenti, ma dal momento che hanno sudo, non puoi fare molto.

Fondamentalmente, fai quanto segue:

$ sudo -i

Ora siamo root. Abbiamo accesso a tutto.

# passwd $username

$ username può essere il nome utente di chiunque.

Inserisci la nuova password UNIX:

Digitare nuovamente la nuova password UNIX: passwd: password aggiornata correttamente

Boom, password modificata. Ancora una volta, incredibilmente insicuro perché puoi cambiare chiunque, ma funziona, ma funziona. Non lo consiglio, ma piuttosto offro questa risposta come esempio di cosa non fare.


sembra buono ma puoi approfondire cosa sta succedendo qui?
Cwd,

4
Non è possibile fare a sudo -imeno della password dell'utente corrente.
kravemir,

@Miro. È come dici tu. Ancora a sudo bashpotrebbe essere senza password dato che l'installazione è così nel /etc/sudoersfile. Penso che @jrg sia come detto più focalizzato sulla questione dell'insicurezza con sudo qui
umanità e

1
onestamente, non devi farlo sudo -i, puoi passare direttamente a sudo passwd $username@Miro, non è necessario conoscere la password dell'utente corrente. Devi solo conoscere la password di root per usare sudo
Antony

0

Lo scopo della password è garantire che gli hacker che ottengano la chiave di un utente o trovino un terminale non presidiato non possano ottenere l'accesso come root. Per questo motivo non consiglierei nessuna soluzione che implichi sudo senza password.

Vi suggerisco di tenerlo semplice: forse e-mail a un utente la password di default con precise istruzioni di cambiare al più presto, oppure inserire uno script in loro .profileo .login, o qualcosa del genere che richiede una nuova password sul loro primo accesso. Potrebbe disabilitarsi una volta completato e potresti usare expectper inserire la password esistente in modo che non debbano mai conoscerla.


0
#% useradd -g somegroup someuser
#% usermod -p "" someuser
#% chage -d 0 someuser
#% sed -i "s/^.*PasswordAuthentication .*/PasswordAuthentication no/" /etc/sshd/sshd_config
#% /sbin/service sshd restart
#% cp -r ~/.ssh `echo ~someuser`
#% chown -R someuser `echo ~someuser`/.ssh
#% chgrp -R somegroup `echo ~someuser`/.ssh
#% echo "%somegroup  ALL=(ALL)   ALL" >> /etc/sudoers

> Ciò dovrebbe consentire agli utenti di accedere solo utilizzando le chiavi pubbliche e non possono utilizzare le password per l'accesso. Tuttavia sarà costretto a cambiare la password la prima volta che accede ... ma senza dovergli dire una password un po 'anticipata ... Gli utenti saranno semplicemente invitati a reimpostare la password e successivamente potranno usarla solo per sudo ma non sarà in grado di accedere (ssh) usando quella password. Si noti che il trucco qui è quello di non aver detto agli utenti una password fittizia che dovrebbero quindi inserire al momento dell'accesso una volta che sono tenuti a cambiare la password ... In poche parole nessuna comunicazione da admin (root) per l'utente reale è richiesto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.