Ejecutar alias con sudo al inicio de la sesión

Creé el siguiente alias y lo puse en mi ~/.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 básicamente una regla pf que redirige todo el tráfico entrante con el puerto de destino 80 a 127.0.0.1:8080 (pero lo que hace no es importante, es solo para darle algo de contexto)

Actualmente, tengo que ejecutar esto manualmente en cada inicio de sesión, me gustaría automatizarlo.

Sería bastante simple si no necesitara sudoderechos, simplemente pondría kiosk-proxymi ~/.bash_profile, supongo.

Pero como necesita sudo, pedirá la contraseña y dudo que la solicite. Entonces... ¿Cómo puedo ejecutar este alias con derechos sudo sin pedir la contraseña? Además, necesita saber que existe tal alias en ~/.zshrc, que es posible que aún no se haya cargado. En el peor de los casos, puedo mover el alias a otro archivo.

Algunas cosas... ¿Quiere esto solo para un entorno de shell para un usuario en particular o lo quiere para toda la computadora? ¿Estás usando zsh o bash? Mencionas ambos. ¿Por qué no querrías ejecutar ese comando como un script ?
Confío principalmente en Zsh, pero pensé que tendría que usar bash_profile ya que es el archivo de perfil predeterminado. Realmente no me importa si es para un solo usuario o para todos, solo tengo un usuario en esta computadora. También podría ejecutarlo como un script, es solo que, actualmente, es un alias. Así que lo usé como ejemplo.
¿Desea que esto se ejecute solo cuando haya iniciado sesión o cuando la computadora se inicie? Tengo el usuario raíz habilitado en mi caja, así que no tengo idea de cómo se ve una Mac sin eso... pero el usuario raíz tiene sus propios elementos de inicio y no necesita permisos para ejecutar cosas, así que, en teoría, eso debería funcionar. ¿para ti? G>
bash_profile no es leído por zsh, así que apégate a uno u otro
Es bueno saberlo, pensé que bash siempre se ejecutaba, teniendo zsh como terminal predeterminado, pensé que podría tener alias en .bashrc o .zshrc y funcionaría igual. Pensé que era idéntico para el perfil.

Respuestas (1)

Habilitar pf (con la regla rdr) con un comando/alias o un script/función de shell en su perfil bash/zsh como en su pregunta no es una práctica común ni buena. Aunque es posible:

Para deshabilitar una solicitud de contraseña, modifique el archivo sudoers:

Abra Terminal y entre sudo visudopara modificar el archivo /etc/sudoers .

Cambia la pieza:

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

a

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

y guarde el archivo.

Si no sabe vi : después de ingresar, sudo visudodebe cambiar al modo de inserción presionando i. Ingrese la línea adicional como se indica arriba. Para salir del modo de inserción pulsa esc. Luego ingrese :wqy la Entertecla para escribir el archivo modificado en el disco y salga vi.

intento:

Entrar kiosk-proxyya no debería requerir una contraseña. Luego, simplemente puede agregar kiosk-proxycomo una línea separada en su bash_profile (después de la alias kiosk-proxy ...línea)

¡Después de salir del shell, pf no se deshabilitará y la regla aprobada todavía se está redirigiendo! Para deshabilitar pf y la regla rdr al salir del shell (bash), cree un archivo con touch ~/.bash_logouty el contenido sudo pfctl -d.

zsh:

Lo mismo funciona con ~/.zprofile que contiene:

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

y ~/.zlogout que contiene

sudo pfctl -d

Una forma más recomendada es simplemente agregar la regla rdr en pf.conf y habilitar pf durante el arranque.