IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Déterminer la nature d'une commande au sein d'un script


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de Projet MOE
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet MOE
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Par défaut Déterminer la nature d'une commande au sein d'un script
    Bonjour à tous,

    Au sein d'un script shell (que je dois réaliser dans un cadre pédagogique), j'ai besoin, avant d'en lancer l'exécution en boucle sur des noms de fichier, de déterminer la nature d'une commande qui a été passée en paramètre du script.
    Cette commande, avec ses éventuelles paramètres, doit permettre de modifier les noms de fichier (par exemple 'tr a-z A-Z', pour mettre le noms en majuscule).
    Or, pour sécuriser a minima mon script, je souhaiterais prendre quelque précautions sur cette commande.

    J'ai pu tester si cette commande existait grâce à «which».
    Grace à «type», je peux savoir s'il s'agit d'une primitive du shell, d'une commande externe etc.
    Mais à ce stade, je ne sais pas comment faire pour m'assurer que cette commande va bien uniquement modifier des chaines de caractère (et donc réellement faire une modification de noms de fichier) et ne pas agir sur les fichiers (j'ai fait un test en lui passant 'rm' en paramètre, et aie ça marche ...)


    Je vous remercie d'avance pour toute aide que vous pourriez m'apporter.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Pour ma part, je ne connais pas de solution à ce problème, à part en créant à l'avance une liste de catégorie des commandes...

    Sinon, pourrait-on avoir plus de précisions sur le besoin d'un tel script ?
    Tu dis que c'est dans un but pédagogique, donc se serait pour que les commandes "dangereuses" ne soit pas executés ?
    Et si, on s'arrangeait pour qu'elles ne soit pas vu et accessible sans modifier les droits de ces commandes, mais en créant un type d'utilisateur qui ne peut avoir acces qu'à des commandes bien déterminées ?

  3. #3
    Membre averti
    Homme Profil pro
    Chef de Projet MOE
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet MOE
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Par défaut
    Oui, c'est dans un cadre pédagogique : je suis une formation professionnelle et ce script et un sorte de mini-projet à rendre. Le but du formateur est de nous montrer comment réaliser quelque chose de véritablement propre, en tenant compte des erreurs éventuelles d'utilisation, des interruptions éventuelles, cas particulier etc.

    Je me suis aussi posé la question d'éventuellement créer une liste des commandes autorisées. Cette méthode à ses avantages mais peu manquer de souplesse et être moyennement portable dans les différents linux et unix. J'hésite.

    Citation Envoyé par disedorgue Voir le message
    Et si, on s'arrangeait pour qu'elles ne soit pas vu et accessible sans modifier les droits de ces commandes, mais en créant un type d'utilisateur qui ne peut avoir acces qu'à des commandes bien déterminées ?
    Heu, je ne suis pas certain de comprendre, mais cela ne reviendrait-il pas à lister les commandes autorisées avec ce script ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Pour faire de l'exécution de commande de manière sécurisée, alors que la commande est quelconque, moi, je mettrais en place un nouvel utilisateur avec des droits très limité et je me placerai dans un dossier /tmp/sandbox, avec aucun droit dessus.
    Avec un sudo / su cela marchera, car la commande en question sera exécuté en tant que cet utilisateur limité qui n'aura accès qu'au strict minimum. De plus, on peut même lui limiter les commandes à un sous ensemble défini.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    As-tu essaye de jouer avec les droits ? Pour renommer un fichier, tu n'as pas besoin des droits d'ecriture, alors que pour le modifier si.

    Mais ca ne te permettra pas de savoir quel est le type de la commande passee.

    Ceci dit, je veux bien connaitre l'idee de ton prof, car je ne vois pas comment il pourra faire pour distinguer un mv d'un rm. D'autant plus que le mv ne fait pas la meme chose si le dossier de destination est sur la meme partition ou sur une autre : un mv au sein d'une meme partition "deplace" le fichier, alors qu'un mv entre 2 partitions copie le fichier puis supprime l'ancien (regardez l'inode, ca se voit bien).
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre averti
    Homme Profil pro
    Chef de Projet MOE
    Inscrit en
    Janvier 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chef de Projet MOE
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2009
    Messages : 22
    Par défaut
    Je ne pense avoir le droit de créer un nouvel utilisateur : je dois rendre un script et rien d'autre. Certes, on peut créer des utilisateurs via un script; mais le but est de créer une nouvelle commande. Dans ce contexte, ajouter un utilisateur me parait une modification excessive de l'environnement ... quoi qu'on peut le supprimer à l'issu ? Je ne suis pas certain de réussir à maîtriser la chose (j'imagine qu'il faudrait un nom d'utilisateur aléatoire par exemple). À voir.

    Pour mieux situer ce que je dois faire, le sujet se trouve à cette adresse :
    http://www.ensta-paristech.fr/~joire...IN405-2013.pdf
    Sachant qu'il nous a demandé de «blinder» au maximum ce script (en capturant entre autre les interruptions éventuelles de l'utilisateur).

    (je ne souhaite pas pour l'instant avoir une solution toute faite, ce ne serait pas intéressant)

    D'où le fait que je me pose la question de le manière de filtrer les commandes passées en argument, en essayant de n'être ni trop permissif, ni trop rigide.

    PS : en même temps, j'avais mal fait mon script et il ne fonctionnait pas avec l'exemple du prof. Maintenant, ce cas nominal fonctionne et rm provoque une erreur. C'est déjà mieux lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déterminer la nature exacte d'une ligne ambiguë
    Par Snack3r dans le forum Débuter
    Réponses: 2
    Dernier message: 15/10/2013, 01h25
  2. Impossible d'exécuter une commande avec su dans un script bash
    Par koshieDotFr dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 18/12/2012, 13h47
  3. Lancer une commande avec pipes depuis un script
    Par theclem35 dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 08/02/2012, 20h41
  4. Limiter la portée d'une commande \ifthenelse et d'un compteur au sein d'une boite
    Par Théodulf dans le forum Programmation (La)TeX avancée
    Réponses: 7
    Dernier message: 18/04/2011, 23h11
  5. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo