Modificación de permisos frente a ejecución de script de raíz. ¿Que es mejor?

Después de cada suspensión, cuando reactivo mi computadora portátil, nunca se conecta a ninguna red y tiene que reiniciar NetworkManager nuevamente. Entonces, por pereza escribí este script que funciona bien como se esperaba.

He utilizado un bloque if para comprobar que el usuario root siempre ejecuta el script:

 if [ $(id -u) -ne 0 ] then echo "ERROR : Root Priveleges Required" exit NOT_ROOT else netrestart fi 

Y le di a este script este permiso (siendo root al ejecutar este comando):

 chmod u+x netrestart 

Ahora, cuando ejecuto este script como usuario no root, muestra esto

 bash: ./netrestart: Permission denied 

Y luego, ejecutar el script con sudo funciona bien.

 sudo ./netrestart 

Creo que eso hace inútil la verificación de la raíz en el script. Ahora tengo 2 preguntas:

  1. ¿Debo eliminar esa parte del código o seguir utilizándolo en el script?

  2. ¿Qué es mejor y cómo?

    • Verificando si el usuario es root dentro del script y dando permisos de ejecución a todos, es decir, chmod 755 netrestart
    • Establecer los permisos necesarios necesarios en el propio script y no incluir la comprobación de si el usuario es root dentro del script, es decir, chmod 711 netrestart

Creo que tu guión puede condensarse a:

 #!/bin/bash NOT_ROOT=2 sudo service network-manager restart || exit $NOT_ROOT if service network-manager status then echo "Successfully Restarted NetworkManager" else echo "ERROR : Failed to work" exit 1 fi 

sudo verificará el acceso a la raíz para usted y le indicará si es necesario. La verificación de service ... status le indicará de manera más confiable si NetworkManager se inició normalmente.

Puede otorgar este permiso de ejecución en este script a todos, y sudo se hará cargo de las comprobaciones de permisos.