Pasar la contraseña de root de forma segura en un script de shell

Pasar la contraseña de root de forma segura en un script de shell

Siempre inicio mi computadora portátil GNU/Linux en modo consola. Pero a veces necesito abrir el modo GUI. siempre requiere ingresar la contraseña de root. Entonces escribí el siguiente script "gogui.sh" y lo puse en /usr/bin:

#!/bin/bash
echo "mypassword" | sudo service lightdm start

Es una idea realmente estúpida, como si alguien leyera el archivo y pudiera ver fácilmente mi contraseña.

¿Es la alternativa a esto?

Respuesta1

Pasar una contraseña a sudo en un script no tiene ningún sentido. En su lugar, agregue una regla sudoagregando el comando particular que desea ejecutar con la NOPASSWDetiqueta. Tenga cuidado de que la NOPASSWDregla específica del comando venga después de cualquier regla general.

saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start

Pero probablemente esto no sea útil de todos modos. lightdm startinicia un mensaje de inicio de sesión, pero solo lo necesita si desea permitir que otros usuarios inicien sesión gráficamente. No lo necesita si todo lo que desea es iniciar una sesión de GUI. En lugar de eso, llamastartxpara iniciar una sesión de GUI desde su sesión en modo texto. Esto no requiere ningún privilegio adicional.

Es posible que deba especificar explícitamente su administrador de ventanas o entorno de escritorio, ya que startxes posible que no seleccione el mismo tipo de sesión predeterminada que usa lightdm.

startx -- gnome-session

Respuesta2

Hay algunas opciones, y una de ellas es agregar el comando específico usando visudoel indicador NOPASSWD:

%wheel ALL=(ALL) NOPASSWD: /path/to/myscript

cat /path/to/myscript
#!/bin/bash
service lightdm start

Respuesta3

EDITAR
Acabo de notar que en tus comentarios mencionas Unity, por lo que parece que estás ejecutando Ubuntu. Mi respuesta original estaba orientada aSysVinitsistemas, pero comandos comotelinittodavía existe por compatibilidad y funcionará en distribuciones que utilicensistemadoAdvenedizo.

Modo SysV

    telinit 5

En los sistemas Systemd modernos,telinites redirigido asystemctl.

Manera del sistema

    systemctl isolate runlevel5.target

o

    systemctl isolate graphical.target

Respuesta original:
En distribuciones más antiguas que no son Systemd (RHEL/CentOS 6 y anteriores, por ejemplo), la forma más sencilla de cambiar del modo consola al GUI es con eltelinitdominio. En las distribuciones RHEL/Centos, por ejemplo, el modo multiusuario basado en texto se ejecuta en el nivel 3 y el modo GUI multiusuario se ejecuta en el nivel 5. El cambio del modo consola al modo GUI se haría así: De forma predeterminada, telinitrequiere root privilegios. Para ejecutar esto como un usuario normal sin contraseña, necesitará una sudoersentrada o establecer el indicador setuid en el ejecutable de telinit. Este sudométodo es el preferido, ya que puede restringirse solo a su cuenta.

Respuesta4

Ya que te refieres específicamente a sudo, limítate aLa respuesta de Gilles.. Sin embargo, dado que el título de su pregunta simplemente trataba sobre cómo obtener una contraseña para un programa, stdinrecientemente tuve una situación similar:

echo $(read -sp "Password: " password; echo $password) | yourcommand

Probablemente me ganaré algunos golpes por eso, pero funcionó.

Hablando de eso bash, probablemente también puedas usar

yourcommand <$(read -sp "Password: " password; echo $password)

información relacionada