Un script de muestra puede ser el siguiente:
#!/bin/bash
sudo su
ls /root
Cuando se utiliza ./test.sh
como usuario normal, en lugar de ejecutar ls
como superusuario y salir, cambia a root; y cuando me desconecto, se ejecuta ls /root
como el usuario normal.
¿Alguien puede decirme sobre el mecanismo al respecto?
sudo su
me duelen los ojossudo -s
embargo, ¿no puedes usar ?sudo su
porque estoy más acostumbrado a las opcionessu
que 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 -i
es similar asu -
mientrassudo -s
funciona 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.sh
El 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 su
está llamando a dos programas. Usesudo -s <<HEREDOC
osu user <<HEREDOC
... Estúpido límite de 5 minutos.Sin más argumentos
su
se 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 /root
hacer 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 su
un 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 bash
tiene21460 pts/2 00:00:00 bash
como salida. Ahora, cuando ejecutas./test.sh
ambos comandossudo su
yls /root
te ponen en colaPID 21460
. Después de la ejecución cuando vuelva aroot
presionar como usuario activops -A | grep bash
, notará que se ejecuta un nuevo bashPID say, 21570
. Salir deroot bash
matará a bash recién bifurcadouser's bash
y, por lo tanto, ejecutará el comando en spoolls /root
antes de liberar el mensaje.fuente