Skip to main content

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 δεν ορφανοποιεί το ιστορικό του.