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

C Discussion :

Definir les droits d'un programme


Sujet :

C

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut Definir les droits d'un programme
    bonjour,

    J'ai créé un programme c et il faudrait que je puisse vérifier les droits de l'utilisateur : apparemment ça se fait par makefile.
    Pourtant j'ai lu beaucoup d'articles/tutos sur les makefile et je n'ai rien trouvé concernant les droit :

    PLus clairement ce que je veux c'est créer un makefile qui créé le programme (ça j'ai réussi... avec votre aide déjà) mais aussi qui vérifie si l'utilisateur a les droit en écriture/lecture dessus (et sur /usr/local où les exécutables se situe si j'ai bien compris ?).
    Je sais le faire en passant par le shell mais par makefile non. De plus, ne se peut il pas non plus que l'utilisateur n'ai pas les droits pour le makefile ?

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    C'est l'utilisateur qui compilera le programme qui aura les droits dessus.

    Par contre, dans le dossier /usr/local, tu as les droits d'executions mais pour le reste il faut etre super utilisateur si je me souviens bien. Si tu n'as pas les droits de lecture sur un makefile, tu ne pourras effectivement pas creer d'executable en utilisant la commande make.

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    J'ai pas bien compris : en gros si tu compiles tu as forcément les droits dessus ?
    Pour le makefile comment peut on vérifier avant même de faire make all si on a les droits dessus ?

    En tout cas si je demande ça c'est parce que j'ai dans mon projet la consigne :
    "joindre un makefile pour automatiser la production de l'executable et l'installation du logiciel (et on verifiera par exemple si l'utilisateur a bien les droits en écriture sur usr/local)"

    Je comprend même pas exactement pourquoi il faut verifier les droits sur ce dossier là en fait...

  4. #4
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    en général le makefile propose une target install, qui utilise la commande install (man install pour plus d'info).
    Normalement ton makefile contient une variable PREFIX qui va indiquer la racine à partir de laquelle tu veux installer ton soft.
    Soit l'utilisateur possède suffisamment de droits et make install s'exécutera sans erreur, soit il ne les possède pas et make install échouera avec un message significatif dans la plupart des cas.
    C'est comme ça qu'on peut test facilement tester une install avec un make PREFIX=~/test install et que pour une installation système on lance un sudo make install.
    Conclusion, ne cherche pas à construire un script complexe de vérification des droits, utilise la commande install : les utilisateurs ont généralement l'habitude de ce mécanisme et savent gérer les erreurs s'il y en a (généralement une tape sur le front en lachant un «pfff encore oublié le sudo»)

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    Bonjour,

    Je n'ai pas tout compris, j'ai fait des recherches et tenté des trucs à l'aide de ce que j'ai trouvé sur internet mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSTALL = /usr/local/bin/install -c
    bindir = /home/bin
     
    all : monProg
     
    #tous les .o, creation de mon prog etc
     
    install: all
    	$(INSTALL) monProg $(bindir)
    Normalement de ce que j'ai compris je suis censé pouvoir voir quelque chose (je ne sais même pas quoi) dans "/usr/local/bin/install", or le dossier install n'existe pas. J'ai alors essayé de rajouter l'option "-d" (qui de ce que j'ai compris est censé créer les répertoires non existant), mais ça ne marche pas non plus.
    De plus, je pensais que mon programme serait lançable de n'importe où (grace à binDir qui est censé le mettre dans le "PATH" non?) mais il n'est lançable que à partir du dossier où j'ai fait le makefile.


    merci de votre aide!

  6. #6
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    alors, install est une commande. Une manière de savoir si elle est disponible et quel est son chemin est d'utiliser la commande install ainsi (je te donne le résultat sur ma machine) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > which install
    /usr/bin/install
    La commande me répond /usr/bin/install. Cela signifie que install est disponible et que cette commande se trouve dans /usr/bin.
    Si tu créais le makefile sur ma machine tu indiquerais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSTALL = /usr/bin/install -c
    Ensuite pour rendre un de tes exécutables disponible "system wide" est de le placer dans "/usr/bin" tout simplement car le répertoire "/usr/bin" est par défaut dans le PATH de tout utilisateur. Même si tou les users ont un accès en lecture à tout ce qui se trouve dans ce répertoire, seul un superutilisateur aura le droit d'y écrire = d'y installer de nouveau programmes. Si tu n'es pas autorisé à obtenir des privilèges suffisant tu ne pourras jamais y installer quoi que ce soit. Pour obtenir ces privilièges tu devra être autorisé à utiliser la commande sudo et lancer make en les demandant : sudo make install. Cette dernière commande signifie «exécute make install avec les privilèges d'un superutilisateur».

    Un dernier point, le plus simple pour tes premiers pas est d'installer dans /usr/bin, tu es certain qu'il se trouvera dans le PATH ce qui n'est pas le cas de /usr/local/bin (qui peut ne pas exister).
    Il est aussi pas mal de créer une taget make uninstall qui va simplement effacer ton programme de /usr/bin.

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    merci de ta réponse, avant d'essayer j'aimerais éclaircir un point : Normalement, n'importe qui qui essaie d'installer mon programme doit être en mesure de le faire, or là tu me dis de tester "which install" sur mon ordinateur uniquement non ?

  8. #8
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    C'est ce genre de petits problèmes qui ont fait émerger il y a un petit bail déjà des outils comme autoconf, automake, ...
    Si tu ne proposes qu'un makefile alors les utilisateurs pourront être amenés à le modifier ce qu'un utilisateur lambda ne sait pas faire.

    Oui le which install tu le lances sur ta machine pour identifier le chemin. Mais bon pour te simplifier la vie tu peux simplement utiliser cp pour copier ton exécutable dans le répertoire d'intallation.

    Autant il est important qu'un programme soit robuste aux erreurs utilisateurs, autant un makefile utilisé pour une installation sera en général lancé par un utilisateur qui sait ce qu'il fait et comment il doit le faire. Tout d'abord il s'attend à un fichier nommé README ou INSTALL qu'il va lire en premier pour conaitre certains détails d'installation. Il s'attend à un processus qui commence par une configuration (./configure ou modifications manuelles du makefile ou ...), suivie d'une phase de compilation (make), éventuellement d'une phase de test pour finir avec l'install qu'il effectuera d'office avec des privilèges superuser (sudo make install).

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    Je comprend pas bien ce que je dois faire (ni l'interet de faire le wich) : pourriez vous me donner un exemple typique de comment s'occuper de tous les problèmes d'installation ?
    En effet je suis censée aussi créer un fichier qui explique à l'utilisateur comment installer mon programme.

    En tout cas le terminal me dit "install operande fichier manquant" alors j'ai essayer d'ajouter les options mais ça ne marche pas mieux. Je mets le code mais de toute façon je ne comprend même pas ce que je fais donc ça doit être bourré de fautes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ./configure --prefix=/usr/local
    INSTALL = /usr/local/bin/install -c
    bindir = /usr/bin
     
    all : mon Prog
     
    [...]
     
    install -m=rwxrxrx $(INSTALL) monProg $(bindir)

  10. #10
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    bon, la ligne avec configure n'a rien a faire dans un makefile.
    configure est un script shell qui est soit créé à la main soit généré par un outil comme autoconf.

    Tu comprends la différence entre une commande shell et la syntaxe des makefile ?
    Tu comprends la différence entre privilèges d'un utilisateur et permission de fichiers ?

    Quel est ton objectif ?
    Créer une procédure d'installation complète un maximum error proof, ou juste proposer une installation basique ?

    Si tu te cantonnes à une installation basique (le plus simple) il te suffit de mentionner dans un fichier INSTALL ce que l'utilisateur doit faire :

    * lister les prérequis pour compiler ton programme (bibliothèques, compilo, ... avec les versions minimum au cas où)
    * décrire les étapes de configuration (comment modifier le makefile et pourquoi, quel fichiers de configurations sont à modifier/adapter)
    * comment créer l'exécutable, la doc, les pages man, etc ... => make
    * comment installer tout ça => sudo make install
    * comment désinstaller
    * éventuellement décrire les erreurs qui peuvent survenir, comment les résoudre

    Dans le fichier README tu fais la pub de ton programme et tu indiques que les étapes d'installation sont décrites dans le fichier INSTALL.

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    Le script avec ./config sert à quoi du coup ?
    Et bien je sais ce qu'est une commande shell, après le makefile je sais même pas "quel langage" c'est si je peux dire ça, je sais juste qu'il permet de pas avoir à reécrire soit même toutes les lignes de compilations.

    Non je ne comprend pas la différence entre privilège et autorisation je pensais que c'était la même chose

    Et bien tout ce que je veux c'est une installation basique, si j'arrive à le faire ça serait déjà pas mal!

    Ok donc si je comprend bien : je cherche à faire marcher l'installation sur mon PC, et j'écris juste dans le INSTALL toutes les manipulations que j'ai eu besoin de faire ?

    Si oui, il reste le fait que je n'arrive pas à l'installer sur mon propre ordinateur : c'est quoi l'opérande manquante dans mon "install" ? Je me doute que c'est expliqué dans le man de install (j'ai regardé install --help) mais j'ai pas compris, et pourtant c'était écrit en français...

  12. #12
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Pour installer un programme, la commande "install" le copie ou le déplace dans son dossier d'installation (/usr/bin ou /usr/local/bin).
    Ceci requiert que l'utilisateur lançant la commande install aie le droit d'écrire dans le dossier cible (ou les dossiers, si plusieurs sont utilisés)

    Make utilise son propre format de fichier, et donc sa propre syntaxe.

    configure est un exécutable destiné à gérer la configuration du pc d'installation, et de créer/modifier/adapter le makefile pour qu'il fonctionne correctement. Ceci couvre:
    • Vérification de la présence et des versions des bibliothèques utilisées
    • Choix du répertoire d'installation
    • Définition de macros relatives au pc cible, à certains choix (support du multithread, du réseau, du son, par exemple)
    • Ecriture du makefile (ou compilation du makefile.in en makefile)


    Cet exécutable est en général un script shell, mais pourrait aussi bien être un programme c, un script python, ou n'importe quoi d'autre. Il est cependant recommandé de se contenter d'un script (pour ne pas dépendre de l'architecture de la machine) shell (pour ne pas dépendre des programmes installés).

  13. #13
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Par défaut
    Ah ok merci problème résolu!

    En fait j'avais rien compris au makefile alors petite explication au cas où des gens sont comme moi :
    J'avais même pas compris que le makefile marchait comme ça :

    nom_commande : dépendances
    commande_a_effectuer

    Vous allez me dire que... c'est exactement ce que vous m'avez dit : exact saut que je n'avais pas compris que c'était nous même qui créons la commande : je pensais que "install" par exemple était une commande connu des "makefile" je pensais que c'était un langage avec des fonctions prédéfinies : or il ne fait qu'
    exectuter des commandes shells quand on les appelle par "make nom_commande" :

    Je dis pas de bêtise ? '^^

    En tout cas mon makefile marche et fais ce que je veux, merci!

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2015, 17h37
  2. Réponses: 4
    Dernier message: 23/03/2015, 20h43
  3. Réponses: 2
    Dernier message: 23/10/2011, 08h59
  4. Réponses: 0
    Dernier message: 12/11/2009, 16h16
  5. [Info]Les droits relatifs à la programmation Java
    Par athelinos dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2006, 11h32

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