¿Puede un usuario de Linux cambiar su contraseña sin conocer la contraseña actual?

25

Estoy configurando algunas ubuntucajas y usando opscode chefcomo herramienta de configuración. Sería bastante fácil instalar claves públicas para cada usuario en cada uno de estos servidores y deshabilitar la autenticación de contraseña.

Sin embargo, los usuarios también deberían tener sudoprivilegios, que por defecto requieren una contraseña.

Si quiero usar las claves públicas de los usuarios como un método de administración de acceso y permitir los sudoprivilegios de los usuarios , ¿eso significa que también debería configurar a los usuarios con NOPASSWD: ALLin visduo, o hay una manera de que un usuario pueda cambiar su propia contraseña si ellos solo tiene autenticación de clave pública?

cwd
fuente
@sr - no parece que esta sea una forma convencional de hacerlo ...
cwd
¿Por qué quieres que tus usuarios tengan privilegios de sudo? Espero que sea consciente de que le otorga un acceso raíz por esto. Puede haber una oportunidad aquí para invertir algo de tiempo y permitir que solo se use un subconjunto de comandos en relación con sudo (lo que podría ser menos inseguro). Go man sudoersgenerará información acerca de que ciertos comandos puedan ejecutarse con sudo sin la contraseña de usuario necesaria. Incluso puede agregar un shellscript a / etc / sudoers que permitiría una configuración de "contraseña propia" por usuario sin la necesidad de una contraseña previa.
humanityANDpeace
@humanityANDpeace: me doy cuenta de esto. Todos los miembros de nuestro equipo requieren acceso raíz a los servidores en la nube que mantenemos. Ahora estamos usando chef para administrar las claves públicas de los usuarios y tenemos un grupo de administradores de sistemas del NOPASSWD: ALLque forman parte los miembros del equipo. Si puede sugerir una mejor solución, publíquela como respuesta.
cwd

Respuestas:

21

Sudo, en su configuración más común, requiere que el usuario escriba su contraseña. Por lo general, el usuario ya usó su contraseña para autenticarse en la cuenta, y escribir la contraseña nuevamente es una forma de confirmar que el usuario legítimo no ha abandonado su consola y ha sido secuestrado.

En su configuración, la contraseña del usuario se usaría solo para autenticación para sudo. En particular, si la clave SSH de un usuario se ve comprometida, el atacante no podrá elevarse a privilegios de root en el servidor. El atacante podría colocar un registrador de claves en la cuenta, pero este registrador de claves sería detectable por otros usuarios e incluso podría ser observado automáticamente.

Un usuario normalmente necesita saber su contraseña actual para cambiarla a una contraseña diferente. El passwdprograma verifica esto (puede configurarse para que no lo sea, pero esto no es útil ni deseable en su escenario). Sin embargo, root puede cambiar la contraseña de cualquier usuario sin conocer la anterior; por lo tanto, un usuario con poderes de sudo puede cambiar su propia contraseña sin ingresarla en el passwdindicador ejecutando sudo passwd $USER. Si sudoestá configurado para requerir la contraseña del usuario, entonces el usuario debe haber ingresado la contraseña de sudotodos modos.

Puede deshabilitar la autenticación de contraseña de forma selectiva. En su situación, deshabilitaría la autenticación de contraseña en ssh y posiblemente en otros servicios. La mayoría de los servicios en la mayoría de los equipos modernos (incluido Ubuntu) usan PAM para configurar los métodos de autenticación. En Ubuntu, los archivos de configuración de PAM viven /etc/pam.d. Para deshabilitar la autenticación de contraseña, comente la auth … pam_unix.solínea /etc/pam.d/common-auth. Además, asegúrese de que tiene PasswordAuthentication noen /etc/ssh/sshd_configla autenticación de contraseña incorporada desactivar de sshd.

Es posible que desee permitir que algunos usuarios administrativos inicien sesión con una contraseña o permitir la autenticación de contraseña en la consola. Esto es posible con PAM (es bastante flexible), pero no podría decirte qué tan fuera de mi cabeza; Haga una pregunta por separado si necesita ayuda.

