En los días ocupados, me gustaría correr
$ ./configure && make && sudo make install && halt
en la noche y acostarse, esperando que la aplicación se instale automáticamente. Pero lo que veo al día siguiente es la pantalla donde sudo me pide la contraseña. Entonces, ¿cómo podría ejecutar sudo con contraseña en una línea de comando, o hay algún otro método para hacer esto?
halt
correr como root.sudo
tiene un tiempo de espera de 15 minutos? ¿No podría ejecutar, digamossudo ls
o algo similar, ingresar su contraseña y luego ejecutar el comando anterior, con lossudo
privilegios aún activos? (No puedo probar esto en este momento, de lo contrario publicaría esto como respuesta.)sudo
es configurable. Las personas conscientes de la seguridad (también paranoicas, como yo) lo pusieron a cero ... :-)Respuestas:
Sí, use el
-S
interruptor que lee la contraseña de STDIN:Entonces, para su caso, se vería así:
por supuesto, reemplace
<password>
con su contraseña.fuente
Puede reemplazar su línea de comando con esto:
$sudo su
$./configure && make && make install && halt
Se le pedirá su contraseña de inmediato, luego el resto de los comandos se ejecutarán como superusuario.
fuente
sudo sh -c "./configure && make && make install && halt"
Varias de las otras soluciones tienen la desventaja de que se ejecutan innecesariamente
./configure
ymake
como root.Esto es un poco complicado, pero debería funcionar:
Tenga en cuenta el uso de comillas dobles para permitir
$USER
que el shell (no root) lo expanda.También podría agregar un
sleep 60
antes delhalt
comando. A veces he hecho cosas como esta, esperando que el comando se ejecute durante mucho tiempo, pero algo sale mal y termina de inmediato; elsleep
me permite matar a la orden antes de que el sistema se apaga. O puede usarshutdown
con un argumento de tiempo.fuente
También puede configurar sudo con
visudo
para permitirle al usuario usar make como sudo sin contraseña.fuente
Establezca HISTIGNORE en " sudo -S "
Luego pase su contraseña de forma segura a sudo:
"HISTIGNORE" significa no guardar este comando en el historial. Ese es el historial en memoria o el archivo "~ / .bash_history".
Por ejemplo, lo siguiente canalizará de forma segura su contraseña al comando sudo, sin retener un historial de su contraseña.
"-S", significa usar stdin para la contraseña,
"-K" significa ignorar las credenciales almacenadas en caché para obligar a sudo a preguntar siempre. Esto es para un comportamiento consistente.
La desventaja del método anterior es que si desea ver los comandos que ejecutó en el historial más adelante, no estarán allí. Otro método es actualizar el caché de credenciales de autenticación de sudo (el valor predeterminado está habilitado con 5 minutos de tiempo de espera), luego ejecutar el sudo por separado. Pero la desventaja de esto es que deberá tener en cuenta el caché de 5 minutos.
Por ejemplo:
Tenga en cuenta que ejecuté un sudo antes de cada comando para asegurarme de que el caché de sudo esté actualizado, ya que el valor predeterminado es 5 minutos. Sí, whoami no debería tomar 5 minutos, pero me imagino que podría ejecutarlo antes de cada comando para mantener la coherencia. También podría poner "export HISTIGNORE = ' sudo -S'"en su archivo ~ / .bashrc, luego cárguelo con". ~ / .bashrc "o cierre sesión y luego inicie sesión. Sin embargo, estoy pensando en usar esto para fines de script, así que lo mantendré en la parte superior de todos mis scripts para las mejores prácticas de seguridad. Configuración de" echo "" | sudo -S -v "a una variable en su lugar también podría ser una buena idea, luego simplemente ejecute la variable antes de cada comando que necesite privilegios de root, vea el comentario de Janar. El comentario de" John T "también debe incluir el parámetro" -k " , como si ejecuta "sudo -S" sin "-k" y la caché de autenticación de sudo ya tiene sus credenciales (y todavía es válida, la caché de autenticación de sudo predeterminada es de 5 minutos), entonces bash ejecutará su contraseña como un comando, que es malo.
fuente
Tenga en cuenta que he descubierto que el método no funciona en una versión anterior de sudo, específicamente "Sudo versión 1.6.7p5":
Donde, como este método funciona en versiones anteriores y nuevas, sudo:
fuente
También puedes hacer esto:
fuente
Si desea tener más cuidado, puede hacer un script, cambiar los permisos del archivo para que solo la raíz pueda leer y editar y luego simplemente ejecutarlo.
Ejemplo:
1) Crear un archivo:
2) Pegue esto y guarde:
3) Hazlo ejecutable:
4) Cambie los permisos del archivo para que solo la raíz pueda leerlo y editarlo:
5) Ejecutar:
Disfruta ;-)
fuente
Configurar sudo de esa manera es peligroso si alguien ve el hecho de que sudo no requiere contraseña en su cuenta. A menos que sepa lo que está haciendo, no haga eso. He tenido que suceder en mi programa local de A + Training con mi computadora experimental demasiadas veces ... -_-
Sin embargo, lo que dijo John T. suena bien, excepto que todavía existe el riesgo de encontrar la contraseña en el historial de shell. Lo que dijo CarlF suena mejor, pero si falla un comando, la computadora seguirá ejecutándose con privilegios de superusuario.
fuente
Personalmente, hago lo mismo que John T respondió el 9 de noviembre de 2009 a las 2:47, también he mejorado el mío de acuerdo con la orientación de su respuesta, gracias.
La diferencia es que tiendo a usar variables, algo como:
De esa manera puedo usar fácilmente la variable minera en lugar de sudo,
Eso es bastante útil con algunos scripts más largos. Principalmente hago uso de estos para computadoras personales de otros, que tengo que mantener.
También recomiendo prestar atención a:
fuente
El problema esta resuelto. Por ejemplo, para el usuario root:
fuente