
safe-chain v1.5.15
Schützen Sie sich mit Aikido Safe Chain vor Schadcode, der über npm, yarn, pnpm, npx, pnpx, pip, uv und poetry installiert wird. Kostenlos nutzbar, keine Tokens erforderlich.
Aikido Safe Chain
- ✅ Blockieren Sie Malware auf Entwickler-Laptops und in CI/CD
- ✅ Unterstützt npm und PyPI – weitere Paketmanager folgen
- ✅ Blockiert Pakete, die jünger als 48 Stunden sind, ohne Ihren Build zu unterbrechen
- ✅ Ohne Token, kostenlos, keine Build-Daten werden geteilt
Benötigen Sie Schutz über npm & PyPI hinaus?
Aikido Device Protection baut auf Safe Chain auf und erweitert die Paket- und Erweiterungssicherheit auf weitere Ökosysteme: npm, PyPI, VS Code, Open VSX – (Cursor, Windsurf, Kiro, Vs Codium, ...), Maven, NuGet, Chrome-Erweiterungen, Go, Skills.sh-KI-Fähigkeiten, Ruby, Rust und mehr.
Erhalten Sie zentrales Richtlinienmanagement, Workflows für Anfrage und Genehmigung sowie Transparenz über jede Entwickler-Workstation in Ihrer Organisation. Angetrieben von demselben Aikido-Intel-Feed. Stellen Sie es manuell bereit oder verwalten Sie es über Ihr MDM-Tool (Jamf, Fleet oder Iru).
Aikido Safe Chain unterstützt die folgenden Paketmanager:
- 📦 npm
- 📦 npx
- 📦 yarn
- 📦 pnpm
- 📦 pnpx
- 📦 rush
- 📦 rushx
- 📦 bun
- 📦 bunx
- 📦 pip
- 📦 pip3
- 📦 uv
- 📦 poetry
- 📦 uvx
- 📦 pipx
- 📦 pdm
Verwendung

