Tengo una arquitectura que usa espacios de nombres de red (netns). Me gustaría permitir que los usuarios habituales realicen algunas operaciones en estas redes.
Podría escribir un guión netns-exec.sh
, inspirado en esta publicación , ejecutado con sudo
, que contenga:
ip netns exec $1 su $USER -c "$2"
y agregar a mi archivo sudoer:
user ALL=(ALL) /path/to/netns-exec.sh
Pero lo encuentro tan feo que podría tener pesadillas al respecto. ¿Existe una mejor solución para permitir que los usuarios habituales usen espacios de nombres? ¿Es posible poner a los usuarios en algunos grupos útiles? Lo busqué pero no encontré nada.
sudo
root
privileges
network-namespaces
Raspbeguy
fuente
fuente
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
en su archivo sudoers y luego crea un grupo en el que coloca sus usuarios permitidos, y asocia este grupo a este alias de comando.sudo
contiene unsu
que me molesta, no el script en sí. De todos modos, escribiré un guión para envolver la cosa. Hace 2 cambios de usuario, eso es realmente feo, ¿no te parece?sudo
proporcionaba una variable específica$SUDO_USER
, que es más segura. Pero eso sigue siendo feo.Respuestas:
Solución 1
Simplemente agregue un grupo llamado "netns", agregue todos los usuarios deseados. Luego otorgue propiedad a root: netns y brinde capacidades de lectura / ejecución al grupo.
En otros terminos:
Solución 2
Esta solución es más simple, debe editar su archivo sudoers como se muestra en este ejemplo .
fuente
ip netns
devolverá un error que dice que solo root puede ejecutarlo. La solución 2 es lo que tenía en mente inicialmente, pero en mi opinión no era satisfactorio.chmod 0633
daríawrite+execute
permisos a todos los usuarios y alnetns
grupo. Sospecho que quería establecer el bit SGID en el script, pero como mencionó @Angelo:setuid
ysetgid
se ignora para los scripts de shell, y por una buena razón .Personalmente, no sé si existe la posibilidad de permitir que los usuarios regulares ejecuten comandos en diferentes espacios de nombres de red, pero este script de shell anotado puede satisfacer mejor sus necesidades:
Instálelo en algún lugar
/usr/bin
y permita que sus usuarios lo ejecuten.fuente
Firejail puede hacer el trabajo
Alternativamente, Netns-Exec , Nsutils y Netns no requieren root
fuente