Schützen Sie Ihre Abhängigkeiten vor Angriffen auf die Lieferkette. **Einzelne statische Binärdatei, null Rust-Crate-Abhängigkeiten.**
Von **[[arnica](https://arnica.io?utm_source=depsguard&utm_medium=referral&utm_campaign=community)]**
## Inhaltsverzeichnis
- [Übersicht](#overview)
- [Installation](#install)
- [Verwendung](#usage)
- [Was wird überprüft](#what-gets-checked)
- [Konfigurationsdateipfade](#config-file-locations)
- [Dringende Sicherheitskorrektur](#urgent-security-fix)
- [Sicherungen und Wiederherstellung](#backups-and-restore)
- [Funktionsweise](#how-it-works)
- [Fehlerbehebung](#troubleshooting)
- [Hilfe & Feedback](#help--feedback)
- [Anleitungen](#guides)
- [Siehe auch](#see-also)
- [Lizenz](#license)
## Übersicht
DepsGuard sucht auf Ihrem Rechner nach **npm**, **pnpm**, **yarn**, **bun**, **uv**, **pip**, **poetry** und **aube**, liest deren Konfigurationsdateien, vergleicht sie mit empfohlenen Einstellungen für die Lieferkette und kann **Korrekturen interaktiv anwenden**. Es scannt außerdem nach **Renovate**- und **Dependabot**-Konfigurationen in Ihren Repos. Es führt niemals Paketinstallationen durch; es bearbeitet nur von Ihnen genehmigte Konfigurationsdateien und erstellt vor jeder Änderung **Sicherungen**.
### Hauptmerkmale
- Interaktive TUI: scannen, prüfen, Korrekturen umschalten, anwenden
- `scan`-Unterbefehl für schreibgeschützte Berichte
- `restore`-Unterbefehl zum Auswählen einer Sicherung und Wiederherstellen einer Datei
- Plattformübergreifend: Linux, macOS, Windows
- Keine gebündelten Drittanbieter-Rust-Crates (stdlib + geringe Menge an plattformspezifischem FFI für das Terminal)
### Technologie-Stack
| Bereich | Details |
|---------|---------|
| Sprache | Rust (MSRV **1.74**, siehe `Cargo.toml`) |
| CLI / TUI | `src/main.rs`, `src/ui.rs`, `src/term.rs` |
| Konfigurationslogik | `src/manager.rs`, `src/fix.rs` |
| Website | Statische Seite unter `docs/` (getrennt von der Binärdatei) |
## Installation
### Vorgefertigte Binärdateien
Jede [GitHub-Version](https://github.com/arnica/depsguard/releases) enthält Archive für:
- Linux: `x86_64` (glibc), `x86_64` (musl), `aarch64` (glibc)
- macOS: Intel und Apple Silicon
- Windows: `x86_64` ZIP mit `depsguard.exe`
Laden Sie das Archiv für Ihre Plattform herunter, entpacken Sie es und legen Sie die Binärdatei in Ihren `PATH`.
Überprüfen Sie die Integrität mit der passenden `.sha256`-Datei neben jedem Asset auf der Veröffentlichungsseite.
### Installation nach Plattform
#### Linux (Debian/Ubuntu über APT)```bash
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://depsguard.com/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/depsguard.gpg
echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/depsguard.gpg] https://depsguard.com/apt stable main" | sudo tee /etc/apt/sources.list.d/depsguard.list >/dev/null
sudo apt update
sudo apt install depsguard
Paketmanager (wenn von Ihrem Anbieter veröffentlicht)
Falls Ihre Organisation DepsGuard über Homebrew, Scoop oder WinGet ausliefert, folgen Sie deren Anweisungen. Das Einrichten oder Automatisieren dieser Kanäle (Homebrew-Core-PRs, Buckets, WinGet-PRs, CI-Secrets) ist Dokumentation für Maintainer; siehe AGENTS.md unter Release & Distribution.
App-Stores / Paketmanager
Kanal
Linux
macOS
Windows
Installationsbefehl
APT (benutzerdefiniertes Repo)
ja
nein
nein
sudo apt install depsguard (nach Einrichtung des Repos oben)
Das Binärprogramm ist `target/release/depsguard` (`.exe` unter Windows). Rust **1.74+** ist erforderlich.
## Verwendung```bash
depsguard # interactive: scan, choose fixes, apply
depsguard scan # report only; no writes (exits 1 if action is needed)
depsguard --no-search # skip recursive file search, check local configs only
depsguard restore # restore from a previous backup
depsguard --help # CLI help
Starten Sie depsguard, um die interaktive TUI zu starten. Es scannt Ihr System und zeigt eine Tabelle mit Ergebnissen. Drücken Sie eine beliebige Taste, um zum Fix-Auswahlmenü zu gelangen. Die Konfigurationserkennung auf Repository-Ebene beginnt im aktuellen Verzeichnis und sucht abwärts. Verwenden Sie depsguard scan für einen schreibgeschützten Bericht oder depsguard --no-search, um die rekursive Dateisuche zu überspringen und nur Benutzerkonfigurationen zu prüfen.
Hinweis: Einige Einstellungen erfordern eine Mindestversion. Wenn Ihre Version zu alt ist, sehen Sie:
ℹ min-release-age – erfordert npm ≥ 11.10 (vorhanden: 10.2.0).
Führen Sie ein Upgrade mit npm install -g npm@latest durch und führen Sie den Vorgang erneut aus.
Navigieren und auswählen – verwenden Sie ↑↓, um sich durch die Liste zu bewegen (^u^d zum Blättern). Drücken Sie Space, um einen Fix ein- oder auszuschalten. Verwenden Sie die Schnellfiltertasten, um bulk nach Dateien auszuwählen: a für alle, n für .npmrc, u für uv.toml usw. – einmal drücken zum Auswählen, erneut zum Abwählen, ein drittes Mal zum Löschen des Filters. Drücken Sie f, um nur aktuell ausgewählte Fixes anzuzeigen.
Vorschau – drücken Sie d, um einen Diff zu sehen, was sich ändern wird, bevor Sie sich festlegen.
Anwenden – drücken Sie Enter, um die ausgewählten Fixes anzuwenden. Vor dem Schreiben einer Datei wird ein Backup mit Zeitstempel erstellt.
Erneuter Scan – DepsGuard führt nach dem Anwenden automatisch einen erneuten Scan durch, damit Sie überprüfen können, ob alles grün ist.
Wiederherstellen – führen Sie jederzeit depsguard restore aus, um aus der Backup-Liste zurückzusetzen. Drücken Sie q oder Esc, um zu beenden.
Reduziert Risiko durch Installationsskripte (npm beachtet dies in .npmrc; pnpm >= 11 liest es aus pnpm-workspace.yaml / globalem config.yaml, nicht aus .npmrc)
pnpm
~/.npmrc
minimum-release-age
10080 (Minuten)
Verzögert neue Versionen um 7 Tage (pnpm 10.16–10.x nur; pnpm >= 11 ignoriert .npmrc; verwenden Sie pnpm-workspace.yaml)
pnpm
global rc (pnpm <= 10)
minimum-release-age
10080 (Minuten)
Verzögert neue Versionen um 7 Tage (erfordert pnpm >= 10.16)
pnpm
global rc (pnpm <= 10)
block-exotic-subdeps
true
Blockiert nicht vertrauenswürdige transitive Abhängigkeiten (erfordert pnpm >= 10.26)
Fehler bei nicht geprüften Build-Skripten (erfordert pnpm >= 10.3)
pnpm
global rc (pnpm <= 10)
ignore-scripts
true
Blockiert bösartige Installationsskripte
pnpm
global config.yaml (pnpm >= 11)
minimumReleaseAge
Speicherorte der Konfigurationsdateien
Manager
Linux
macOS
Windows
npm/pnpm/aube
~/.npmrc
~/.npmrc
%USERPROFILE%\.npmrc
pnpm global (pnpm <= 10)
$XDG_CONFIG_HOME/pnpm/rc oder ~/.config/pnpm/rc
$XDG_CONFIG_HOME/pnpm/rc oder ~/Library/Preferences/pnpm/rc
%LOCALAPPDATA%\pnpm\config\rc
pnpm global (pnpm >= 11)
$XDG_CONFIG_HOME/pnpm/config.yaml oder ~/.config/pnpm/config.yaml
$XDG_CONFIG_HOME/pnpm/config.yaml oder ~/Library/Preferences/pnpm/config.yaml
%LOCALAPPDATA%\pnpm\config\config.yaml
yarn
~/.yarnrc.yml
~/.yarnrc.yml
%USERPROFILE%\.yarnrc.yml
pnpm
pnpm-workspace.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
bun
$XDG_CONFIG_HOME/.bunfig.toml oder ~/.bunfig.toml
$XDG_CONFIG_HOME/.bunfig.toml oder ~/.bunfig.toml
%USERPROFILE%\.bunfig.toml
uv
$XDG_CONFIG_HOME/uv/uv.toml oder ~/.config/uv/uv.toml
$XDG_CONFIG_HOME/uv/uv.toml oder ~/.config/uv/uv.toml
%APPDATA%\uv\uv.toml
pip
$XDG_CONFIG_HOME/pip/pip.conf oder ~/.config/pip/pip.conf
~/Library/Application Support/pip/pip.conf oder ~/.config/pip/pip.conf (oder $XDG_CONFIG_HOME/pip/pip.conf falls gesetzt)
%APPDATA%\pip\pip.ini
poetry
$XDG_CONFIG_HOME/pypoetry/config.toml oder ~/.config/pypoetry/config.toml
Benutzer-Konfigurationsdateien werden von ihren Standardorten gelesen (einschließlich XDG-basierter Pfade, sofern vom Tool unterstützt). Repository-Konfigurationen werden durch Abwärtssuche ab dem aktuellen Verzeichnis gefunden, wobei bekannte große Verzeichnisse (node_modules, .git, target, Library, .cache und andere) übersprungen werden, damit Scans schnell bleiben. Repository-weite .npmrc, .yarnrc.yml, pnpm-workspace.yaml, Renovate-Konfigurationen und Dependabot-Konfigurationen werden alle durchsucht. pnpm-Einstellungen können in ~/.npmrc (nur pnpm <= 10; pnpm >= 11 liest nur Auth-/Registry-Einstellungen aus .npmrc), der globalen pnpm-Konfigurationsdatei (rc bei pnpm <= 10, config.yaml bei pnpm >= 11) oder pnpm-workspace.yaml vorhanden sein; DepsGuard prüft alle drei Orte unabhängig. Für pip, uv und poetry löst DepsGuard die einzige effektive Benutzer-Konfiguration auf und meldet nur diese Datei, anstatt verdeckte Dateien separat zu markieren. pip und poetry führen ihre Konfigurationsdateien nach Priorität zusammen (die Datei mit der höchsten Priorität, die die Abkühlzeit setzt, gewinnt, oder der bevorzugte Ort, falls keine sie setzt); uv liest eine einzelne Benutzerdatei ($XDG_CONFIG_HOME/uv/uv.toml wenn XDG_CONFIG_HOME gesetzt ist, andernfalls ~/.config/uv/uv.toml) anstatt beide zusammenzuführen. Für bun, falls mehrere Benutzer-Konfigurationsdateien existieren (z. B. sowohl ein XDG-Pfad als auch ein Home-Verzeichnispfad), scannt DepsGuard jede vorhandene Datei separat. aube liest dieselbe ~/.npmrc wie npm/pnpm (minimumReleaseAge, in Minuten) und wird ebenfalls auf gefundenen Repository-weiten .npmrc-Dateien geprüft; pip und poetry werden auf ihrer Benutzer-Konfiguration (pip.conf / pypoetry/config.toml) gescannt.
Dringender Sicherheitsfix
Wenn die gepatchte Version neuer ist als Ihr Abkühlungsfenster, fügen Sie eine enge Ausnahme hinzu, installieren Sie den Fix und entfernen Sie dann die Ausnahme.
Bevorzugen Sie eine paketspezifische Ausnahme gegenüber einer Senkung der globalen Abkühlzeit. Dadurch bleibt die Verzögerung für alle anderen Abhängigkeiten erhalten.
Manager
So umgehen Sie die Abkühlzeit
npm
Führen Sie npm install <pkg>@<ver> --min-release-age=0 aus
pnpm
Fügen Sie einen Eintrag zu minimumReleaseAgeExclude in pnpm-workspace.yaml hinzu, führen Sie pnpm add <pkg>@<ver> aus und entfernen Sie dann den Eintrag. Das Ausschließen nach Paketnamen funktioniert ab pnpm 10.16+; das Festlegen einer bestimmten Version (<pkg>@<ver>) erfordert zusätzlich pnpm 10.19+. pnpm hat keine dokumentierte CLI-Überschreibung für minimumReleaseAge.
yarn
Fügen Sie <pkg> (oder einen Glob) zu npmPreapprovedPackages in .yarnrc.yml hinzu, oder führen Sie YARN_NPM_MINIMAL_AGE_GATE=0s yarn up <pkg>@<ver> für einen einzelnen Befehl aus. npmPreapprovedPackages befreit Treffer von allen Yarn-Paket-Gates, nicht nur vom Alters-Gate.
bun
Fügen Sie <pkg> zu install.minimumReleaseAgeExcludes in einer Repository-weiten bunfig.toml oder benutzerweiten ~/.bunfig.toml hinzu, oder führen Sie bun add <pkg>@<ver> --minimum-release-age 0 aus.
aube
Fügen Sie <pkg> zu minimumReleaseAgeExclude in .npmrc hinzu, oder setzen Sie AUBE_MINIMUM_RELEASE_AGE=0 (oder npm_config_minimum_release_age=0) für eine einzelne Installation.
uv
Fügen Sie "<pkg>" = false zu exclude-newer-package in uv.toml oder pyproject.toml hinzu, führen Sie uv add <pkg>==<ver> aus und entfernen Sie dann den Eintrag. exclude-newer-package ist eine separate paketweise Überschreibung des globalen exclude-newer-Grenzwerts. uv's CLI akzeptiert --exclude-newer-package PACKAGE=DATE, aber nicht PACKAGE=false.
pip
Führen Sie pip install <pkg>==<ver> --uploaded-prior-to=P0D für eine einzelne Installation aus. P0D deaktiviert die Abkühlzeit nur für diesen Befehl; pip hat keinen paketweisen Ausschluss in der Konfiguration.
Bevor Sie die Abkühlzeit umgehen:
Prüfen Sie, ob die CVE tatsächlich Ihre Nutzung betrifft.
Prüfen Sie, ob eine bekannte gute ältere Version bereits verfügbar ist. Ein Rollback kann sicherer sein.
Entfernen Sie temporäre Ausnahmen nach dem Upgrade.
Backups und Wiederherstellung
Vor dem Ändern einer Datei schreibt DepsGuard ein Backup nach ~/.depsguard/backups/.
Führen Sie depsguard restore aus, um Backups aufzulisten und eines wiederherzustellen.
- **Zero third-party crates**: bewusst für ein kleines sicherheitsnahes Tool; siehe `AGENTS.md`, wenn Sie diese Richtlinie ändern.
- **Farben** verwenden ANSI-Sequenzen; moderne Terminals auf Windows (z. B. Windows Terminal) werden unterstützt.
## Troubleshooting
| Symptom | Was zu tun ist |
|---------|-------------|
| `depsguard: command not found` | Stellen Sie sicher, dass das Installationsverzeichnis im `PATH` ist, oder verwenden Sie den vollständigen Pfad zur Binärdatei. |
| Berechtigungsfehler beim Schreiben der Konfiguration | DepsGuard bearbeitet nur Dateien in Ihrem Benutzerprofil; führen Sie es als normaler Benutzer aus, nicht mit erhöhten Rechten, es sei denn, diese Dateien gehören dem Administrator. |
| Tasten funktionieren unter Windows nicht | Verwenden Sie **Windows Terminal** oder ein anderes VT-fähiges Terminal; das alte `cmd.exe` unterstützt möglicherweise nicht alle Tasten. |
| pnpm-Workspaces fehlen | Stellen Sie sicher, dass sich `pnpm-workspace.yaml` in Ihrem Home-Verzeichnisbaum befindet; sehr ungewöhnliche Layouts werden möglicherweise nicht erkannt. |
| `cargo install` schlägt fehl | Installieren Sie Rust über [rustup](https://rustup.rs/) und verwenden Sie Rust **≥ 1.74**. |
## Hilfe & Feedback
- [Einen Fehler melden oder eine Funktion anfordern](https://github.com/arnica/depsguard/issues)
- [Eine Sicherheitslücke melden](https://github.com/arnica/depsguard/security/advisories/new) (siehe [`SECURITY.md`](https://github.com/arnica/depsguard/blob/main/SECURITY.md))
- Der Entwicklungsablauf für Mitwirkende befindet sich in [`AGENTS.md`](https://github.com/arnica/depsguard/blob/main/AGENTS.md).
## Anleitungen
Ausführliche Anleitungen auf [depsguard.com](https://depsguard.com) erklären jede Härtungseinstellung und die Lieferkettenangriffe, gegen die sie schützen:
- [So schützen Sie sich vor npm-Lieferkettenangriffen](https://depsguard.com/guide/) (die vollständige Härtungsanleitung)
- [Abkühlphase für Abhängigkeiten (Mindestveröffentlichungsalter)](https://depsguard.com/cooldown/)
- [Installationsskripte mit ignore-scripts blockieren](https://depsguard.com/ignore-scripts/)
- [Nicht vertrauenswürdige transitive Abhängigkeiten blockieren (block-exotic-subdeps)](https://depsguard.com/block-exotic-subdeps/)
- [Bei nicht überprüften Build-Skripten fehlschlagen (strict-dep-builds)](https://depsguard.com/strict-dep-builds/)
- [Herabstufungen der Herkunft blockieren (trust-policy)](https://depsguard.com/trust-policy/)
- Vorfallberichte: [axios](https://depsguard.com/axios-npm-attack/) · [Shai-Hulud](https://depsguard.com/shai-hulud/) · [TanStack](https://depsguard.com/tanstack-npm-attack/)
## Siehe auch
- [**Dependency Cooldowns** (`cooldowns.dev`)](https://cooldowns.dev/): ein Referenzleitfaden und begleitender Shell-Helfer (`cooldowns.sh`), der sich speziell auf **Abkühlphasen für Mindestveröffentlichungsalter** konzentriert. Ergänzt DepsGuard: Es deckt eine breitere Palette von Ökosystemen auf der Abkühlachse ab (pip, uv, npm, pnpm, Yarn, Bun, Deno, Cargo), während DepsGuard npm/pnpm/yarn/bun/aube/uv/pip/poetry sowie Renovate/Dependabot abdeckt und zusätzliche Härtungseinstellungen (`ignore-scripts`, `block-exotic-subdeps`, `trust-policy`, `strict-dep-builds`) mit einem interaktiven TUI, Diff-Vorschau und Backup/Wiederherstellung bietet.
## License
MIT
---
**Links:** [Repository](https://github.com/arnica/depsguard) · [Dokumentationsseite](https://depsguard.com)
10080 (Minuten)
Verzögert neue Versionen um 7 Tage
pnpm
global config.yaml (pnpm >= 11)
blockExoticSubdeps
true
Blockiert nicht vertrauenswürdige transitive Abhängigkeiten
pnpm
global config.yaml (pnpm >= 11)
trustPolicy
no-downgrade
Blockiert Herkunfts-Downgrades
pnpm
global config.yaml (pnpm >= 11)
strictDepBuilds
true
Fehler bei nicht geprüften Build-Skripten
pnpm
global config.yaml (pnpm >= 11)
ignoreScripts
true
Blockiert bösartige Installationsskripte
yarn
.yarnrc.yml
npmMinimalAgeGate
7d
Verzögert neue Versionen um 7 Tage (erfordert yarn >= 4.10)
pnpm
pnpm-workspace.yaml
minimumReleaseAge
10080 (Minuten)
Verzögert neue Versionen um 7 Tage (erfordert pnpm >= 10.16)
pnpm
pnpm-workspace.yaml
strictDepBuilds
true
Fehler bei nicht geprüften Build-Skripten (erfordert pnpm >= 10.3)
Fügen Sie <pkg> zu solver.min-release-age-exclude (kommagetrennt) in poetry.toml/config.toml hinzu, führen Sie poetry add <pkg>@<ver> aus und entfernen Sie dann den Eintrag. solver.min-release-age-exclude-source befreit stattdessen jedes Paket von einem benannten Index.
Renovate
Sicherheitsupdates umgehen minimumReleaseAge bereits. Für ein Versionsupdate fügen Sie einen packageRules-Eintrag mit matchPackageNames: ["<pkg>"] und minimumReleaseAge: null hinzu.
Dependabot
Sicherheitsupdates umgehen cooldown bereits. Für ein Versionsupdate fügen Sie <pkg> zu cooldown.exclude hinzu.