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


2

In meinem .zshrc habe ich 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

Sie können zB eine solche bedingte Anweisung verwenden:

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 prüft zunächst, ob die reale Benutzer - ID oder die effektive Benutzer - ID ist zero, dh root.

In diesem Fall sudowird das Programm ausgeführt, das in der Variablen PRGCMDals der in der Variablen definierte Benutzer definiert ist PRGUSR. (Sie können diese Zeile weglassen, wenn Sie nur die Warnmeldung möchten.)

${(z)PRGCMD}aufspaltet Worte , als ob zsh Befehlszeile im Fall PRGCMDLeerzeichen enthält, dh Parameter an 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 möglicherweise %#in Ihre Eingabeaufforderung aufnehmen, damit 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 zu beurteilen , ob die Schale mit Privilegien ausgeführt wird (in definiert privasserted()in utils.c) kann IMHO nicht in Shell - Code ausgeführt werden, wenn Sie also genau das gleiche Verhalten wollen , es ist wahrscheinlich das beste die Ausgabe der analysieren %#prompt Expansion:

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

Daran habe ich gedacht. Es ist jedoch möglich, dass die Shell kein Root-Benutzer ist und dennoch zusätzliche Berechtigungen besitzt. Ich möchte dieselbe Überprüfung durchführen, die% # in der Eingabeaufforderung vornimmt.
Demi

1
@ Demetri: Ich habe meine Antwort erweitert, um das Verhalten der %#sofortigen Erweiterung zu adressieren .
mpy

@Demetri: Ich bin gespannt, ob das Parsen print -P "%#"dein Problem gelöst hat. Wenn ja, akzeptieren Sie bitte meine Antwort :).
mpy

1
Ah ja, es hat das Problem gelöst! Sorry
Demi

1
Oder wenn Sie Kringel mögen:[[ ${(%):-%#} = \# ]] && echo root
Tom Hale
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.