1 votes

Modification des permissions par rapport à l'exécution de script à la racine. Qu'est-ce qui est le mieux ?

Après chaque suspension, lorsque je réveille mon ordinateur portable, il ne se connecte à aucun réseau et je dois redémarrer NetworkManager. Alors, par paresse, j'ai écrit ceci script qui fonctionne parfaitement comme prévu.

J'ai utilisé un if pour vérifier que le script est toujours exécuté par l'utilisateur root :

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

else                                                                                                                                  
    netrestart                                                                                                                
fi

Et j'ai donné à ce script cette permission (étant root lors de l'exécution de cette commande) :

chmod u+x netrestart

Maintenant, lorsque j'exécute ce script en tant qu'utilisateur non root, cela donne ceci

bash: ./netrestart: Permission denied

Ensuite, en exécutant script avec sudo fonctionne bien

sudo ./netrestart

Je pense que cela rend inutile la vérification de la racine dans le script. J'ai maintenant deux questions :

  1. Dois-je supprimer cette partie du code ou continuer à l'utiliser dans le script ?

  2. Qu'est-ce qui est mieux et comment ?

    • Vérifier si l'utilisateur est root dans le script et donner les permissions d'exécution à tout le monde, c'est-à-dire, chmod 755 netrestart
    • En définissant les permissions nécessaires sur script lui-même et en ne vérifiant pas si l'utilisateur est root à l'intérieur de script, c'est-à-dire, chmod 711 netrestart

0voto

muru Points 180007

Je pense que votre script peut être condensé à :

#!/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 vérifiera l'accès à la racine pour vous et vous invitera à le faire si nécessaire. Les service ... status vous indiquera de manière plus fiable si NetworkManager a démarré normalement.

Vous pouvez accorder les permissions d'exécution sur ce script à tout le monde, et sudo se chargera de vérifier les autorisations.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X