Lors de l'écriture d'un script shell, dans lequel certaines commandes, mais pas toutes, nécessitent des privilèges de superutilisateur, dois-je
ajoutez sudo aux commandes qui nécessitent des privilèges de superutilisateur et exécutez le script shell sans sudo, ou
n'ajoutez pas sudo aux commandes qui nécessitent des privilèges de superutilisateur, mais exécutez le script shell avec sudo?
Dans le deuxième cas, je n'aurai besoin de fournir mon mot de passe qu'une seule fois, mais toutes les commandes du script seront exécutées avec des privilèges de superutilisateur, y compris les commandes qui n'en ont pas besoin.
Dans le premier cas, il se peut que je doive fournir mon mot de passe plusieurs fois pour différentes commandes sudo, tandis que les privilèges de superutilisateur ne sont accordés qu'aux commandes qui en ont besoin.
Pour des raisons de sécurité, la première solution est meilleure. Pour plus de commodité, la deuxième façon est meilleure.
J'ai pensé à adopter la première voie. Je dois donc faire face à l'inconvénient de fournir mes mots de passe à plusieurs commandes sudo dans le script shell.
-
Un script bien écrit détecterait s'il s'exécutait avec les bonnes autorisations et n'appelait pas du tout sudo, mais il y a beaucoup de mauvais scripts
Dois-je donc utiliser la deuxième façon? Si c'est le cas,
comment puis-je écrire "le script détecterait s'il s'exécutait avec les bonnes autorisations et n'appellerait pas du tout sudo"?
comment puis-je améliorer sa sécurité pour éviter le problème d'accorder des privilèges de superutilisateur à des commandes qui n'en ont pas besoin lors de l'exécution du script avec sudo?
- Cette approche simple aurait-elle le meilleur des deux: ajouter sudo aux commandes qui en ont seulement besoin, et exécuter le script avec ou sans sudo selon que je veux la commodité ou la sécurité? Cette approche a-t-elle un problème?
Merci.
sudo
avoir un cache d'informations d'identification par défaut. Est-ce désactivé sur votre plateforme?Réponses:
Pour résoudre votre premier problème:
Il y a une vérification simple et POSIX pour root:
Alternativement, dans Bash, plus de codeurs axés sur les performances pourraient vouloir utiliser:
Notez que j'ai intentionnellement enveloppé le code dans des fonctions à réutiliser.
Pour résoudre votre deuxième problème:
Vous ne pouvez pas faire grand-chose à ce sujet. Au moins, rien ne me vient à l'esprit. Si j'ai vu le script, je pourrais avoir des suggestions. Mais puisque vous ne l'avez pas inclus dans votre question ... Si vous exécutez le script entier avec
sudo
ou commeroot
, je ne vois aucun moyen de contrôler cela.Pour répondre au commentaire:
Dans mes scripts, je procède généralement avec cette dernière approche, mais cela ne signifie pas nécessairement que je vous la recommande. Parce que cela dépend de qui le script est destiné - pour
root
seulement; pour l'utilisateur principalement à l'exception d'avoir certains utilisateurs ayant dessudo
droits; vous devrez littéralement inclure votre script dans la question pour que je puisse répondre avec n'importe quelle valeur.la source
sudo -u "$SUDO_USER" command...
?sudo -u "$SUDO_USER" command
est censé signifier ici?Je pense que je peux répondre à cela.
Il n'y a aucune raison pour que vous ayez un problème ici, c'est pourquoi:
S'il n'y a qu'une seule commande qui doit être exécutée en tant que root, alors
run
votre programme en tant queroot
ousudo
parce quesudo
dans votre script est la route la plus longue. Avez-vous oublié que les programmeurs sont paresseux?Si vous avez besoin de nombreuses commandes
run
as,root
exécutez-la commeroot
ousudo
.Si d'autres utilisateurs ont besoin de
run
votre programme, configurezsudo
-les car ilssudo
sont très personnalisables et répondront à vos besoins.Voici un exemple avec
sudo
:Toujours utiliser
visudo
lors de l'édition du fichier sudoers .....sudo
est également idéal pour changer d'utilisateurs dans votre programme / script, voici une ligne d'un de mes scripts:https://www.cyberciti.biz/tips/shell-root-user-check-script.html
how-do-i-determine-if-a-shell-script-is-running-with-root-permissions
MODIFIER à la demande du gentleman @terdon:
Pensez à votre script de cette façon ....
Est-ce un script public (d'autres personnes que vous l'utiliserez) Que fait le script? Cela vous indique-t-il l'heure? Ou met-il à jour iptables sur 200 systèmes? Si seulement vous l'utilisez, est-ce lié au travail / professionnel ou est-ce pour un usage personnel?
Il vous suffit de savoir à l'avance en quoi consiste votre groupe d'utilisateurs, c'est tout.
Si c'est
written
pour donner ou vendre aux administrateurs, même alors, pourquoi ne devrait-on pas lescript
laisser fonctionner commeroot
?? Quel mal cela peut-il faire?Les vrais scripts / programmes s'exécutent souvent en tant qu'utilisateur privilégié et personne ne mentionne que ce n'est pas un problème, mais lorsque les programmeurs, principalement des novices comme moi, parlent de ces choses, alors c'est une véritable menace pour la sécurité ..... ce que le gars de votre message vous se référer à essaie de dire, mais non avec élégance, c'est que certaines personnes regardent le contrôle que vous avez sur le
system
et votre code .... définissez-vous les fichiers avec plus d'autorisations que vous n'utiliserez, avez-vous toutes les vérifications dans votre logique ou un programmeur talentueux va-t-il voir des dangers dans votre code en y regardant simplement?Si vous l'
code needs root
utilisezsudo
, et s'il y en a beaucoup, lancez-le commeroot.
...... ma réponse se termine ici oufla source