File Type Detection: file & mimetype (Artikel 263)
Sichere Identifizierung von Dateitypen unter Linux. Erfahren Sie alles über Magic Bytes, das file-Kommando und wie Sie getarnte Schadsoftware entlarven.
# File Type Detection: Mehr als nur Dateiendungen
TL;DR / Management Summary In der Windows-Welt bestimmt die Endung (z.B.
.exe), was eine Datei ist. Unter Linux ist das anders: Hier zählen die Magic Bytes am Anfang der Datei. Eine Datei namensimage.jpgkann in Wirklichkeit ein gefährliches Bash-Skript sein. Mit dem Tool file schauen wir hinter die Fassade und identifizieren den wahren Inhalt einer Datei basierend auf ihrer Signatur. Ein essentielles Werkzeug für die Security-Analyse und das Debugging von Datentransfers.
# 1. Einführung & Architektur
Die Magie im Header.
Fast jede Datei beginnt mit einer spezifischen Byte-Sequenz.
- ELF:
7f 45 4c 46(Linux Executable) - PDF:
%PDF- - JPEG:
ff d8 ff
# Die Erkennungs-Logik (Mermaid)
graph LR
A[Unknown File: data.bin] --> B{Command: file}
B --> C[Read first few bytes]
C --> D[Compare with /usr/share/misc/magic]
D -->|Match| E[Return Human Readable: 'ASCII text']
D -->|Match| F[Return Human Readable: 'ELF 64-bit LSB executable']
D -->|No Match| G[Return: 'data']
# 2. Das file Kommando
Wahrheit auf Knopfdruck.
# Einfache Abfrage
file my_unknown_file
# Output: my_unknown_file: Bourne-Again shell script, ASCII text executable
# Nur den MIME-Type ausgeben (für Skripte)
Ideal, wenn Sie automatisiert entscheiden müssen, wie eine Datei verarbeitet wird.
file --mime-type -b config.txt
# Output: text/plain
# 3. mimetype (Die Desktop-Sicht)
Integration in Oberflächen.
Während file auf den Inhalt schaut, nutzt mimetype oft eine Kombination aus Endung und Inhalts-Datenbanken (XDG-Standards).
mimetype photo.png
# Output: image/png
# 4. Day-2 Operations: Security Audits
Getarnte Dateien finden.
Angreifer laden oft Skripte mit harmlosen Namen hoch.
# Beispiel: Suche nach ausführbaren Skripten mit falscher Endung
find /tmp -type f -name "*.jpg" -exec file {} \; | grep "script"
# Findet Skripte, die sich als Bilder tarnen!
# 5. Troubleshooting & “War Stories”
Wenn die Erkennung lügt.
# Story 1: “Die korrupte Datenbank”
Symptom: file meldet bei jeder Datei nur noch “data”, sogar bei bekannten Textdateien.
Ursache: Die Magic-Datenbank unter /usr/share/misc/magic.mgc ist beschädigt oder fehlt nach einem unvollständigen Update.
Lösung: Installieren Sie das Paket file neu: sudo pacman -S file (Arch) oder apk add file (Alpine).
# Story 2: “Das hängende Web-Upload”
Symptom: Ein Webserver verarbeitet Uploads nicht, obwohl die Endung .pdf erlaubt ist.
Ursache: Die Applikation nutzt file zur Validierung. Der User hat eine Datei hochgeladen, die zwar die Endung .pdf hat, aber deren Header durch einen fehlerhaften Download beschädigt wurde. file meldet korrekt “data”, und die App blockiert den Vorgang.
Lösung: Nutzen Sie file, um den echten Status zu prüfen. Falls es wirklich ein PDF ist, reparieren Sie den Header mit pdf-fix Tools.
# 6. Fazit & Empfehlung
- Sicherheit: Vertrauen Sie niemals der Dateiendung. Nutzen Sie
filefür alle Validierungen in Skripten. - Wahl: Nutzen Sie
file -ifür den Einsatz in Web-Backend-Skripten (Standard-MIME-Format). - Wartung: Halten Sie das Paket
fileaktuell, um Erkennungsmuster für neueste Dateiformate zu erhalten.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Typ ermitteln | file <name> |
| MIME-Type sehen | file -i <name> |
| Kurze Info (ohne Name) | file -b <name> |
| In komprimierte Files sehen | file -z <name.gz> |
| Liste von Dateien prüfen | file -f list.txt |
| Symlinks folgen | file -L <link> |
| Hex-Header manuell sehen | `head -c 32 |
| Magic DB Pfad | /usr/share/misc/magic |
| Eigene Magic Rules | ~/.magic |