Pregunta ubuntu: permite que un usuario ejecute un script con permisos de root


Tengo Ubuntu 8.04 y quiero escribir una secuencia de comandos bash que se ejecuta como root que cada usuario puede ejecutar.

Yo mismo puedo hacer sudo.

¿Cómo puedo hacer eso?

ACLARACIÓN: No quiero hacerlo con sudo, porque entonces los usuarios tendrán que escribir su contraseña. Solo quiero que ejecuten el script como root, tal vez algo setuid, no sé.


9
2017-10-18 08:57


origen




Respuestas:


Si este fuera un binario normal, podría configurarlo ejecutando

# chmod u+s /path/to/binary

Desafortunadamente, los scripts no pueden ser configurados. (Bueno puedes, pero se ignora). La razón de esto es que la primera línea de la secuencia de comandos le dice al sistema operativo a qué intérprete debe ejecutar la secuencia de comandos. Por ejemplo, si tienes un script con:

#!/bin/bash

En realidad terminarías corriendo

/bin/bash /path/to/script

Obviamente, necesitarías que el intérprete fuera setuid, lo que significaría que todos los scripts serían setuid. Esto sería malo.

Puede hacer esto con sudo colocando lo siguiente en su archivo / etc / sudoers ejecutando visudo.

ALL ALL=NOPASSWD: /path/to/script

Y ahora cualquier usuario puede correr.

$ sudo /path/to/script

Esto les permite ejecutar el script sin escribir su contraseña.

Existe una alternativa que no requiere sudo en el comando, que requiere la creación de un pequeño binario de setuided que ejecute su script, pero cada binario de setuid adicional agrega otro posible problema de seguridad.


22
2017-10-18 09:54



Creo que esta es la respuesta que estaba buscando. ¿No puedo configurar un script bash, solo un binario? (Por supuesto, tomaría medidas para hacerlo no editable) - flybywire
No, no puedes hacer un script de configuración. - wfaulk
wfaulk: solía poder hacerlo, pero las distribuciones de Linux más recientes ya no lo permiten. Puede usar una herramienta como shc para 'compilar' el script y luego configurarlo. - Kyle Brandt♦
wfaulk: Por supuesto, eso sería hacer un esfuerzo para hacer algo que está deshabilitado intencionalmente, por lo que probablemente sea una mala idea :-) - Kyle Brandt♦
Reemplazar el término ALL con un nombre de usuario para permitir que solo un sudoer pueda ejecutarse sin ingresar una contraseña. - hdave


Necesitaba insertar esa linea AL FINAL de / etc / sudoers: ALL ALL = NOPASSWD: <filename> Al parecer, una tarde. %admin ALL=(ALL) ALL la anulación requiere una contraseña para los usuarios administradores.

No hay ningún problema de seguridad que permita que un script se ejecute como root siempre que el script realice una acción permitida, inofensiva y bien determinada y, si los valores de cualquier parámetro no pueden hacer que el script se comporte mal.

Pero hay un gotcha ...

Siempre use rutas completas en los nombres de comandos y archivos. Si escribes algo asi echo Hello world! en myrootscript, alguien podría escribir un ~/bin/echo script y myrootscript Ejecutaría como raíz lo que sea que esté en ella.

/bin/echo "Hoping this will keep you safe" :-)


3
2018-04-19 09:37



si es posible que un usuario no root en la máquina edite ese script, es posible que ese usuario se haga cargo de la máquina. Si ese mismo usuario tiene una contraseña débil, nada evitará que su máquina quede totalmente comprometida. - hdave


Por defecto, los miembros de la wheel grupo tiene permitido sudo cualquier comando como root. Probablemente es así como estás usando sudo hasta la fecha.

Para permitir a otro usuario necesitará crear un sudoers regla. Por ejemplo:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

Permitirá al usuario mickey.mouse para ejecutar el comando /usr/local/bin/test.sh como root sin requerir una solicitud de contraseña adicional.

Deberias leer este documento para más información.


2
2017-10-18 09:53



Debian / Ubuntu usa el grupo de administración en lugar de la rueda. Posiblemente sea un nombre un poco más preciso. - David Pashley
Llámame anticuado, pero ..;) - Dan Carley
pasado de moda: P - David Pashley


Utilizar chmod +s <filename> Para ver el suid poco. Esto significa que cuando se ejecuta el archivo, se ejecuta con los permisos del propietario del archivo (por lo tanto, colóquelo en la raíz para que se ejecute así).

Sin embargo, esto puede ser MUY peligroso con algo como los scripts de bash, ya que un usuario encuentra una manera de cambiarlo, puede obtener fácilmente un shell raíz. Asegúrese de que nadie pueda escribirlo excepto root.


0
2017-10-18 09:51





Otra alternativa: puede hacer un pequeño setuid C envoltorio alrededor de ese script que

  • comprueba cualquier limitación que puedas quiere hacer cumplir (lista de usuarios, tiempo, carga del sistema, ...)
  • Ejecución de registros / auditorías si se desea.
  • los ejecutivos del guión

Algo así como tu propio subconjunto de las múltiples capacidades de sudo.


0
2018-04-19 12:07