Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 yikes Le sudo devient alors inutile hmm

Vous avez une idée ? Comment pourrais-je résoudre ce petit soucis ?
Merci pour vos idées wink

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

didgant a écrit :

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

Fenouille84 a écrit :

Or, on peut toujours lancer le script sans les droits root.

sauf si on le chmod comme il faut wink


"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

Fenouille84 a écrit :

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

Fenouille84 a écrit :
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 wink

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

Qid a écrit :
Fenouille84 a écrit :

Or, on peut toujours lancer le script sans les droits root.

sauf si on le chmod comme il faut wink

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 hmm

Je pense avoir essayé toutes les combinaisons possibles :root/$USER et r/x/w dans tous les sens, mais rien sad

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

Fenouille84 a écrit :

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 !! tongue
je passe mon post en [résolu].

Merci pour vos réponses wink

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

Qid a écrit :

@ 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 !! hmm


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

Fenouille84 a écrit :

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 yikes Le sudo devient alors inutile hmm

Vous avez une idée ? Comment pourrais-je résoudre ce petit soucis ?
Merci pour vos idées wink

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

didgant a écrit :

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é ?? yikes
Mais par contre j'ai besoin d'un peu de mise en page, donc embêtant de multiplier les ' || ' hmm


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

Fenouille84 a écrit :

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

jofab a écrit :

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 sad

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

gren a écrit :

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  hmm

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

Fenouille84 a écrit :

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 sad

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