docs/en/s09-permission-system.mdXem bản gốc Bản dịch đầy đủ theo đúng cấu trúc tài liệu; code, liên kết và định danh kỹ thuật được giữ nguyên.
s09: Hệ thống cấp phép
s00 > s01 > s02 > s03 > s04 > s05 > s06 > s07 > s08 > [ s09 ] > s10 > s11 > s12 > s13 > s14 > s15 > s16 > s17 > s18 > s19 > s20 > s21 > s22 > s23 > s24 > s25 > s26 > s27
Mô hình có thể đề xuất một hành động, nhưng trước khi thực hiện, nó phải vượt qua cổng an toàn.
Mục tiêu cốt lõi của chương này
Bởi s08, agent có công cụ, tính kiên trì, trí nhớ và kỹ năng. Nó thực sự đang làm công việc thực sự.
Các vấn đề đi kèm với nó:
- Mô hình có thể thực thi
rm -rf / - Mô hình có thể
DROP TABLEcơ sở dữ liệu của bạn - Mô hình có thể định dạng đĩa, tắt các tiến trình hệ thống hoặc ghi vào /etc/
Nếu mọi lệnh gọi công cụ được thực hiện trực tiếp, một phán đoán sai lầm có thể gây ra thiệt hại không thể khắc phục.
Vì vậy, bắt đầu từ chương này:
"Những gì mô hình muốn làm" không được trực tiếp trở thành "những gì hệ thống thực sự đã làm" -- việc kiểm tra an toàn phải đứng giữa hai điều này.
Nhưng hệ thống cấp phép của agent Hermes không giống như hầu hết các khung agent. Nó không có cái chung deny / allow / ask đường ống. Thay vào đó, nó thực hiện khớp mẫu cụ thể trên lệnh đầu cuối -- bởi vì trong số tất cả các công cụ, terminal là công cụ nguy hiểm nhất.

