Tengo un script bash de larga y larga ejecución donde un puñado de comandos deben ejecutarse como root, mientras que la mayoría de los comandos deben ejecutarse como el usuario normal antes de sudo, ya que estropearía la propiedad del archivo y demás.
Se me ocurrieron algunos métodos, pero cada uno de ellos tiene algunos problemas.
Método 1: usar sudo dentro del archivo
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Esto se vería bien, por la forma en que está escrito el código. sudo
está escrito antes de las pocas declaraciones que realmente deben ejecutarse por root, pero si el tiempo entre cada sudo
llamada es demasiado largo, sudo
nuevamente solicita una contraseña. Además, si la primera ejecución de sudo
falla, por ejemplo, debido a una contraseña no válida, el resto del script aún se ejecuta.
Método 2: usar sudo para llamar al archivo y luego volver al usuario original cuando sea necesario
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Esto también apesta, porque necesito agregar su username -c
delante de casi todas las líneas. También sudo
es posible encontrar el nombre de usuario original después , pero engorroso.
¿Hay una mejor manera?
Editar: solo publiqué pequeños guiones sin sentido aquí para mostrar de lo que estoy hablando. En la secuencia de comandos real, tengo algunas líneas que necesitan sudo (iniciar y detener servicios), algunas líneas donde no importa si hay sudo y muchas líneas que realmente necesitan ejecutarse sin sudo.
man sudo
? -v, --validate
'Actualice las credenciales almacenadas en caché del usuario, autenticándolo si es necesario. Para el complemento sudoers, esto extiende el tiempo de espera de sudo por otros 15 minutos de forma predeterminada, pero no ejecuta un comando. No todas las políticas de seguridad admiten credenciales almacenadas en caché '. (Si lo ejecuta con la frecuencia suficiente, la autenticación de sudo no debería
sudo
si necesita tener permisos elevados. Pero no tiene sentido cambiarsu username -c
a ejecutar unecho
. En otras palabras, esto suena como un [XY]. ¿Podría editar y explicar qué hará realmente su script y por qué siente que necesita cambiar de usuario con tanta frecuencia?