linux-cli-shell cli file-management security magic-bytes

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 namens image.jpg kann 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 file für alle Validierungen in Skripten.
  • Wahl: Nutzen Sie file -i für den Einsatz in Web-Backend-Skripten (Standard-MIME-Format).
  • Wartung: Halten Sie das Paket file aktuell, 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