0003 — Οι κόμβοι cTrader CLI είναι HTTP + JWT, όχι SSH/shell
Πλαίσιο
Τα κοντέινερ backtest/run εκτελούνται σε απομακρυσμένους κόμβους. Η προφανής προσέγγιση — SSH και εκτέλεση docker — δίνει στη κύρια εφαρμογή αυθαίρετη εκτέλεση απομακρυσμένου κώδικα και χρόνια διαξιφίστηκα σε κάθε κόμβο. Αυτό είναι μεγάλη ακτίνα έκρηξης για ένα σύστημα που εκτελεί αναξιόπιστα cBots χρήστη.
Απόφαση
Κάθε απομακρυσμένος κόμβος εκτελεί ένα αυτόνομο CtraderCliNode πράκτορα HTTP με όχι SSH και όχι κέλυφος. Η
κύρια εφαρμογή καλεί τον πράκτορα μέσω HTTP. κάθε αίτημα φέρει βραχύβιο HS256 JWT (5 λεπτά,
iss=app-main / aud=app-node) υπογεγραμμένο με το μυστικό αυτού του κόμβου. Ο πράκτορας:
- εκτελεί μόνο εικόνες που ταιριάζουν
AllowedImagePrefix(με ένα όριο διαδρομής ώστεghcr.io/spotwareνα μην ταιριάζει μεghcr.io/spotware-evil/...); - exec docker μέσω
ArgumentList— ποτέ μια συμβολοσειρά κελύφους; - είναι stateless, εντοπίζοντας κοντέινερ από την ετικέτα
app.instance; - αυτορεγιστράρησης και χτύπησης καρδιάς σε
POST /api/nodes/register. η κύρια εφαρμογή εξασφαλίζει τοCtraderCliNodeκατά όνομα, οπότε ένας κόμβος επιζεί στις αλλαγές IP.
Συνέπειες
- Ένα διαρρύγη token αίτησης λήγει σε λεπτά. δεν υπάρχει μόνιμο διαπιστευτήριο κελύφους για κλοπή.
- Η ικανότητα του πράκτορα περιορίζεται σε "εκτέλεση επιτρεπόμενης εικόνας" — δεν μπορεί να μετατραπεί σε γενικό απομακρυσμένο κέλυφος.
- Η ταυτότητα κόμβου είναι βασισμένη στο όνομα, οπότε η αναπροσαρμογή ενός κόμβου με ένα νέο IP δεν ορφανοποιεί το ιστορικό του.