Si se trata de un binario normal, puede configurarlo ejecutando
# chmod u+s /path/to/binary
Desafortunadamente, los scripts no se pueden configurar. (Bueno, puedes, pero se ignora). La razón de esto es que la primera línea del script le dice al sistema operativo en qué intérprete ejecutar el script. Por ejemplo, si tenía un script con:
#!/bin/bash
En realidad terminarías corriendo
/bin/bash /path/to/script
Obviamente, necesitaría que el intérprete sea setuid, lo que significaría que todos los scripts serían setuid. Esto seria malo.
Puede hacer esto con sudo poniendo lo siguiente en su archivo / etc / sudoers ejecutando visudo.
ALL ALL=NOPASSWD: /path/to/script
Y ahora cualquier usuario puede ejecutar
$ sudo /path/to/script
Esto les permite ejecutar el script sin escribir su contraseña.
Hay una alternativa que no requiere sudo en el comando, que requiere crear un pequeño binario setuidizado que ejecute su script, pero cada binario setuid adicional agrega otro posible problema de seguridad.
ALL
con un nombre de usuario para permitir que ese sudoer pueda ejecutarse sin ingresar una contraseña.Necesitaba insertar esa línea AL FINAL de / etc / sudoers:
ALL ALL = NOPASSWD: <filename>
Aparentemente, una%admin ALL=(ALL) ALL
anulación posterior requería 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 bien determinada, inofensiva y permitida y, si los valores de cualquier parámetro no pueden hacer que el script se comporte mal.
Pero hay un problema ...
Utilice siempre rutas completas en los nombres de comandos y archivos. Si escribe algo como
echo Hello world!
enmyrootscript
, alguien podría escribir un~/bin/echo script
ymyrootscript
ejecutaría como root lo que sea que esté en él./bin/echo "Hoping this will keep you safe"
:-)fuente
Por defecto, los miembros del
wheel
grupo tienen permiso parasudo
cualquier comando comoroot
. Probablemente así es como lo está usandosudo
hasta la fecha.Para permitir otro usuario, deberá crear una
sudoers
regla. Por ejemplo:Permitirá al usuario
mickey.mouse
ejecutar el comando/usr/local/bin/test.sh
como siroot
no requiriera una solicitud de contraseña adicional.Debe leer este documento para más información.
fuente
Usechmod +s <filename>
para ver el bit suid. Esto significa que cuando se ejecuta el archivo, se ejecuta con los permisos del propietario del archivo (por lo tanto, conózcalo en la raíz para que se ejecute de esa manera).Sin embargo, esto puede ser MUY peligroso con algo como un script de bash, porque un usuario encuentra la manera de cambiarlo, puede obtener fácilmente un shell raíz. Asegúrese de que nadie pueda escribirle, excepto root.Linux no le permite configurar los scripts, para ello tendría que compilarlo como un programa. En su lugar, puede usar el archivo sudoers (/ etc / sudoers) y agregar una línea como esta.
<username> ALL = NOPASSWD: /path/to/script
fuente
Otra alternativa: puede hacer un pequeño contenedor C setuid alrededor de ese script que
Algo así como tu propio subconjunto de las múltiples capacidades de
sudo
.fuente