GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finden Sie den ursprünglichen Benutzer durch mehrere sudo- und su-Befehle?

Es gibt kein perfekt Antworten. Wenn Sie Benutzer-IDs ändern, wird die ursprüngliche Benutzer-ID normalerweise nicht beibehalten, sodass die Informationen verloren gehen. Einige Programme, wie logname und who -m Implementieren Sie einen Hack, bei dem sie überprüfen, welches Terminal mit stdin verbunden ist , und überprüfen Sie dann, welcher Benutzer an diesem Terminal angemeldet ist.

Diese Lösung häufig funktioniert, ist aber nicht narrensicher und sollte sicherlich nicht als sicher angesehen werden. Stellen Sie sich zum Beispiel vor, wenn who gibt folgendes aus:

tom     pts/0        2011-07-03 19:18 (1.2.3.4)
joe     pts/1        2011-07-03 19:10 (5.6.7.8)

tom verwendet su um zu root zu gelangen, und führt Ihr Programm aus. Wenn STDIN nicht umgeleitet wird, dann ein Programm wie logname gibt tom aus . Wenn es umgeleitet wird (z. B. von einer Datei) so:

logname < /some/file

Dann ist das Ergebnis "no login name ", da die Eingabe nicht das Terminal ist. Noch interessanter ist jedoch die Tatsache, dass der Benutzer sich als ein anderer angemeldeter Benutzer ausgeben könnte. Da Joe auf pts/1 angemeldet ist, könnte Tom vorgeben, er zu sein, indem er läuft

logname < /dev/pts1

Jetzt heißt es joe obwohl Tom derjenige ist, der das Kommando ausgeführt hat. Mit anderen Worten, wenn Sie diesen Mechanismus in irgendeiner Sicherheitsrolle verwenden, sind Sie verrückt.


Ergebnisse:

Verwenden Sie who am i | awk '{print $1}' ODER logname da keine anderen Methoden garantiert werden.

Angemeldet als ich selbst:

evan> echo $USER
evan
evan> echo $SUDO_USER

evan> echo $LOGNAME
evan
evan> whoami
evan
evan> who am i | awk '{print $1}'
evan
evan> logname
evan
evan>

Normales sudo:

evan> sudo -s
root> echo $USER
root
root> echo $SUDO_USER
evan
root> echo $LOGNAME
root
root> whoami
root
root> who am i | awk '{print $1}'
evan
root> logname
evan
root>

sudo su - :

evan> sudo su -
[root ]# echo $USER
root
[root ]# echo $SUDO_USER

[root ]# echo $LOGNAME
root
[root ]# whoami
root
[root ]# who am i | awk '{print $1}'
evan
[root ]# logname
evan
[root ]#

sudo su -; su tom :

evan> sudo su -
[root ]# su tom
tom$ echo $USER
tom
tom$ echo $SUDO_USER

tom$ echo $LOGNAME
tom
tom$ whoami
tom
tom$ who am i | awk '{print $1}'
evan
tom$ logname
evan
tom$

Dies ist ein ksh Funktion, die ich auf HP-UX geschrieben habe. Ich weiß nicht, wie es mit Bash funktionieren wird unter Linux. Die Idee ist, dass die sudo Der Prozess wird als ursprünglicher Benutzer ausgeführt und die untergeordneten Prozesse sind der Zielbenutzer. Indem wir durch übergeordnete Prozesse zurückgehen, können wir den Benutzer des ursprünglichen Prozesses finden.

#
# The options of ps require UNIX_STD=2003.  I am setting it
# in a subshell to avoid having it pollute the parent's namespace.
#
function findUser
{
    thisPID=$$
    origUser=$(whoami)
    thisUser=$origUser
    while [ "$thisUser" = "$origUser" ]
    do
        ( export UNIX_STD=2003; ps -p$thisPID -ouser,ppid,pid,comm ) | grep $thisPID | read thisUser myPPid myPid myComm
        thisPID=$myPPid
    done
    if [ "$thisUser" = "root" ]
    then
        thisUser=$origUser
    fi
    if [ "$#" -gt "0" ]
    then
        echo $origUser--$thisUser--$myComm
    else
        echo $thisUser
    fi
    return 0
}

Ich weiß, dass die ursprüngliche Frage schon lange her ist, aber Leute (wie ich) stellen immer noch Fragen und dies schien ein guter Ort zu sein, um die Lösung zu platzieren.


Linux
  1. Wie funktionieren die Interna von Sudo?

  2. Wie finde ich den Typ einer Img-Datei und mounte sie?

  3. Wie führe ich mehrere Befehle aus, wenn ich find verwende?

  4. Was ist der Unterschied zwischen root und sudo?

  5. Wie finden Befehle wie fdisk -l die Sektorgröße?

So verwenden Sie Sudo und die Sudoers-Datei

Was ist UID in Linux, wie man es findet und ändert

So ändern Sie das sudo-Passwort über die Befehlszeile unter CentOS 8

So werden Sie Root-Benutzer in der Ubuntu-Befehlszeile mit su und sudo

So erstellen Sie einen Sudo-Benutzer unter Ubuntu und Debian

So finden Sie die PID und PPID eines Prozesses in Linux