Skip to content

უსაფრთხოების პოლიტიკა

PRX-ში უსაფრთხოება არ არის შემდგომ დამატებული ფუნქცია აგენტის ციკლზე. ეს არის სტრუქტურული კომპონენტი — 5-ფენიანი პოლიტიკის პაიპლაინი, რომელიც მართავს რის გაკეთების უფლება აქვს ყოველ აგენტს, ინსტრუმენტსა და დანამატს.

SecurityPolicy სტრუქტურა

Section titled “SecurityPolicy სტრუქტურა”

ძირითადი პოლიტიკა განსაზღვრულია SecurityPolicy სტრუქტურით:

pub struct SecurityPolicy {
pub autonomy: AutonomyLevel,
pub workspace_restrictions: Vec<PathBuf>,
pub allowed_commands: Vec<String>,
pub forbidden_paths: Vec<PathBuf>,
pub rate_limits: RateLimits,
pub cost_limits: CostLimits,
}

ავტონომიის დონეები

Section titled “ავტონომიის დონეები”
დონექცევა
ReadOnlyაგენტს შეუძლია ფაილების წაკითხვა და LLM-ების გამოძახება, მაგრამ ვერ ასრულებს ბრძანებებს, ვერ წერს ფაილებს ან ვერ ცვლის მდგომარეობას
Supervisedაგენტს შეუძლია ქმედებების შემოთავაზება, მაგრამ უნდა მიიღოს ადამიანის დამტკიცება შესრულებამდე
Fullაგენტს შეუძლია ქმედებების ავტონომიური შესრულება პოლიტიკის ფარგლებში

სამუშაო სივრცის შეზღუდვები

Section titled “სამუშაო სივრცის შეზღუდვები”

ზღუდავს ფაილური სისტემის გზებს, რომლებზეც აგენტს აქვს წვდომა:

workspace_restrictions = ["/home/user/project", "/tmp/workspace"]

ამ გზების გარეთ ნებისმიერი ფაილური ოპერაცია უარყოფილია, ავტონომიის დონის მიუხედავად.

ნებადართული ბრძანებები

Section titled “ნებადართული ბრძანებები”

შელის ბრძანებების ექსპლიციტური ნებართვების სია, რომლებიც აგენტს შეუძლია შეასრულოს:

allowed_commands = ["git", "cargo", "npm", "python", "ls", "cat", "grep"]

ამ სიაში არ არსებული ბრძანებები დაბლოკილია. ვაილდქარდები მხარდაუჭერელია — ყოველი ნებადართული ბრძანება ექსპლიციტურად უნდა იყოს ჩამოთვლილი.

აკრძალული გზები

Section titled “აკრძალული გზები”

გზები, რომლებიც ყოველთვის უარყოფილია, თუნდაც ნებადართული სამუშაო სივრცის ფარგლებში მოხვდეს:

forbidden_paths = ["/home/user/project/.env", "/home/user/project/secrets/"]

მოთხოვნის ლიმიტები

Section titled “მოთხოვნის ლიმიტები”

მოთხოვნის სიხშირის კონტროლი:

[rate_limits]
requests_per_minute = 60
requests_per_hour = 500
max_concurrent = 4

ხარჯის ლიმიტები

Section titled “ხარჯის ლიმიტები”

LLM API გამოძახებებზე ხარჯის შეზღუდვა:

[cost_limits]
max_per_request_usd = 1.00
max_per_hour_usd = 10.00
max_per_day_usd = 50.00

ხარჯის ლიმიტის მიღწევისას, შემდგომი LLM გამოძახებები დაბლოკილია ფანჯრის გადატვირთვამდე.

5-ფენიანი პოლიტიკის პაიპლაინი

Section titled “5-ფენიანი პოლიტიკის პაიპლაინი”

