Μετάβαση στο περιεχόμενο

Sandbox και ασφάλεια

Ένας πράκτορας διαβάζει αρχεία, εκτελεί εντολές κελύφους και καλεί εξωτερικά API για λογαριασμό σας. Η αποτυχία που σας απασχολεί σπάνια είναι κακή πρόθεση — είναι ένας πράκτορας που παρερμηνεύει μια διαδρομή και ξαναγράφει το checkout στο οποίο εργάζεστε, ή ένας που κάνει push σε έναν κλάδο που δεν είχατε τελειώσει τον έλεγχό του. Το ερώτημα, λοιπόν, που πρέπει να απαντήσει το προϊόν δεν είναι «είναι ο πράκτορας αξιόπιστος» αλλά «ποιο είναι το εύρος της ζημιάς όταν κάνει λάθος».

Το Control Center το απαντά σε επίπεδα και τα επίπεδα είναι ανεξάρτητα επίτηδες. Αν λείπει ένα, τα υπόλοιπα εξακολουθούν να ισχύουν. Αυτό έχει σημασία, επειδή το εξωτερικότερο επίπεδο — το sandbox του λειτουργικού συστήματος — είναι το μόνο υπό αίρεση: εξαρτάται από το αν ο κεντρικός υπολογιστής παρέχει backend και στα Windows κανένας δεν το κάνει.

Τι περιορίζει πραγματικά έναν πράκτορα

Ενότητα με τίτλο «Τι περιορίζει πραγματικά έναν πράκτορα»

Πέντε πράγματα οριοθετούν μια εκτέλεση πράκτορα σε κάθε κεντρικό υπολογιστή, με ή χωρίς sandbox. Κανένα από αυτά δεν είναι όριο πυρήνα· όλα τους είναι πραγματικά. Όπου ο κεντρικός υπολογιστής παρέχει backend, το sandbox του λειτουργικού συστήματος κάθεται από πάνω τους και η ενότητα «Τι προσθέτει το sandbox και πού σταματά» παρακάτω καλύπτει τι αλλάζει αυτό.

Το δικό του worktree copy-on-write. Κάθε συνομιλία προετοιμάζει το δικό της checkout για κάθε συνδεδεμένο αποθετήριο, κλωνοποιημένο copy-on-write μέσω του ενσωματωμένου native rift και όχι αντιγραμμένο byte προς byte, ώστε η απομόνωση να είναι αρκετά φθηνή για να είναι η προεπιλογή. Το καταχωρισμένο αποθετήριο που προσθέσατε στον χώρο εργασίας δεν είναι ο κατάλογος στον οποίο εργάζεται ο πράκτορας — δύο συνομιλίες που αγγίζουν το ίδιο αποθετήριο δεν βλέπουν η μία τις αλλαγές της άλλης και καμία δεν επεξεργάζεται το checkout σας.

Αξίζει να είμαστε ακριβείς ως προς την υποδιαίρεση: το worktree είναι ανά συνομιλία, όχι ανά πράκτορα. Δύο πράκτορες στην ίδια συνομιλία παίρνουν ξεχωριστούς καταλόγους εργασίας overlay που μοιράζονται το repos/ αυτής της συνομιλίας — που είναι και το ζητούμενο, αφού συνεργάζονται σε μία αλλαγή — ενώ οι ιδιωτικοί κατάλογοι των πρακτόρων παραμένουν χωριστοί. Το copy-on-write είναι το μόνο backend όπου διατίθεται το rift: ένα σύστημα αρχείων που δεν μπορεί να κάνει reflink, ή ένας κατάλογος δεδομένων σε διαφορετικό τόμο από το αποθετήριο, αποτυγχάνει στην προετοιμασία αντί να καταφύγει σε εναλλακτική λύση. Τα Windows αποτελούν την εξαίρεση — εκεί δεν υπάρχει backend copy-on-write, οπότε το git worktree είναι το backend και όχι μια αθόρυβη υποβάθμιση.

