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

Administration système Discussion :

kill et setuid, comment faire?


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut kill et setuid, comment faire?
    Bonjour,

    J'ai un programme p qui peut uniquement s'éxécuter avec les droits root.

    J'utilise donc la commande setuid pour l'exécuter avec les bons droits. J'obtiens un fichier p_modif.c dont voici le contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setuid(0);
    char* cmd = "p";
    system(cmd);

    Lors que j'excute p_modif, la commande p est bien lancée.

    Par contre, quand je le tues (ctr C, kill -9, kill -6) p_modif se termine mais mon programme p continue de tourner. Je dois me connecter en tant que root pour le tuer.

    Comment forwarder le message kill proprement et avec les bons droits?

    Merci de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Un collégue me propose

    chmod 4755 /bin/kill

    Cela répond à la question mais c'est un peu violent...

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 429
    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 429
    Par défaut
    Bonjour,

    Pour répondre à ta question, je pense que tu devrais regarder du coté de la commande "sudo" qui est justement faite pour exécuter des commandes avec des droits spécifiques sans pour autant donner les droits à tout le monde.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LGnord Voir le message
    Bonjour,

    J'ai un programme p qui peut uniquement s'éxécuter avec les droits root.

    J'utilise donc la commande setuid pour l'exécuter avec les bons droits. J'obtiens un fichier p_modif.c dont voici le contenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    setuid(0);
    char* cmd = "p";
    system(cmd);

    Lors que j'excute p_modif, la commande p est bien lancée.

    Par contre, quand je le tues (ctr C, kill -9, kill -6) p_modif se termine mais mon programme p continue de tourner. Je dois me connecter en tant que root pour le tuer.
    Bonjour
    C'est normal. Seul le propriétaire d'un processus a le droit de lui envoyer un signal. Sinon il n'y aurait plus de sécurité (n'importe qui pourrait tuer les processus de n'importe qui et donc par exemple tuer le processus qui verrouille l'écran !!!). Et c'est pareil si tu places un setuid ("chmod 4755" ou plus propre "chmod u+s") à la commande /bin/kill.

    Donc te faut passer par un outil permettant d'augmenter temporairement tes privilèges => sudo par exemple comme l'a si bien dit disedorgue

    Accessoirement, je te conseillerais de modifier ton programme ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setuid(0);
    execl("p", "p", NULL);
    En effet, la commande execl remplace le processus courant par le nouveau processus. Donc ainsi, p_modif disparait pour être remplacé par p. Plus propre que de faire un system() puisque p_modif (à ce que je vois) n'a pas besoin de continuer après. Toutefois cela ne change rien pour le kill.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Merci de votre aide.

    OK pour le sudo. Je le fais mais j'ai les droits root sur la machine.

    Comment faire pour un utilisateur lambda?

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LGnord Voir le message
    OK pour le sudo. Je le fais mais j'ai les droits root sur la machine.
    Ouais ben dans ce cas tu ne le fais pas. Quand on teste quelque chose, on le teste en tant que "lambda" parce que faire un test sous root ça n'a aucune valeur (quand ça fonctionne on ne sait pas si c'est parce que le test est bien fait ou bien si c'est parce qu'on est root). De toute façon on ne travaille pas sous root.

    Citation Envoyé par LGnord Voir le message
    Comment faire pour un utilisateur lambda?
    Tu rajoutes la ligne suivante lambda ALL=(root) /bin/kill dans le fichier /etc/sudoers. Et si tu veux que lambda puisse exécuter d'autres commandes que kill tu les rajoutes en les séparant par une virgule. Ou alors tu écris "ALL" pour indiquer "toute commande"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par LGnord Voir le message
    J'utilise donc la commande setuid pour l'exécuter avec les bons droits.
    ?

    setuid(0) doit échouer sauf si tu es déjà root et dans ce dernier cas setuid ne sert à rien sauf si tu avais abaissé tes privilèges auparavant.

    Peux-tu mieux expliquer ce que tu fais dans ton code ? N'as-tu pas plutôt mis le suid bit au fichier "b" ?

    Par contre, quand je le tues (ctr C, kill -9, kill -6) p_modif se termine mais mon programme p continue de tourner.
    Il devrait se terminer lui aussi par défaut. A priori, c'est parce que le programme "p" ignore explicitement les signaux, du moins SIGINT, qu'il ne meurt pas.

Discussions similaires

  1. Awk et kill : comment faire?
    Par michaeljeru dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 23/02/2008, 20h02
  2. comment faire evoluer ma base vers interbase6
    Par toure32 dans le forum InterBase
    Réponses: 5
    Dernier message: 23/10/2002, 10h59
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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