პოლიტიკები ფასდება ფენიან იერარქიაში. ყოველ ფენას შეუძლია შეზღუდოს (მაგრამ ვერასოდეს გააფართოვოს) ზედა ფენის მიერ მინიჭებული ნებართვები.

┌──────────────────────────────┐
│ ფენა 1: გლობალური პოლიტიკა │ სისტემის მასშტაბის ნაგულისხმევები
├──────────────────────────────┤
│ ფენა 2: პროფილის პოლიტიკა │ მომხმარებლის ან როლის გადაფარვები
├──────────────────────────────┤
│ ფენა 3: აგენტის პოლიტიკა │ დასახელებულ აგენტზე შეზღუდვები
├──────────────────────────────┤
│ ფენა 4: ჯგუფის პოლიტიკა │ არხის ჯგუფზე შეზღუდვები
├──────────────────────────────┤
│ ფენა 5: ინსტრუმენტის პოლიტიკა │ ინსტრუმენტზე შეზღუდვები
└──────────────────────────────┘
ფენაფარგლებიმაგალითი
გლობალურიყველა აგენტი, ყველა არხიautonomy = Supervised, max_per_day_usd = 100
პროფილიკონკრეტული მომხმარებელი ან როლიადმინის პროფილი იღებს autonomy = Full; სტუმრის პროფილი რჩება ReadOnly
აგენტიდასახელებული აგენტი (მაგ., “coder”)კოდერ აგენტი იღებს allowed_commands = ["git", "cargo"], კვლევის აგენტი — არცერთს
ჯგუფიარხის ჯგუფი (მაგ., კონკრეტული Telegram ჯგუფი)საჯარო ჯგუფები იძულებით ReadOnly
ინსტრუმენტიცალკეული ინსტრუმენტი (მაგ., “bash”)Bash ინსტრუმენტი იღებს დამატებით forbidden_paths-ს, უფრო მკაცრ rate_limits-ს

ნებისმიერი ქმედების ეფექტიანი პოლიტიკა არის ყველა გამოყენებადი ფენის კვეთა. თუ ნებისმიერი ფენა უარყოფს ქმედებას, ის უარყოფილია.

დამტკიცების სამუშაო პროცესი

Section titled “დამტკიცების სამუშაო პროცესი”

როცა autonomy = Supervised, აგენტი ვერ ასრულებს ქმედებებს პირდაპირ. ამის ნაცვლად:

  1. აგენტი შესთავაზებს ქმედებას (მაგ., „cargo test-ის გაშვება”)
  2. PRX აფორმატებს შემოთავაზებას და აგზავნის ზედამხედველ არხში
  3. ზედამხედველი (ადამიანი) განიხილავს და პასუხობს: დამტკიცება, უარყოფა ან შეცვლა
  4. დამტკიცების შემთხვევაში, PRX ასრულებს ქმედებას და აბრუნებს შედეგს აგენტს
  5. უარყოფის შემთხვევაში, აგენტი იღებს უარყოფის შეტყობინებას და უნდა მოძებნოს ალტერნატიული მიდგომა

დამტკიცების მოთხოვნები მოიცავს:

  • შემოთავაზებულ ზუსტ ბრძანებას ან ქმედებას
  • აგენტის სახელსა და კონტექსტს
  • უსაფრთხოების პოლიტიკის ფენას, რომელიც მოითხოვს დამტკიცებას
  • ტაიმაუტს (ნაგულისხმევი: 5 წუთი), რომლის შემდეგაც ქმედება ავტომატურად უარყოფილია

PRX მხარს უჭერს რამდენიმე სენდბოქსის ბექენდს ინსტრუმენტების შესრულების იზოლაციისთვის. სენდბოქსი შეირჩევა პლატფორმის ხელმისაწვდომობისა და კონფიგურაციის საფუძველზე.