Περιορισμός διαδρομών στα εργαλεία αρχείων του ενσωματωμένου harness. Τα εργαλεία read, write, edit, apply_patch, search, find και search_files του harness επιλύουν κάθε διαδρομή με βάση τον κατάλογο εργασίας της εκτέλεσης συν κοινές ρίζες — τον κατάλογο repos/ της συνομιλίας, όπου ζουν τα worktrees, και τον κατάλογο συνημμένων του χώρου όταν υπάρχει — και αρνούνται οτιδήποτε καταλήγει έξω από αυτές. Οι απόλυτες διαδρομές γίνονται δεκτές μόνο αν ήταν ήδη μέσα. Ένας symlink μέσα στο worktree που δείχνει έξω από αυτό επιλύεται και απορρίπτεται επίσης. Γι’ αυτό ένας πράκτορας δεν μπορεί να κάνει write στο ~/.ssh ακόμη και όταν δεν υπάρχει καθόλου sandbox στο κάδρο.

Η επιφάνεια εργαλείων της λειτουργίας. Η λειτουργία μιας συνομιλίας καθορίζει ποια εργαλεία υλοποιούνται καθόλου για την εκτέλεση. Στις λειτουργίες μόνο για ανάγνωση (plan, review, orchestrate) τα εργαλεία που τροποποιούν δεδομένα απλώς δεν υπάρχουν στο μητρώο και η πολιτική εντολών κελύφους αυτών των λειτουργιών απορρίπτει ευθέως κάθε εντολή που τροποποιεί δεδομένα — git commit, git push, npm install, docker και τα λοιπά — αντί να ζητά έγκριση γι’ αυτές. Ένα εργαλείο που δεν υπάρχει δεν μπορεί να κληθεί, κάτι που είναι ισχυρότερη εγγύηση από ένα εργαλείο που υπάρχει και είναι ελεγχόμενο.

Οι ενοποιημένοι περιορισμοί ενεργειών. Κάθε εργαλείο που τροποποιεί δεδομένα δηλώνει τις κατηγορίες επιδράσεων που μπορεί να προκαλέσει και η μηχανή πολιτικής αποφασίζει για καθεμία αποδοχή, ερώτηση πρώτα ή απόρριψη πριν εκτελεστεί η κλήση. Μια τιμή prompt χωρίς συνδεδεμένο εγκριτή καταλήγει σε απόρριψη — μια ερώτηση που δεν μπορεί να απαντήσει κανείς δεν γίνεται ποτέ «ναι». Δείτε τους Περιορισμούς για το μοντέλο απόφασης.

Διαπιστευτήρια μέσω μεσίτη και καθαρισμένο περιβάλλον. Τα διαπιστευτήρια δημιουργούνται σε κάθε εκκίνηση και ανακαλούνται όταν τελειώσει η εκτέλεση, και το token του GitHub που κρατά μια εκτέλεση μπορεί να διαβάζει αλλά όχι να κάνει push — δείτε το «Τα push περνούν από το Control Center» παρακάτω. Το ACP, το bash του harness και το Claude Code κάτω από το native περιτύλιγμα παίρνουν ένα περιβάλλον απαλλαγμένο από τους φορείς έγχυσης μέσω δυναμικού συνδέτη και διερμηνέα (LD_PRELOAD, DYLD_INSERT_LIBRARIES, NODE_OPTIONS, GIT_SSH_COMMAND και τα συναφή) προτού ξεκινήσει η διεργασία. Το Claude Code μέσω του NoSandboxAdapter κληρονομεί το περιβάλλον του κεντρικού υπολογιστή.

Τα εργαλεία αρχείων του harness τρέχουν μέσα στη διεργασία του διακομιστή, όχι σε θυγατρική διεργασία, οπότε κανένα προφίλ sandbox δεν θα μπορούσε να τα περιορίσει ακόμη κι αν είχε προσαρτηθεί — μόνο το bash περνά από τον περιτυλιγμένο εκτελεστή εντολών. Ο περιορισμός τους είναι ο έλεγχος διαδρομών που περιγράφηκε παραπάνω και ο έλεγχος αυτός είναι, επομένως, κρίσιμος και όχι δεύτερη γραμμή άμυνας.

