Alias ​​mit sudo beim Sitzungsstart ausführen

Ich habe den folgenden Alias ​​erstellt und in meine eingefügt ~/.zshrc:

alias kiosk-proxy="echo \"rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080\" | sudo pfctl -ef -"

Es ist im Grunde eine pf-Regel, die den gesamten eingehenden Datenverkehr mit dem Zielport 80 auf 127.0.0.1:8080 umleitet (aber was es tut, ist nicht wichtig, es dient nur dazu, Ihnen etwas Kontext zu geben).

Derzeit muss ich dies bei jedem Sitzungsstart manuell ausführen, ich möchte es automatisieren.

Es wäre ziemlich einfach, wenn es keine sudoRechte bräuchte, ich würde einfach kiosk-proxymein ~/.bash_profile einfügen, denke ich.

Aber da es sudo braucht, wird es nach dem Passwort fragen und ich bezweifle, dass es dazu auffordern wird. Also ... Wie kann ich diesen Alias ​​mit sudo-Rechten ausführen, ohne nach dem Passwort zu fragen? Außerdem muss es wissen, dass es einen solchen Alias ​​in gibt ~/.zshrc, der möglicherweise noch nicht geladen wurde. Im schlimmsten Fall kann ich den Alias ​​in eine andere Datei verschieben.

Ein paar Dinge .... Möchten Sie dies nur für eine Shell-Umgebung für einen bestimmten Benutzer oder möchten Sie dies für den gesamten Computer? Benutzt du zsh oder bash? Du erwähnst beides. Warum möchten Sie diesen Befehl nicht als Skript ausführen ?
Ich verlasse mich hauptsächlich auf Zsh, dachte aber, ich müsste bash_profile verwenden, da es die Standardprofildatei ist. Es ist mir egal, ob es für einen einzelnen Benutzer oder alle ist, ich habe nur einen Benutzer auf diesem Computer. Ich könnte es auch als Skript ausführen, es ist nur so, dass es derzeit ein Alias ​​ist. Also habe ich es als Beispiel verwendet.
Möchten Sie, dass dies nur ausgeführt wird, wenn Sie angemeldet sind oder wenn der Computer hochfährt? Ich habe den Root-Benutzer auf meiner Box aktiviert, also habe ich keine Ahnung, wie ein Mac ohne das aussieht ... aber der Root-Benutzer hat seine eigenen Startelemente und benötigt keine Berechtigungen, um Dinge auszuführen, also sollte das theoretisch funktionieren für dich? G>
bash_profile wird von zsh nicht gelesen - also bleib bei dem einen oder anderen
Gut zu wissen, obwohl bash immer ausgeführt wurde, da ich zsh als Standardterminal hatte, dachte ich, ich könnte Aliase entweder in .bashrc oder .zshrc haben und es würde genauso funktionieren. Dachte, es wäre identisch für das Profil.

Antworten (1)

Das Aktivieren von pf (mit der rdr-Regel) mit einem Befehl/Alias ​​oder einem Shell-Skript/einer Shell-Skript/Funktion in Ihrem bash/zsh-Profil wie in Ihrer Frage ist weder üblich noch eine gute Praxis. Möglich ist aber:

Um eine Passwortabfrage zu deaktivieren, ändern Sie die sudoers-Datei:

Öffnen Sie Terminal und geben Sie ein sudo visudo, um die Datei /etc/sudoers zu ändern .

Teil wechseln:

## User privilege specification
##
root ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

Zu

## User privilege specification
##
root ALL=(ALL) ALL
%admin  ALL=(ALL) ALL
your_username ALL=(ALL) NOPASSWD: /sbin/pfctl

und speichern Sie die Datei.

Falls Sie vi nicht kennen : Nach der Eingabe sudo visudomüssen Sie in den Einfügemodus wechseln , indem Sie drücken i. Geben Sie die zusätzliche Zeile wie oben angegeben ein. Um den Einfügemodus zu verlassen, drücken Sie esc. Geben Sie dann :wqund die EnterTaste ein, um die geänderte Datei auf die Festplatte zu schreiben, und beenden Sie vi.

bash:

Für die Eingabe kiosk-proxysollte kein Passwort mehr erforderlich sein. Sie können dann einfach kiosk-proxyals separate Zeile in Ihrem bash_profile (nach der alias kiosk-proxy ...Zeile) hinzufügen

Nach dem Verlassen der Shell wird pf nicht deaktiviert und die übergebene Regel leitet immer noch weiter! Um pf und die rdr-Regel beim Beenden der (Bash-)Shell zu deaktivieren, erstellen Sie eine Datei mit touch ~/.bash_logoutund dem Inhalt sudo pfctl -d.

zsch:

Dasselbe funktioniert mit ~/.zprofile, das Folgendes enthält:

alias kiosk-proxy="echo \"rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080\" | sudo pfctl -ef -"

kiosk-proxy

und ~/.zlogout enthalten

sudo pfctl -d

Ein empfehlenswerterer Weg ist, einfach die rdr-Regel in pf.conf hinzuzufügen und pf während des Bootens zu aktivieren.