`Wer bin ich` nach` su` zeigt keine neue Benutzer-ID an?

9

Warum wird beim Wechseln des Benutzers su <username>und anschließenden Ausführen who am ider vorherige Benutzer ausgegeben, als den ich angemeldet war, und nicht der Benutzer, zu dem ich gewechselt habe?

user1091856
quelle

Antworten:

13

Sie führen wahrscheinlich den falschen Befehl aus.

  • whosoll zeigen, wer angemeldet ist, dh welchem ​​Benutzer das Terminal gehört. Es gibt eine Zeile wie folgt zurück:

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamisoll Ihnen zeigen, wie die effektive Benutzer-ID der Person lautet, die sie ausführt. Es gibt nur einen einzigen Namen wie diesen zurück (und entspricht dem Ausführen id -un):

    ckhan
    

Ich denke, Sie haben möglicherweise buchstäblich who am iam Terminal getippt , das whomit zwei ignorierten Argumenten ( am, i) lief.

Siehe man whound man whoamifür weitere Details.

ckhan
quelle
2
Die beiden Argumente amund iwerden nicht ignoriert, werden sie sogar von POSIX angegeben: „In der POSIX locale, begrenzen die Ausgabe zu der Beschreibung des rufenden Benutzer, das entspricht der -mOption.“
Xhienne
3

Gemäß meiner Ubuntu 12.04.2-Manpage für den Befehl 'who' ist 'who am i' (oder who mit zwei beliebigen Argumenten) identisch mit 'who -m' und sollte Ihnen den mit STDIN verknüpften Hostnamen und Benutzer geben. Ich bekomme jedoch keine Ausgabe mit 'wer bin ich'. Entweder ist die Manpage falsch oder der Befehl hat einen Fehler. Unabhängig davon, wie zuvor von ckhan beantwortet, gibt Ihnen der Befehl 'whoami' den Benutzernamen für Ihre effektive Benutzer-ID. Zumindest in Ubuntu 12.04.2 gibt Ihnen weder ID noch "Wer bin ich" oder "Whoami" nur den Benutzernamen der Person, die am aktuellen Terminal angemeldet ist. Als Workaround können Sie dies erreichen mit:

who | sed 's/ .*//'
Marnix A. van Ammers
quelle
Beachten Sie, dass dies Linux-spezifisch ist. Dies gibt den ursprünglichen Benutzernamen in Unix / SunOS zurück.
Underverse
3

Problemumgehung :

ls -l `tty` | awk '{print $3}'

das funktioniert als ersatz von who am i | awk '{print $1}'. Erklärung unten:

Auf vielen Systemen who am ientspricht " who -m" " ". Das Problem hierbei ist, dass bei einigen Terminals " who -m" nichts zurückgibt!

Beispiel 1 läuft von einem xfce4-Terminal aus

Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas   pts/1        2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas   pts/1        2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas   tty8         2017-08-19 10:18 (:0)
thomas   pts/1        2017-08-19 11:15 (:0.0)
thomas   pts/5        2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ # 

aber Beispiel # 2 von einem Gnom-Terminal (gleicher Computer, gleiche Befehle)

Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas   tty8         2017-08-19 10:18 (:0)
thomas   pts/1        2017-08-19 11:15 (:0.0)
thomas   pts/5        2017-08-19 16:16 (:0.0)
Pegasus ~ # 

Dies scheint eine Folge davon zu sein, dass das Gnome-Terminal keine utmp-Einträge hinzufügt…

Thomas Baeckeroot
quelle
Analysiere nicht ls! Verwenden Sie statstattdessen: stat -c '%U' "$(tty)"Sie sollten wahrscheinlich auch nicht analysieren who am i, da Benutzernamen in einigen seltenen Fällen Leerzeichen enthalten können.
Wjandrea