Soy nuevo en esto. He escrito un script que consta de muchas líneas y comandos. Este es un archivo de instalación para obtener e instalar varios paquetes. Como resultado, necesito usar muchos comandos de instalación en mi script como este comando:
sudo apt install python2.7 python-pip
En un intento por evitar el uso de tantos sudo
en mi secuencia de comandos, decidí eliminar sudo
antes de cada comando y ejecutar la secuencia de comandos como sudo ./setup.sh
.
Funciona bien, pero el problema es que hay algunos comandos que realmente no son necesarios sudo
antes, como mkdir
y wget
...
Cuando ejecuto mi secuencia de comandos usando sudo ./setup.sh
, los directorios que se crean usando esta secuencia de comandos no se pueden eliminar, copiar o editar sin usar sudo
, sin embargo, quería que fueran accesibles para todos los usuarios. Por tanto, mi pregunta es que:
Al ejecutar un script con sudo (como sudo ./setup.sh
), ¿hay alguna forma de no ejecutar algunos de sus comandos internos como mkdir
o wget
con privilegios de superusuario?
Respuesta1
Cuando usas sudo
, inicias un nuevo shell como cualquier usuario al que le hayas indicado sudo
que cambie (root, de forma predeterminada). Esto establecerá la SUDO_USER
variable en el nombre de usuario de ese usuario:
$ cat foo.sh
#!/bin/bash
echo "SUDO_USER: $SUDO_USER"
Si ejecuto este script como yo, no obtengo nada ya que la variable no está configurada:
$ foo.sh
SUDO_USER:
Pero si lo ejecuto con sudo
, la variable se establece:
$ sudo foo.sh
SUDO_USER: terdon
Con esto en mente, puede simplemente ejecutar los comandos específicos que desea ejecutar como usuario normal, utilizando el nombre de usuario del usuario que inicia el script. Por lo tanto, cambie su wget
y chmod
cualquier otro comando que desee ejecutar como usuario normal en el script y haga que se ejecuten sudo -u $SUDO_USER
para que se ejecuten como usuario normal en lugar de root:
apt install python2.7 python-pip ## will run as root
sudo -u $SUDO_USER mkdir foo ## will run as $SUDO_USER
El uso de la SUDO_USER
variable garantiza que todos los directorios y archivos que cree serán propiedad del usuario que inició el script y no es necesario que le diga explícitamente a su script el nombre de ese usuario cada vez que lo ejecute.
Respuesta2
Para que todos los usuarios utilicen los directorios creados por mkdir, debe cambiar el permiso a MUNDO legible/escribible usando el comando chmod.
En el script, después de ejecutar mkdir
, use el siguiente comando:
chmod -R 755 «directory-name»
(Legible para todos, escribible solo por root)
o
chmod -R 777 «directory-name»
(Legible y también escribible por todos los usuarios del sistema)
Para wget
, use el chmod
comando después de la descarga.
O
Aún así, si desea ejecutar el comando como otro usuario, use el comando su:
su - «username» -c 'command to be executed'