evitar que algunos comandos se ejecuten con privilegios de superusuario

evitar que algunos comandos se ejecuten con privilegios de superusuario

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 sudoen mi secuencia de comandos, decidí eliminar sudoantes 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 sudoantes, como mkdiry 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 mkdiro wgetcon privilegios de superusuario?

Respuesta1

Cuando usas sudo, inicias un nuevo shell como cualquier usuario al que le hayas indicado sudoque cambie (root, de forma predeterminada). Esto establecerá la SUDO_USERvariable 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 wgety chmodcualquier otro comando que desee ejecutar como usuario normal en el script y haga que se ejecuten sudo -u $SUDO_USERpara 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_USERvariable 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 chmodcomando 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'

información relacionada