სრული კონტეინერული იზოლაცია. ბრძანებები მუშაობს ერთჯერად Docker კონტეინერში:

  • დამონტაჟებული სამუშაო სივრცის დირექტორია (მხოლოდ წაკითხვის ან წაკითხვა-ჩაწერის პოლიტიკის მიხედვით)
  • ქსელზე წვდომა არ არის (თუ ექსპლიციტურად არ არის ნებადართული)
  • რესურსების ლიმიტები (CPU, მეხსიერება, დრო)
  • ჩამოშორებული შესაძლებლობები
[sandbox]
backend = "docker"
image = "prx-sandbox:latest"
network = false
memory_limit = "512m"
cpu_limit = "1.0"
timeout_seconds = 300

მსუბუქი Linux სენდბოქსი სახელსივრცეებითა და seccomp-ით:

  • ფაილური სისტემის ნებართვების სია
  • ქსელის ფილტრაცია
  • Seccomp სისტემური გამოძახებების ფილტრაცია
  • Root არ არის საჭირო
[sandbox]
backend = "firejail"
whitelist = ["/home/user/project"]
net = "none"

მინიმალური არაპრივილეგირებული სენდბოქსი, რომელსაც Flatpak იყენებს:

  • მონტაჟის სახელსივრცის იზოლაცია
  • PID სახელსივრცის იზოლაცია
  • მხოლოდ მითითებული დირექტორიების bind-mount
  • ყველა შესაძლებლობის ჩამოშორება
[sandbox]
backend = "bubblewrap"
bind_rw = ["/home/user/project"]
bind_ro = ["/usr", "/lib", "/bin"]
unshare_net = true

Linux უსაფრთხოების მოდული ფაილური სისტემის წვდომის დეტალური კონტროლისთვის:

  • ფაილზე წვდომის შეზღუდვა ბირთვის დონეზე
  • კონტეინერის ოვერჰედის გარეშე
  • მუშაობს არაპრივილეგირებული პროცესებით
  • ხელმისაწვდომია Linux 5.13+-ზე
[sandbox]
backend = "landlock"
allowed_read = ["/home/user/project", "/usr/lib"]
allowed_write = ["/home/user/project/output"]

სენდბოქსის შერჩევა

Section titled “სენდბოქსის შერჩევა”

PRX ავტომატურად ამოიცნობს ხელმისაწვდომ ბექენდებს და ირჩევს ყველაზე ძლიერს:

Docker > Bubblewrap > Firejail > Landlock > None

თუ სენდბოქსის ბექენდი არ არის ხელმისაწვდომი და პოლიტიკა მოითხოვს სენდბოქსს, ინსტრუმენტის შესრულება უარყოფილია.

WASM დანამატის სენდბოქსი

Section titled “WASM დანამატის სენდბოქსი”

PRX დანამატები კომპილირებულია WASM-ში და სრულდება wasmtime სენდბოქსში:

  • მეხსიერების იზოლაცია: ყოველ დანამატს აქვს საკუთარი ხაზოვანი მეხსიერება
  • ფაილურ სისტემაზე წვდომა არ არის, თუ ექსპლიციტურად არ არის მინიჭებული WASI-ით
  • ქსელზე წვდომა არ არის, თუ ექსპლიციტურად არ არის მინიჭებული
  • CPU დროის ლიმიტები wasmtime-ის საწვავის აღრიცხვით
  • დანამატები ვერ წვდებიან PRX-ის შიდა სტრუქტურებს — ისინი კომუნიკაციას ახორციელებენ განსაზღვრული ჰოსტის API-ით
[plugins.my_plugin]
path = "plugins/my_plugin.wasm"
permissions = ["fs:read:/data", "net:https://api.example.com"]
fuel_limit = 1_000_000

ეს უზრუნველყოფს, რომ მესამე მხარის ან მომხმარებლის მიერ დაწერილი დანამატები ვერ შეარყევენ ჰოსტის სისტემას, ვერ გაჟონავენ მონაცემებს ან ვერ მოხმარენ შეუზღუდავ რესურსებს.