Giải thích các thuật ngữ chính
Phát hiện lệnh nguy hiểm là gì
Hệ thống duy trì một danh sách các biểu thức chính quy. Trước khi mỗi lệnh đầu cuối được thực thi, chuỗi lệnh sẽ được khớp với danh sách này. Một trận đấu kích hoạt đánh chặn.
Đây không phải là một hệ thống cấp phép công cụ chung mà là một mạng lưới an toàn dành riêng cho các lệnh shell.
phê duyệt là gì
Sau khi một lệnh bị chặn, nó không bị từ chối hoàn toàn. Thay vào đó, người dùng được hỏi:
- Chế độ CLI: Lời nhắc xác nhận xuất hiện trong terminal
- Chế độ cổng: Nút phê duyệt được gửi đến người dùng
Người dùng có thể chọn:
once-- Cho phép điều này một lầnsession-- Cho phép loại hoạt động này trong toàn bộ phiênalways-- Cho phép vĩnh viễn (ghi vào file config)deny-- Từ chối
Chế độ YOLO là gì
Người dùng có thể bật chế độ YOLO cho phiên hiện tại (/yolo) -- điều này bỏ qua tất cả việc phát hiện lệnh nguy hiểm và thực thi lệnh trực tiếp.
Điều này dành cho những người dùng biết chính xác những gì họ đang làm. Nó được tắt theo mặc định.
Phê duyệt thông minh là gì
Khi một lệnh bị chặn, thay vì nhắc người dùng ngay lập tức, trước tiên hệ thống có thể hỏi LLM phụ trợ: "Lệnh này có thực sự nguy hiểm không?"
Nếu LLM phụ trợ đánh giá rủi ro ở mức thấp thì lệnh có thể được phê duyệt tự động mà không làm phiền người dùng. Điều này làm giảm sự khó chịu của những lời nhắc xác nhận thường xuyên.
Mô hình tinh thần tối thiểu
Terminal tool receives a command
|
v
YOLO mode enabled? --yes--> Execute directly
|
no
|
v
Does the command match DANGEROUS_PATTERNS?
|
+-- No match --> Execute directly
|
+-- Match found
|
v
Already approved for this type in this session? --yes--> Execute directly
|
no
|
v
In the permanent allowlist? --yes--> Execute directly
|
no
|
v
[CLI] Show confirmation prompt / [Gateway] Send approval buttons
|
+-- once / session / always --> Execute, remember the approval
+-- deny --> Return "Permission denied"
+-- timeout --> Return "Permission denied"
Điểm mấu chốt: Đây không phải là hệ thống cấp phép công cụ chung. Nó chỉ quản lý các lệnh đầu cuối. read_file, web_searchvà các công cụ khác không đi qua luồng này.
Cấu trúc dữ liệu chính
1. Danh sách mẫu nguy hiểm
DANGEROUS_PATTERNS = [
(r'\brm\s+-[^\s]*r', "recursive delete"),
(r'\bmkfs\b', "format filesystem"),
(r'\bDROP\s+(TABLE|DATABASE)\b', "SQL DROP"),
(r'\bDELETE\s+FROM\b(?!.*\bWHERE\b)', "SQL DELETE without WHERE"),
(r'\bkill\s+-9\s+-1\b', "kill all processes"),
(r'\b(curl|wget)\b.*\|\s*(ba)?sh\b', "pipe remote content to shell"),
(r'\bgit\s+reset\s+--hard\b', "git reset --hard"),
# ... 30+ patterns
]
Mỗi mục nhập là một biểu thức chính quy được ghép nối với một mô tả mà con người có thể đọc được.
Hermes Agent có hơn 30 mẫu bao gồm: xóa tệp, thao tác ổ đĩa, SQL phá hoại, dịch vụ hệ thống, quản lý quy trình, bom phân nhánh, thực thi tập lệnh từ xa, ghi đè cấu hình hệ thống, thao tác Git phá hoại, v.v.
2. Bộ đệm kết quả phê duyệt
# Per-session cache: same type of operation only needs approval once
_session_approved = {"sess_abc": {"recursive delete", "SQL DROP"}}
# Permanent allowlist: written to config.yaml
_permanent_approved = {"recursive delete"}
3. Tùy chọn phê duyệt
once -> Allow this one time only
session -> Allow this type of operation for the entire session
always -> Allow permanently, written to the config file
deny -> Reject execution
Thực hiện tối thiểu
Bước 1: Xác định các mô hình nguy hiểm
DANGEROUS_PATTERNS = [
(r'\brm\s+-[^\s]*r', "recursive delete"),
(r'\bDROP\s+(TABLE|DATABASE)\b', "SQL DROP"),
(r'\bmkfs\b', "format filesystem"),
]
Phiên bản giảng dạy chỉ cần một số mẫu phổ biến nhất. Một hệ thống sản xuất có thể được xây dựng theo thời gian.
Bước 2: Chức năng phát hiện
def detect_dangerous_command(command):
command_lower = command.lower()
for pattern, description in DANGEROUS_PATTERNS:
if re.search(pattern, command_lower, re.IGNORECASE):
return (True, description)
return (False, None)
Ý tưởng chính đằng sau bước này:
Không cần hiểu cú pháp shell -- chỉ cần sử dụng biểu thức chính quy để khớp với các mẫu nguy hiểm đã biết. Điều này bao gồm 80% các hoạt động có rủi ro cao.
Bước 3: Quy trình phê duyệt
def approve_command(command, description, session_key):
# Already approved?
if description in session_approved.get(session_key, set()):
return True
if description in permanent_approved:
return True
# Ask the user
choice = prompt_user(command, description) # once / session / always / deny
if choice == "once":
return True
if choice == "session":
session_approved.setdefault(session_key, set()).add(description)
return True
if choice == "always":
permanent_approved.add(description)
save_to_config(permanent_approved)
return True
return False
Bước 4: Móc vào công cụ đầu cuối
def run_terminal(command, session_key):
is_dangerous, description = detect_dangerous_command(command)
if is_dangerous and not yolo_enabled(session_key):
if not approve_command(command, description, session_key):
return "Permission denied: " + description
return execute(command)
Lưu ý: logic này tồn tại bên trong trình xử lý công cụ đầu cuối, không nằm trong vòng lặp lõi. Các công cụ khác không đi qua luồng này.
Lựa chọn thiết kế độc đáo của agent Hermes tại đây
1. Chỉ quản lý các lệnh đầu cuối, không phải hệ thống cấp phép chung
Hầu hết các khung agent đều có hệ thống cấp phép chung -- mọi lệnh gọi công cụ đều phải trải qua quá trình kiểm tra quyền. agent Hermes không làm điều này. Nó chỉ thực hiện khớp mẫu nguy hiểm trên các lệnh đầu cuối.
Tại sao? Bởi vì read_file đọc một tập tin không gây ra thiệt hại không thể khắc phục được, nhưng rm -rf / có. Việc chặn mọi công cụ khiến hệ thống trở nên khó chịu; chỉ đánh chặn những kẻ thực sự nguy hiểm mới là điều quan trọng.
2. Ngăn chặn bỏ qua Unicode và ANSI
Những kẻ tấn công (hoặc vô tình nhập vào) có thể sử dụng các ký tự có chiều rộng đầy đủ Unicode hoặc chuỗi thoát ANSI để bỏ qua việc so khớp biểu thức chính quy. Hermes Agent bình thường hóa đầu vào trước khi khớp: loại bỏ các chuỗi ANSI và chuyển đổi các ký tự có độ rộng đầy đủ thành độ rộng một nửa.
3. Hai giao diện người dùng phê duyệt cho CLI và Gateway
Trong chế độ CLI, đó là dấu nhắc đầu cuối: [o]nce / [s]ession / [a]lways / [d]eny.
Ở chế độ Cổng, đó là các nút nền tảng (bàn phím nội tuyến Telegram, nút Slack, v.v.).
Cả hai giao diện người dùng đều có chung logic phê duyệt cơ bản -- chỉ có lớp trình bày là khác nhau.
4. Phê duyệt thông minh (phán quyết LLM phụ trợ)
Các lệnh bị chặn có thể được gửi đến LLM phụ trợ để đánh giá rủi ro trước tiên. Nếu rủi ro được đánh giá là thấp, lệnh sẽ được phê duyệt tự động.
Điều này làm giảm sự khó chịu của việc "phải xác nhận thủ công mọi pip install" trong khi vẫn chặn các lệnh thực sự nguy hiểm.
5. Hết thời gian phê duyệt
Nếu người dùng không phản hồi yêu cầu phê duyệt trong một khoảng thời gian nhất định thì mặc định là từ chối. Các agent không phải chờ đợi vô thời hạn.
Làm thế nào nó phù hợp với vòng lặp chính
Logic phê duyệt của chương này không có trong vòng lặp lõi -- nó nằm bên trong trình xử lý của công cụ đầu cuối.
Nói cách khác, vòng lặp cốt lõi hoàn toàn không thay đổi. Những thay đổi là công cụ đầu cuối có một bước kiểm tra bổ sung trước khi thực hiện lệnh:
Core loop -> dispatch("run_terminal", args) -> terminal tool handler
|
v
Detect dangerous patterns
|
+-- Safe -> Execute directly
+-- Dangerous -> Approval -> Execute or deny
Đây cũng là lý do tại sao chương này ở s09 thay vì s02: nó không làm thay đổi kiến trúc của hệ thống công cụ; nó chỉ bổ sung thêm tính năng kiểm tra an toàn bên trong một công cụ cụ thể.
Những lỗi thường gặp của người mới bắt đầu
1. Cố gắng xây dựng một hệ thống cấp phép chung
Không cần phải kiểm tra quyền trên mọi công cụ. Bắt đầu bằng cách khóa cái nguy hiểm nhất (lệnh đầu cuối) và thế là đủ.
2. Chỉ kiểm tra rm
Những mệnh lệnh nguy hiểm vượt xa rm. SQL DROP, định dạng đĩa, kill -9 -1, cuộn tròn | sh, bom nĩa -- tất cả đều cần phải bị chặn lại.
3. Không lưu vào bộ nhớ đệm ở cấp phiên
Nếu mọi pip install kích hoạt lời nhắc xác nhận, người dùng sẽ sớm vô hiệu hóa toàn bộ hệ thống phê duyệt. Hỏi một lần cho mỗi loại hoạt động trong mỗi phiên.
4. Không xử lý bỏ qua Unicode
Các ký tự có độ rộng đầy đủ như rm có thể bỏ qua việc khớp mẫu rm. Bình thường hóa trước, sau đó khớp.
5. Đưa logic phê duyệt vào vòng lặp lõi
Logic phê duyệt thuộc về trình xử lý công cụ, không thuộc về vòng lặp. Vòng lặp không cần biết lệnh nào nguy hiểm.
Ranh giới giảng dạy
Chương này chỉ cần trình bày một dòng rõ ràng:
- Khớp mẫu -- Sử dụng biểu thức chính quy để phát hiện các lệnh nguy hiểm đã biết
- Quy trình phê duyệt -- Sau trận đấu, hãy hỏi người dùng; kết quả có thể được lưu trữ
- Chỉ dành cho terminal -- Không phải là hệ thống cấp phép chung
Cố ý trì hoãn: triển khai phê duyệt thông minh đầy đủ, công cụ chính sách bảo mật thứ ba, nguồn chính sách cấp doanh nghiệp, triển khai cụ thể các nút phê duyệt nền tảng Gateway.
Nếu người đọc có thể yêu cầu agent "bật lên xác nhận khi sắp thực thi rm -rfvà chỉ thực thi sau khi người dùng chấp thuận," chương này đã đạt được mục tiêu.
Sau khi kết thúc chương này, bạn sẽ có thể trả lời
- Tại sao hệ thống cấp quyền của Hermes Agent chỉ quản lý các lệnh đầu cuối?
- Cơ chế cốt lõi của việc phát hiện lệnh nguy hiểm là gì?
- Bốn phương án phê duyệt là gì?
- Bộ nhớ đệm cấp phiên giải quyết được vấn đề gì?
- Tại sao logic phê duyệt lại nằm trong bộ xử lý công cụ chứ không phải trong vòng lặp lõi?
Một dòng cần nhớ: Hệ thống cấp phép của agent Hermes không phải là một quy trình cho phép/từ chối chung. Đây là hành vi khớp mẫu nguy hiểm cộng với luồng phê duyệt, nhắm mục tiêu cụ thể vào các lệnh đầu cuối -- bởi vì trong số tất cả các công cụ, terminal là công cụ duy nhất có thể gây ra thiệt hại không thể khắc phục.