Installation
Die Installation von Aikido Safe Chain ist mit dem Installationsskript einfach.
Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh
&& rm /tmp/install-safe-chain.sh
### Windows (PowerShell)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1"
Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing
$expectedHash = "5FC22EEF74814BEF6828AA07C0EAEC79598F343F98B94A4ACAB823769AD56DA1"
if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) {
Remove-Item $installer -ErrorAction SilentlyContinue
throw "Checksum verification failed for install-safe-chain.ps1"
}
& $installer
Remove-Item $installer
Die Installationsbefehle oben verweisen immer auf eine bestimmte Version. Um eine andere Version zu installieren, ersetzen Sie die Version durch die gewünschte Versionsnummer. Alle verfügbaren Versionen finden Sie auf der Releases-Seite.
Integrität des Downloads
Die Installationsskripte werden über eine versionierte Release-URL bereitgestellt (releases/download/1.5.15/...). GitHub-Releases sind unveränderlich – sobald ein Artefakt unter einer versionierten URL veröffentlicht wurde, kann es nicht mehr geändert oder ersetzt werden. Die heruntergeladene Datei ist daher garantiert exakt das, was veröffentlicht wurde.
Installation überprüfen
-
❗Starten Sie Ihr Terminal neu, um die Aikido Safe Chain verwenden zu können.
- Dieser Schritt ist entscheidend, da er sicherstellt, dass die Shell-Aliase für npm, npx, yarn, pnpm, pnpx, rush, rushx, bun, bunx, pip, pip3, poetry, uv, uvx, pipx und pdm korrekt geladen werden. Wenn Sie Ihr Terminal nicht neu starten, sind die Aliase nicht verfügbar.
-
Überprüfen Sie die Installation, indem Sie den Verifizierungsbefehl ausführen: ```shell npm safe-chain-verify pnpm safe-chain-verify pip safe-chain-verify uv safe-chain-verify
Any other supported package manager: {packagemanager} safe-chain-verify
- Die Ausgabe sollte "OK: Safe-chain works!" anzeigen, was bestätigt, dass Aikido Safe Chain ordnungsgemäß installiert ist und läuft.
-
(Optional) Test der Malware-Blockierung durch den Versuch, ein Testpaket zu installieren:
Für JavaScript/Node.js: ```shell npm install safe-chain-test
Für Python: ```shell pip3 install safe-chain-pi-test
- Die Ausgabe sollte zeigen, dass die Aikido Safe Chain die Installation dieser Testpakete blockiert, da sie als Schadsoftware eingestuft werden.
Wenn Sie `npm`, `npx`, `yarn`, `pnpm`, `pnpx`, `rush`, `rushx`, `bun`, `bunx`, `pip`, `pip3`, `uv`, `uvx`, `poetry`, `pipx`- und `pdm`-Befehle ausführen, prüft die Aikido Safe Chain automatisch die Pakete, die Sie installieren möchten, auf Schadsoftware. Dabei werden auch Python-Modulaufrufe für pip abgefangen, sofern verfügbar (z. B. `python -m pip install ...`, `python3 -m pip download ...`). Wenn Schadsoftware erkannt wird, werden Sie aufgefordert, den Befehl zu beenden.
Sie können die installierte Version überprüfen, indem Sie Folgendes ausführen:```shell
safe-chain --version
So funktioniert es
Malware-Blockierung
Die Aikido Safe Chain funktioniert, indem sie einen leichtgewichtigen Proxy-Server ausführt, der Paket-Downloads von der npm-Registry und PyPI abfängt. Wenn Sie npm-, npx-, yarn-, pnpm-, pnpx-, rush-, rushx-, bun-, bunx-, pip-, pip3-, uv-, uvx-, poetry-, pipx- oder pdm-Befehle ausführen, werden alle Paket-Downloads über diesen lokalen Proxy geleitet, der Pakete in Echtzeit gegen Aikido Intel - Open Sources Threat Intelligence prüft. Wenn in einem Paket (einschließlich tiefer Abhängigkeiten) Malware erkannt wird, blockiert der Proxy den Download, bevor der schädliche Code Ihren Rechner erreicht.
Mindestalter von Paketen
Die Safe Chain führt Mindestalter-Prüfungen für Pakete in unterstützten Ökosystemen durch.
Die aktuelle Durchsetzung unterscheidet sich je nach Ökosystem:
- npm-basierte Paketmanager:
- Bei der normalen Paketauflösung unterdrückt die Safe Chain Versionen, die neuer als das konfigurierte Mindestalter sind, aus den von der Registry zurückgegebenen Paketmetadaten.
- Für direkte Paket-Download-Anfragen, die diesen Metadatenfluss umgehen, kann die Safe Chain die Anfrage selbst mithilfe einer zwischengespeicherten Liste neu veröffentlichter Pakete blockieren.
- Python-Paketmanager:
- Bei der Paketauflösung unterdrückt die Safe Chain zu junge Dateien und Releases aus PyPI-Metadatenantworten.
- Für direkte Paket-Download-Anfragen, die diesen Metadatenfluss umgehen, kann die Safe Chain die Anfrage selbst mithilfe einer zwischengespeicherten Liste neu veröffentlichter Pakete blockieren.
Standardmäßig beträgt das Mindestalter für Pakete 48 Stunden. Dies bietet eine zusätzliche Sicherheitsebene während des kritischen Zeitraums, in dem neu veröffentlichte Pakete am anfälligsten dafür sind, unerkannte Bedrohungen zu enthalten. Sie können diesen Schwellenwert konfigurieren oder diesen Schutz vollständig umgehen – siehe Abschnitt Konfiguration des Mindestalters weiter unten.
Shell-Integration
Die Aikido Safe Chain integriert sich in Ihre Shell, um eine nahtlose Erfahrung bei der Verwendung von npm, npx, yarn, pnpm, pnpx, rush, rushx, bun, bunx und den Python-Paketmanagern (pip, uv, uvx, poetry, pipx, pdm) zu bieten. Sie richtet Aliase für diese Befehle ein, sodass diese von den Aikido-Safe-Chain-Befehlen umschlossen werden, die den Proxy-Server verwalten, bevor sie die ursprünglichen Befehle ausführen. Wir unterstützen derzeit:
- ✅ Bash
- ✅ Zsh
- ✅ Fish
- ✅ PowerShell
- ✅ PowerShell Core
Weitere Informationen zur Shell-Integration finden Sie in der Dokumentation zur Shell-Integration.
Deinstallation
Um die Aikido Safe Chain zu deinstallieren, verwenden Sie unseren Einzeilen-Deinstallierer:
Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/uninstall-safe-chain.sh | sh
### Windows (PowerShell)```powershell
iex (iwr "https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/uninstall-safe-chain.ps1" -UseBasicParsing)
❗Starten Sie Ihr Terminal nach der Deinstallation neu, um sicherzustellen, dass alle Aliase entfernt werden.
Konfiguration
Protokollierung
Sie können die Ausgabe von Aikido Safe Chain über das --safe-chain-logging-Flag oder die Umgebungsvariable SAFE_CHAIN_LOGGING steuern.
Konfigurationsoptionen
Sie können die Protokollierungsstufe über mehrere Quellen festlegen (in der Reihenfolge ihrer Priorität):
-
CLI-Argument (höchste Priorität):
-
--safe-chain-logging=silent- Unterdrückt die gesamte Ausgabe von Aikido Safe Chain, außer wenn Malware blockiert wird. Die Ausgabe des Paketmanagers wird wie gewohnt auf stdout geschrieben und Safe Chain schreibt nur eine kurze Meldung, wenn es Malware blockiert hat und den Prozess zum Beenden veranlasst.npm install express --safe-chain-logging=silent -
--safe-chain-logging=verbose- Aktiviert die detaillierte Diagnoseausgabe von Aikido Safe Chain. Nützlich zur Fehlersuche oder um zu verstehen, was Safe Chain hinter den Kulissen tut.npm install express --safe-chain-logging=verbose
-
-
Umgebungsvariable: ```shell export SAFE_CHAIN_LOGGING=verbose npm install express
Gültige Werte: silent, normal, verbose
Dies ist nützlich, um eine Standard-Protokollierungsstufe für alle Paketmanager-Befehle in Ihrer Terminalsitzung oder CI/CD-Umgebung festzulegen.
Datei-Logging
Sie können die Ausgabe von Aikido Safe Chain mithilfe des Flags --safe-chain-log-file oder der Umgebungsvariablen SAFE_CHAIN_LOG_FILE in eine Protokolldatei spiegeln. Die Dateiprotokollierung ist standardmäßig deaktiviert und wird aktiviert, wenn ein Pfad festgelegt ist. Das Dateiformat (--safe-chain-log-file-format) und die Ausführlichkeit (--safe-chain-log-file-verbosity) werden unabhängig von der Terminalausgabe gesteuert.
Konfigurationsoptionen
Legen Sie diese über eine der folgenden Optionen fest (in der Reihenfolge der Priorität):
- CLI-Argument (höchste Priorität): ```shell
npm install express
--safe-chain-log-file=~/safe-chain.log
--safe-chain-log-file-format=plain
--safe-chain-log-file-verbosity=normal - Umgebungsvariable: ```shell
export SAFE_CHAIN_LOG_FILE=~/safe-chain.log
export SAFE_CHAIN_LOG_FILE_FORMAT=plain
export SAFE_CHAIN_LOG_FILE_VERBOSITY=normal
- Konfigurationsdatei (
~/.safe-chain/config.json): ```json { "logFile": "~/safe-chain.log", "logFileFormat": "plain", "logFileVerbosity": "normal" }
logFileFormat — json (Standard) oder plain.
logFileVerbosity — silent, normal oder verbose (Standard). Unabhängig von --safe-chain-logging.
Mindestalter von Paketen
Sie können konfigurieren, wie lange Pakete existieren müssen, bevor Safe Chain ihre Installation erlaubt. Standardmäßig müssen Pakete mindestens 48 Stunden alt sein, bevor sie installiert werden können.
Für npm-basierte Paketmanager hat diese Prüfung derzeit zwei Durchsetzungsmodi:
- Safe Chain unterdrückt zu junge Versionen in den Paketmetadaten während der normalen Abhängigkeitsauflösung.
- Safe Chain blockiert direkte Paketdownload-Anfragen, wenn sie mit der zwischengespeicherten Liste neu veröffentlichter Pakete abgeglichen werden.
Für Python-Paketmanager hat diese Prüfung derzeit zwei Durchsetzungsmodi:
- Safe Chain unterdrückt zu junge Dateien und Releases in den PyPI-Metadaten während der Abhängigkeitsauflösung.
- Safe Chain blockiert direkte Paketdownload-Anfragen, wenn sie mit der zwischengespeicherten Liste neu veröffentlichter Pakete abgeglichen werden.
Konfigurationsoptionen
Sie können das Mindestalter von Paketen über mehrere Quellen festlegen (in der Reihenfolge ihrer Priorität):
- CLI-Argument (höchste Priorität): ```shell
npm install express --safe-chain-minimum-package-age-hours=48
- Umgebungsvariable: ```shell
export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_HOURS=48
npm install express
- Konfigurationsdatei (
~/.safe-chain/config.json): ```json { "minimumPackageAgeHours": 48 }
Pakete ausschließen
Schließen Sie vertrauenswürdige Pakete über eine Umgebungsvariable oder Konfigurationsdatei von der Filterung nach Mindestalter aus (beide werden zusammengeführt). Verwenden Sie @scope/*, um allen Paketen einer Organisation zu vertrauen:```shell
export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="@aikidosec/*"
Bitte fügen Sie den zu übersetzenden Markdown-Inhalt ein.```json
{
"npm": {
"minimumPackageAgeExclusions": ["@aikidosec/*"]
},
"pip": {
"minimumPackageAgeExclusions": ["requests"]
}
}
Benutzerdefinierte Registries
Konfigurieren Sie Safe Chain so, dass Pakete aus benutzerdefinierten oder privaten Registries gescannt werden.
Unterstützte Ökosysteme:
- Node.js
- Python
Konfigurationsoptionen
Sie können benutzerdefinierte Registries über Umgebungsvariable oder Konfigurationsdatei festlegen. Beide Quellen werden zusammengeführt.
- Umgebungsvariable (kommagetrennt): ```shell
export SAFE_CHAIN_NPM_CUSTOM_REGISTRIES="npm.company.com,registry.internal.net"
export SAFE_CHAIN_PIP_CUSTOM_REGISTRIES="pip.company.com,registry.internal.net"
- Config-Datei (
~/.safe-chain/config.json): ```json { "npm": { "customRegistries": ["npm.company.com", "registry.internal.net"] }, "pip": { "customRegistries": ["pip.company.com", "registry.internal.net"] } }
PYPI-Konfigurationsdatei
Wenn Sie für die pip-Konfiguration auf eine pip.conf-Datei angewiesen sind, müssen Sie pip explizit über die Umgebungsvariable PIP_CONFIG_FILE darauf verweisen, damit Safe Chain sie zusammenführen kann.
Safe Chain führt pip hinter seinem MITM-Proxy aus und schreibt eine temporäre pip-Konfigurationsdatei, um sein Zertifikat und seine Proxy-Einstellungen einzufügen. Wenn PIP_CONFIG_FILE gesetzt ist, führt Safe Chain seine Einstellungen in eine Kopie Ihrer Datei zusammen (Ihre ursprüngliche Datei wird nie geändert), sodass Ihre index-url, Anmeldedaten und andere Optionen erhalten bleiben. Wenn PIP_CONFIG_FILE nicht gesetzt ist, könnte die Benutzerkonfiguration von pip (z. B. ~/.config/pip/pip.conf) durch die temporäre Datei von Safe Chain überschrieben werden und Ihre Einstellungen werden nicht übernommen.
Malware-Listen-Basis-URL
Konfigurieren Sie Safe Chain so, dass es Malware-Datenbanken und Listen neuer Pakete von einer benutzerdefinierten Spiegel-URL abruft. Auf diese Weise können Sie eine eigene Kopie der Aikido-Malware-Datenbank hosten.
Konfigurationsoptionen
Sie können die Basis-URL für die Malware-Liste über mehrere Quellen festlegen (in der Reihenfolge der Priorität):
- CLI-Argument (höchste Priorität): ```shell
npm install express --safe-chain-malware-list-base-url=https://your-mirror.com
- Umgebungsvariable: ```shell
export SAFE_CHAIN_MALWARE_LIST_BASE_URL=https://your-mirror.com
npm install express
- Konfigurationsdatei (
~/.safe-chain/config.json): ```json { "malwareListBaseUrl": "https://your-mirror.com" }
Die Basis-URL sollte auf einen Server verweisen, der die Struktur von https://malware-list.aikido.dev/ spiegelt, einschließlich der folgenden Pfade:
/malware_predictions.json(JavaScript-Ökosystem-Malware-Datenbank)/malware_pypi.json(Python-Ökosystem-Malware-Datenbank)/releases/npm.json(JavaScript-Liste neuer Pakete)/releases/pypi.json(Python-Liste neuer Pakete)
Projektkonfigurationsdatei
Zusätzlich zur Konfigurationsdatei im Home-Verzeichnis (~/.safe-chain/config.json) unterstützt Safe Chain eine Projektkonfigurationsdatei, sodass Einstellungen in einem Repository eingecheckt und teamweit geteilt werden können, anstatt pro Maschine konfiguriert zu werden.
Fügen Sie einen Abschnitt safe-chain: zur .aikido-Datei im Stammverzeichnis Ihres Repositorys hinzu (dieselbe Datei, die auch von anderen Aikido-Tools verwendet wird; Safe Chain liest nur seinen eigenen Abschnitt safe-chain: und ignoriert den Rest). Wird er gefunden, werden seine Einstellungen mit Ihrer Konfigurationsdatei im Home-Verzeichnis zusammengeführt: Werte aus der Projektkonfiguration haben Vorrang, und Arrays (wie customRegistries) werden aus beiden Dateien kombiniert, statt dass eine die andere ersetzt.
Nur die folgenden Einstellungen können aus einer Projektkonfigurationsdatei festgelegt werden:```yaml safe-chain: minimumPackageAgeHours: 48 npm: customRegistries: - npm.company.com minimumPackageAgeExclusions: - "@aikidosec/*" pip: customRegistries: - pip.company.com minimumPackageAgeExclusions: - requests
Einstellungen wie `scanTimeout`, `malwareListBaseUrl` und die `logFile*`-Optionen können nicht aus einer Projektkonfigurationsdatei festgelegt werden – sie können nur aus Ihrer Konfiguration im Home-Verzeichnis, CLI-Argumenten oder Umgebungsvariablen stammen.
## Benutzerdefiniertes Installationsverzeichnis
Standardmäßig installiert sich Safe Chain in `~/.safe-chain`. Sie können dies ändern, indem Sie dem Installationsprogramm ein explizites Installationsverzeichnis übergeben. Dies ist nützlich für systemweite Installationen (z. B. in einem Docker-Image) oder wenn Sie Konflikte mit anderen Tools vermeiden müssen.
Wenn gesetzt, werden alle Safe-Chain-Daten (Binärdatei, Shims, Skripte, Konfiguration) unter dem benutzerdefinierten Verzeichnis abgelegt statt unter `~/.safe-chain`.
### Unix/Linux/macOS```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
&& echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c - \
&& sh /tmp/install-safe-chain.sh --install-dir /usr/local/.safe-chain \
&& rm /tmp/install-safe-chain.sh
Windows```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "5FC22EEF74814BEF6828AA07C0EAEC79598F343F98B94A4ACAB823769AD56DA1" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -InstallDir 'C:\ProgramData\safe-chain' Remove-Item $installer
# Verwendung in CI/CD
Sie können Ihre CI/CD-Pipelines vor bösartigen Paketen schützen, indem Sie Aikido Safe Chain in Ihren Build-Prozess integrieren. Dadurch wird sichergestellt, dass alle Pakete, die während Ihrer automatisierten Builds installiert werden, vor der Installation auf Malware überprüft werden.
## Installation für CI/CD
Verwenden Sie das `--ci`-Flag, um Aikido Safe Chain automatisch für CI/CD-Umgebungen zu konfigurieren. Dadurch werden ausführbare Shims im PATH eingerichtet, anstelle von Shell-Aliassen.
### Unix/Linux/macOS (GitHub Actions, Azure Pipelines, usw.)```shell
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh \
&& echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c - \
&& sh /tmp/install-safe-chain.sh --ci \
&& rm /tmp/install-safe-chain.sh
Windows (Azure Pipelines, usw.)```powershell
$installer = Join-Path $env:TEMP "install-safe-chain.ps1" Invoke-WebRequest "https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.ps1" -OutFile $installer -UseBasicParsing $expectedHash = "5FC22EEF74814BEF6828AA07C0EAEC79598F343F98B94A4ACAB823769AD56DA1" if ((Get-FileHash $installer -Algorithm SHA256).Hash -ne $expectedHash) { Remove-Item $installer -ErrorAction SilentlyContinue throw "Checksum verification failed for install-safe-chain.ps1" } & $installer -ci Remove-Item $installer
## Unterstützte Plattformen
- ✅ **GitHub Actions**
- ✅ **Azure Pipelines**
- ✅ **CircleCI**
- ✅ **Jenkins**
- ✅ **Bitbucket Pipelines**
- ✅ **GitLab Pipelines**
## GitHub Actions Beispiel```yaml
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
- name: Install safe-chain
run: |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- name: Install dependencies
run: npm ci
Azure DevOps Beispiel```yaml
-
task: NodeTool@0 inputs: versionSpec: "22.x" displayName: "Install Node.js"
-
script: | curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c - sh /tmp/install-safe-chain.sh --ci rm /tmp/install-safe-chain.sh displayName: "Install safe-chain"
-
script: npm ci displayName: "Install dependencies"
## CircleCI-Beispiel```yaml
version: 2.1
jobs:
build:
docker:
- image: cimg/node:lts
steps:
- checkout
- run: |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- run: npm ci
workflows:
build_and_test:
jobs:
- build
Jenkins-Beispiel
Hinweis: Es wird davon ausgegangen, dass Node.js und npm auf dem Jenkins-Agenten installiert sind.```groovy pipeline { agent any
environment { // Jenkins does not automatically persist PATH updates from setup-ci, // so add the shims + binary directory explicitly for all stages. // If you installed into a custom directory, replace ~/.safe-chain with that path here. PATH = "${env.HOME}/.safe-chain/shims:${env.HOME}/.safe-chain/bin:${env.PATH}" }
stages { stage('Install safe-chain') { steps { sh ''' set -euo pipefail
# Install Safe Chain for CI
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
'''
}
}
stage('Install project dependencies etc...') {
steps {
sh '''
set -euo pipefail
npm ci
'''
}
}
} }
## Bitbucket Pipelines Beispiel```yaml
image: node:22
steps:
- step:
name: Install
script:
- |
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh
echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c -
sh /tmp/install-safe-chain.sh --ci
rm /tmp/install-safe-chain.sh
- export PATH=~/.safe-chain/shims:~/.safe-chain/bin:$PATH
- npm ci
Nach der Einrichtung sind alle nachfolgenden Paketmanager-Befehle in Ihrer CI-Pipeline automatisch durch die Malware-Erkennung von Aikido Safe Chain geschützt.
Beispiel für GitLab-Pipelines
Um safe-chain in GitLab-Pipelines hinzuzufügen, müssen Sie es in dem Image installieren, das die Pipeline ausführt. Dies kann wie folgt erfolgen:
-
Definieren Sie ein dockerfile, um Ihren Build auszuführen ```dockerfile FROM node:lts
Install safe-chain
RUN curl -fsSL https://github.com/AikidoSec/safe-chain/releases/download/1.5.15/install-safe-chain.sh -o /tmp/install-safe-chain.sh
&& echo "de0565e3d6346407a604e84e639e95fea8758748063da2216bbfdca5feda5dd2 /tmp/install-safe-chain.sh" | sha256sum -c -
&& sh /tmp/install-safe-chain.sh --ci
&& rm /tmp/install-safe-chain.shAdd safe-chain to PATH (update paths if you used a custom install dir)
ENV PATH="/root/.safe-chain/shims:/root/.safe-chain/bin:${PATH}"
-
Erstellen Sie das Docker-Image in Ihrer CI-Pipeline ```yaml build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest
-
Verwenden Sie das Image in Ihrer Pipeline: ```yaml npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci
Die vollständige Pipeline für dieses Beispiel sieht folgendermaßen aus:```yaml stages:
- build-image
- install
build-image: stage: build-image image: docker:latest services: - docker:dind script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:latest
npm-ci: stage: install image: $CI_REGISTRY_IMAGE:latest script: - npm ci
# Fehlerbehebung
Haben Sie Probleme? Hilfe zu häufigen Problemen finden Sie im [Leitfaden zur Fehlerbehebung](https://github.com/aikidosec/safe-chain/blob/HEAD/docs/troubleshooting.md).
# Probleme melden
Wenn Sie auf Probleme stoßen:
1. Besuchen Sie [GitHub Issues](https://github.com/AikidoSec/safe-chain/issues)
2. Geben Sie Folgendes an:
* Betriebssystem und Version
* Shell-Typ und -Version
* Ausgabe von `safe-chain --version`
* Ausgabe der Verifikationsbefehle
* Ausführliche Protokolle des fehlgeschlagenen Befehls (fügen Sie das Argument `--safe-chain-logging=verbose` hinzu)