Το εργαλείο bash είναι το άλλο σημείο όπου χρειάζεται ακρίβεια. Οι εντολές του αξιολογούνται με βάση την πολιτική εντολών της λειτουργίας και έπειτα εκκινούν με καθαρισμένο περιβάλλον και το worktree ως κατάλογο εργασίας. Όπου υπάρχει backend, αυτή η εκκίνηση περιτυλίγεται, οπότε το sandbox είναι αυτό που εμποδίζει μια εντολή κελύφους να γράψει έξω από το worktree· όπου δεν υπάρχει — στα Windows ή σε Linux χωρίς bwrap και socat — η πολιτική εντολών είναι το μόνο πράγμα ανάμεσα στην εντολή και την υπόλοιπη μονάδα δίσκου. Στη λειτουργία chat η πολιτική απορρίπτει κατηγορηματικά έναν σταθερό κατάλογο (αναβάθμιση προνομίων, καταστροφή συστήματος και δίσκου, διαφυγή από container και namespace) και ζητά έγκριση για αλλαγές απομακρυσμένης κατάστασης (git push, gh pr create, δημοσιεύσεις και εγκαταστάσεις πακέτων). Ό,τι δεν βρίσκεται σε καμία από τις δύο λίστες εκτελείται. Τα pipelines, οι αλυσίδες και τα subshells αναλύονται και κάθε υποεντολή αξιολογείται ξεχωριστά, με την πιο περιοριστική απόφαση να υπερισχύει.

Το Claude Code, όταν χρησιμοποιείται ως προσαρμογέας, είναι η περίπτωση όπου το sandbox έχει τη μεγαλύτερη βαρύτητα. Το Control Center το εκκινεί με --dangerously-skip-permissions, επειδή ένα μη διαδραστικό claude -p θα κολλούσε για πάντα στη δική του προτροπή έγκρισης. Οι κλήσεις του για ανάγνωση, εγγραφή και επεξεργασία συμβαίνουν μέσα στη δική του διεργασία και το Control Center δεν τις βλέπει ποτέ. Οι κλήσεις Bash του στέλνονται, πριν εκτελεστούν, σε ένα hook στον διακομιστή που ταξινομεί τη γραμμή εντολών και ρωτά τον αντίστοιχο κανόνα, και τα εργαλεία mcp__* που σερβίρει το Control Center περνούν από την πύλη όπως πάντα. Όπου υπάρχει backend, αυτές οι αόρατες κλήσεις συμβαίνουν ακόμη μέσα στο περιτύλιγμα του sandbox, οπότε το λειτουργικό σύστημα είναι το όριο γύρω τους. Όπου δεν υπάρχει, δεν υπάρχει τίποτα. Κάθε προσαρμογέας το δηλώνει στη μήτρα εφαρμογής του — δείτε τη μήτρα ειλικρίνειας των προσαρμογέων.

Δεν υπάρχουν σημαίες δικαιωμάτων ανά πράκτορα. Το αν ένας πράκτορας μπορεί να δημιουργήσει commit, να κάνει push, να ανοίξει pull request, να γράψει σε εξωτερικό tracker ή να φτάσει στο δίκτυο το αποφασίζουν οι περιορισμοί — αποδοχή, ερώτηση πρώτα ή απόρριψη — και οι ίδιοι κανόνες ισχύουν όποιος προσαρμογέας κι αν εκτελεί τον πράκτορα.

