À l'aide d'un Simple Appel system() pour Exécuter Plusieurs Commandes en C
Dans la sécurité de l'information de laboratoire, je travaille, j'ai été chargé de l'exécution de plusieurs commandes avec un seul appel à "system()" (écrit en C, en cours d'exécution sur Fedora). Quelle est la syntaxe qui va me permettre d'exécuter plus de commande par le biais de system()? (L'idée étant que vous pouvez exécuter des commandes arbitraires via un programme en cours d'exécution sur un ordinateur distant, si le programme interagit avec le système d'exploitation par le biais de l'appel system ().)
I. e.:
char command[] = "????? \r\n";
system(command);
Sauf si vous êtes en cours d'exécution sur Windows, le retour chariot (\r) est susceptible de causer des problèmes plutôt que de donner un avantage. Vous devriez être en mesure de commandes séparées par des sauts de ligne ou des points-virgules comme d'autres l'ont suggéré.
En termes de sécurité, permettant à des programmes distants d'exécuter des commandes arbitraires est une lourde processus, en général. C'est moins grave si localement le programme s'exécute avec les privilèges de l'utilisateur à distance; si il fonctionne avec n'importe quelle sorte d'élévation de privilèges, c'est dire.
En termes de sécurité, permettant à des programmes distants d'exécuter des commandes arbitraires est une lourde processus, en général. C'est moins grave si localement le programme s'exécute avec les privilèges de l'utilisateur à distance; si il fonctionne avec n'importe quelle sorte d'élévation de privilèges, c'est dire.
OriginalL'auteur Chance | 2008-10-29
Vous devez vous connecter pour publier un commentaire.
Qui dépend du shell en cours appelé à exécuter les commandes, mais en général la plupart des coquilles d'utilisation
;
pour séparer les commandes donc quelque chose comme cela devrait fonctionner:[MODIFIER]
@Dicroce mentionné, vous pouvez utiliser
&&
au lieu de;
qui va arrêter l'exécution à la première commande qui retourne une valeur non nulle. Cela peut ou peut ne pas être désiré (et certaines commandes peuvent retourner une valeur non zéro en cas de succès), mais si vous essayez de gérer les commandes qui peuvent échouer, vous ne devriez probablement pas de chaîne plusieurs commandes dans un appel system() tant que vous n'avez pas de moyen de déterminer où la défaillance s'est produite. Dans ce cas, votre meilleur pari serait d'exécuter une commande à un moment ou créer un script shell qui exécute l'appropriées de gestion des erreurs et de les appeler à la place.OriginalL'auteur Robert Gamble
Utiliser && entre vos commandes. Il a l'avantage qu'il ne continue de l'exécution de commandes tant qu'ils de retour avec succès les codes d'erreur. Exemple:
"cd /proc && cat cpuinfo"
OriginalL'auteur dicroce
Une possibilité vient immédiatement à l'esprit. Vous pouvez écrire toutes les commandes dans un script, puis l'exécuter avec:
ou, maintenant que j'ai remarqué que vous êtes en cours d'exécution sur Fedora:
OriginalL'auteur paxdiablo