La opción "--up" en OpenVPN se usa normalmente para enrutamiento, etc. Y, por lo tanto, se procesa antes de que OpenVPN elimine los privilegios de root para ejecutarse como nadie. Sin embargo, estoy invocando scripts de shell que deben ejecutarse como un usuario sin privilegios.
¿Cómo puedo hacer eso? He estudiado los privilegios del proceso de caída , especialmente las respuestas de polinomios y tylerl, pero no entiendo cómo implementarlas. Estoy trabajando en Centos 6.5, y suid está bloqueado, tanto como "chmod u + s" como "setuid ()".
Hay un complemento OpenVPN ("openvpn-down-root.so") que permite que los scripts invocados por la opción "--down" se ejecuten como root. Podría haber un equivalente, como "openvpn-up-user.so", pero no lo he encontrado.
Editar0
Según la respuesta de Nikola Kotur, he instalado las runit-rpm de Ian Meyer . Aunque el comando chpst funciona en la terminal, en el script up falla con "comando no encontrado". Lo que funciona es "sudo chpst" además de configurar la pantalla y el idioma adecuados. Consulte ¿ Por qué mi terminal no genera caracteres Unicode correctamente? Dado eso, el script up necesita estas cuatro líneas:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
Editar1
Según el comentario de 0xC0000022L, encuentro que "sudo -u user" funciona tan bien como "sudo chpst -u user -U user":
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &
Estudiaré sudoers de hombre y actualizaré si / cuando consigo sudo solo para trabajar.
fuente
Respuestas:
Yo uso Runit 's
chpst
herramienta para este tipo de tareas. Por ejemplo, desde la secuencia de comandos superior, llame a su secuencia de comandos sin privilegios:fuente
Cubrir solo runit y sudo se pierde mucho. En realidad, hay toda una familia de conjuntos de herramientas como runit, y una amplia variedad de herramientas para hacer exactamente esto, la tarea para la que fueron diseñados:
setuidgid
:setuidgid
:setuidgid
:chpst
:runuid
:s6-setuidgid
:setuidgid
:No se mezclan en la tarea diferente de agregar privilegios, y nunca caen en un modo interactivo.
Por cierto, sus problemas añadidos son poco más que su olvido de tener
sbin
, así comobin
enPATH
los suyos.Otras lecturas
fuente
script que elimina privilegios y ejecuta otro script (pero aquí solo lo hice para ejecutarse):
Ejemplo:
fuente
/etc/sudoers
permite de manera muy específica qué variables de entorno se pueden transmitir a la ejecución del programa porsudo
y así sucesivamente.man sudoers
. Honestamente, quien lo usasudo
simplemente parasudo su -
o para cambiar el contexto del usuario no tiene idea de lo que hay detrás de este increíble programa y cuánto puede bloquear cosas para programas individuales, usuarios, hosts, etc ...$0
; la persona que llama puede configurar un script$0
para literalmente cualquier cosa que quiera que sea. Y usa más citas.$0
es/directory/name with spaces/script
(y recuerde, los usuarios pueden crear enlaces simbólicos arbitrarios en ubicaciones que poseen, incluso si no usanexec -a somename yourscript
para llamaryourscript
con un$0
desomename
), entonces obtendríasudo -u nobody /directory/name with spaces
, pasaríawith
yspaces
pasaría como argumentos separados a su comando .Qué pasa:
En un comentario anterior, se quejó del entorno, por lo que también podría comparar las diferencias entre los resultados:
fuente
En Linux puede usar
runuser
osetpriv
si no se requiere una sesión PAM (ambas deutil-linux
):Desde la
su
página del manual:fuente