Gilles 'SO- deja de ser malvado'
fuente
Una forma conveniente de usar PAM en combinación con la autenticación de clave SSH es a través de pam_ssh_agent_auth , que tiene la ventaja de reemplazar la solicitud de contraseña por la autenticación de clave (teóricamente aún más segura) que SSH puede usar de todos modos
Tobias Kienzler
¿Está diciendo sudo passwdque cambiaría la contraseña para el usuario actual, no para el usuario de sudo?
still_dreaming_1
1
@ still_dreaming_1 No, digo que un usuario que puede ejecutar comandos sudopuede cambiar su propia contraseña. El comando exacto realmente no importa, pero para entrar en más detalles, sería sudo passwd bobdónde bobestá el nombre del usuario, o algo equivalente. Sin argumento, de sudo passwdhecho cambiaría la contraseña de root.
Gilles 'SO- deja de ser malvado'
7

Puede usar el módulo pam_ssh_agent_auth . Es bastante simple compilar, y luego solo agrega la entrada

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

antes de las otras auth(o include) entradas en/etc/pam.d/sudo

y

Defaults    env_keep += "SSH_AUTH_SOCK"

a /etc/sudoers(vía visudo).

Ahora cada usuario puede autenticarse a sudotravés de un agente SSH (reenviado o local) o su contraseña. Puede ser conveniente pedir a sus usuarios que utilicen de ssh-add -cmanera que cada sudollamada requiera al menos alguna confirmación.

Tobias Kienzler
fuente
En un asunto relacionado, hay pam_ssh , que permite usar su frase de contraseña SSH en lugar de la de Unix para iniciar sesión, iniciando automáticamente un agente y agregando la clave, lo que le brinda una posibilidad de inicio de sesión único.
Tobias Kienzler
1

Sí, es increíblemente inseguro y también permite que un usuario acceda a las contraseñas de otros usuarios, pero dado que tienen sudo, no puede hacer mucho.

Básicamente, haces lo siguiente:

$ sudo -i

Ahora somos raíz. Tenemos acceso a todo.

# passwd $username

$ username puede ser el nombre de usuario de cualquier persona.

Ingrese la nueva contraseña UNIX:

Vuelva a escribir la nueva contraseña UNIX: passwd: contraseña actualizada correctamente

Boom, contraseña cambiada. De nuevo, increíblemente inseguro porque puedes cambiar a cualquiera, pero funciona, pero funciona. No lo recomiendo, sino que ofrezco esta respuesta como un ejemplo de lo que no se debe hacer.

jrg
fuente
se ve bien, pero ¿puedes dar más detalles sobre lo que está pasando aquí?
cwd
44
No es posible sudo -iprescindir de la contraseña de usuario actual.
Kravemir
@Miro. Es como tu dices. Aún así, sudo bashpodría ser sin contraseña dada esa configuración en el /etc/sudoersarchivo. Creo @jrg es como se ha dicho más centrado en el tema de la inseguridad con sudo aquí
humanityANDpeace
1
honestamente, no tiene que hacerlo sudo -i, puede saltar directamente a sudo passwd $username@Miro, no necesita saber la contraseña de usuario actual. Solo necesita saber la contraseña de root para usar sudo
Antony
0

El objetivo de la contraseña es garantizar que los piratas informáticos que obtienen la clave de un usuario o encuentran un terminal desatendido no puedan obtener acceso de root. Por esta razón, no recomendaría ninguna solución que implique sudo sin contraseña.

Le sugiero que lo mantiene simple: tal vez un correo electrónico a un usuario la contraseña por defecto con instrucciones estrictas para cambiarlo lo antes posible, o bien insertar un script en su .profileo .logino algo tal que exige una nueva contraseña en su primer inicio de sesión. Podría deshabilitarse cuando se complete, y podría usar expectpara ingresar la contraseña existente para que nunca tengan que saberla.

ams
fuente
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

> Esto debería permitirle tener usuarios que pueden iniciar sesión solo con claves públicas y no pueden usar contraseñas para iniciar sesión. Sin embargo, se verá obligado a cambiar la contraseña la primera vez que inicie sesión ... pero sin tener que decirle una contraseña somática por adelantado ... Simplemente se les pedirá a los usuarios que restablezcan la contraseña y posteriormente pueden usarla solo para sudo pero no podrá iniciar sesión (ssh) con esa contraseña. Tenga en cuenta que el truco aquí es no haberle dicho a los usuarios alguna contraseña falsa que luego se les requeriría ingresar en el momento del inicio de sesión una vez que se les solicite que cambien su contraseña ... En pocas palabras, no hay comunicación del administrador (root) para el usuario real se requiere.

endurecer
fuente