Un script de muestra puede ser el siguiente:
#!/bin/bash
sudo su
ls /root
Cuando se utiliza ./test.shcomo usuario normal, en lugar de ejecutar lscomo superusuario y salir, cambia a root; y cuando me desconecto, se ejecuta ls /rootcomo el usuario normal.
¿Alguien puede decirme sobre el mecanismo al respecto?

sudo sume duelen los ojossudo -sembargo, ¿no puedes usar ?sudo suporque estoy más acostumbrado a las opcionessuque a las desudo. Conozco bastante bien las opciones de sudo, pero puedo escribir las su más rápido. Pero sí, supongo que eso significa que no sé sudo lo suficientemente bien.sudo -ies similar asu -mientrassudo -sfunciona comosu(sin el tablero)Respuestas:
Los comandos en un script se ejecutan uno por uno, independientemente. El Script en sí mismo como el padre de todos los comandos en el script, es otro proceso independiente y el comando su no lo cambia y no puede cambiarlo a root: el comando su crea un nuevo proceso con privilegios de root.
Una vez que se completa el comando su, el proceso padre, que todavía se ejecuta como el mismo usuario, ejecutará el resto del script.
Lo que quieres hacer es escribir un script de envoltura. Los comandos privilegiados van al script principal, por ejemplo
~/main.shEl script de envoltorio llama al script principal con permisos de root, como este
Para iniciar este proceso, ejecuta el reiniciador, que a su vez inicia el script principal después de cambiar de usuario al usuario raíz.
Esta técnica de envoltura se puede usar para convertir el script en una envoltura a su alrededor. Básicamente, verifique si se está ejecutando como root, de lo contrario, use "su" para reiniciarse.
$ 0 es una forma práctica de hacer que un script se refiera a sí mismo, y el comando whoami puede decirnos quiénes somos (¿somos root?)
Entonces, el script principal con el contenedor incorporado se convierte en
Tenga en cuenta el uso de exec. Significa "reemplazar este programa por", que efectivamente finaliza su ejecución e inicia el nuevo programa, lanzado por su, con root, para ejecutarse desde la parte superior. La instancia de reemplazo es "root", por lo que no ejecuta el lado derecho de ||
fuente
Use lo siguiente en el script.
El código entre el bloque AQUÍ se ejecutará como root.
fuente
sudo suestá llamando a dos programas. Usesudo -s <<HEREDOCosu user <<HEREDOC... Estúpido límite de 5 minutos.Sin más argumentos
suse ejecutará el shell de inicio de sesión para root. Eso es lo que realmente hace la primera línea de tu script. Cuando salga, se cierra el shell de inicio de sesión, declaraciones de su y la escritura continúa la ejecución, que es con la segunda línea:ls /root. Creo que simplemente puedessudo ls /roothacer lo que quieras.fuente
ls, pero esto es solo una muestra. De hecho, necesito hacer muchas más cosas con privilegios de root :-) Así que prefiero la respuesta de @ Ankit.Una vez que inicie
sudo suun nuevo proceso con la eficaciauserid (euid=EUID)de super usuario bifurcado, por lo tanto, tenemos un nuevo bash ejecutándose en diferentes ID de proceso(pid=PID)asociados con el mismo terminal(tname=TTY).Explicación
Supongamos que después de disparar
ps -A | grep bashtiene21460 pts/2 00:00:00 bashcomo salida. Ahora, cuando ejecutas./test.shambos comandossudo suyls /rootte ponen en colaPID 21460. Después de la ejecución cuando vuelva arootpresionar como usuario activops -A | grep bash, notará que se ejecuta un nuevo bashPID say, 21570. Salir deroot bashmatará a bash recién bifurcadouser's bashy, por lo tanto, ejecutará el comando en spoolls /rootantes de liberar el mensaje.fuente