Quiero saber cómo crear (si es posible) un script bash que se ejecute como root en Debian independientemente del usuario que lo ejecute, sin pedir ningún tipo de autenticación.
Este archivo ejecutará todos sus comandos como si fuera el usuario raíz, pero solo el usuario raíz real podrá leerlo o escribir en él.
Necesito esto porque quiero ejecutar comandos como swapoff
, swapon
, apt
, etc… Pero a través de otra aplicación, y quiero que no me pida ninguna contraseña.
Los comandos serán corregidos (esos comandos raíz tendrán sus parámetros en el archivo, no como entrada), por lo que las implicaciones de seguridad no son exactamente mi preocupación, pero también acepto explicaciones.
Respuesta aceptada:
La forma de bajo nivel de hacer que un programa siempre se ejecute bajo un UID particular es el bit setuid en el archivo binario. Así es como, p. sudo
y su
obtener sus permisos de raíz, incluso si normalmente se inician con usos normales.
Pero, en general, los sistemas similares a Unix no son compatibles con los scripts de setuid. , consulte:Permitir setuid en scripts de shell
Sin embargo, lo que puedes hacer es configurar sudo
o alguna otra herramienta similar que permita a los usuarios ejecutar algunos archivos en particular con los privilegios apropiados. Por ejemplo, esto permitiría a viceadmin
para ejecutar /usr/local/bin/sudoswapon
con cualquier argumento y sin autenticación:
viceadmin ALL = NOPASSWD:/usr/local/bin/sudoswapon
Ahora, desde sudo
se ocupa de cambiar los privilegios en sí, sudoswapon
puede ser un script de shell.
Tiene razón al notar que la secuencia de comandos debe tener cuidado con la forma en que trata los argumentos de la línea de comandos, y que todos se aplicarán los errores del lenguaje shell. Afortunadamente, sudo
filtra la mayoría de las variables de entorno, al menos si env_reset
la opción está configurada.