#1 Le 27/10/2009, à 12:27
- Fenouille84
[Résolu] SUDO - Protéger l'exécution d'un script
Bonjour à tous.
Je me suis créé un script de maintenance, et j'aimerais protéger son exécution.
L'idée serait :
* Au lancement du script, demande le mot de passe root.
* Si le mdp est correct, exécuter la suite du script.
* Si le mdp est incorrect (redemander 1 fois) => arrêt du script.
Pour l'instant, j'ai testé un simple :
#!/bin/bash
# Version Console 2.0
sudo clear
suite du script
...
...
Donc il me demande bien le mdp, 3 fois. Mais si au bout des 3 fois le mdp est toujours incorrect, il continue quand même d'exécuter le script Le sudo devient alors inutile
Vous avez une idée ? Comment pourrais-je résoudre ce petit soucis ?
Merci pour vos idées
Dernière modification par Fenouille84 (Le 05/11/2009, à 18:54)
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#2 Le 27/10/2009, à 12:39
- Qid
Re : [Résolu] SUDO - Protéger l'exécution d'un script
eh bien il faut faire une condition à la "if fi" non ?
(j'en connais pas beaucoups plus à ce sujet)
"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil
Hors ligne
#3 Le 27/10/2009, à 12:43
- didgant
Re : [Résolu] SUDO - Protéger l'exécution d'un script
il ne faut pas mettre de sudo dans le script lui même mais lancer le script avec sudo.
$ sudo tonscript.sh
puis rajouter un test au début du script, comme par exemple :
if [ $(whoami) != 'root' ]; then
echo -e "\nVous devez etre super-utilisateur pour executer $0"
exit 1;
fi
ce test vérifié quel est l'utilisateur que lance le script (en utilisant sudo c'est root ! ), puis si ce n'est pas root, il indique la phrase : Vous ...... et arrête l'exécution de celui-ci !
voilou
Hors ligne
#4 Le 27/10/2009, à 12:59
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
il ne faut pas mettre de sudo dans le script lui même mais lancer le script avec sudo.
$ sudo tonscript.sh
puis rajouter un test au début du script
Le seul souci, c'est qu'il faut taper un truc du genre
cd /répertoire/du/script
sudo ./script
Or, j'ai modifier mon PATH pour n'avoir à taper que le nom du script.
Une solution ?
Dernière modification par Fenouille84 (Le 27/10/2009, à 13:04)
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#5 Le 27/10/2009, à 13:02
- Qid
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Or, on peut toujours lancer le script sans les droits root.
sauf si on le chmod comme il faut
"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil
Hors ligne
#6 Le 27/10/2009, à 13:06
- didgant
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Or, on peut toujours lancer le script sans les droits root.
t'as essayer en rajoutant le test comme indiqué si-dessus ?
le script se lance mais comme l'utilisateur qui lance le script n'est pas root, du coup le test fait en sorte de quitter le script !!!
Dernière modification par didgant (Le 27/10/2009, à 13:12)
Hors ligne
#7 Le 27/10/2009, à 13:09
- didgant
Re : [Résolu] SUDO - Protéger l'exécution d'un script
cd /répertoire/du/script sudo ./script
Or, j'ai modifier mon PATH pour n'avoir à taper que le nom du script.
Une solution ?
si ton répertoire qui contient ton script a été ajouté dans ton PATH
il ne faut pas lancer le script en faisant :
sudo ./script
mais
sudo script
Dernière modification par didgant (Le 27/10/2009, à 13:10)
Hors ligne
#8 Le 27/10/2009, à 14:08
- jofab
Re : [Résolu] SUDO - Protéger l'exécution d'un script
il faut que le script appartienne à root et non à l'utilisateur (sinon l'utilisateur peut toujours editer le script et virer le test...)
ensuite il faut fixer les droits d'execution (et de lecture/ecriture) pour root seul...
Seulement à ce niveau, lorsque l'on veut l'executer, il faudra faire appel à sudo si on n'est pas root...
Hors ligne
#9 Le 27/10/2009, à 14:14
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
C'est bon j'ai finalement résolu mon problème. Voilà :
#!/bin/bash
# Version 1.0
# Boucle assurant l'exécution par root.
clear
US=`sudo whoami`
if [ "$US" = 'root' ]
then
echo "Vous êtes root."
else
echo "Vous n'êtes pas root."
exit 1
fi
exit 0
C'est tout simple, mais sa fonctionne. Maintenant, à vous de l'adapter dans votre cas et de le perfectionner si vous voulez encore plus sécurité (réponse de Jofab).
Merci de m'avoir mis sur la piste
EDIT : version améliorée de la boucle, à placer en début de script.
#!/bin/bash
# Script 1.0
# Ce script permet de ...
# Boucle SUDO
sudo -k
clear
echo "### Droits administrateur nécessaires pour l'exécution ###"
echo "------------------------------------------------------------"
echo
US=`sudo whoami`
if [ "$US" = 'root' ]
then
echo
echo "### Droits administrateur obtenus - Exécution accordée ###"
echo "------------------------------------------------------------"
echo ; echo
else
echo
echo "### Droits administrateur erronés - Exécution refusée ###"
echo "-----------------------------------------------------------"
echo
exit 1
fi
clear
# Insérer ci-dessous la suite du script
...
...
Dernière modification par Fenouille84 (Le 27/10/2009, à 15:01)
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#10 Le 29/10/2009, à 21:54
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Fenouille84 a écrit :Or, on peut toujours lancer le script sans les droits root.
sauf si on le chmod comme il faut
D'ailleurs j'ai un petit soucis avec les droits...
Je voudrais que le fichier ne soit ni lisible, ni modifiable, mais que exécutable par l'utilisateur.
Mais je n'ai pas réussi, si le fichier reste exécutable, alors on peut l'ouvrir et le lire
Je pense avoir essayé toutes les combinaisons possibles :root/$USER et r/x/w dans tous les sens, mais rien
Quelqu'un aurait une idée svp ??
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#11 Le 29/10/2009, à 22:02
- gren
Re : [Résolu] SUDO - Protéger l'exécution d'un script
j'ai fais quelques tests et r et x sont visiblement le minimum requis pour exécuter un script bash de la manière dont tu le fais.
Par contre ce que tu peux faire c'est lancer ton script en le précédent de bash.
Exemple :
chmod 000 ./script
sudo bash ./script
Mais je vois pas bien l'intérêt de faire ca.. Etant root tu peux tout faire, donc tu ne pourras jamais empécher la modification / lecture.
Dernière modification par gren (Le 29/10/2009, à 22:02)
Hors ligne
#12 Le 29/10/2009, à 22:05
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Je voudrais que si $USER != de root alors on ne puisse ni lire ni modifier le fichier, mais simplement l'exécuter.
Mais comme tu dis, sa ne me semble pas possible, car pour exécuter un script $USER doit pouvoir le lire (et donc l'ouvrir !!)
Je me trompe ?
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#13 Le 29/10/2009, à 22:15
- n3o51
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Bonsoir par rapport a ta question je ne sais pas trop car je sais quand
-rw-rw-- Le propriétaire peut lire et écrire, les autres ne peuvent ni lire ni écrire.
mais je ne sais pas si tu le rend execuable ensuite cela va changer quelque chose
Par contre je pense que si tu met le script dans un dossier avec les droits nécessaires a celui-ci pour qu'il ne soit que lisible et modifiable par root alors tu pourras peut-etre arriver a ce que tu cherche
Welcome to the real world
________________________________
Hors ligne
#14 Le 29/10/2009, à 22:19
- gren
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Je voudrais que si $USER != de root alors on ne puisse ni lire ni modifier le fichier, mais simplement l'exécuter.
Ce n'est pas contradictoire avec ton premier objectif ?
Car si user != root, il ne peux pas lancer le script qui requière justement d'être root.
Si tu veux un script qui n'est visible QUE par root, tu peux le chown en root.
Après je pense pas qu'il soit possible d'exécuter sans lire, je vois mal comment bash pourrait s'en sortir pour exécuter le script sans avoir le droit de le lire.
Par contre ce que tu peux faire c'est créer des dossiers dont il est impossible de lister leur contenu.
mkdir dir
chmod 111 dir # +x pour tous
ls dir # message d'erreur
./dir/monscript # marche si on a le droit d'exécution sur le fichier monscript
Dernière modification par gren (Le 29/10/2009, à 22:24)
Hors ligne
#15 Le 29/10/2009, à 22:26
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
En y réfléchissant bien, je n'ai pas vraiment besoin de faire tout sa !!
je passe mon post en [résolu].
Merci pour vos réponses
Edit : pas mal le coup du dossier !! seul souci qui me gène : le petit cadenas mis automatiquement !!
Dernière modification par Fenouille84 (Le 29/10/2009, à 22:33)
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#16 Le 29/10/2009, à 22:59
- Qid
Re : [Résolu] SUDO - Protéger l'exécution d'un script
@ Fenouille84 > si on veut rester logique c'est normal que pour executer on puisse lire
eh oui ... on execute pas un code à l'aveugle donc x et r sont effectivement forcement liés
"GNU/Linux c'est que du bon mais M$ Windows ce n'est pas si mal"
Référent technique Ubuntu d'un Groupe d'Utilisateur du Libre
plus d'info sur mon profil
Hors ligne
#17 Le 29/10/2009, à 23:04
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
@ Fenouille84 > si on veut rester logique c'est normal que pour executer on puisse lire
eh oui ... on execute pas un code à l'aveugle donc x et r sont effectivement forcement liés
oui je m'en suis rendu compte !!
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#18 Le 01/11/2009, à 15:20
- Ph3nix_
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Bonjour à tous.
Je me suis créé un script de maintenance, et j'aimerais protéger son exécution.
L'idée serait :
* Au lancement du script, demande le mot de passe root.
* Si le mdp est correct, exécuter la suite du script.
* Si le mdp est incorrect (redemander 1 fois) => arrêt du script.Pour l'instant, j'ai testé un simple :
#!/bin/bash # Version Console 2.0 sudo clear suite du script ... ...
Donc il me demande bien le mdp, 3 fois. Mais si au bout des 3 fois le mdp est toujours incorrect, il continue quand même d'exécuter le script Le sudo devient alors inutile
Vous avez une idée ? Comment pourrais-je résoudre ce petit soucis ?
Merci pour vos idées
Pourquoi faire compliquer:
Il suffit juste que tu quittes le programme si le code retour de sudo est 1 (si 3 fois d'affilé le mot de passe est mauvais)
#!/bin/bash
# Version Console 2.0
sudo clear || exit 1
suite du script
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#19 Le 03/11/2009, à 13:38
- didgant
Re : [Résolu] SUDO - Protéger l'exécution d'un script
ou bien si tu veux vraiment que tes utilisateur ne puisse voir le contenu de ton script, il existe Script Shell Compiler, shc qui n'est pas dispo dans les dépots ubuntu mais debian, cela te génère un fichier binaire. Impossible de décrypter celui-ci pour l'utilisateur lambda !
Dernière modification par didgant (Le 03/11/2009, à 13:38)
Hors ligne
#20 Le 03/11/2009, à 14:14
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
ou bien si tu veux vraiment que tes utilisateur ne puisse voir le contenu de ton script, il existe Script Shell Compiler, shc qui n'est pas dispo dans les dépots ubuntu mais debian, cela te génère un fichier binaire. Impossible de décrypter celui-ci pour l'utilisateur lambda !
mais qui reste exécutable si je tape seulement le nom du script en console ?
@ Ph3nix_
Pas bête ta soluce !! pourquoi n'y ai-je pas pensé ??
Mais par contre j'ai besoin d'un peu de mise en page, donc embêtant de multiplier les ' || '
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#21 Le 03/11/2009, à 14:26
- jofab
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Je voudrais que si $USER != de root alors on ne puisse ni lire ni modifier le fichier, mais simplement l'exécuter.
Mais comme tu dis, sa ne me semble pas possible, car pour exécuter un script $USER doit pouvoir le lire (et donc l'ouvrir !!)Je me trompe ?
Je ne comprends pas pourquoi tout ce travail : la solution propre a applique c'est celle que je decris dans mon precedent message : le fichier a executer appartient a root et seul lui a les droits de lecture et d'execution.
N'importe quel utilisateur ne pourra ni le lire, ni l'executer sauf s'il passe par sudo.
De toutes facons, si le ficher appartient a un autre utilisateur, tu peux lui interdire ce que tu veux, il aura toujours le droit de modifier les autorisations d'acces et donc de mettre ce qu'il veux...
Ton test de USER!=root, peut donc etre aisement supprimer et ne sert à rien...
Hors ligne
#22 Le 03/11/2009, à 14:32
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Je ne comprends pas pourquoi tout ce travail : la solution propre a applique c'est celle que je decris dans mon precedent message : le fichier a executer appartient a root et seul lui a les droits de lecture et d'execution.
N'importe quel utilisateur ne pourra ni le lire, ni l'executer sauf s'il passe par sudo.
Oui mais le problème c'est que j'exécute mes scripts en tapant simplement leurs noms dans la console (modification du $PATH). Donc si je passe par sudo sa ne fonctionne pas
En exécutant un script nommé "maintenance", sa me fait un truc du genre :
sudo: maintenance: command not found
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#23 Le 03/11/2009, à 21:45
- gren
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Je suppose que tu modifies le path dans ton .bashrc ?
Déplace la modification de ce path dans /etc/bash.bashrc et ca devrait fonctionner.
Hors ligne
#24 Le 04/11/2009, à 19:19
- Fenouille84
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Je suppose que tu modifies le path dans ton .bashrc ?
Déplace la modification de ce path dans /etc/bash.bashrc et ca devrait fonctionner.
Non !!
J'ai justement modifié mon path dans /etc/bash.bashrc
Dernière modification par Fenouille84 (Le 04/11/2009, à 19:20)
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#25 Le 04/11/2009, à 19:44
- Totor
Re : [Résolu] SUDO - Protéger l'exécution d'un script
Oui mais le problème c'est que j'exécute mes scripts en tapant simplement leurs noms dans la console (modification du $PATH). Donc si je passe par sudo sa ne fonctionne pas
Solution la plus simple : tu te crées un alias qui lance ta commande en sudo (et tu y mets le chemin complet, ce n'est pas génant !)
EDIT :
ou bien tu mets le script dans l'un des dossiers suivant : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
puisqu'il a vocation d'être utilisé par root ou tout autre utilisateur ...
pourquoi chercher midi à quatorze heure !
Dernière modification par Totor (Le 04/11/2009, à 19:46)
-- Lucid Lynx --
Hors ligne