Bonjour a tous,
Je m'en remet a vous pour un petit probleme. Je dois logger tous les acces fichiers effectuer par des programmes.
Probleme pas trop compliquer a la base, mais la ou sa se corse, ces que les programme a surveiller, peuvent etre compiler de maniere statique, ou etre suid, il n'est donc pas possible d'utiliser une lib avec un LD_PRELOAD.
Pour l'instant j'utilise un strace pour recuperer les appels systemes puis un prog qui parse le tout pour m'en sortir la liste des fichiers ajouter, et celle des fichiers modifiers (les acces en lecture ne nous interresnt pas)
Le probleme de cette methode, c'est que c'est super lourd, des que le programme tourne un peu longtemps et fait beaucoup d'acces disque le fichier de log que je parse explose.
Une solution est de recuperer les parties qui m'interresse dans strace pour ecrire un prog qui fait tout le traitement au fur et a mesure, donc j'elimine le fichier intermediaire, mais ça reste pas tres propre de faire une trace des syscall du prog a surveiller...
Donc je m'en remet a vous, pour savoir si quelqu'un aurait une meilleur idee avant que je me mette au codage ?
(je precise que certains des programes a monitore sont vraiment intensifs au niveau entree sorties, et que l'on doit surveille aussi bien le programme que ses processus enfants)
Merci
# Re:
Posté par LaBienPensanceMaTuer . Évalué à 2.
Tu peux soit utiliser un module pour le hooker, soit patcher directement ton noyau.
[^] # Re: Re:
Posté par beagf (site web personnel) . Évalué à 1.
De plus le programme doit etre ditribue sur pas mal de systeme, et si ce sont tous des linux, il y a par contre beaucoup de version differentes.
Il y a pas mal de distrib differentes et surtout pas mal de version du noyeau differentes, des 2.4 et des 2.6 (il me semble que le dernier 2.2 a disparu, mais c'est a verifier)
Donc faire un module ou patch, c'est difficilement envisageable.
[^] # Re: Re:
Posté par LaBienPensanceMaTuer . Évalué à 2.
Dans tout les cas, chaque création/écriture/lecture passe par un incontournable open() donc bon ...
Et pour finir, la programmation de ce type de module pour les noyaux 2.4 est particulièrement aisée. Pour ce qui est des 2.6, je ne me suis encore pas amusé à détourner des syscall donc je ne pourrais te dire.
Pour finir, pour le traitement final, la solution est de logguer avec une priorité élevée (LOG_DEBUG) et de configurer ton syslogd pour qu'il envoie les kern.debug vers un programme en perl qui lui fera le traitement.
Cette solution reste à mes yeux la plus propre car:
1/ Economique en ressources.
2/ Discrète.
3/ Non contournable.
4/ Relativement rapide.
Après, si tu veux rester sur ta solution, c'est comme tu le sent mais je me pose quand même une question : Comment fait tu pour forcer le strac-age de tout les programmes ?
[^] # Re: Re:
Posté par beagf (site web personnel) . Évalué à 1.
Apres si tu me donne un moyen pour que je puisse fournir un module (ou eventuellement un pour le 2.4 et un pour le 2.6) qui marchera partout sans probleme (je pense que je peux les forcer a activer le support des modules partout) je suis tout a fait preneur, je suis tout a fait d'accord que c'est une bonne solution (en tout cas meilleur que l'actuelle)
Pour le strac-age, faudrait que tu me precise ce que tu entend par la ? Pour l'instant j'utilise strace [1] qui me log les appels systeme.
[1] http://www.liacs.nl/~wichert/strace/(...)
[^] # Re: Re:
Posté par LaBienPensanceMaTuer . Évalué à 2.
En effet, il ne s'agit ici que de faire de bête printk, donc les différentes modifs étant intervenus au cours du développement de ces deux branches ne te concerneront pas.
L'écriture d'un tel module pour un noyau 2.4 est vraiment très facile à ma connaissance. La seule différence pour les 2.6 va être au niveau de l'interception des syscall, chose que je n'ai pas encore étudié.
Pour le strace, j'ai bien compris que cela répondait à tes attentes. Simplement, je vois difficillement comment tu pourrais "monitorer" tout les accés aux fichiers via cet utilitaire. Si tu as des utilisateurs qui peuvent être amené à se logguer sur la machine, tu vas les forcer à lancer leurs différentes commandes via strace ?
Et pour Apache, le ftpd, etc... ? Tu as la possibilité de te rattacher à un pid donné via strace, mais cela restera très gourmand en ressources.
[^] # Re: Re:
Posté par Nicolas Bernard (site web personnel) . Évalué à 3.
Cf. http://www.citi.umich.edu/u/provos/systrace/linux.html(...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.