Sous Linux, le programme de ligne de commande mktemp est-il moins sûr que la fonction C mkstemp?

StackOverflow https://stackoverflow.com/questions/499450

  •  20-08-2019
  •  | 
  •  

Question

Les deux opérations créent un fichier vide et renvoient le nom du fichier, mais mkstemp laisse le fichier ouvert en mode exclusif et vous en donne le traitement. La fonction C présente-t-elle un avantage en termes de sécurité? Cela signifie-t-il qu'il existe un trou de sécurité dans la version en ligne de commande?

En passant, il est intéressant de noter qu'il existe plusieurs fonctions connexes dans l'API C sous Linux et que la plupart d'entre elles disent & "N'utilisez pas cette fonction &"; (ou similaire) dans leur page de manuel.

Était-ce utile?

La solution

Comme vous pouvez facilement le voir à partir de mktemp(1) le code source, il ne fait essentiellement qu'appeler mkstemp(3).

Le mode exclusif sous Linux signifie que la fonction échouera si le fichier existe déjà. Cela ne garantit pas le verrouillage. Un autre processus peut supprimer ce fichier, le recréer et le remplir de données, même si le descripteur de fichier est open(3) par votre processus.

Il n'y a pas de sécurité supplémentaire dans la fonction C par rapport à l'utilitaire de ligne de commande.

Autres conseils

Une astuce avec des fichiers temporaires dans les systèmes d'exploitation de type Unix (y compris Linux et Mac OS) est de supprimer le fichier dès que vous l'ouvrez. Vous pouvez toujours accéder au fichier, mais personne d'autre ne peut le voir ou y faire quoi que ce soit, et il disparaîtra dès que vous fermerez le fichier, même si votre programme meurt d'une mort horrible.

La différence la plus évidente entre un appel système et une fonction de ligne de commande est que les fonctions de ligne de commande sont utilisées par des personnes ou leurs scripts shell, alors que les appels système sont toujours effectués par des programmes.

Il serait assez difficile de donner un fichier à une personne.

En ce qui concerne & "; la sécurité &"; vous devez penser aux conditions de compétition: plusieurs instances d’un programme appellent mkstemp simultanément, mais il est garanti que chacune d’elles possède un fichier temporaire unique. Si le programme s'exécute et appelle la version en ligne de commande, il sera presque impossible de garantir cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top