Wie wechselt man zwischen Benutzern an einem Terminal?

480

Ich möchte mich als ein anderer Benutzer anmelden, ohne mich vom aktuellen Benutzer abzumelden (auf demselben Terminal). Wie mache ich das?

Tshepang
quelle
1
Ich habe eine ähnliche Frage gestellt, weil ich auf Probleme mit XDG-Umgebungsvariablen gestoßen bin $XDG_RUNTIME_DIR, die mich verrückt gemacht haben. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Antworten:

561

Wie wäre es mit dem suBefehl?

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

Wenn Sie sich als root anmelden möchten, müssen Sie keinen Benutzernamen angeben:

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

Im Allgemeinen können Sie sudoeine neue Shell als gewünschten Benutzer starten. Mit der -uFlagge können Sie den gewünschten Benutzernamen angeben:

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

Es gibt weitere Umwege, wenn Sie keinen sudo-Zugriff haben, wie ssh username @ localhost, dies sudoist jedoch wahrscheinlich der einfachste, vorausgesetzt, dass es installiert ist und Sie die Berechtigung haben, es zu verwenden.

Pratt
quelle
17
Auch su - [user]kann nützlich sein - das extra Strich gibt Ihnen ein Login - Shell.
Ephemient
Ich erhalte die Fehlermeldung "-su: / dev / stderr: Berechtigung verweigert", nachdem ich diesen Befehl echo >>/dev/stderrbei einem Login mit ausgeführt su --login ...habe. Ich fand diese übrigens unix.stackexchange.com/questions/38538/…
Aquarius Power
Ermöglicht dies jedem neuen Benutzer, andere, überschreibende Werte für Umgebungsvariablen zu haben? zB git config für die Arbeit, Open Source, etc.
Kevin Suttle
Eine Feststellung, als ich das auflistete env, sah es, dass alles in Ordnung war sowie eine Sichtprüfung gehen kann; Und eine Sache falsch war: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on ~ / .Xauthority` Datei ist: -rw-------. Ich habe eine Kopie angefertigt und so konnte ich gedit als Experiment ausführen.
wird
1
wenn Sie "Dieses Konto ist derzeit nicht verfügbar" erhalten: su -s / bin / bash - www-Daten
max4ever
46

Im Allgemeinen verwenden Sie sudo, um eine neue Shell als der Benutzer zu starten, den Sie möchten. Mit der -uFlagge können Sie den gewünschten Benutzernamen angeben:

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

Es gibt mehr Umwege, wenn Sie keinen sudo-Zugang haben ssh username@localhost, aber ich denke, es sudoist wahrscheinlich am einfachsten, wenn es installiert ist und Sie die Erlaubnis haben, es zu benutzen

Michael Mrozek
quelle
Was ist, wenn mein System weder ssh-Server noch sudo hat? Können Sie diesen Teil in der Antwort erwähnen?
Tshepang
ok, Pratt antwortete, dass man
Tshepang
4
sudo -sGibt Ihnen eine Shell wie su, sudo -isimuliert Login wie su -. Kann -u $usernatürlich mit kombiniert werden .
Ephemient
viel effizienter. Sich als Benutzer "einloggen" zu können, der sich normalerweise nicht einloggen kann, ist ein großer Vorteil.! Ich durfte eine Datenbankinstanz ausführen, ohne mich mit Berechtigungen oder Selinux herumzuschlagen
Félix Gagnon-Grenier
20
$ whoami 

Dieser Befehl gibt den aktuellen Benutzer aus. Um Benutzer zu ändern, müssen wir diesen Befehl verwenden (gefolgt vom Passwort des Benutzers):

$ su secondUser
Password:

Nachdem Sie das richtige Passwort eingegeben haben, werden Sie als der angegebene Benutzer angemeldet (was Sie durch erneutes Ausführen überprüfen können whoami.

Ashish Saini
quelle
Nützlich, wenn Sie kein Sudoer sind.
Marco Sulla
15

Wenn Sie Ubuntu ausführen und für den Benutzer, unter dem Sie sich anmelden möchten, kein Kennwort festgelegt ist:

sudo su - username

Geben Sie Ihr eigenes Passwort ein und Sie sollten eingestellt sein. Dies setzt natürlich voraus, dass Ihr Benutzer Rechte besitzt, um Root-Rechte zu erlangen sudo.

Eisbecher
quelle
8

Verwenden Sie exec, um die Terminalsitzung auf einen anderen Benutzer umzustellen, bei dem dieser Benutzer nicht zum ursprünglichen Benutzer zurückkehren kann:

$ | # exec su - [Benutzername]

Dadurch wird der neue Benutzer in einem neuen Begriffsprozess technisch angemeldet und der aktuelle geschlossen. Auf diese Weise wird das Terminal geschlossen, wenn der Benutzer versucht, das Programm zu beenden, oder Strg + D, als wäre es derjenige, der es instanziiert hat, dh der Benutzer kann nicht in den ursprünglichen Benutzerbegriff zurückkehren. Irgendwie sinnlos, wenn man bedenkt, dass sie immer noch eine neue Terminalsitzung starten und sich automatisch im ursprünglichen Benutzerbegriff anmelden können, aber da ist es.

BEARBEITEN: Sie können den Befehl linux vlock in Ihrem ~ / .bashrc verwenden, um Terminalsitzungen standardmäßig zu sperren, wobei zum Entsperren das Kennwort des Termins Sitzungsbenutzer erforderlich ist. Dies würde einen Neustart des oben genannten Begriffs unter dem ursprünglichen Benutzerkontext etwas verhindern, da der Begriff nicht mit dem nicht standardmäßigen ~ / .bashrc des Benutzers wie konfiguriert instanziiert wird.

SYANIDE
quelle
3

sudo -iu <your_username> für mich den Trick machen

andilabs
quelle
2

Eine weitere Möglichkeit besteht darin, eine neue Shell als anderer Benutzer (ohne Rootberechtigung) zu starten, um Befehle als dieser Benutzer auszuführen.

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

Ein Beispiel hierfür ist der mongodbBenutzer. Bei der Bereitstellung eines Sharded-MongoDB-Clusters müssen alle erforderlichen Prozesse als ausgeführt werden, mongodbund es ist nicht erforderlich (oder ganz praktisch), die Prozesse mithilfe von Init-Skripten für Dutzende von Knoten zu dämonisieren.

Azatar
quelle
2

Lassen Sie uns das richtig machen: Sie sind als BenutzerA angemeldet und möchten sich als BenutzerB "anmelden", um einige Befehle auszuführen, möchten aber nach Abschluss wieder zu BenutzerA zurückkehren. Der Einfachheit halber gehe ich davon aus, dass Sie ls -l / tmp als UserB ausführen möchten. Wenn Sie die aktuelle Shell von UserA nicht verlassen, sondern einen Befehl als UserB ausführen und dennoch als UserA angemeldet bleiben möchten, sollten Sie dies tun:

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

Dies setzt voraus, dass Sie das Kennwort für UserB kennen. Wenn Sie jedoch das Kennwort von UserB nicht kennen, müssen Sie das Root-Kennwort kennen. Dann:

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

Wenn Sie sich lieber vorübergehend als Benutzer B anmelden möchten, um viele Befehle auszuführen, tun Sie einfach Folgendes:

sudo su - UserB

Dadurch erhalten Sie eine neue Shell für UserB (überprüfen Sie dies, indem Sie id eingeben). Wenn Sie fertig sind, können Sie Strg-D ausführen und zu Ihrem Login zurückkehren.

Hopfender Hase
quelle
1

Wenn Sie nur einen einzigen Befehl ausführen müssen, können Sie sudo verwenden: sudo -u username command

Maksim Luzik
quelle
-1
~$ sudo login

Dann werden Sie zur Eingabe des sudo-Passworts aufgefordert (des Passworts des aktuell angemeldeten Benutzers).

Außerdem: Stellen Sie sicher, dass sich der aktuelle Benutzer in der sudoers-Datei befindet!

Tshepo
quelle
2
Bei der Frage ging es darum, sich als ein anderer Benutzer anzumelden.
Minix