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


480

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


1
Ho fatto una domanda simile, perché ho riscontrato problemi con le variabili di ambiente XDG ( $XDG_RUNTIME_DIRin particolare) che mi stavano facendo impazzire. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Risposte:


562

Che ne dici di usare il sucomando?

$ 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 sudoper avviare una nuova shell come l'utente desiderato; il -uflag ti consente di specificare il nome utente che desideri:

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

Ci sono 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.


17
Inoltre, su - [user]può essere utile: il trattino aggiuntivo ti dà una shell di accesso.
effimero

Ricevo questo errore "-su: / dev / stderr: autorizzazione negata" dopo aver eseguito questo comando echo >>/dev/stderrsu un login con su --login ...qualche suggerimento? Ho trovato questo tra unix.stackexchange.com/questions/38538/…
Aquarius Power

Ciò consente a ciascun nuovo utente di avere valori diversi e prioritari per le variabili di ambiente? ad es. git config per lavoro, open source, ecc.
Kevin Suttle,

Una scoperta, quando l'ho elencato, envha visto che tutto era in ordine, così come un controllo visivo può andare; E una cosa era sbagliato: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on il file ~ / .Xauthority` è: -rw-------. Ne ho fatto una copia e questo mi ha permesso di eseguire gedit come esperimento.
sarà il

1
se ricevi "Questo account non è attualmente disponibile": su -s / bin / bash - www-data
max4ever

46

Generalmente si usa sudoper lanciare una nuova shell come l'utente desiderato; il -uflag ti consente di specificare il nome utente che desideri:

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

Ci sono modi più tortuosi se non si dispone di accesso sudo, ad esempio ssh username@localhost, ma penso che sudosia probabilmente più semplice se è installato e si dispone dell'autorizzazione per usarlo


Cosa succede se il mio sistema non ha né server ssh né sudo? Puoi menzionare quella parte della risposta?
Tshepang,

ok, Pratt ha risposto a quello
tshepang,

4
sudo -sti dà una shell simile su, sudo -isimula l'accesso come su -. Può essere combinato con -u $user, ovviamente.
effimero

molto più efficiente. essere in grado di "accedere" come utente che normalmente non può accedere è una grande risorsa ..! mi ha permesso di eseguire un'istanza di database senza fare confusione con permessi o selinux
Félix Gagnon-Grenier,

20
$ 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.


Utile se non sei sudoer.
Marco Sulla

15

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 sudo.


8

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.



2

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

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

Un esempio di questo è l' mongodbutente. Quando si distribuisce un cluster MongoDB frammentato, devono essere eseguiti tutti i processi necessari mongodbe non è necessario (o del tutto conveniente) demonizzare i processi utilizzando gli script di inizializzazione per decine di nodi.


2

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 non si desidera abbandonare la shell corrente di UserA ma si esegue piuttosto un comando come UserB e si rimane ancora connessi 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.


1

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


-1
~$ sudo login

Quindi ti verrà richiesta la password sudo (la password dell'utente attualmente connesso).

Inoltre: assicurati che l'utente corrente sia nel file sudoers!


2
La domanda riguardava l'accesso come utente diverso.
Minix,
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.