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 :

envoie action sur terminal


Sujet :

C

  1. #1
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut envoie action sur terminal
    Salut à tous.
    J'aimerais faire un programme qui tournera sous linux.

    Le programme consciste à envoyer une série d'action que moi en tant normale je le fais au clavier dans une console ou emulateur terminale.

    Par exemple, se connecter en root, puis lister le répértoire /root:
    1- su
    2- ls /root

    Donc, si je le fais sur une console, je fais ceci au clavier:
    su
    (entre le mot de passe root qui est demandé)
    (connection autorisé)
    ls /root
    (il me liste le contenu root)

    Comment puis-je faire cela via un programme écrit en C.


    PS: je veux pas utilisé, su -c 'ls /root' (qui marchera pas pour mes autres besoins), mais c'est de pouvoir envoyer plusieurs commande d'affiller.
    Par exemple si je fais ceci: system("su");system("ls /root");
    Il va me demander mot de passe root, je vais lui donné (au clavier) une fois bien logué, la deuxième commande que je veux exécuter (ls /root) ne se lance pas, car on est coincé dans la première commande, hors je veux que la deuxième commande puisse s'exécuter à la suite du premier (comme on peut le faire physiquement au clavier) et donc si j'arrêtes la première commande (via exit) la deuxième commande pourra enfin s'exécuter mais n'étant plus logué en root via la première commande j'ai pas droit de lister /root car accès interdit aux utilisateurs normaux. Donc le but c'est d'envoyer une suite de commande qui s'exécute l'un sur l'autre.
    Je présume qu'il y a une simple méthode mais connaissant pas les bons termes j'ai du écrire un pavé

  2. #2
    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
    il y a beaucoup beaucoup mieux.

    ton programme devra être lancé en root, donc, tu devra quand même faire ton su.
    Mais effectivement, tu pourras faire un su -c programme.

    Là où tu peux faire franchement mieux, c'est en utilisant un script bash (ou autre *sh), ou une fonction bash.

    Le problème que tu rencontres, c'est que tu ne peux pas donner le mot de passe à su depuis le programme C

  3. #3
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut
    Le but n'est pas de se connecter à su.

    Par exemple, se connecter à mysql, sous l'emulateur terminale, j'ai mysql qui attend des commandes mysql à entrer (mysql >) du coup j'aimerais envoyer des commandes à ceux-ci.


    Si un moyen n'existe pas.
    Y a t il une possibilité d'envoyer à l'émulateur terminale lui même comme le clavier lui envoie ?


    "Là où tu peux faire franchement mieux, c'est en utilisant un script bash (ou autre *sh), ou une fonction bash."
    Tu peux donné un exemple qui fais cela ?

  4. #4
    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
    (mysql accepte aussi des commandes)

    par exemple le script suivant:
    #!/bin/bash
    
    commande1 arg1 arg2
    
    commande2 arg1 arg2 | commande3 arg1 arg2 > fichier
    
    Supposons qu'il soit nommé script.sh et qu'il soit executable par root (chown root:root et chmod 700).

    La commande pour exécuter tout ca en root serait soit su -c script.sh soit sudo script.sh

    C'est par exemple exactement ce que tu fais quand tu tape "sudo make install" pour installer un programme compilé manuellement (enfin, via make).

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    +1 avec Leternel, la meilleure façon de faire est d'utiliser sudo, tu fais ton programme normalement, tu le rajoute ensuite dans la configuration (le fichier /etc/sudoers, permet d'exécuter ce que l'on veut, sous l'utilisateur que l'on veut, et éventuellement sans mot de passe)

    par contre si le but c'est juste d'avoir un shell root accessible sans mot de passe, dans d'autres contextes c'est ce qu'on appelle ni plus ni moins qu'une backdoor, et un risque évident de sécurité

  6. #6
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut
    Merci à vous.

    Le vrai but n'est pas d'avoir les droits, mais de pouvoir envoyer des commandes.

    Par exemple: un simple programme qui demande une lettre et qui récupère via scanf pour ensuite afficher la lettre.
    L'utilisateur ouvre un terminale, lance le programme, le programme lui demande d'entré une lettre, l'utilisateur entre au clavier la lettre.
    Ce que je veux.
    C'est que mon programme, lance ce programme qui demande la lettre, une fois qu'il attend ma réponse, je lui envoie une lettre via mon programme.
    Donc l'utilisateur au clavier est remplacer par mon programme.

    Cette dernière exemple semble la bonne exemple

  7. #7
    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
    En gros, tu ne peux pas.

    En fait, si, presque, mais dès que tu voudras lire une réponse, tu ne pourras pas.


    Mais la très grande majorité des programmes (console) pour linux proposent des interfaces adaptées:

    Par exemple, su permet de base d'ouvrir un nouveau shell, connecté avec le nom d'utilisateur fourni en argument.
    Mais il permet aussi d'exécuter une unique commande (via -c).
    D'autres programmes comme python, mysql ou curl propose aussi un mode interactif et un mode batch/script.

    La plupart de ces programmes permettent d'utiliser le flux d'entrée comme fichier, et c'est là que tu peux utiliser des redirections.
    Par exemple, cat fichier1 fichier2 | sed 's/$/€/g' > fichier3 concatene deux fichier en remplacant les $ par des €. Ca marche, parce que sed utilise son flux d'entrée standard quand il n'a pas d'argument désignant un fichier.

    Certains vont plus loin, ils sont construits autour d'une bibliothèque, et ne servent qu'à déclencher les fonctions de celle-ci.
    C'est le cas de curl pour libcurl, de imagemagik (pour libmagik), etc.

    Pour utiliser dans un programme les fonctionnalités de ces programmes, il vaut mieux utiliser la bibliothèque.

  8. #8
    Membre très actif
    Homme Profil pro
    root
    Inscrit en
    Janvier 2013
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : root

    Informations forums :
    Inscription : Janvier 2013
    Messages : 174
    Par défaut
    Je comprend.

    Merci à vous

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

Discussions similaires

  1. [LibreOffice][Tableur] Macro: Envoie Email sur Action dans cellule email.
    Par vandman dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 12/08/2015, 11h50
  2. Réponses: 2
    Dernier message: 21/06/2014, 10h12
  3. Réponses: 2
    Dernier message: 09/01/2008, 11h43
  4. Pb d'action sur un clip
    Par bencasp dans le forum Flash
    Réponses: 4
    Dernier message: 22/10/2003, 17h11
  5. [Flash MX] Action sur un bouton
    Par WriteLN dans le forum Flash
    Réponses: 9
    Dernier message: 20/10/2003, 14h01

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