Je ne vais pas pour des outils compliqués comme le mode de réclamation AppArmor, j'ai besoin d'outils faciles pour me dire quels fichiers sont accessibles par un programme spécifique.
linux
files
process
open-files
Boll19
la source
la source
fstat()
oulstat()
info, etc.Réponses:
Selon Chris Down, vous pouvez utiliser
strace -p
pour examiner un processus déjà en cours d' exécution, pour voir quels fichiers il ouvre à partir de maintenant jusqu'au moment où vous terminez strace ou le processus lui-même se termine.Si vous souhaitez voir les fichiers ouverts pendant toute la durée d'un processus, utilisez dès le début
strace
le nom de l'exécutable. L'ajout-f
garantit que tous les sous-processus bifurqués sont également signalés. ExempleUtilisation
lsof
pour voir quels fichiers un processus a actuellement ouvertsSi vous avez SystemTap, vous pouvez surveiller l'hôte entier pour les fichiers en cours d'ouverture.
la source
open
n'est pas le seul appel système pertinent. Par exemple, il est possible de passer des descripteurs de fichiers entre les processus via un socket Unix, et il yopenat
a l'appel système qui peut également ouvrir un fichier.strace
, voir les lignes ENOENT dans l'exemple.Vous pouvez utiliser
opensnoop
depuis BCC, qui utilise eBPF sous le capot:C'est assez performant car il utilise kprobes au lieu de devoir redémarrer les appels système, comme le
strace
fait.Vous pouvez également le faire avec
strace
(potentiellement avec-f
pour suivre les enfants du processus tracé), mais sa façon de fonctionner, impliquant le redémarrage des appels système dans le cadre de ptrace , ralentira quelque peu votre application:Vous pouvez également démarrer votre application de cette façon si vous le souhaitez, en utilisant
strace [executable]
oustrace -f [executable]
.la source
Mon outil préféré pour surveiller les fichiers ouverts par une application est le puissant cadre de surveillance
sysdig
.Pour surveiller tous les fichiers ouverts ouverts par un programme nommé
exe_file
:Surveillance de tous les fichiers ouverts sur le serveur:
Création d'un fichier de trace qui ne contiendra que des événements d'écriture dans les répertoires personnels (que nous pourrons inspecter ultérieurement
sysdig -r writetrace.scap.gz
):Tout voir au niveau syscall, un processus nommé
exe_file
:Sysdig possède de nombreux burins, voir pour des choses plus intéressantes qu'il peut faire:
Exemples Sysdig
Comment surveiller et dépanner un serveur Linux à l'aide de sysdig
Vous avez également ce
dtrace
qui n'est pas beaucoup utilisé sous Linux, mais qui est toujours beaucoup utilisé avec les systèmes d'exploitation * BSD:De plus
sysdig
,strace
etdtrace
, vous avez égalementltrace
, qui enregistre / intercepte les signaux / bibliothèques dynamiques / appels système qui sont appelés / reçus par un processus:Si le programme est petit, vous pouvez également envisager de le désassembler
objdump -d exe_file
ou de le désassembler / décompiler avecHopper
, pour voir tous les fichiers qu'il traite.Pour plus de détails, voir: Comprendre ce que fait un binaire Linux
Dans un premier temps, je ferais aussi:
Il s'agit d'une approche à faible coût, et avec de la chance, certains des noms de fichiers peuvent simplement être présents en mode ASCII dans le fichier binaire avec chance.
Voir aussi la réponse connexe Pourquoi le vrai et le faux sont-ils si grands?
S'il s'agit de fichiers binaires / fichiers fournis avec la distribution, vous pouvez également récupérer les sources à partir des référentiels sources de la distribution ou des référentiels officiels de l'utilitaire réel.
Comme dernière ressource, vous pouvez toujours utiliser des outils comme gdb ou rr pour déboguer le binaire en temps réel.
la source
sysdig
bogue (utilisez-vous ARM?), Veuillez lui poser une nouvelle question.