Utilice sudo con contraseña como parámetro [cerrado]

83

Me gustaría ejecutar sudo con mi contraseña como parámetro para poder usarlo para un script. Lo intenté

sudo -S mypassword execute_command

pero sin ningún éxito. ¿Alguna sugerencia?

ccman
fuente
2
solo debe verificar si su script es ejecutado por "root". Es malo hacer eco de la contraseña, se encontrará en el historial ...
kbdjockey
4
Es mucho mejor configurar sudocorrectamente para que no solicite la contraseña de ciertos programas / usuarios / grupos para evitar tales hacks sucios.
precipitarse

Respuestas:

183

El interruptor -S hace que sudo lea la contraseña de STDIN. Esto significa que puedes hacer

echo mypassword | sudo -S command

para pasar la contraseña a sudo

Sin embargo, las sugerencias de otros que no implican pasar la contraseña como parte de un comando, como verificar si el usuario es root, probablemente sean ideas mucho mejores por razones de seguridad.

piedrasam92
fuente
eso funcionó, muchas muchas gracias !!
normalUser
salvó mi día, muchas gracias !!!
AdrianES
¿Qué tal si lo coloca en una carpeta dedicada y le otorga permisos de solo ejecución a él y a la carpeta sudo chmod -R 0100 myScriptFolder:? ¿No resolvería eso los problemas de seguridad (siempre que nadie use su computadora como root excepto usted)?
Brōtsyorfuzthrāx
¿O pueden los piratas informáticos de fuera de mi red local ver de alguna manera el texto del script mientras se ejecuta, bajo ciertas circunstancias?
Brōtsyorfuzthrāx
¡Esto funcionó como un campeón para mí en mi caja OSX! ¡Muchas gracias por compartir la solución!
Wulf
51

Puede configurar el sbit para su script para que no lo necesite sudoy se ejecute como root (y no necesita escribir su contraseña de root en el script):

sudo chmod +s myscript
perreal
fuente
+1. Este es mucho mejor (y más seguro) que los otros métodos.
Burkhard
1
un poco pegajoso es una mala práctica, ¿no?
kbdjockey
@kbdjockey - +ses el bit setuid. +tes la parte pegajosa.
Robᵩ
@Rob - gracias por aclarar
kbdjockey
4
Tenga en cuenta que la mayoría de los sistemas operativos ignoran este indicador para los archivos de script interpretados. Aunque esto funciona muy bien en binarios.
Magnar
26
echo -e "YOURPASSWORD\n" | sudo -S yourcommand
matteomattei
fuente
Esto no funciona cuando tengo un argumento para mi comando. por ejemplo. echo -e "YOURPASSWORD\n" | sudo -S "run -x". Dice sudo: run -x: command not found. ¿Alguna idea de como solucionar esto?
Bee
1
@Bhathiya simplemente no use "comillas", por ejemplo: echo -e "YOURPASSWORD \ n" | sudo -S ls -l / root
matteomattei
Genial, gracias ...
Bee
3

Una opción es usar la bandera -A para sudo. Esto ejecuta un programa para solicitar la contraseña. En lugar de preguntar, podría tener un script que escupe la contraseña para que el programa pueda continuar.

Lucas Holt
fuente
-3
# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi
kbdjockey
fuente
4
Esto no responde a la pregunta de OP.
codeforester