Το push είναι η ενέργεια που πρέπει να αντέχει ακόμη και απέναντι σε έναν πράκτορα που προσπαθεί να παρακάμψει έναν κανόνα, γι’ αυτό επιβάλλεται μέσω αυτού που έχει ο πράκτορας και όχι μέσω αυτού που εκτελεί. Με ρυθμισμένη GitHub App, μια εκτέλεση σε worktree του GitHub παίρνει ένα token εγκατάστασης με εμβέλεια αποθετηρίου, που μπορεί να διαβάζει περιεχόμενο και να δουλεύει με pull requests αλλά όχι να κάνει push. Η διαμόρφωση git της εκτέλεσης ξαναγράφει κάθε URL push του GitHub (https://github.com/, git@github.com:, ssh://git@github.com/) προς την πύλη εκτελέσεων πρακτόρων, ένα τελικό σημείο loopback στο cc_server. Η πύλη διαβάζει ποια refs ενημερώνει το push, ρωτά τον κανόνα Push σε απομακρυσμένο — οπότε ισχύει και ένας κανόνας περιορισμένος σε κλάδους, όπως «απόρριψη push στο main» — και μόνο τότε προωθεί το push στο GitHub με ένα token εγγραφής που εκδίδει γι’ αυτόν τον σκοπό και δεν το δίνει ποτέ στον πράκτορα. Ένα απορριφθέν push εμφανίζεται στην ίδια την έξοδο του git:

! [remote rejected] main -> main (Control Center policy: …)

Η πύλη προωθεί push μόνο στο ίδιο το αποθετήριο του worktree ή σε αποθετήριο GitHub συνδεδεμένο με τον χώρο εργασίας. Τα fetch πηγαίνουν απευθείας στο GitHub με το token ανάγνωσης.

Οι υπόλοιπες εντολές κελύφους συναντούν μια πιο ήπια πύλη. Το εργαλείο bash του harness και, μέσω ενός hook, το εργαλείο Bash του Claude Code ταξινομούν κάθε γραμμή εντολών και ρωτούν τον κανόνα στον οποίο ανήκει: git commit, merge, rebase, cherry-pick, revert και am είναι Δημιουργία commit· gh pr create είναι Άνοιγμα pull request· gh pr merge, review, comment και close είναι Δημοσίευση ανασκόπησης ή συγχώνευση· gh issue create, edit, comment και close είναι Εγγραφή σε εξωτερικό tracker· οι εγκαταστάσεις πακέτων είναι Εγκατάσταση πακέτου· curl και wget είναι Πρόσβαση στο δίκτυο. Αυτό αναγνωρίζει τη συνηθισμένη γραφή μιας ενέργειας, και ένας πράκτορας αποφασισμένος να την κρύψει (eval, ένα αρχείο script, μια απευθείας κλήση API) μπορεί να το κάνει. Τα push δεν εξαρτώνται από αυτό.

Κανένα κλειδί API εισιτηρίων δεν τοποθετείται σε sandbox. Οι πράκτορες γράφουν εισιτήρια μέσω των εργαλείων MCP του Control Center, τα οποία ρωτούν τον κανόνα Εγγραφή σε εξωτερικό tracker.

Ο κανόνας Πρόσβαση στο δίκτυο διαβάζεται μία φορά, όταν ξεκινά η εκτέλεση. Το δίκτυο ενός sandbox είναι είτε ανοιχτό είτε κλειστό, οπότε η απόρριψη το κλείνει, ενώ η αποδοχή και η ερώτηση πρώτα το αφήνουν ανοιχτό· τα εργαλεία web_fetch και web_search του harness εξακολουθούν να ρωτούν σε κάθε κλήση. Τα διαπιστευτήρια ανακαλούνται όταν τερματιστεί η εκτέλεση, μαζί με κάθε token εγγραφής που εξέδωσε η πύλη, ώστε μια λαβή να μην επιβιώνει της εκτέλεσης.

Η απαρίθμηση SandboxBackend έχει τρεις τιμές — native (Seatbelt στο macOS, bubblewrap στο Linux και στο WSL2), none και microvm. Το περιτύλιγμα εντολών των πρακτόρων χρησιμοποιεί μόνο τις δύο πρώτες: το microvm είναι το backend περικλεισμένης εικονικής μηχανής για διαδραστικά τερματικά και σταθμούς, όχι σιωπηλή αναβάθμιση ενός περιτυλίγματος bash. Η κατανόηση της μορφής του native backend εξηγεί τι κερδίζετε όταν αυτό προσαρτάται και τι δεν επρόκειτο ποτέ να σας δώσει.

Το cc_server ανιχνεύει τον κεντρικό υπολογιστή μία φορά κατά την εκκίνηση και, όπου απαντά ένα backend, τροφοδοτεί και τους δύο αρμούς που έχει η διαδρομή αποστολής, επειδή τα μεταγωγικά μέσα δεν μοιράζονται τον ίδιο. Ο πρώτος (SandboxPort) περιτυλίγει το CLI του Claude Code. Ο δεύτερος (SandboxManager) περιτυλίγει τους προσαρμογείς ACP και το εργαλείο bash του ενσωματωμένου harness. Η τροφοδότηση μόνο του ενός θα άφηνε τα άλλα να εκκινούν χωρίς περιτύλιγμα, όπως συνέβαινε παλιά. Σε κεντρικό υπολογιστή χωρίς backend, ή με --sandbox off, όλα εκκινούν χωρίς περιτύλιγμα και ο διακομιστής δηλώνει σε ποια περίπτωση βρίσκεστε στη γραμμή εκκίνησής του. Το ACP και το bash του harness εξακολουθούν να καθαρίζουν το περιβάλλον· το Claude Code μέσω του NoSandboxAdapter κληρονομεί το περιβάλλον του κεντρικού υπολογιστή.

Μια επιφάνεια εξαιρείται σκόπιμα: το τερματικό που φιλοξενείται στον διακομιστή δέχεται όρισμα backend ανά συνεδρία και το cc_server το κατασκευάζει με προεπιλογή το κέλυφος του κεντρικού υπολογιστή, οπότε ένα τερματικό που ανοίγετε από την εφαρμογή τρέχει χωρίς sandbox, εκτός αν κάποιος πελάτης ονομάσει ρητά το native. Πρόκειται για πραγματικό κέλυφος στον κεντρικό υπολογιστή του διακομιστή, όχι για εκτέλεση πράκτορα.

Στο Linux, το bubblewrap δημιουργεί namespace προσάρτησης, οπότε ο πράκτορας βλέπει πραγματικά μόνο ό,τι έχει προσδεθεί μέσα του. Στο macOS, το sandbox-exec εφαρμόζει ένα προφίλ Seatbelt που είναι επιτρεπτικό από προεπιλογή — ένα προφίλ που απορρίπτει τα πάντα από προεπιλογή καθιστά ένα διαδραστικό κέλυφος άχρηστο, επειδή ο αριθμός των κλήσεων dyld, XPC και Mach που θα έπρεπε να καταγραφούν είναι μη πρακτικός. Το προφίλ του macOS ξεκινά, επομένως, από το (allow default) και χαράσσει εξαιρέσεις απόρριψης: αναγνώσεις μυστικών διαδρομών, πολιτική εγγραφής που επαναφέρεται σε απόρριψη με ρητές επιτρεπτικές εξαιρέσεις πάνω της, αποκλεισμό unlink σε κάθε απορριπτόμενη διαδρομή και τους προγόνους της, ώστε μια μετονομασία να μην μπορεί να παρακάμψει μια απόρριψη εγγραφής, απορρίψεις exec για πάντα επικίνδυνα εκτελέσιμα και για οτιδήποτε αντιγράφεται σε εγγράψιμο κατάλογο, και δίκτυο περιορισμένο στις θύρες proxy του loopback συν το DNS.

Η πρακτική συνέπεια: στο Linux η εικόνα του πράκτορα για το σύστημα αρχείων περιορίζεται· στο macOS ο πράκτορας μπορεί ακόμη να διαβάσει το μεγαλύτερο μέρος του κεντρικού υπολογιστή και τα καταχωρισμένα checkouts σας προστατεύονται από ρητές απορρίψεις εγγραφής και μετονομασίας και όχι από αορατότητα. Και τα δύο είναι απομόνωση σε επίπεδο namespace, όχι όριο ασφαλείας του πυρήνα — τα backends το δηλώνουν στις δικές τους σημειώσεις δυνατοτήτων.

Το σύνολο των bind mounts είναι εκεί όπου χαράσσεται το όριο μεταξύ πρακτόρων. Η αποστολή overlay (Claude Code και ACP) προσαρτά έως τέσσερις διαδρομές, οι οποίες επιλύονται ανά εκτέλεση: τον κατάλογο εργασίας overlay του πράκτορα με δικαίωμα ανάγνωσης-εγγραφής, τον κατάλογο ρυθμίσεων του πράκτορα μόνο για ανάγνωση, τον κοινόχρηστο κατάλογο repos/ της συνομιλίας με δικαίωμα ανάγνωσης-εγγραφής όταν υπάρχει, και τον κατάλογο συνημμένων του χώρου μόνο για ανάγνωση όταν υπάρχει. Ο κατάλογος ενός αδελφού πράκτορα δεν προσαρτάται ποτέ. Το περιτύλιγμα bash του harness είναι στενότερο: προσαρτά μόνο τον κατάλογο εργασίας της εκτέλεσης. Αυτή είναι η ίδια μορφή που επιβάλλει ο έλεγχος διαδρομών εντός διεργασίας του harness σε επίπεδο λογισμικού, οπότε τα δύο συμφωνούν — αλλά μόνο ο έλεγχος διαδρομών καλύπτει τα δικά του εργαλεία αρχείων, τα οποία δεν φτάνουν ποτέ σε namespace προσάρτησης.

Τα καταχωρισμένα checkouts σας προστίθενται στο σύνολο απαγόρευσης εγγραφής πάνω σε αυτά, σε κάθε λειτουργία και σε όλες τις τρεις περιτυλιγμένες διαδρομές (Claude Code, ACP, bash του harness), και κάθε κανόνας εκπέμπεται και στην κυριολεκτική του γραφή και στη γραφή μετά την επίλυση symlink. Η δεύτερη γραφή δεν είναι περιττή λεπτομέρεια: ο πυρήνας αντιστοιχίζει έναν κανόνα απόρριψης με την επιλυμένη διαδρομή και το macOS καθιστά την επίλυση τον κανόνα και όχι την εξαίρεση — το /tmp είναι στην πραγματικότητα /private/tmp, το /var/folders/… είναι στην πραγματικότητα /private/var/folders/… — οπότε ένα checkout στο οποίο φτάνατε μέσω οποιασδήποτε από τις δύο θα ήταν εγγράψιμο ενώ το προφίλ φαινόταν να το απαγορεύει.

Το δίκτυο, μέσα σε sandbox, είναι λίστα επιτρεπόμενων τομέων ανά συνεδρία που επιβάλλεται από proxies loopback εντός διεργασίας. Η εξερχόμενη κίνηση απορρίπτεται από προεπιλογή: με το δίκτυο κλειστό, οι proxies ξεκινούν ακόμη, αλλά η λίστα επιτρεπομένων τους είναι κενή, οπότε κάθε εξερχόμενη σύνδεση απορρίπτεται. Με το δίκτυο ανοιχτό, ο resolver χτίζει τη λίστα επιτρεπομένων από ένα επιμελημένο βασικό σύνολο — παρόχους API LLM, φιλοξενία git, μητρώα πακέτων, τον κατάλογο μοντέλων — συν τους τομείς του GitHub, και αντιστοιχίζει τον κεντρικό υπολογιστή-στόχο κάθε σύνδεσης με αυτή. Οι χαρακτήρες μπαλαντέρ λειτουργούν (το *.example.com ταιριάζει με υποτομείς, όχι με τον τομέα κορυφής). Μια ξεχωριστή λίστα διαρκούς απαγόρευσης υπερισχύει της λίστας επιτρεπομένων και καλύπτει τελικά σημεία μεταδεδομένων cloud και προορισμούς τηλεμετρίας. Αυτό που δεν είναι παραμετροποιήσιμο είναι η ίδια η λίστα: η προδιαγραφή διαθέτει πεδίο egressAllowlist για πρόσθετους τομείς, αλλά τίποτα στη διαδρομή αποστολής δεν το συμπληρώνει, οπότε στην πράξη κάθε εκτέλεση παίρνει το βασικό σύνολο συν το GitHub και τίποτα παραπάνω.

Οι απορρίψεις, στο macOS, είναι παρατηρήσιμες: ένας μηχανισμός παρακολούθησης υποκλέπτει το αρχείο καταγραφής συστήματος για απορρίψεις Sandbox, φιλτράρει γνωστό θόρυβο, απαλείφει τα διπλότυπα των καταιγισμών επαναλήψεων και αναδεικνύει καθεμία ως SandboxViolation που ονομάζει τι επιχειρήθηκε και τι μπλοκαρίστηκε. Στο Linux η διαδρομή περιτυλίγματος αναλύει το stderr για EPERM, Operation not permitted και Permission denied και εκπέμπει τον ίδιο τύπο γεγονότος — δεν υπάρχει υποκλοπή αρχείου καταγραφής συστήματος. Αυτά φτάνουν στη ροή γεγονότων της ίδιας της εκτέλεσης, ώστε μια απορριφθείσα κλήση συστήματος να εμφανίζεται στη μεταγραφή και όχι μόνο σε κάποιο αρχείο καταγραφής. Η τηλεμετρία υπάρχει μόνο όσο ένα native sandbox περιτυλίγει πράγματι τη διεργασία — σε κεντρικό υπολογιστή χωρίς backend δεν υπάρχει τίποτα να παρατηρηθεί. Δεν σχετίζεται επίσης με τους περιορισμούς: μια παράβαση προέρχεται από απορριφθείσα κλήση συστήματος, ποτέ από αναζήτηση κανόνα.

Οι επιβεβαιώσεις προέρχονται από τους περιορισμούς, όχι από το sandbox

Ενότητα με τίτλο «Οι επιβεβαιώσεις προέρχονται από τους περιορισμούς, όχι από το sandbox»

Το sandbox δεν έχει διαδρομή έγκρισης. Εκκινεί, εκτελεί, εκπέμπει γεγονότα και τερματίζεται· δεν υπάρχει πουθενά σε αυτό σημείο όπου ένας άνθρωπος να απαντήσει σε ερώτηση. Όταν βλέπετε μια επιβεβαίωση σε έναν χώρο — έγκριση αυτού του push, έγκριση αυτής της διαγραφής — αυτή προήλθε από τη μηχανή περιορισμών (ή την πολιτική εντολών του harness) πριν η ενέργεια φτάσει καθόλου στο περιβάλλον εκτέλεσης.

Αυτή η σειρά είναι σκόπιμη. Μια έγκριση που θα γινόταν μετά την κλήση συστήματος θα ήταν εγγραφή ελέγχου, όχι πύλη. Γι’ αυτό επίσης ο κανόνας αποτυχίας-σε-απόρριψη βρίσκεται στους περιορισμούς: χωρίς συνδεδεμένο εγκριτή, η απόφαση λαμβάνεται πριν εκτελεστεί οτιδήποτε και είναι απόρριψη.

Η Διάγνωση πράκτορα είναι το μοναδικό σημείο που δηλώνει τι μπορεί να ελεγχθεί με το χέρι.

  • Σταθμοί και περιβλήματα: το επόμενο επίπεδο πάνω από το sandbox — όταν η εργασία χρειάζεται μια ολόκληρη αναλώσιμη μηχανή με όριο πυρήνα, όχι μια περιτυλιγμένη διεργασία
  • Περιορισμοί: το επίπεδο πολιτικής πάνω από το κατώφλι του λειτουργικού συστήματος και από πού προέρχονται στην πραγματικότητα οι εγκρίσεις
  • Κύκλος ζωής αποστολής πράκτορα: πού χωρά η απομόνωση στη ροή αποστολής
  • Λειτουργίες: πώς μια λειτουργία περιορίζει την επιφάνεια εργαλείων και την πολιτική εντολών
  • Υποσυστήματα sandbox: τα backends και η διαμόρφωσή τους