¿Cómo cambiar entre usuarios en un terminal?

481

Me gustaría iniciar sesión como un usuario diferente sin cerrar sesión en el actual (en el mismo terminal). ¿Cómo puedo hacer eso?

tshepang
fuente
1
Hice una pregunta similar, porque me encontré con problemas con las variables de entorno XDG ( $XDG_RUNTIME_DIRen particular) que me estaban volviendo loco. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Respuestas:

562

¿Qué hay de usar el sucomando?

$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout

Si desea iniciar sesión como root, no es necesario especificar el nombre de usuario:

$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout

En general, puede usar sudopara iniciar un nuevo shell como el usuario que desee; la -ubandera te permite especificar el nombre de usuario que deseas:

$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2

Hay formas más tortuosas si no tiene acceso a sudo, como ssh username @ localhost, pero sudoprobablemente sea más simple, siempre que esté instalado y tenga permiso para usarlo.

Pratt
fuente
17
Además, su - [user]puede ser útil: el guión adicional le proporciona un shell de inicio de sesión.
Ephemient
Recibo este error "-su: / dev / stderr: Permiso denegado" después de ejecutar este comando echo >>/dev/stderren un inicio de sesión con su --login ..., ¿algún consejo? Encontré esto por cierto unix.stackexchange.com/questions/38538/…
Aquarius Power
¿Esto permite que cada nuevo usuario tenga valores diferentes y primordiales para las variables de entorno? por ejemplo, git config para trabajo, código abierto, etc.
Kevin Suttle
Un hallazgo, cuando enumeré el env, vio que todo estaba en orden y que podía realizarse una inspección visual; Y una cosa era incorrecto: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on archivo ~ / .Xauthority` es: -rw-------. Hice una copia y eso me permitió ejecutar gedit como experimento.
será el
1
si obtiene "Esta cuenta no está disponible actualmente": su -s / bin / bash - www-data
max4ever
46

Por lo general, utiliza sudopara lanzar un nuevo shell como el usuario que desea; la -ubandera te permite especificar el nombre de usuario que deseas:

[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody

Hay formas más tortuosas si no tiene acceso a sudo, como ssh username@localhost, pero creo que sudoprobablemente sea más simple si está instalado y tiene permiso para usarlo

Michael Mrozek
fuente
¿Qué pasa si mi sistema no tiene servidor ssh ni sudo? ¿Puedes mencionar esa porción en la respuesta?
tshepang
ok, Pratt respondió eso
tshepang
44
sudo -sle da un shell como su, sudo -isimula inicio de sesión como su -. Se puede combinar con -u $user, por supuesto.
Ephemient
Mucho más eficiente. ¡poder "iniciar sesión" como un usuario que normalmente no puede iniciar sesión es un gran activo ...! totalmente me permitió ejecutar una instancia de base de datos sin jugar con permisos o selinux
Félix Gagnon-Grenier
20
$ whoami 

Este comando imprime el usuario actual. Para cambiar de usuario, tendremos que usar este comando (seguido de la contraseña del usuario):

$ su secondUser
Password:

Después de ingresar la contraseña correcta, iniciará sesión como el usuario especificado (que puede verificar volviendo a ejecutar whoami.

Ashish Saini
fuente
Útil si no eres sudoer.
Marco Sulla
15

Si está ejecutando Ubuntu, y si el usuario con el que desea iniciar sesión no tiene una contraseña establecida:

sudo su - username

Ingrese su propia contraseña y debe estar configurado. Por supuesto, esto requiere que su usuario tenga derechos para obtener privilegios de root sudo.

Helado con frutas y nueces
fuente
8

Para cambiar la sesión de terminal a un usuario diferente, donde ese usuario no puede volver al usuario original, use exec:

$ | # exec su - [nombre de usuario]

Esto técnicamente iniciará sesión en el nuevo usuario en un nuevo proceso de término y cerrará el actual. De esa manera, cuando el usuario intenta salir o Ctrl-D, el terminal se cerrará como si ese usuario fuera quien lo creó, es decir, el usuario no puede volver al término original del usuario. No tiene sentido, teniendo en cuenta que todavía pueden comenzar una nueva sesión de terminal y estar automáticamente en el inicio de sesión del término de usuario original, pero ahí está.

EDITAR: para lo que vale, puede usar el comando linux vlock en su ~ / .bashrc para bloquear sesiones de terminal de forma predeterminada, requiriendo la contraseña del término usuario de sesión para desbloquear. Esto evitaría un poco el reinicio del término mencionado anteriormente en el contexto del usuario original, dado que el término no se instancia usando el ~ / .bashrc no predeterminado del usuario, como está configurado.

SYANiDE
fuente
3

sudo -iu <your_username> para mí haz el truco

andilabs
fuente
2

Otra ruta es lanzar un nuevo shell como un usuario diferente (no root) para ejecutar comandos como ese usuario.

ubuntu@aws-ip:~$ sudo -u mongodb bash          #<-- or zsh, etc... 
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork

Un ejemplo de esto es el mongodbusuario. Al implementar un clúster MongoDB fragmentado, todos los procesos necesarios deben ejecutarse como mongodby no es necesario (o totalmente conveniente) demonizar los procesos utilizando scripts de inicio para docenas de nodos.

azatar
fuente
2

Permítanos aclarar esto: ha iniciado sesión como UsuarioA y desea "iniciar sesión" como UsuarioB para ejecutar algunos comandos, pero le gustaría volver a UsuarioA cuando haya terminado. En aras de la simplicidad, supongo que desea ejecutar ls -l / tmp como UserB. Si no desea abandonar el shell actual de UserA, sino que ejecuta un comando como UserB y aún permanece conectado como UserA, debe hacer esto:

su - UserB -c "ls -l /tmp"   <-- Just an example

Esto supone que conoce la contraseña para UserB. Sin embargo, si no conoce la contraseña de UserB, debe conocer la contraseña de root. Entonces:

sudo su - UserB -c "ls -l /tmp"   <-- UserB's pw not needed here

Si prefiere iniciar sesión temporalmente como UsuarioB para ejecutar muchos comandos, simplemente haga lo siguiente:

sudo su - UserB

Esto le dará un nuevo shell para UserB (verifíquelo escribiendo id). Cuando haya terminado, puede hacer ctrl-d y volver a su inicio de sesión.

Saltando conejito
fuente
1

Si necesita ejecutar un solo comando, puede usar sudo: sudo -u username command

Maksim Luzik
fuente
-1
~$ sudo login

Luego le pedirá la contraseña de sudo (la contraseña del usuario actualmente conectado).

Además: ¡asegúrese de que el usuario actual esté en el archivo sudoers!

Tshepo
fuente
2
La pregunta era acerca de iniciar sesión como un usuario diferente.
Minix