permitir sudo a otro usuario sin contraseña


46

Quiero poder 'su' a un usuario específico, lo que me permite ejecutar cualquier comando sin ingresar una contraseña.

Por ejemplo:

Si mi inicio de sesión fuera usuario1 y el usuario al que quiero 'su' es usuario2:

Yo usaría el comando:

su - user2

pero luego me incita con

Password:


Solicite la contraseña al otro usuario. Al menos el otro usuario sabe lo que se ha hecho con su ID.
Global nómada

1
Esto no tiene nada que ver con otro usuario físico. Ambas identificaciones son mías. Sé la contraseña cuando creé la cuenta. Simplemente no quiero tener que escribir la contraseña cada vez.
zio

¿Estaría bien enviar ssh al usuario o necesita heredar un shell en particular y necesita su para funcionar?
bmike

1
@zio Gran caso de uso. ¿No open -na Skypete funciona?
bmike

Respuestas:


66

sudo puede hacer eso por ti :)

Sin embargo, necesita un poco de configuración, pero una vez hecho, solo haría esto:

sudo -u user2 -s

Y se iniciaría sesión como usuario2 sin ingresar una contraseña.

Configuración

Para configurar sudo, debe editar el archivo de configuración a través de: visudo. Nota: este comando abrirá la configuración usando el vieditor de texto, si no está cómodo con eso, debe configurar otro editor (usando export EDITOR=<command>) antes de ejecutar la siguiente línea. Otro editor de línea de comandos que a veces se considera más fácil es nano, por lo que lo haría export EDITOR=/usr/bin/nano. Por lo general, necesita privilegios de superusuario para visudo:

sudo visudo

Este archivo está estructurado en diferentes secciones, los alias, luego los valores predeterminados y finalmente al final tienes las reglas. Aquí es donde debe agregar la nueva línea. Entonces navegas al final del archivo y agregas esto:

user1    ALL=(user2) NOPASSWD: /bin/bash

Puede sustituir también /bin/bashpor ALLy entonces se podría poner en marcha cualquier comando como usuario2 sin una contraseña: sudo -u user2 <command>.

Si desea poder cambiar a cualquier usuario, simplemente use

user1    ALL=(ALL) NOPASSWD: /bin/bash

Actualizar

Acabo de ver tu comentario sobre Skype. Podría considerar agregar Skype directamente al archivo de configuración de sudo. Supongo que tiene Skype instalado en su carpeta de aplicaciones :

user1    ALL=(user2) NOPASSWD: /Applications/Skype.app/Contents/MacOS/Skype

Entonces llamarías desde la terminal:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype

Esto es mucho menos complicado que la idea de las claves ssh, así que úselo a menos que también necesite las claves ssh para acceso remoto.
bmike

2
Una cosa a tener en cuenta desde una perspectiva de seguridad es que especificar un comando específico implica que debe ser un comando de solo lectura para el usuario1; De lo contrario, pueden sobrescribir el comando con otra cosa y ejecutarlo como usuario2. Y si no le importa eso, también podría especificar que user1 pueda ejecutar cualquier comando como user2 y, por lo tanto, tener una configuración de sudo más simple.
Stan Kurdziel

@StanKurdziel buen punto! Aunque es algo a tener en cuenta, es muy raro que los usuarios puedan escribir ejecutables del sistema a menos que sea root, pero en este caso no necesita sudo ;-) Pero tiene razón al agregar este comentario porque rara vez que probablemente lo haya pasado por alto más de una vez.
Huygens

Para acercarlo al comportamiento en su - user2lugar de su user2, los comandos probablemente deberían involucrar a todos sudo -u user2 -i, para simular un inicio de sesión inicial como usuario2
Gert van den Berg

4

Configuraría claves ssh públicas / privadas para la segunda cuenta y almacenaría la clave en la primera cuenta.

Entonces podrías ejecutar un comando como:

 ssh user@localhost -n /Applications/Skype.app/Contents/MacOS/Skype &

Aún tendría los problemas en los que Skype se confunde, ya que dos instancias se ejecutan en una cuenta de usuario y los archivos leídos / escritos por ese programa pueden entrar en conflicto. También podría funcionar lo suficientemente bien para sus necesidades y no necesitaría un iPod touch para ejecutar su segunda instancia de Skype.


1
Esta es una buena solución segura para el caso general de inicio de sesión sin contraseña en cualquier cuenta en cualquier host, pero diría que probablemente sea excesivo cuando ambas cuentas están en el mismo host y pertenecen al mismo usuario.
calum_b

@scottishwildcat Es mucho más seguro que la alternativa de escribir la contraseña y alimentarla en texto claro o usar una variable y almacenar la contraseña en el llavero y usar una herramienta como la expectsecuencia de comandos de la interacción. Solo uso sudo su - blahy escribo mi contraseña. Creo que la otra respuesta cubre sudo lo suficientemente bien como para mantener esto como un comentario.
bmike

Oh, ciertamente no estaba sugiriendo que tu respuesta fuera eliminada ... Ni siquiera voté en contra, es una respuesta perfectamente buena.
calum_b

Parece que estamos totalmente de acuerdo, gracias por la adición, siéntase libre de editarlo en la respuesta si puede mejorarlo.
bmike

La solución aceptada ( sudo -u user2 <...>) tiene la ventaja de que no se puede usar de forma remota, lo que podría ayudar a la seguridad: no hay una clave privada para el usuario1 que pueda ser robada.
Gert van den Berg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.