Shell-ის შესრულება
shell ინსტრუმენტი PRX-ის სამი ძირითადი ინსტრუმენტიდან ერთ-ერთია, ხელმისაწვდომი default_tools() და all_tools() რეესტრებში. იგი ოპერაციული სისტემის დონეზე ბრძანებების შესრულებას უზრუნველყოფს კონფიგურირებად სენდბოქსში, რაც უზრუნველყოფს აგენტის მიერ ინიცირებული ბრძანებების მკაცრი იზოლაციის, დროის ლიმიტებისა და გამოსავალის შეზღუდვების პირობებში შესრულებას.
როცა LLM განსაზღვრავს, რომ shell ბრძანების გაშვებაა საჭირო -- პაკეტის დაყენება, კოდის კომპილაცია, სისტემის მდგომარეობის მოთხოვნა ან სკრიპტის გაშვება -- იგი shell ინსტრუმენტს ბრძანების სტრიქონით გამოიძახებს. PRX შესრულებას კონფიგურირებულ სენდბოქსის ბექენდში გადაფუთავს, 60-წამიან ნაგულისხმევ დროის ამოწურვას აღასრულებს, გამოსავალს 1 MB-ით ზღუდავს და მგრძნობიარე გარემოს ცვლადებს ამოშლის შვილობილი პროცესის გაშვებამდე.
shell ინსტრუმენტი, როგორც წესი, PRX-ის ინსტრუმენტებს შორის ყველაზე ძლიერი და ყველაზე შეზღუდულია. იგი უსაფრთხოების პოლიტიკის ძრავის პირველი სამიზნეა, და უმეტესი განლაგება მას supervised-ად ნიშნავს, რაც ყოველი შესრულებისას ადამიანის თანხმობას მოითხოვს.
კონფიგურაცია
shell ინსტრუმენტს თავისი კონფიგურაციის სექცია არ აქვს. მისი ქცევა უსაფრთხოების სენდბოქსით და რესურსების ლიმიტებით კონტროლდება:
[security.sandbox]
enabled = true
backend = "auto" # "auto" | "landlock" | "firejail" | "bubblewrap" | "docker" | "none"
# მორგებული Firejail არგუმენტები (როცა backend = "firejail")
firejail_args = ["--net=none", "--noroot"]
[security.sandbox.docker]
image = "prx-sandbox:latest"
network = "none"
memory_limit = "256m"
cpu_limit = "1.0"
[security.sandbox.bubblewrap]
allow_network = false
writable_paths = ["/tmp"]
readonly_paths = ["/usr", "/lib"]
[security.resources]
max_memory_mb = 512
max_cpu_time_seconds = 60
max_subprocesses = 10
memory_monitoring = trueshell-ის ზედამხედველობით მონიშვნისთვის (ყოველ გამოძახებაზე თანხმობის მოთხოვნა):
[security.tool_policy.tools]
shell = "supervised"სენდბოქსის ბექენდები
PRX ხუთ სენდბოქსის ბექენდს უჭერს მხარს. როცა backend = "auto", PRX ხელმისაწვდომ ბექენდებს შემდეგი პრიორიტეტით ამოწმებს და პირველ ნაპოვნს ირჩევს:
| ბექენდი | პლატფორმა | იზოლაციის დონე | ზედნადები | შენიშვნები |
|---|---|---|---|---|
| Landlock | Linux (5.13+) | ფაილური სისტემის LSM | მინიმალური | ბირთვის მშობლიური, დამატებითი დამოკიდებულებები არ სჭირდება. ფაილური სისტემის ბილიკებს ბირთვის დონეზე ზღუდავს. |
| Firejail | Linux | სრული (ქსელი, ფაილური სისტემა, PID) | დაბალი | მომხმარებლის სივრცის სენდბოქსი. უჭერს მხარს --net=none ქსელის იზოლაციისთვის, PID სახელთა სივრცეს, seccomp ფილტრაციას. |
| Bubblewrap | Linux, macOS | სახელთა სივრცეზე დაფუძნებული | დაბალი | მომხმარებლის სახელთა სივრცეებს იყენებს. კონფიგურირებადი ჩაწერადი/მხოლოდ-წაკითხვადი ბილიკების სიები. |
| Docker | ნებისმიერი | სრული კონტეინერი | მაღალი | ბრძანებებს ერთჯერად კონტეინერში ასრულებს. მაქსიმალური იზოლაცია, მაგრამ ყველაზე მაღალი დაყოვნება. |
| None | ნებისმიერი | მხოლოდ აპლიკაციის დონე | არცერთი | ოპერაციული სისტემის დონეზე იზოლაცია არ არის. PRX მაინც აღასრულებს დროის ამოწურვას და გამოსავალის ლიმიტებს, მაგრამ პროცესს სრული ოპერაციული სისტემის წვდომა აქვს. |
Landlock
Landlock არის Linux-ის უსაფრთხოების მოდული, ხელმისაწვდომი ბირთვის ვერსია 5.13-დან. იგი ფაილური სისტემის წვდომას ბირთვის დონეზე ზღუდავს root პრივილეგიების გარეშე.
Firejail
Firejail ყოვლისმომცველ სენდბოქსირებას უზრუნველყოფს Linux-ის სახელთა სივრცეებითა და seccomp-ით. მორგებული არგუმენტების გადაცემა firejail_args-ით შეიძლება:
[security.sandbox]
backend = "firejail"
firejail_args = ["--net=none", "--noroot", "--nosound", "--no3d"]Bubblewrap
Bubblewrap (bwrap) მომხმარებლის სახელთა სივრცეებს იყენებს მინიმალური სენდბოქსირებული გარემოს შესაქმნელად. Firejail-ზე მსუბუქია და macOS-ის ზოგიერთ კონფიგურაციაზე მუშაობს:
[security.sandbox.bubblewrap]
allow_network = false
writable_paths = ["/tmp", "/home/user/workspace"]
readonly_paths = ["/usr", "/lib", "/bin"]Docker
Docker სრულ კონტეინერის იზოლაციას უზრუნველყოფს. ყოველი ბრძანება ახალ კონტეინერში ეშვება კონფიგურირებული სურათის საფუძველზე:
[security.sandbox.docker]
image = "prx-sandbox:latest"
network = "none"
memory_limit = "256m"
cpu_limit = "1.0"გამოყენება
shell ინსტრუმენტს LLM იძახებს აგენტური ციკლების დროს. აგენტის საუბრებში LLM ინსტრუმენტის გამოძახებას წარმოქმნის:
{
"name": "shell",
"arguments": {
"command": "ls -la /home/user/project"
}
}CLI-დან shell ინსტრუმენტის გამოძახებების დაკვირვება აგენტის გამოსავალში შეიძლება.
შესრულების ნაკადი
- LLM წარმოქმნის
shellინსტრუმენტის გამოძახებასcommandარგუმენტით - უსაფრთხოების პოლიტიკის ძრავი ამოწმებს, ნებადართულია, უარყოფილია თუ ზედამხედველობას მოითხოვს გამოძახება
- ზედამხედველობის შემთხვევაში, PRX მომხმარებელს თანხმობას ეკითხება გაგრძელებამდე
- სენდბოქსის ბექენდი ბრძანებას შესაბამის იზოლაციის ფენაში გადაფუთავს
- გარემოს ცვლადები სანიტარიზდება (იხ. ქვემოთ)
- ბრძანება სრულდება 60-წამიანი დროის ამოწურვით
- stdout და stderr აღირიცხება, საჭიროებისას 1 MB-მდე მოიჭრება
- შედეგი LLM-ს უბრუნდება როგორც
ToolResultწარმატების/წარუმატებლობის სტატუსით
პარამეტრები
| პარამეტრი | ტიპი | სავალდებულო | ნაგულისხმევი | აღწერა |
|---|---|---|---|---|
command | string | დიახ | -- | შესასრულებელი shell ბრძანება. /bin/sh -c-ს (ან ეკვივალენტს) გადაეცემა. |
ინსტრუმენტი აბრუნებს ToolResult-ს, რომელიც შეიცავს:
| ველი | ტიპი | აღწერა |
|---|---|---|
success | bool | true თუ ბრძანება 0 კოდით დასრულდა |
output | string | გაერთიანებული stdout და stderr, 1 MB-მდე მოჭრილი |
error | string? | შეცდომის შეტყობინება ბრძანების წარუმატებლობის ან დროის ამოწურვის შემთხვევაში |
გარემოს სანიტარიზაცია
shell ინსტრუმენტი მხოლოდ მკაცრ თეთრ სიაში მყოფ გარემოს ცვლადებს გადასცემს შვილობილ პროცესებს. ეს API გასაღებების, ტოკენებისა და საიდუმლოებების შემთხვევით გაჟონვას თავიდან იცილებს.
ნებადართული გარემოს ცვლადები:
| ცვლადი | დანიშნულება |
|---|---|
PATH | შესასრულებელი ფაილების ძიების ბილიკი |
HOME | მომხმარებლის მთავარი დირექტორია |
TERM | ტერმინალის ტიპი |
LANG | ლოკალის ენა |
LC_ALL | ლოკალის გადაფარვა |
LC_CTYPE | სიმბოლოს ტიპის ლოკალი |
USER | მიმდინარე მომხმარებლის სახელი |
SHELL | ნაგულისხმევი shell-ის ბილიკი |
TMPDIR | დროებითი დირექტორია |
ყველა სხვა ცვლადი -- API_KEY, AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, OPENAI_API_KEY და ნებისმიერი მორგებული ცვლადი -- შვილობილი პროცესის გარემოდან ამოშლილია. ეს მკაცრად კოდირებული უსაფრთხოების საზღვარია, რომელიც კონფიგურაციით ვერ გადაიფარება.
რესურსების ლიმიტები
| ლიმიტი | ნაგულისხმევი | კონფიგურირებადი | აღწერა |
|---|---|---|---|
| დროის ამოწურვა | 60 წამი | security.resources.max_cpu_time_seconds | მაქსიმალური საათის დრო ბრძანებაზე |
| გამოსავალის ზომა | 1 MB | -- | მაქსიმალური გაერთიანებული stdout + stderr |
| მეხსიერება | 512 MB | security.resources.max_memory_mb | მაქსიმალური მეხსიერების გამოყენება ბრძანებაზე |
| ქვეპროცესები | 10 | security.resources.max_subprocesses | მაქსიმალური გაშვებული შვილობილი პროცესები |
როცა ბრძანება დროის ამოწურვას გადააჭარბებს, PRX SIGTERM-ს აგზავნის, შემდეგ მოლოდინის პერიოდის შემდეგ SIGKILL-ს. ინსტრუმენტის შედეგი დროის ამოწურვას შეცდომად აღნიშნავს.
უსაფრთხოება
- სენდბოქსის იზოლაცია: ბრძანებები კონფიგურირებულ სენდბოქსის ბექენდში სრულდება, რაც ფაილური სისტემის, ქსელისა და პროცესის წვდომას ზღუდავს
- გარემოს სანიტარიზაცია: მხოლოდ 9 თეთრ სიაში მყოფი გარემოს ცვლადი გადაეცემა შვილობილ პროცესებს
- პოლიტიკის ძრავი: ყოველი shell გამოძახება უსაფრთხოების პოლიტიკის ძრავაში გადის შესრულებამდე
- აუდიტის ჟურნალირება: ყველა shell ბრძანება და მათი შედეგები აუდიტის ჟურნალში იწერება, როცა
security.audit.enabled = true - ზედამხედველობის რეჟიმი: shell ინსტრუმენტი შეიძლება
supervised-ად მოინიშნოს ინსტრუმენტების პოლიტიკაში, რაც ყოველ შესრულებაზე მომხმარებლის ექსპლიციტურ თანხმობას მოითხოვს - რესურსების ლიმიტები: მკაცრი ლიმიტები დროის ამოწურვაზე, მეხსიერებაზე, გამოსავალის ზომასა და ქვეპროცესების რაოდენობაზე რესურსების ამოწურვას თავიდან იცილებს
საფრთხეების შერბილება
shell ინსტრუმენტი პრომპტ ინჯექციის შეტევების მთავარი ვექტორია. PRX ამას შერბილებს:
- სენდბოქსის შეზღუდვით -- მავნე ბრძანების შესრულების შემთხვევაშიც კი, იგი შეზღუდული ფაილური სისტემისა და ქსელის წვდომით ეშვება
- გარემოს ამოშლით -- API გასაღებები და საიდუმლოებები შვილობილი პროცესისთვის ხელმისაწვდომი არ არის
- ზედამხედველობის რეჟიმით -- ადამიანი-ციკლში-ს შეუძლია ყოველი ბრძანების გადახედვა შესრულებამდე
- აუდიტის ჩანაწერით -- ყველა ბრძანება იწერება სასამართლო ექსპერტიზის მიმოხილვისთვის
დაკავშირებული გვერდები
- უსაფრთხოების სენდბოქსი -- სენდბოქსის ბექენდების დეტალური დოკუმენტაცია
- პოლიტიკის ძრავი -- ინსტრუმენტებზე წვდომის კონტროლის წესები
- კონფიგურაციის მითითება --
security.sandboxდაsecurity.resourcesველები - ინსტრუმენტების მიმოხილვა -- ყველა 46+ ინსტრუმენტი და რეესტრის სისტემა