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.
¿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):
+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.
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.
sudo
correctamente para que no solicite la contraseña de ciertos programas / usuarios / grupos para evitar tales hacks sucios.Respuestas:
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.
fuente
sudo chmod -R 0100 myScriptFolder
:? ¿No resolvería eso los problemas de seguridad (siempre que nadie use su computadora como root excepto usted)?Puede configurar el
s
bit para su script para que no lo necesitesudo
y se ejecute como root (y no necesita escribir su contraseña de root en el script):fuente
+s
es el bit setuid.+t
es la parte pegajosa.echo -e "YOURPASSWORD\n" | sudo -S yourcommand
fuente
echo -e "YOURPASSWORD\n" | sudo -S "run -x"
. Dicesudo: run -x: command not found
. ¿Alguna idea de como solucionar esto?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.
fuente
# 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
fuente