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 :

Ecrire sur un fichier appartenant à root


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Indépendant
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut Ecrire sur un fichier appartenant à root
    Bonjour,
    Je suis débutant en C.
    Pour un programme que je suis en train d'écrire, j'ai besoin d'avoir l'accès en écriture à un fichier (hosts) appartenant à root sur mon disque local.

    fichier = fopen("/etc/hosts", "a+");
    fprintf(fichier, "%s", virtualHost);
    fclose(fichier);

    J'obtient une erreur (c'est normal) mais je ne sais pas comment m'authentifier pour avoir les droits en écriture.

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Le mieux serait peut-être de se logguer en tant que root (qui est le plus sécuritaire je pense)

    Sinon tu peux toujours mettre ton prog en suid ("chmod u+s le_programme" en root bien sûr). Par contre,vérifie bien qu'il n'y ait pas de failles dans ton prog,sinon les hackers risquent de s'en servir (et donc de devenir root)

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Citation Envoyé par supersnail Voir le message
    Le mieux serait peut-être de se logguer en tant que root (qui est le plus sécuritaire je pense)
    +1

    Sauf erreur, un processus Unix ne peut bénéficier d'une escalade de privilièges.

    C'est à l'utilisateur de lancer le programme en tant que root s'il doit faire des actes nécessitant des privilèges et pas au processus de s'authentifier lui-même.

    Par contre,vérifie bien qu'il n'y ait pas de failles dans ton prog,sinon les hackers risquent de s'en servir (et donc de devenir root)
    On rappelle que − malgré une idée répandue − un hacker n'est pas un pirate.

  4. #4
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Je sais très bien... Et je parlais de "hacker" dans le sens général (c'est-à-dire ceux qui cassent tout ou les gentils ).

    Sauf que là,c'est l'objet d'un autre débat

  5. #5
    Nouveau membre du Club
    Profil pro
    Indépendant
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut
    Merci pour ta réponse.
    Se logger en tant que root fonctionne parfaitement.

    Je n'ai pas bien compris ta deuxième solution avec suid.
    Ce que j'aurais aimé faire dans l'idéal :

    (sans se logger en root)

    1-lancer mon petit programme C dans le shell unix
    2-le programme me demande le mot de passe root
    3-je saisi le mot de passe + valid
    4-le programme effectue la tache qui lui ai demandé
    (//c'est un programme qui met en place des virtualhost sur un serveur)
    5-redémarrer Apache (faire un "apachectl graceful")

    J'ai essayé de faire demander le mot de passe root avec cette fonction mais cela n'a pas l'air de fonctionner:

    printf("Mot de passe root :");
    system("su");

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 478
    Par défaut
    Citation Envoyé par philippeblanc Voir le message
    Je n'ai pas bien compris ta deuxième solution avec suid. Ce que j'aurais aimé faire dans l'idéal (sans se logger en root) :

    1-lancer mon petit programme C dans le shell unix
    2-le programme me demande le mot de passe root
    3-je saisi le mot de passe + valid
    4-le programme effectue la tache qui lui ai demandé
    (//c'est un programme qui met en place des virtualhost sur un serveur)
    5-redémarrer Apache (faire un "apachectl graceful")
    C'est ce que l'on t'explique plus haut :
    • Tu ne peux pas le faire, car un programme qui n'a pas les droits root au départ ne peut pas se les accorder lui-même, ni se les faire accorder a posteriori ;
    • Ce n'est pas à ton programme de le faire !


    En revanche, c'est tout-à-fait l'objet de la commande sudo, très largement répandue sur les systèmes UNIX. En tapant :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sudo ./monprogramme

    C'est la commande sudo, elle-même nativement root, qui te demandera ton propre mot de passe (pas celui du root) et lancera ensuite ton application en tant que super-user. Après, sudo a quand même mauvaise réputation auprès d'un certain nombre d'admins parce que ça affaiblit la sécurité et qu'il est rarement configuré proprement par défaut, mais c'est un moindre mal, et c'est de toutes façons un autre débat.

    Les applis UNIX, d'une manière générale, doivent se concentrer uniquement sur leur tâche, le reste relevant de l'administration système. Si on faisait le contraire, le comportement de l'application entrerait en conflit avec celui de l'administrateur.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu ne peux pas faire ça au sein d'un seul et même programme.
    Mais tu devrais pouvoir en lancer un second, par contre, avec un truc du style
    system("sudo ecrireHosts arg1 arg2 etc")
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. [FTP] Ecrire sur un fichier distant via ftp
    Par jules_diedhiou dans le forum Langage
    Réponses: 2
    Dernier message: 12/05/2009, 14h23
  2. [FPDI] ecrire sur un fichier PDF
    Par erman_yazid dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 17/03/2009, 09h36
  3. ecrire sur un fichier
    Par mams1 dans le forum C
    Réponses: 6
    Dernier message: 19/01/2009, 00h29
  4. lire ecrire sur un fichier Excel
    Par mrkinfo dans le forum C#
    Réponses: 3
    Dernier message: 17/09/2008, 12h01
  5. lire et ecrire sur un fichier Text
    Par touf213 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/07/2007, 22h33

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