/ / Wie kann ich feststellen, ob zsh mit Berechtigungen ausgeführt wird? - zsh, root, Privilegien

Wie kann ich feststellen, ob zsh mit Berechtigungen ausgeführt wird? - zsh, root, Privilegien

Zsh

In meinem .zshrc, ich habe Befehle, die Instanzen verschiedener Programme wie Mozilla Firefox und Evolution starten. Ich möchte sie offensichtlich nicht als root starten, also möchte ich überprüfen, ob ich root bin, bevor ich sie starte. Wie mache ich das?

Antworten:

2 für Antwort № 1

Sie können z. eine solche bedingte Aussage:

PRGCMD="firefox"
PRGUSR="user"
if [[ $UID == 0 || $EUID == 0 ]]; then
# root
echo Running programm as User $PRGUSR
sudo -u $PRGUSR ${(z)PRGCMD}
else
${(z)PRGCMD}
fi

Es wird zuerst geprüft, ob die echte Benutzer-ID oder der effektive Benutzer-ID ist zero, das ist root.

Wenn ja, verwendet es sudo um das in der Variablen definierte Programm auszuführen PRGCMD als der Benutzer in der Variablen definiert PRGUSR. (Sie können diese Zeile weglassen, wenn Sie nur die Warnmeldung möchten.)

${(z)PRGCMD} spaltet Wörter, als ob zsh Kommandozeile im Fall PRGCMD enthält Leerzeichen, d. h. Parameter für das Programm.

Eine kurze Variante, die das Programm nur als Nicht-Root ausführt, ist: [[ $UID != 0 || $EUID != 0 ]] && firefox


Zusätzlich möchten Sie vielleicht einbeziehen %# in Ihre Eingabeaufforderung, so dass Sie sehen können, dass Ihre aktuelle Shell privilegiert ist. Von man zshmisc:

%#     A `#" if the shell is running with privileges, a `%" if not.  Equivalent to `%(!.#.%%)".  The definition of `privileged", for  these
purposes,  is that either the effective user ID is zero, or, if POSIX.1e capabilities are supported, that at least one capability is
raised in either the Effective or Inheritable capability vectors.

Der Code, der beurteilt, ob der Shell läuft mit Privilegien (definiert in privasserted() im utils.ckann IMHO nicht in Shell - Code gemacht werden, also wenn Sie genau das gleiche Verhalten wollen, ist es wahrscheinlich das beste, die Ausgabe des zu analysieren %# prompte Erweiterung:

[[ $(print -P "%#") == "#" ]] && echo shell privileged || echo shell not privileged

Verwandte Fragen
Bemerkungen
Einen Kommentar hinzufügen