it-swarm.it

Come passare da un utente all'altro su un terminale?

Vorrei accedere come un altro utente senza disconnettersi da quello corrente (sullo stesso terminale). Come lo faccio?

535
tshepang

Che ne dici di usare il comando su?

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

Se si desidera accedere come root, non è necessario specificare il nome utente:

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

In generale, è possibile utilizzare Sudo per avviare una nuova shell come l'utente desiderato; il -u flag ti consente di specificare il nome utente che desideri:

$ whoami
user1
$ Sudo -u user2 zsh
$ whoami
user2

Esistono modi più tortuosi se non si dispone dell'accesso Sudo, come ssh username @ localhost, ma Sudo è probabilmente il più semplice, a condizione che sia installato e si disponga dell'autorizzazione per usarlo.

630
Pratt

Generalmente si usa Sudo per lanciare una nuova Shell come l'utente desiderato; il -u flag ti consente di specificare il nome utente che desideri:

[[email protected] ~] % whoami
mrozekma
[[email protected] ~] % Sudo -u nobody zsh
[[email protected] ~] % whoami
nobody

Ci sono modi più tortuosi se non hai accesso al Sudo, come ssh [email protected], ma penso che Sudo sia probabilmente il più semplice se è installato e hai i permessi per usarlo

51
Michael Mrozek
$ whoami 

Questo comando stampa l'utente corrente. Per cambiare utente, dovremo usare questo comando (seguito dalla password dell'utente):

$ su secondUser
Password:

Dopo aver inserito la password corretta, si accederà come utente specificato (che è possibile verificare eseguendo nuovamente whoami.

25
Ashish Saini

Se stai eseguendo Ubuntu e se l'utente a cui desideri accedere non ha una password impostata:

Sudo su - username

Inserisci la tua password e dovresti essere impostato. Naturalmente, ciò richiede che l'utente disponga dei diritti per ottenere i privilegi di root con Sudo.

17
Sundae

Per passare la sessione del terminale a un altro utente, in cui l'utente non può tornare all'utente originale, utilizzare exec:

$ | # exec su - [nome utente]

Ciò accederà tecnicamente al nuovo utente in un nuovo processo e chiuderà quello attuale. In questo modo quando l'utente tenta di uscire o Ctrl-D, il terminale si chiuderà come se l'utente fosse quello che lo ha istanziato, cioè l'utente non può tornare al termine dell'utente originale. Un po 'inutile, considerando che possono ancora solo iniziare una nuova sessione terminale e trovarsi automaticamente nel termine utente originale login, ma è così.

EDIT: per quello che vale, puoi usare il comando linux vlock nel tuo ~/.bashrc per bloccare le sessioni terminali di default, richiedendo la password del termine sessione utente da sbloccare. Ciò impedirebbe in qualche modo il riavvio del suddetto termine nel contesto dell'utente originale, dato che il termine non è istanziato utilizzando il non predefinito ~/.bashrc dell'utente, come configurato.

9
SYANiDE

Sudo -iu <your_username> per me fai il trucco

3
andilabs

Cerchiamo di farlo bene: hai effettuato l'accesso come UtenteA e vuoi "accedere" come Utente B per eseguire alcuni comandi, ma al termine vorrai tornare a Utente A. Per semplicità, suppongo che tu voglia eseguire ls -l/tmp come UserB. Se si non si desidera lasciare l'attuale Shell di UserA ma si esegue invece un comando come UserB e si rimane ancora registrati come UserA, è necessario eseguire questa operazione:

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

Ciò presuppone che tu conosca la password per UserB. Tuttavia, se non si conosce la password di UserB, è necessario conoscere la password di root. Poi:

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

Se preferisci accedere temporaneamente come UtenteB per eseguire molti comandi, fai semplicemente:

Sudo su - UserB

Questo ti darà una nuova Shell per UserB (verifica digitando id). Al termine, puoi fare ctrl-d e tornare al tuo login.

2
Hopping Bunny

Ancora un'altra strada è lanciare una nuova Shell come utente diverso (non root) per eseguire comandi come quell'utente.

[email protected]:~$ Sudo -u mongodb bash          #<-- or zsh, etc... 
[email protected]:~$ mongod --configsvr --dbpath /data/configdb --fork

Un esempio di questo è l'utente mongodb. Quando si distribuisce un cluster MongoDB frammentato, tutti i processi necessari devono essere eseguiti come mongodb e non è necessario (o del tutto conveniente) demonizzare i processi utilizzando gli script init per dozzine di nodi.

2
azatar

Se devi eseguire un solo comando, puoi usare Sudo: Sudo -u username command

1
Maksim Luzik