it-swarm.com.de

Identifizieren Sie den Benutzer in einem Bash-Skript, das von sudo aufgerufen wird

Wenn ich das Skript /root/bin/whoami.sh mit:

#!/bin/bash
whoami

und dieses Skript wird von einem Benutzer mit einem richtig konfigurierten Sudo aufgerufen, es wird anzeigen

root

Gibt es eine schnelle Möglichkeit, den tatsächlichen Benutzer in einem Skript zu ermitteln, oder muss ich auf Parameter zurückgreifen, die diesen Benutzernamen weitergeben?

94
quadmore

$ Sudo_USER funktioniert nicht, wenn Sie Sudo su - Verwenden.
Es sind auch mehrere Überprüfungen erforderlich - wenn $USER == 'root', Erhalten Sie $Sudo_USER.

Verwenden Sie anstelle des Befehls whoamiwho am i. Dadurch wird der für die aktuelle Sitzung gefilterte Befehl who ausgeführt. Es gibt Ihnen mehr Informationen als Sie brauchen. Gehen Sie folgendermaßen vor, um nur den Benutzer zu ermitteln:

who am i | awk '{print $1}'

Alternativ (und einfacher) können Sie logname verwenden. Es macht dasselbe wie die obige Aussage.

Dies gibt Ihnen den Benutzernamen, der sich bei der Sitzung angemeldet hat.

Diese funktionieren unabhängig von Sudo oder Sudo su [whatever]. Es funktioniert auch unabhängig davon, wie oft su und Sudo aufgerufen werden.

120
evan

Ich denke $ Sudo_USER ist gültig.

#!/bin/bash
echo $Sudo_USER
whoami
49
Brandon Horsley

So erhalten Sie den Benutzernamen der Person, die das Skript aufgerufen hat, unabhängig davon, ob Sudo oder nicht:

if [ $Sudo_USER ]; then user=$Sudo_USER; else user=`whoami`; fi

oder eine kürzere Version

[ $Sudo_USER ] && user=$Sudo_USER || user=`whoami`
12
Alexei Tenitski

who am i | awk '{print $1}' hat nicht für mich gearbeitet, aber who|awk '{print $1}' wird den Job dienen

2
Srinivas

Seltsamerweise unterscheidet das System zwischen echte und effektive UIDs , aber ich kann kein Programm finden, das dies auf Shell-Ebene exportiert.

1
msw

Mit whoami, who am i, who, id oder $Sudo_USER ist hier nicht richtig.

Tatsächlich ist who niemals eine Lösung für die Frage, da nur die angemeldeten Benutzer aufgelistet werden, bei denen es sich möglicherweise um Dutzende von Benutzern handelt.

In meinen Augen ist die einzig wertvolle Antwort die Verwendung von logname.

Hoffe das hilft

Rauben

0
Rob