> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bảo mật

<Warning>
  **Mô hình tin cậy của trợ lý cá nhân.** Hướng dẫn này giả định một ranh giới
  người vận hành đáng tin cậy cho mỗi Gateway (mô hình một người dùng, trợ lý cá nhân).
  OpenClaw **không** phải là ranh giới bảo mật đa đối tượng thuê thù địch cho nhiều
  người dùng đối kháng cùng chia sẻ một agent hoặc Gateway. Nếu bạn cần vận hành với
  mức tin cậy hỗn hợp hoặc người dùng đối kháng, hãy tách ranh giới tin cậy (Gateway +
  thông tin xác thực riêng, lý tưởng nhất là người dùng hệ điều hành hoặc máy chủ riêng).
</Warning>

## Xác định phạm vi trước: mô hình bảo mật trợ lý cá nhân

Hướng dẫn bảo mật OpenClaw giả định một triển khai **trợ lý cá nhân**: một ranh giới người vận hành đáng tin cậy, có thể có nhiều agent.

* Tư thế bảo mật được hỗ trợ: một người dùng/ranh giới tin cậy cho mỗi Gateway (ưu tiên một người dùng hệ điều hành/máy chủ/VPS cho mỗi ranh giới).
* Không phải ranh giới bảo mật được hỗ trợ: một Gateway/agent dùng chung bởi những người dùng không tin cậy lẫn nhau hoặc đối kháng.
* Nếu cần cô lập người dùng đối kháng, hãy tách theo ranh giới tin cậy (Gateway + thông tin xác thực riêng, và lý tưởng nhất là người dùng/máy chủ hệ điều hành riêng).
* Nếu nhiều người dùng không đáng tin cậy có thể nhắn tin cho một agent có bật công cụ, hãy xem họ như đang chia sẻ cùng quyền công cụ được ủy quyền cho agent đó.

Trang này giải thích cách gia cố **trong mô hình đó**. Trang này không tuyên bố có khả năng cô lập đa đối tượng thuê thù địch trên một Gateway dùng chung.

Trước khi thay đổi truy cập từ xa, chính sách DM, reverse proxy hoặc phơi bày công khai,
hãy dùng [sổ tay vận hành phơi bày Gateway](/vi/gateway/security/exposure-runbook) làm
danh sách kiểm tra trước khi triển khai và khi rollback.

## Kiểm tra nhanh: `openclaw security audit`

Xem thêm: [Xác minh hình thức (Mô hình bảo mật)](/vi/security/formal-verification)

Chạy lệnh này định kỳ (đặc biệt sau khi thay đổi cấu hình hoặc phơi bày các bề mặt mạng):

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw security audit
openclaw security audit --deep
openclaw security audit --fix
openclaw security audit --json
```

`security audit --fix` được giữ hẹp một cách có chủ đích: nó chuyển các chính sách nhóm mở phổ biến
sang allowlist, khôi phục `logging.redactSensitive: "tools"`, siết chặt
quyền của state/config/include-file, và dùng đặt lại ACL của Windows thay vì
POSIX `chmod` khi chạy trên Windows.

Nó gắn cờ các lỗi cấu hình phổ biến (phơi bày xác thực Gateway, phơi bày điều khiển trình duyệt, allowlist nâng quyền, quyền hệ thống tệp, phê duyệt exec quá thoáng, và phơi bày công cụ qua kênh mở).

OpenClaw vừa là sản phẩm vừa là thử nghiệm: bạn đang nối hành vi của mô hình tuyến đầu vào các bề mặt nhắn tin thật và công cụ thật. **Không có thiết lập nào "bảo mật tuyệt đối".** Mục tiêu là phải có chủ ý về:

* ai có thể nói chuyện với bot của bạn
* bot được phép hành động ở đâu
* bot có thể chạm vào những gì

Bắt đầu với mức truy cập nhỏ nhất vẫn hoạt động, rồi mở rộng khi bạn có thêm sự tự tin.

### Khóa phụ thuộc của gói đã phát hành

Các checkout mã nguồn OpenClaw dùng `pnpm-lock.yaml`. Gói npm `openclaw` đã phát hành
và các gói Plugin npm do OpenClaw sở hữu bao gồm `npm-shrinkwrap.json`,
lockfile phụ thuộc có thể phát hành của npm, để các lượt cài đặt gói dùng đồ thị
phụ thuộc bắc cầu đã được rà soát từ bản phát hành thay vì phân giải một đồ thị mới
vào lúc cài đặt.

Shrinkwrap là ranh giới gia cố chuỗi cung ứng và tái lập bản phát hành,
không phải sandbox. Để xem mô hình bằng ngôn ngữ dễ hiểu, các lệnh dành cho maintainer, và
kiểm tra gói, hãy xem [npm shrinkwrap](/vi/gateway/security/shrinkwrap).

### Tin cậy triển khai và máy chủ

OpenClaw giả định máy chủ và ranh giới cấu hình là đáng tin cậy:

* Nếu ai đó có thể sửa đổi state/cấu hình máy chủ Gateway (`~/.openclaw`, bao gồm `openclaw.json`), hãy xem họ là người vận hành đáng tin cậy.
* Chạy một Gateway cho nhiều người vận hành không tin cậy lẫn nhau/đối kháng **không phải là thiết lập được khuyến nghị**.
* Với các nhóm có mức tin cậy hỗn hợp, hãy tách ranh giới tin cậy bằng các Gateway riêng (hoặc tối thiểu là người dùng/máy chủ hệ điều hành riêng).
* Mặc định được khuyến nghị: một người dùng cho mỗi máy/máy chủ (hoặc VPS), một Gateway cho người dùng đó, và một hoặc nhiều agent trong Gateway đó.
* Bên trong một phiên bản Gateway, quyền truy cập của người vận hành đã xác thực là vai trò control-plane đáng tin cậy, không phải vai trò tenant theo từng người dùng.
* Định danh phiên (`sessionKey`, ID phiên, nhãn) là bộ chọn định tuyến, không phải token ủy quyền.
* Nếu nhiều người có thể nhắn tin cho một agent có bật công cụ, mỗi người trong số họ đều có thể điều khiển cùng một tập quyền đó. Cô lập phiên/bộ nhớ theo từng người dùng giúp bảo vệ quyền riêng tư, nhưng không biến một agent dùng chung thành ủy quyền máy chủ theo từng người dùng.

### Thao tác tệp an toàn

OpenClaw dùng `@openclaw/fs-safe` cho truy cập tệp bị giới hạn theo root, ghi nguyên tử, giải nén archive, workspace tạm, và helper cho tệp bí mật. OpenClaw mặc định tắt helper Python POSIX tùy chọn của fs-safe; chỉ đặt `OPENCLAW_FS_SAFE_PYTHON_MODE=auto` hoặc `require` khi bạn muốn gia cố thêm cho đột biến fd-relative và có thể hỗ trợ runtime Python.

Chi tiết: [Thao tác tệp an toàn](/vi/gateway/security/secure-file-operations).

### Workspace Slack dùng chung: rủi ro thực sự

Nếu "mọi người trong Slack đều có thể nhắn tin cho bot", rủi ro cốt lõi là quyền công cụ được ủy quyền:

* bất kỳ người gửi được phép nào cũng có thể kích hoạt lệnh gọi công cụ (`exec`, trình duyệt, công cụ mạng/tệp) trong phạm vi chính sách của agent;
* prompt/content injection từ một người gửi có thể gây ra hành động ảnh hưởng tới state, thiết bị hoặc đầu ra dùng chung;
* nếu một agent dùng chung có thông tin xác thực/tệp nhạy cảm, bất kỳ người gửi được phép nào cũng có thể có khả năng thúc đẩy việc rò rỉ dữ liệu thông qua sử dụng công cụ.

Dùng agent/Gateway riêng với công cụ tối thiểu cho workflow nhóm; giữ agent có dữ liệu cá nhân ở chế độ riêng tư.

### Agent dùng chung trong công ty: mẫu chấp nhận được

Điều này chấp nhận được khi mọi người dùng agent đó nằm trong cùng một ranh giới tin cậy (ví dụ một nhóm trong công ty) và agent được giới hạn nghiêm ngặt trong phạm vi công việc.

* chạy nó trên một máy/VM/container chuyên dụng;
* dùng một người dùng hệ điều hành riêng + trình duyệt/hồ sơ/tài khoản riêng cho runtime đó;
* không đăng nhập runtime đó vào tài khoản Apple/Google cá nhân hoặc hồ sơ trình duyệt/trình quản lý mật khẩu cá nhân.

Nếu bạn trộn danh tính cá nhân và công ty trên cùng một runtime, bạn làm sụp đổ sự tách biệt và tăng rủi ro phơi bày dữ liệu cá nhân.

## Khái niệm tin cậy Gateway và Node

Xem Gateway và Node như một miền tin cậy của người vận hành, với các vai trò khác nhau:

* **Gateway** là control plane và bề mặt chính sách (`gateway.auth`, chính sách công cụ, định tuyến).
* **Node** là bề mặt thực thi từ xa được ghép với Gateway đó (lệnh, hành động thiết bị, năng lực cục bộ của máy chủ).
* Bên gọi đã xác thực với Gateway được tin cậy ở phạm vi Gateway. Sau khi pairing, hành động của Node là hành động của người vận hành đáng tin cậy trên Node đó.
* Các cấp phạm vi người vận hành và kiểm tra tại thời điểm phê duyệt được tóm tắt trong
  [Phạm vi người vận hành](/vi/gateway/operator-scopes).
* Các client backend loopback trực tiếp được xác thực bằng token/mật khẩu Gateway dùng chung
  có thể thực hiện RPC control-plane nội bộ mà không cần trình bày danh tính thiết bị
  người dùng. Đây không phải là cách bỏ qua pairing từ xa hoặc trình duyệt: client mạng,
  client Node, client token thiết bị, và danh tính thiết bị rõ ràng
  vẫn đi qua pairing và thực thi nâng cấp phạm vi.
* `sessionKey` là lựa chọn định tuyến/ngữ cảnh, không phải xác thực theo từng người dùng.
* Phê duyệt exec (allowlist + hỏi) là guardrail cho ý định của người vận hành, không phải cô lập đa đối tượng thuê thù địch.
* Mặc định sản phẩm của OpenClaw cho thiết lập một người vận hành đáng tin cậy là host exec trên `gateway`/`node` được phép mà không có lời nhắc phê duyệt (`security="full"`, `ask="off"` trừ khi bạn siết chặt). Mặc định đó là UX có chủ đích, tự thân không phải lỗ hổng.
* Phê duyệt exec ràng buộc đúng ngữ cảnh yêu cầu và toán hạng tệp cục bộ trực tiếp theo nỗ lực tốt nhất; chúng không mô hình hóa theo ngữ nghĩa mọi đường dẫn loader của runtime/interpreter. Hãy dùng sandboxing và cô lập máy chủ cho các ranh giới mạnh.

Nếu bạn cần cô lập người dùng thù địch, hãy tách ranh giới tin cậy theo người dùng/máy chủ hệ điều hành và chạy các Gateway riêng.

## Ma trận ranh giới tin cậy

Dùng phần này làm mô hình nhanh khi phân loại rủi ro:

| Ranh giới hoặc kiểm soát                                  | Ý nghĩa                                                    | Cách hiểu sai phổ biến                                                                            |
| --------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `gateway.auth` (token/password/trusted-proxy/device auth) | Xác thực bên gọi tới API Gateway                           | "Cần chữ ký theo từng tin nhắn trên mọi frame thì mới an toàn"                                    |
| `sessionKey`                                              | Khóa định tuyến để chọn ngữ cảnh/phiên                     | "Khóa phiên là ranh giới xác thực người dùng"                                                     |
| Guardrail prompt/content                                  | Giảm rủi ro lạm dụng mô hình                               | "Chỉ riêng prompt injection đã chứng minh bỏ qua xác thực"                                        |
| `canvas.eval` / browser evaluate                          | Năng lực người vận hành có chủ đích khi được bật           | "Bất kỳ primitive JS eval nào cũng tự động là lỗ hổng trong mô hình tin cậy này"                  |
| Shell `!` TUI cục bộ                                      | Thực thi cục bộ do người vận hành kích hoạt rõ ràng        | "Lệnh tiện ích shell cục bộ là tiêm lệnh từ xa"                                                   |
| Pairing Node và lệnh Node                                 | Thực thi từ xa cấp người vận hành trên thiết bị đã pairing | "Điều khiển thiết bị từ xa nên mặc định được xem là quyền truy cập người dùng không đáng tin cậy" |
| `gateway.nodes.pairing.autoApproveCidrs`                  | Chính sách ghi danh Node mạng đáng tin cậy opt-in          | "Allowlist mặc định tắt là lỗ hổng pairing tự động"                                               |

## Không phải lỗ hổng theo thiết kế

<Accordion title="Các phát hiện phổ biến nằm ngoài phạm vi">
  Các mẫu này thường được báo cáo và thường được đóng là không hành động trừ khi
  chứng minh được một lần vượt ranh giới thực sự:

  * Chuỗi chỉ có prompt injection mà không vượt qua chính sách, xác thực hoặc sandbox.
  * Khiếu nại giả định vận hành đa đối tượng thuê thù địch trên một máy chủ hoặc
    cấu hình dùng chung.
  * Khiếu nại phân loại quyền truy cập đường đọc bình thường của người vận hành (ví dụ
    `sessions.list` / `sessions.preview` / `chat.history`) là IDOR trong thiết lập
    Gateway dùng chung.
  * Phát hiện triển khai chỉ dành cho localhost (ví dụ HSTS trên một Gateway chỉ loopback).
  * Phát hiện chữ ký Webhook inbound của Discord cho các đường inbound không
    tồn tại trong repo này.
  * Báo cáo xem metadata pairing Node là một lớp phê duyệt ẩn thứ hai theo từng lệnh
    cho `system.run`, trong khi ranh giới thực thi thực tế vẫn là
    chính sách lệnh Node toàn cục của Gateway cộng với các phê duyệt exec riêng
    của Node.
  * Báo cáo xem `gateway.nodes.pairing.autoApproveCidrs` đã cấu hình là một
    lỗ hổng tự thân. Thiết lập này bị tắt theo mặc định, yêu cầu
    mục CIDR/IP rõ ràng, chỉ áp dụng cho pairing `role: node` lần đầu với
    không có phạm vi được yêu cầu, và không tự động phê duyệt operator/browser/Control UI,
    WebChat, nâng cấp vai trò, nâng cấp phạm vi, thay đổi metadata, thay đổi public-key,
    hoặc đường dẫn header trusted-proxy same-host loopback trừ khi xác thực trusted-proxy loopback đã được bật rõ ràng.
  * Phát hiện "thiếu ủy quyền theo từng người dùng" xem `sessionKey` như một
    token xác thực.
</Accordion>

## Baseline đã gia cố trong 60 giây

Dùng baseline này trước, rồi bật lại có chọn lọc các công cụ cho từng agent đáng tin cậy:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "replace-with-long-random-token" },
  },
  session: {
    dmScope: "per-channel-peer",
  },
  tools: {
    profile: "messaging",
    deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"],
    fs: { workspaceOnly: true },
    exec: { security: "deny", ask: "always" },
    elevated: { enabled: false },
  },
  channels: {
    whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } } },
  },
}
```

Điều này giữ Gateway chỉ cục bộ, cô lập DM, và mặc định tắt các công cụ control-plane/runtime.

## Quy tắc nhanh cho hộp thư dùng chung

Nếu nhiều hơn một người có thể DM bot của bạn:

* Đặt `session.dmScope: "per-channel-peer"` (hoặc `"per-account-channel-peer"` cho các kênh nhiều tài khoản).
* Giữ `dmPolicy: "pairing"` hoặc danh sách cho phép nghiêm ngặt.
* Không bao giờ kết hợp DM dùng chung với quyền truy cập công cụ rộng.
* Điều này tăng cường bảo vệ hộp thư đến hợp tác/dùng chung, nhưng không được thiết kế làm cơ chế cô lập đồng thuê bao thù địch khi người dùng cùng có quyền ghi vào host/config.

## Mô hình hiển thị ngữ cảnh

OpenClaw tách riêng hai khái niệm:

* **Ủy quyền kích hoạt**: ai có thể kích hoạt agent (`dmPolicy`, `groupPolicy`, danh sách cho phép, cổng mention).
* **Hiển thị ngữ cảnh**: ngữ cảnh bổ sung nào được chèn vào đầu vào của mô hình (nội dung trả lời, văn bản được trích dẫn, lịch sử luồng, metadata chuyển tiếp).

Danh sách cho phép kiểm soát kích hoạt và ủy quyền lệnh. Thiết lập `contextVisibility` kiểm soát cách lọc ngữ cảnh bổ sung (trả lời được trích dẫn, gốc luồng, lịch sử được lấy về):

* `contextVisibility: "all"` (mặc định) giữ ngữ cảnh bổ sung như đã nhận.
* `contextVisibility: "allowlist"` lọc ngữ cảnh bổ sung theo những người gửi được các kiểm tra danh sách cho phép đang hoạt động cho phép.
* `contextVisibility: "allowlist_quote"` hoạt động như `allowlist`, nhưng vẫn giữ một trả lời được trích dẫn rõ ràng.

Đặt `contextVisibility` theo từng kênh hoặc từng phòng/cuộc hội thoại. Xem [Trò chuyện nhóm](/vi/channels/groups#context-visibility-and-allowlists) để biết chi tiết thiết lập.

Hướng dẫn phân loại tư vấn:

* Các tuyên bố chỉ cho thấy "mô hình có thể thấy văn bản được trích dẫn hoặc lịch sử từ người gửi không nằm trong danh sách cho phép" là phát hiện tăng cường bảo vệ có thể xử lý bằng `contextVisibility`, bản thân chúng không phải là bypass ranh giới xác thực hoặc sandbox.
* Để có tác động bảo mật, báo cáo vẫn cần chứng minh được bypass ranh giới tin cậy (xác thực, chính sách, sandbox, phê duyệt, hoặc ranh giới được tài liệu hóa khác).

## Audit kiểm tra những gì (mức cao)

* **Quyền truy cập đầu vào** (chính sách DM, chính sách nhóm, danh sách cho phép): người lạ có thể kích hoạt bot không?
* **Phạm vi tác động của công cụ** (công cụ nâng quyền + phòng mở): prompt injection có thể biến thành hành động shell/tệp/mạng không?
* **Trôi lệch hệ thống tệp của exec**: các công cụ hệ thống tệp có thay đổi bị từ chối trong khi `exec`/`process` vẫn khả dụng mà không có ràng buộc hệ thống tệp sandbox không?
* **Trôi lệch phê duyệt exec** (`security=full`, `autoAllowSkills`, danh sách cho phép trình thông dịch không có `strictInlineEval`): các guardrail host-exec có còn hoạt động như bạn nghĩ không?
  * `security="full"` là cảnh báo tư thế rộng, không phải bằng chứng về lỗi. Đây là mặc định được chọn cho thiết lập trợ lý cá nhân đáng tin cậy; chỉ siết chặt khi mô hình đe dọa của bạn cần guardrail phê duyệt hoặc danh sách cho phép.
* **Phơi lộ mạng** (Gateway bind/auth, Tailscale Serve/Funnel, token xác thực yếu/ngắn).
* **Phơi lộ điều khiển trình duyệt** (nút từ xa, cổng relay, endpoint CDP từ xa).
* **Vệ sinh đĩa cục bộ** (quyền, symlink, config include, đường dẫn "thư mục đã đồng bộ").
* **Plugin** (plugin tải mà không có danh sách cho phép rõ ràng).
* **Trôi lệch chính sách/cấu hình sai** (thiết lập sandbox docker đã cấu hình nhưng chế độ sandbox tắt; mẫu `gateway.nodes.denyCommands` không hiệu lực vì đối sánh chỉ theo tên lệnh chính xác (ví dụ `system.run`) và không kiểm tra văn bản shell; mục `gateway.nodes.allowCommands` nguy hiểm; `tools.profile="minimal"` toàn cục bị profile theo agent ghi đè; công cụ do plugin sở hữu có thể truy cập dưới chính sách công cụ dễ dãi).
* **Trôi lệch kỳ vọng runtime** (ví dụ giả định exec ngầm vẫn có nghĩa là `sandbox` khi `tools.exec.host` hiện mặc định là `auto`, hoặc đặt rõ `tools.exec.host="sandbox"` trong khi chế độ sandbox đang tắt).
* **Vệ sinh mô hình** (cảnh báo khi mô hình được cấu hình trông cũ; không phải chặn cứng).

Nếu chạy `--deep`, OpenClaw cũng cố gắng probe Gateway trực tiếp theo khả năng tốt nhất.

## Bản đồ lưu trữ thông tin xác thực

Dùng phần này khi audit quyền truy cập hoặc quyết định cần sao lưu gì:

* **WhatsApp**: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
* **Token bot Telegram**: config/env hoặc `channels.telegram.tokenFile` (chỉ tệp thường; symlink bị từ chối)
* **Token bot Discord**: config/env hoặc SecretRef (nhà cung cấp env/file/exec)
* **Token Slack**: config/env (`channels.slack.*`)
* **Danh sách cho phép ghép cặp**:
  * `~/.openclaw/credentials/<channel>-allowFrom.json` (tài khoản mặc định)
  * `~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json` (tài khoản không mặc định)
* **Profile xác thực mô hình**: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`
* **Trạng thái runtime Codex (mặc định)**: `~/.openclaw/agents/<agentId>/agent/codex-home/`
* **Trạng thái runtime Codex dùng chung (chọn bật)**: `$CODEX_HOME` hoặc `~/.codex` khi
  `plugins.entries.codex.config.appServer.homeScope` là `"user"`. Chế độ này dùng
  tài khoản Codex, config, plugin và kho luồng gốc; chỉ bật cho
  Gateway cục bộ do chủ sở hữu kiểm soát. Xem [Codex harness](/vi/plugins/codex-harness#share-threads-with-codex-desktop-and-cli).
* **Payload bí mật dựa trên tệp (tùy chọn)**: `~/.openclaw/secrets.json`
* **Nhập OAuth cũ**: `~/.openclaw/credentials/oauth.json`

## Danh sách kiểm tra audit bảo mật

Khi audit in phát hiện, hãy xử lý theo thứ tự ưu tiên này:

1. **Bất cứ thứ gì "mở" + đã bật công cụ**: khóa DM/nhóm trước (ghép cặp/danh sách cho phép), rồi siết chính sách công cụ/sandboxing.
2. **Phơi lộ mạng công khai** (LAN bind, Funnel, thiếu xác thực): sửa ngay.
3. **Phơi lộ từ xa điều khiển trình duyệt**: xử lý như quyền truy cập operator (chỉ tailnet, ghép cặp nút có chủ đích, tránh phơi lộ công khai).
4. **Quyền**: đảm bảo state/config/credentials/auth không thể đọc bởi group/world.
5. **Plugin**: chỉ tải những gì bạn tin cậy rõ ràng.
6. **Lựa chọn mô hình**: ưu tiên mô hình hiện đại, được gia cố theo chỉ dẫn cho bất kỳ bot nào có công cụ.

## Thuật ngữ audit bảo mật

Mỗi phát hiện audit được khóa bằng một `checkId` có cấu trúc (ví dụ
`gateway.bind_no_auth` hoặc `tools.exec.security_full_configured`). Các lớp
mức độ nghiêm trọng thường gặp:

* `fs.*` - quyền hệ thống tệp trên state, config, thông tin xác thực, profile xác thực.
* `gateway.*` - chế độ bind, xác thực, Tailscale, Control UI, thiết lập trusted-proxy.
* `hooks.*`, `browser.*`, `sandbox.*`, `tools.exec.*` - tăng cường bảo vệ theo từng bề mặt.
* `plugins.*`, `skills.*` - chuỗi cung ứng plugin/skill và phát hiện quét.
* `security.exposure.*` - kiểm tra xuyên suốt nơi chính sách truy cập gặp phạm vi tác động của công cụ.

Xem catalog đầy đủ với mức độ nghiêm trọng, khóa sửa lỗi và hỗ trợ tự động sửa tại
[Kiểm tra audit bảo mật](/vi/gateway/security/audit-checks).

## Control UI qua HTTP

Control UI cần **ngữ cảnh bảo mật** (HTTPS hoặc localhost) để tạo danh tính
thiết bị. `gateway.controlUi.allowInsecureAuth` là công tắc tương thích cục bộ:

* Trên localhost, nó cho phép xác thực Control UI không có danh tính thiết bị khi trang
  được tải qua HTTP không bảo mật.
* Nó không bypass kiểm tra ghép cặp.
* Nó không nới lỏng yêu cầu danh tính thiết bị từ xa (không phải localhost).

Ưu tiên HTTPS (Tailscale Serve) hoặc mở UI trên `127.0.0.1`.

Chỉ dùng cho kịch bản phá kính khẩn cấp, `gateway.controlUi.dangerouslyDisableDeviceAuth`
tắt hoàn toàn kiểm tra danh tính thiết bị. Đây là hạ cấp bảo mật nghiêm trọng;
hãy giữ tắt trừ khi bạn đang chủ động gỡ lỗi và có thể hoàn nguyên nhanh.

Tách biệt với các cờ nguy hiểm đó, `gateway.auth.mode: "trusted-proxy"` thành công
có thể chấp nhận phiên Control UI **operator** không có danh tính thiết bị. Đó là
hành vi chế độ xác thực có chủ ý, không phải lối tắt `allowInsecureAuth`, và nó vẫn
không mở rộng tới phiên Control UI vai trò nút.

`openclaw security audit` cảnh báo khi thiết lập này được bật.

## Tóm tắt cờ không an toàn hoặc nguy hiểm

`openclaw security audit` phát sinh `config.insecure_or_dangerous_flags` khi
các công tắc gỡ lỗi không an toàn/nguy hiểm đã biết được bật. Hãy để chúng chưa đặt trong
production. Mỗi cờ được bật được báo cáo như một phát hiện riêng. Nếu cấu hình
suppressions audit, `security.audit.suppressions.active` vẫn nằm trong đầu ra audit
đang hoạt động ngay cả khi các phát hiện khớp chuyển sang `suppressedFindings`.

<AccordionGroup>
  <Accordion title="Các cờ được audit theo dõi hiện nay">
    * `gateway.controlUi.allowInsecureAuth=true`
    * `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true`
    * `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
    * `security.audit.suppressions configured (<count>)`
    * `hooks.gmail.allowUnsafeExternalContent=true`
    * `hooks.mappings[<index>].allowUnsafeExternalContent=true`
    * `tools.exec.applyPatch.workspaceOnly=false`
    * `plugins.entries.acpx.config.permissionMode=approve-all`
  </Accordion>

  <Accordion title="Tất cả khóa `dangerous*` / `dangerously*` trong schema config">
    Control UI và trình duyệt:

    * `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback`
    * `gateway.controlUi.dangerouslyDisableDeviceAuth`
    * `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`

    Đối sánh tên kênh (kênh đóng gói kèm và kênh plugin; cũng khả dụng theo từng
    `accounts.<accountId>` khi áp dụng):

    * `channels.discord.dangerouslyAllowNameMatching`
    * `channels.slack.dangerouslyAllowNameMatching`
    * `channels.googlechat.dangerouslyAllowNameMatching`
    * `channels.msteams.dangerouslyAllowNameMatching`
    * `channels.synology-chat.dangerouslyAllowNameMatching` (kênh plugin)
    * `channels.synology-chat.dangerouslyAllowInheritedWebhookPath` (kênh plugin)
    * `channels.zalouser.dangerouslyAllowNameMatching` (kênh plugin)
    * `channels.irc.dangerouslyAllowNameMatching` (kênh plugin)
    * `channels.mattermost.dangerouslyAllowNameMatching` (kênh plugin)

    Phơi lộ mạng:

    * `channels.telegram.network.dangerouslyAllowPrivateNetwork` (cũng theo từng tài khoản)

    Sandbox Docker (mặc định + theo từng agent):

    * `agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets`
    * `agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources`
    * `agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin`
  </Accordion>
</AccordionGroup>

## Cấu hình reverse proxy

Nếu chạy Gateway phía sau reverse proxy (nginx, Caddy, Traefik, v.v.), hãy cấu hình
`gateway.trustedProxies` để xử lý đúng IP client được chuyển tiếp.

Khi Gateway phát hiện header proxy từ một địa chỉ **không** nằm trong `trustedProxies`, nó sẽ **không** xem kết nối là client cục bộ. Nếu xác thực gateway bị tắt, các kết nối đó bị từ chối. Điều này ngăn bypass xác thực trong đó kết nối qua proxy nếu không sẽ trông như đến từ localhost và nhận tin cậy tự động.

`gateway.trustedProxies` cũng cấp dữ liệu cho `gateway.auth.mode: "trusted-proxy"`, nhưng chế độ xác thực đó nghiêm ngặt hơn:

* xác thực trusted-proxy **mặc định fail-closed trên proxy nguồn loopback**
* reverse proxy loopback cùng host có thể dùng `gateway.trustedProxies` để phát hiện client cục bộ và xử lý IP được chuyển tiếp
* reverse proxy loopback cùng host chỉ có thể thỏa mãn `gateway.auth.mode: "trusted-proxy"` khi `gateway.auth.trustedProxy.allowLoopback = true`; nếu không, hãy dùng xác thực token/password

```yaml theme={"theme":{"light":"min-light","dark":"min-dark"}}
gateway:
  trustedProxies:
    - "10.0.0.1" # reverse proxy IP
  # Optional. Default false.
  # Only enable if your proxy cannot provide X-Forwarded-For.
  allowRealIpFallback: false
  auth:
    mode: password
    password: ${OPENCLAW_GATEWAY_PASSWORD}
```

Khi `trustedProxies` được cấu hình, Gateway dùng `X-Forwarded-For` để xác định IP client. `X-Real-IP` mặc định bị bỏ qua trừ khi `gateway.allowRealIpFallback: true` được đặt rõ ràng.

Header trusted proxy không khiến ghép cặp thiết bị nút tự động được tin cậy.
`gateway.nodes.pairing.autoApproveCidrs` là chính sách operator riêng, mặc định bị tắt.
Ngay cả khi bật, các đường dẫn header trusted-proxy nguồn loopback
bị loại khỏi tự động phê duyệt nút vì caller cục bộ có thể giả mạo các
header đó, kể cả khi xác thực trusted-proxy loopback được bật rõ ràng.

Hành vi reverse proxy tốt (ghi đè header chuyển tiếp đi vào):

```nginx theme={"theme":{"light":"min-light","dark":"min-dark"}}
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
```

Hành vi reverse proxy xấu (nối thêm/giữ nguyên header chuyển tiếp không đáng tin cậy):

```nginx theme={"theme":{"light":"min-light","dark":"min-dark"}}
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
```

## Ghi chú về HSTS và origin

* Gateway OpenClaw ưu tiên local/loopback. Nếu bạn kết thúc TLS tại reverse proxy, hãy đặt HSTS trên miền HTTPS hướng về proxy tại đó.
* Nếu chính Gateway kết thúc HTTPS, bạn có thể đặt `gateway.http.securityHeaders.strictTransportSecurity` để phát header HSTS từ phản hồi của OpenClaw.
* Hướng dẫn triển khai chi tiết nằm trong [Xác thực Proxy đáng tin cậy](/vi/gateway/trusted-proxy-auth#tls-termination-and-hsts).
* Với các triển khai Control UI không phải loopback, `gateway.controlUi.allowedOrigins` là bắt buộc theo mặc định.
* `gateway.controlUi.allowedOrigins: ["*"]` là chính sách cho phép rõ ràng mọi nguồn gốc trình duyệt, không phải mặc định được gia cố. Tránh dùng ngoài môi trường kiểm thử cục bộ được kiểm soát chặt chẽ.
* Lỗi xác thực nguồn gốc trình duyệt trên loopback vẫn bị giới hạn tốc độ ngay cả khi
  miễn trừ loopback chung được bật, nhưng khóa khóa tạm thời được giới hạn theo từng
  giá trị `Origin` đã chuẩn hóa thay vì một bucket localhost dùng chung.
* `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` bật chế độ dự phòng nguồn gốc theo Host-header; hãy xem đây là chính sách nguy hiểm do người vận hành chọn.
* Xem DNS rebinding và hành vi header proxy-host là các mối quan tâm gia cố triển khai; giữ `trustedProxies` chặt chẽ và tránh phơi Gateway trực tiếp ra internet công cộng.

## Nhật ký phiên cục bộ nằm trên ổ đĩa

OpenClaw lưu bản ghi phiên trên ổ đĩa tại `~/.openclaw/agents/<agentId>/sessions/*.jsonl`.
Điều này cần thiết cho tính liên tục của phiên và (tùy chọn) lập chỉ mục bộ nhớ phiên, nhưng cũng có nghĩa là
**bất kỳ tiến trình/người dùng nào có quyền truy cập hệ thống tệp đều có thể đọc các nhật ký đó**. Hãy xem quyền truy cập ổ đĩa là ranh giới tin cậy
và khóa chặt quyền trên `~/.openclaw` (xem phần kiểm toán bên dưới). Nếu bạn cần
cách ly mạnh hơn giữa các tác tử, hãy chạy chúng dưới các người dùng hệ điều hành riêng hoặc các máy chủ riêng.

## Thực thi Node (system.run)

Nếu một node macOS đã được ghép đôi, Gateway có thể gọi `system.run` trên node đó. Đây là **thực thi mã từ xa** trên Mac:

* Yêu cầu ghép đôi node (phê duyệt + token).
* Ghép đôi node Gateway không phải là bề mặt phê duyệt theo từng lệnh. Nó thiết lập danh tính/tin cậy của node và phát hành token.
* Gateway áp dụng chính sách lệnh node toàn cục thô thông qua `gateway.nodes.allowCommands` / `denyCommands`.
* Được kiểm soát trên Mac qua **Settings → Exec approvals** (security + ask + allowlist).
* Chính sách `system.run` theo từng node là tệp phê duyệt thực thi riêng của node (`exec.approvals.node.*`), có thể chặt hơn hoặc lỏng hơn chính sách ID lệnh toàn cục của Gateway.
* Một node chạy với `security="full"` và `ask="off"` đang tuân theo mô hình người vận hành đáng tin cậy mặc định. Hãy xem đó là hành vi dự kiến trừ khi triển khai của bạn yêu cầu lập trường phê duyệt hoặc allowlist chặt hơn rõ ràng.
* Chế độ phê duyệt ràng buộc đúng ngữ cảnh yêu cầu và, khi có thể, một toán hạng tập lệnh/tệp cục bộ cụ thể. Nếu OpenClaw không thể xác định chính xác một tệp cục bộ trực tiếp cho một lệnh trình thông dịch/runtime, việc thực thi dựa trên phê duyệt sẽ bị từ chối thay vì hứa hẹn bao phủ ngữ nghĩa đầy đủ.
* Với `host=node`, các lần chạy dựa trên phê duyệt cũng lưu một
  `systemRunPlan` chuẩn đã chuẩn bị; các lần chuyển tiếp đã phê duyệt sau đó dùng lại kế hoạch đã lưu đó, và kiểm tra hợp lệ của Gateway từ chối các chỉnh sửa của bên gọi đối với ngữ cảnh command/cwd/session sau khi
  yêu cầu phê duyệt đã được tạo.
* Nếu bạn không muốn thực thi từ xa, đặt security thành **deny** và gỡ ghép đôi node cho Mac đó.

Sự phân biệt này quan trọng khi phân loại sự cố:

* Một node đã ghép đôi kết nối lại và quảng bá danh sách lệnh khác, tự nó, không phải là lỗ hổng nếu chính sách toàn cục của Gateway và phê duyệt thực thi cục bộ của node vẫn thực thi ranh giới thực thi thực tế.
* Các báo cáo xem metadata ghép đôi node như một lớp phê duyệt theo từng lệnh ẩn thứ hai thường là nhầm lẫn chính sách/UX, không phải vượt qua ranh giới bảo mật.

## Skills động (watcher / node từ xa)

OpenClaw có thể làm mới danh sách Skills giữa phiên:

* **Trình theo dõi Skills**: thay đổi đối với `SKILL.md` có thể cập nhật snapshot Skills ở lượt tác tử tiếp theo.
* **Node từ xa**: kết nối một node macOS có thể khiến các Skills chỉ dành cho macOS đủ điều kiện (dựa trên dò tìm bin).

Hãy xem thư mục skill là **mã đáng tin cậy** và hạn chế người có thể sửa đổi chúng.

## Mô hình mối đe dọa

Trợ lý AI của bạn có thể:

* Thực thi lệnh shell tùy ý
* Đọc/ghi tệp
* Truy cập dịch vụ mạng
* Gửi tin nhắn cho bất kỳ ai (nếu bạn cấp cho nó quyền truy cập WhatsApp)

Những người nhắn tin cho bạn có thể:

* Cố lừa AI của bạn làm việc xấu
* Dùng kỹ thuật xã hội để lấy quyền truy cập dữ liệu của bạn
* Thăm dò chi tiết hạ tầng

## Khái niệm cốt lõi: kiểm soát truy cập trước trí thông minh

Hầu hết lỗi ở đây không phải khai thác tinh vi - mà là "ai đó nhắn cho bot và bot làm theo yêu cầu."

Lập trường của OpenClaw:

* **Danh tính trước:** quyết định ai có thể nói chuyện với bot (ghép đôi DM / allowlist / "open" rõ ràng).
* **Phạm vi tiếp theo:** quyết định bot được phép hành động ở đâu (allowlist nhóm + cổng nhắc tên, công cụ, sandboxing, quyền thiết bị).
* **Mô hình sau cùng:** giả định mô hình có thể bị thao túng; thiết kế sao cho thao túng có bán kính ảnh hưởng hạn chế.

## Mô hình ủy quyền lệnh

Lệnh slash và chỉ thị chỉ được tôn trọng với **người gửi đã được ủy quyền**. Ủy quyền được suy ra từ
allowlist/ghép đôi kênh cộng với `commands.useAccessGroups` (xem [Cấu hình](/vi/gateway/configuration)
và [Lệnh slash](/vi/tools/slash-commands)). Nếu allowlist của một kênh trống hoặc bao gồm `"*"`,
lệnh về cơ bản được mở cho kênh đó.

`/exec` chỉ là tiện ích theo phiên cho người vận hành đã được ủy quyền. Nó **không** ghi cấu hình hoặc
thay đổi các phiên khác.

## Rủi ro công cụ mặt phẳng điều khiển

Hai công cụ tích hợp sẵn có thể tạo thay đổi mặt phẳng điều khiển bền vững:

* `gateway` có thể kiểm tra cấu hình bằng `config.schema.lookup` / `config.get`, và có thể tạo thay đổi bền vững bằng `config.apply`, `config.patch`, và `update.run`.
* `cron` có thể tạo công việc đã lên lịch tiếp tục chạy sau khi cuộc trò chuyện/tác vụ ban đầu kết thúc.

Công cụ runtime `gateway` hướng tác tử vẫn từ chối ghi lại
`tools.exec.ask` hoặc `tools.exec.security`; các alias cũ `tools.bash.*` được
chuẩn hóa về cùng các đường dẫn thực thi được bảo vệ trước khi ghi.
Các chỉnh sửa `gateway config.apply` và `gateway config.patch` do tác tử điều khiển
mặc định fail-closed: chỉ một tập hẹp các đường dẫn tinh chỉnh runtime rủi ro thấp,
cổng nhắc tên và phản hồi hiển thị là tác tử có thể tinh chỉnh. Mặc định mô hình toàn cục
và lớp phủ prompt vẫn do người vận hành kiểm soát. Vì vậy, các cây cấu hình nhạy cảm mới
được bảo vệ trừ khi chúng được cố ý thêm vào allowlist.

Với bất kỳ tác tử/bề mặt nào xử lý nội dung không đáng tin cậy, mặc định hãy từ chối các mục này:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  tools: {
    deny: ["gateway", "cron", "sessions_spawn", "sessions_send"],
  },
}
```

`commands.restart=false` chỉ chặn hành động khởi động lại. Nó không tắt các hành động cấu hình/cập nhật của `gateway`.

## Plugins

Plugins chạy **trong cùng tiến trình** với Gateway. Hãy xem chúng là mã đáng tin cậy:

* Chỉ cài đặt plugin từ nguồn bạn tin cậy.
* Ưu tiên allowlist `plugins.allow` rõ ràng.
* Rà soát cấu hình plugin trước khi bật.
* Khởi động lại Gateway sau thay đổi plugin.
* Nếu bạn cài đặt hoặc cập nhật plugin (`openclaw plugins install <package>`, `openclaw plugins update <id>`), hãy xem việc đó như chạy mã không đáng tin cậy:
  * Đường dẫn cài đặt là thư mục theo từng plugin dưới gốc cài đặt plugin đang hoạt động.
  * OpenClaw không chạy chặn mã nguy hiểm cục bộ tích hợp sẵn trong quá trình cài đặt/cập nhật. Dùng `security.installPolicy` cho các quyết định cho phép/chặn cục bộ do người vận hành sở hữu và `openclaw security audit --deep` để quét chẩn đoán.
  * Cài đặt plugin qua npm và git chỉ chạy hội tụ phụ thuộc của trình quản lý gói trong luồng cài đặt/cập nhật rõ ràng. Đường dẫn cục bộ và tệp lưu trữ được xem là gói plugin tự chứa; OpenClaw sao chép/tham chiếu chúng mà không chạy `npm install`.
  * Ưu tiên phiên bản được ghim, chính xác (`@scope/pkg@1.2.3`), và kiểm tra mã đã giải nén trên ổ đĩa trước khi bật.
  * `--dangerously-force-unsafe-install` đã bị ngừng dùng và không còn thay đổi hành vi cài đặt/cập nhật plugin.
  * Cấu hình `security.installPolicy` khi người vận hành cần một lệnh cục bộ đáng tin cậy để đưa ra quyết định cho phép/chặn theo máy chủ cho cài đặt skill và plugin. Chính sách này chạy sau khi vật liệu nguồn được dàn dựng nhưng trước khi cài đặt tiếp tục, áp dụng cả cho Skills ClawHub, và không bị bỏ qua bởi các cờ không an toàn đã ngừng dùng.

Chi tiết: [Plugins](/vi/tools/plugin)

## Mô hình truy cập DM: ghép đôi, allowlist, open, tắt

Tất cả kênh hiện hỗ trợ DM đều hỗ trợ một chính sách DM (`dmPolicy` hoặc `*.dm.policy`) để chặn DM đến **trước khi** tin nhắn được xử lý:

* `pairing` (mặc định): người gửi không xác định nhận một mã ghép đôi ngắn và bot bỏ qua tin nhắn của họ cho đến khi được phê duyệt. Mã hết hạn sau 1 giờ; DM lặp lại sẽ không gửi lại mã cho đến khi một yêu cầu mới được tạo. Các yêu cầu đang chờ được giới hạn ở **3 mỗi kênh** theo mặc định.
* `allowlist`: người gửi không xác định bị chặn (không bắt tay ghép đôi).
* `open`: cho phép bất kỳ ai DM (công khai). **Yêu cầu** allowlist của kênh bao gồm `"*"` (chọn tham gia rõ ràng).
* `disabled`: bỏ qua hoàn toàn DM đến.

Phê duyệt qua CLI:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw pairing list <channel>
openclaw pairing approve <channel> <code>
```

Chi tiết + tệp trên ổ đĩa: [Ghép đôi](/vi/channels/pairing)

## Cách ly phiên DM (chế độ nhiều người dùng)

Theo mặc định, OpenClaw định tuyến **tất cả DM vào phiên chính** để trợ lý của bạn có tính liên tục giữa thiết bị và kênh. Nếu **nhiều người** có thể DM bot (DM mở hoặc allowlist nhiều người), hãy cân nhắc cách ly phiên DM:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  session: { dmScope: "per-channel-peer" },
}
```

Điều này ngăn rò rỉ ngữ cảnh giữa người dùng trong khi vẫn giữ trò chuyện nhóm được cách ly.

Đây là ranh giới ngữ cảnh nhắn tin, không phải ranh giới quản trị máy chủ. Nếu người dùng đối địch lẫn nhau và dùng chung cùng máy chủ/cấu hình Gateway, hãy chạy các gateway riêng theo từng ranh giới tin cậy.

### Chế độ DM an toàn (khuyến nghị)

Xem đoạn cấu hình trên là **chế độ DM an toàn**:

* Mặc định: `session.dmScope: "main"` (tất cả DM dùng chung một phiên để duy trì tính liên tục).
* Mặc định onboarding CLI cục bộ: ghi `session.dmScope: "per-channel-peer"` khi chưa đặt (giữ các giá trị rõ ràng hiện có).
* Chế độ DM an toàn: `session.dmScope: "per-channel-peer"` (mỗi cặp kênh+người gửi có một ngữ cảnh DM cách ly).
* Cách ly peer xuyên kênh: `session.dmScope: "per-peer"` (mỗi người gửi có một phiên trên tất cả kênh cùng loại).

Nếu bạn chạy nhiều tài khoản trên cùng một kênh, hãy dùng `per-account-channel-peer` thay thế. Nếu cùng một người liên hệ với bạn trên nhiều kênh, dùng `session.identityLinks` để gộp các phiên DM đó vào một danh tính chuẩn. Xem [Quản lý phiên](/vi/concepts/session) và [Cấu hình](/vi/gateway/configuration).

## Allowlists cho DM và nhóm

OpenClaw có hai lớp "ai có thể kích hoạt tôi?" riêng biệt:

* **Danh sách cho phép DM** (`allowFrom` / `channels.discord.allowFrom` / `channels.slack.allowFrom`; cũ: `channels.discord.dm.allowFrom`, `channels.slack.dm.allowFrom`): ai được phép nói chuyện với bot trong tin nhắn trực tiếp.
  * Khi `dmPolicy="pairing"`, các phê duyệt được ghi vào kho danh sách cho phép ghép đôi theo phạm vi tài khoản dưới `~/.openclaw/credentials/` (`<channel>-allowFrom.json` cho tài khoản mặc định, `<channel>-<accountId>-allowFrom.json` cho tài khoản không mặc định), rồi được hợp nhất với các danh sách cho phép trong cấu hình.
* **Danh sách cho phép nhóm** (theo kênh): những nhóm/kênh/guild nào bot sẽ chấp nhận tin nhắn.
  * Các mẫu phổ biến:
    * `channels.whatsapp.groups`, `channels.telegram.groups`, `channels.imessage.groups`: mặc định theo từng nhóm như `requireMention`; khi được đặt, nó cũng hoạt động như danh sách cho phép nhóm (thêm `"*"` để giữ hành vi cho phép tất cả).
    * `groupPolicy="allowlist"` + `groupAllowFrom`: giới hạn ai có thể kích hoạt bot *bên trong* một phiên nhóm (WhatsApp/Telegram/Signal/iMessage/Microsoft Teams).
    * `channels.discord.guilds` / `channels.slack.channels`: danh sách cho phép theo từng bề mặt + mặc định nhắc đến.
  * Kiểm tra nhóm chạy theo thứ tự này: `groupPolicy`/danh sách cho phép nhóm trước, kích hoạt bằng nhắc đến/trả lời sau.
  * Trả lời một tin nhắn của bot (nhắc đến ngầm định) **không** bỏ qua các danh sách cho phép người gửi như `groupAllowFrom`.
  * **Ghi chú bảo mật:** coi `dmPolicy="open"` và `groupPolicy="open"` là các thiết lập chỉ dùng khi không còn lựa chọn. Chúng hầu như không nên được dùng; ưu tiên ghép đôi + danh sách cho phép trừ khi bạn hoàn toàn tin tưởng mọi thành viên trong phòng.

Chi tiết: [Cấu hình](/vi/gateway/configuration) và [Nhóm](/vi/channels/groups)

## Chèn lệnh vào prompt (là gì, vì sao quan trọng)

Chèn lệnh vào prompt là khi kẻ tấn công tạo một tin nhắn thao túng mô hình làm điều không an toàn ("bỏ qua hướng dẫn của bạn", "xuất hệ thống tệp của bạn", "theo liên kết này và chạy lệnh", v.v.).

Ngay cả với system prompt mạnh, **chèn lệnh vào prompt vẫn chưa được giải quyết**. Các rào chắn bằng system prompt chỉ là hướng dẫn mềm; việc thực thi cứng đến từ chính sách công cụ, phê duyệt exec, sandboxing và danh sách cho phép kênh (và người vận hành có thể tắt các cơ chế này theo thiết kế). Những điều hữu ích trong thực tế:

* Khóa chặt DM đến (ghép đôi/danh sách cho phép).
* Ưu tiên cổng nhắc đến trong nhóm; tránh bot "luôn bật" trong phòng công khai.
* Mặc định coi liên kết, tệp đính kèm và hướng dẫn được dán là thù địch.
* Chạy thực thi công cụ nhạy cảm trong sandbox; giữ bí mật nằm ngoài hệ thống tệp mà agent có thể truy cập.
* Ghi chú: sandboxing là tùy chọn bật. Nếu chế độ sandbox tắt, `host=auto` ngầm định sẽ phân giải thành máy chủ gateway. `host=sandbox` rõ ràng vẫn đóng lỗi vì không có runtime sandbox. Đặt `host=gateway` nếu bạn muốn hành vi đó được thể hiện rõ trong cấu hình.
* Giới hạn các công cụ rủi ro cao (`exec`, `browser`, `web_fetch`, `web_search`) cho các agent đáng tin cậy hoặc danh sách cho phép rõ ràng.
* Nếu bạn đưa trình thông dịch vào danh sách cho phép (`python`, `node`, `ruby`, `perl`, `php`, `lua`, `osascript`), hãy bật `tools.exec.strictInlineEval` để các dạng eval nội tuyến vẫn cần phê duyệt rõ ràng.
* Phân tích phê duyệt shell cũng từ chối các dạng mở rộng tham số POSIX (`$VAR`, `$?`, `$$`, `$1`, `$@`, `${…}`) bên trong **heredoc không được đặt trong dấu nháy**, vì vậy phần thân heredoc trong danh sách cho phép không thể lén mở rộng shell qua bước duyệt danh sách cho phép như văn bản thuần. Đặt dấu nháy cho ký hiệu kết thúc heredoc (ví dụ `<<'EOF'`) để chọn ngữ nghĩa phần thân dạng literal; các heredoc không đặt dấu nháy vốn sẽ mở rộng biến sẽ bị từ chối.
* **Lựa chọn mô hình rất quan trọng:** các mô hình cũ/nhỏ/di sản kém vững hơn đáng kể trước chèn lệnh vào prompt và lạm dụng công cụ. Với agent có bật công cụ, hãy dùng mô hình thế hệ mới nhất, mạnh nhất, được gia cố theo hướng dẫn hiện có.

Các dấu hiệu cảnh báo cần coi là không đáng tin cậy:

* "Đọc tệp/URL này và làm đúng theo nội dung trong đó."
* "Bỏ qua system prompt hoặc quy tắc an toàn của bạn."
* "Tiết lộ hướng dẫn ẩn hoặc đầu ra công cụ của bạn."
* "Dán toàn bộ nội dung của \~/.openclaw hoặc nhật ký của bạn."

## Làm sạch token đặc biệt trong nội dung bên ngoài

OpenClaw loại bỏ các literal token đặc biệt phổ biến của mẫu chat LLM tự lưu trữ khỏi nội dung bên ngoài đã được bọc và siêu dữ liệu trước khi chúng đến mô hình. Các họ dấu đánh dấu được bao phủ gồm Qwen/ChatML, Llama, Gemma, Mistral, Phi và token vai trò/lượt GPT-OSS.

Lý do:

* Các backend tương thích OpenAI đứng trước mô hình tự lưu trữ đôi khi giữ lại token đặc biệt xuất hiện trong văn bản người dùng, thay vì che chúng. Nếu không, kẻ tấn công có thể ghi vào nội dung bên ngoài đi vào (một trang được tải, nội dung email, đầu ra công cụ nội dung tệp) và chèn một ranh giới vai trò `assistant` hoặc `system` giả để thoát khỏi các rào chắn nội dung đã bọc.
* Việc làm sạch diễn ra ở lớp bọc nội dung bên ngoài, nên áp dụng đồng nhất trên các công cụ fetch/read và nội dung kênh đi vào thay vì theo từng provider.
* Các phản hồi mô hình đi ra đã có một bộ làm sạch riêng, loại bỏ `<tool_call>`, `<function_calls>`, `<system-reminder>`, `<previous_response>` bị rò rỉ và các khung dựng runtime nội bộ tương tự khỏi phản hồi hiển thị cho người dùng tại ranh giới giao cuối cùng của kênh. Bộ làm sạch nội dung bên ngoài là phần đối ứng ở chiều đi vào.

Điều này không thay thế các biện pháp gia cố khác trên trang này - `dmPolicy`, danh sách cho phép, phê duyệt exec, sandboxing và `contextVisibility` vẫn làm phần việc chính. Nó đóng một đường vòng cụ thể ở lớp tokenizer chống lại các stack tự lưu trữ chuyển tiếp văn bản người dùng với token đặc biệt còn nguyên.

## Cờ bỏ qua nội dung bên ngoài không an toàn

OpenClaw có các cờ bỏ qua rõ ràng để tắt bọc an toàn cho nội dung bên ngoài:

* `hooks.mappings[].allowUnsafeExternalContent`
* `hooks.gmail.allowUnsafeExternalContent`
* Trường payload Cron `allowUnsafeExternalContent`

Hướng dẫn:

* Giữ các mục này chưa đặt/false trong production.
* Chỉ bật tạm thời cho gỡ lỗi có phạm vi rất chặt.
* Nếu bật, hãy cô lập agent đó (sandbox + công cụ tối thiểu + không gian tên phiên chuyên dụng).

Ghi chú rủi ro về hook:

* Payload hook là nội dung không đáng tin cậy, ngay cả khi việc gửi đến từ các hệ thống bạn kiểm soát (nội dung mail/docs/web có thể mang chèn lệnh vào prompt).
* Các tầng mô hình yếu làm tăng rủi ro này. Với tự động hóa do hook dẫn dắt, hãy ưu tiên các tầng mô hình hiện đại mạnh và giữ chính sách công cụ chặt (`tools.profile: "messaging"` hoặc nghiêm ngặt hơn), cùng với sandboxing khi có thể.

### Chèn lệnh vào prompt không cần DM công khai

Ngay cả khi **chỉ bạn** có thể nhắn tin cho bot, chèn lệnh vào prompt vẫn có thể xảy ra qua
bất kỳ **nội dung không đáng tin cậy** nào bot đọc (kết quả web search/fetch, trang browser,
email, docs, tệp đính kèm, nhật ký/mã được dán). Nói cách khác: người gửi không phải là
bề mặt đe dọa duy nhất; **chính nội dung** có thể mang các hướng dẫn đối kháng.

Khi công cụ được bật, rủi ro điển hình là rò rỉ ngữ cảnh hoặc kích hoạt
lệnh gọi công cụ. Giảm phạm vi tác động bằng cách:

* Dùng một **agent đọc** chỉ đọc hoặc tắt công cụ để tóm tắt nội dung không đáng tin cậy,
  rồi chuyển bản tóm tắt cho agent chính của bạn.
* Tắt `web_search` / `web_fetch` / `browser` cho agent có bật công cụ trừ khi cần.
* Với đầu vào URL OpenResponses (`input_file` / `input_image`), đặt chặt
  `gateway.http.endpoints.responses.files.urlAllowlist` và
  `gateway.http.endpoints.responses.images.urlAllowlist`, đồng thời giữ `maxUrlParts` thấp.
  Danh sách cho phép trống được coi như chưa đặt; dùng `files.allowUrl: false` / `images.allowUrl: false`
  nếu bạn muốn tắt hoàn toàn việc tải URL.
* Với đầu vào tệp OpenResponses, văn bản `input_file` đã giải mã vẫn được chèn dưới dạng
  **nội dung bên ngoài không đáng tin cậy**. Đừng dựa vào việc văn bản tệp là đáng tin chỉ vì
  Gateway đã giải mã nó cục bộ. Khối được chèn vẫn mang các dấu mốc ranh giới rõ ràng
  `<<<EXTERNAL_UNTRUSTED_CONTENT ...>>>` cùng siêu dữ liệu `Source: External`,
  dù đường dẫn này bỏ qua biểu ngữ `SECURITY NOTICE:` dài hơn.
* Cơ chế bọc dựa trên dấu mốc tương tự được áp dụng khi media-understanding trích xuất văn bản
  từ tài liệu đính kèm trước khi thêm văn bản đó vào prompt phương tiện.
* Bật sandboxing và danh sách cho phép công cụ nghiêm ngặt cho bất kỳ agent nào chạm vào đầu vào không đáng tin.
* Giữ bí mật khỏi prompt; thay vào đó truyền chúng qua env/config trên máy chủ gateway.

### Backend LLM tự lưu trữ

Các backend tự lưu trữ tương thích OpenAI như vLLM, SGLang, TGI, LM Studio,
hoặc các stack tokenizer Hugging Face tùy chỉnh có thể khác với provider được lưu trữ ở cách
xử lý token đặc biệt của mẫu chat. Nếu một backend tokenizer các chuỗi literal
như `<|im_start|>`, `<|start_header_id|>`, hoặc `<start_of_turn>` thành
token cấu trúc của mẫu chat bên trong nội dung người dùng, văn bản không đáng tin có thể cố
giả mạo ranh giới vai trò ở lớp tokenizer.

OpenClaw loại bỏ các literal token đặc biệt theo họ mô hình phổ biến khỏi
nội dung bên ngoài đã bọc trước khi gửi đến mô hình. Hãy giữ bật việc bọc nội dung bên ngoài,
và ưu tiên các thiết lập backend tách hoặc escape token đặc biệt
trong nội dung do người dùng cung cấp khi có. Các provider được lưu trữ như OpenAI
và Anthropic đã áp dụng cơ chế làm sạch phía yêu cầu của riêng họ.

### Độ mạnh mô hình (ghi chú bảo mật)

Khả năng chống chèn lệnh vào prompt **không** đồng đều giữa các tầng mô hình. Các mô hình nhỏ hơn/rẻ hơn nhìn chung dễ bị lạm dụng công cụ và chiếm quyền hướng dẫn hơn, đặc biệt dưới các prompt đối kháng.

<Warning>
  Với agent có bật công cụ hoặc agent đọc nội dung không đáng tin, rủi ro chèn lệnh vào prompt với các mô hình cũ/nhỏ thường quá cao. Đừng chạy các workload đó trên tầng mô hình yếu.
</Warning>

Khuyến nghị:

* **Dùng mô hình thế hệ mới nhất, tầng tốt nhất** cho bất kỳ bot nào có thể chạy công cụ hoặc chạm vào tệp/mạng.
* **Không dùng các tầng cũ/yếu/nhỏ hơn** cho agent có bật công cụ hoặc hộp thư đến không đáng tin; rủi ro chèn lệnh vào prompt quá cao.
* Nếu bạn buộc phải dùng mô hình nhỏ hơn, **giảm phạm vi tác động** (công cụ chỉ đọc, sandboxing mạnh, quyền truy cập hệ thống tệp tối thiểu, danh sách cho phép nghiêm ngặt).
* Khi chạy mô hình nhỏ, **bật sandboxing cho mọi phiên** và **tắt web\_search/web\_fetch/browser** trừ khi đầu vào được kiểm soát chặt.
* Với trợ lý cá nhân chỉ chat có đầu vào đáng tin cậy và không có công cụ, mô hình nhỏ hơn thường ổn.

## Lý luận và đầu ra dài trong nhóm

`/reasoning`, `/verbose`, và `/trace` có thể phơi bày lý luận nội bộ, đầu ra
công cụ hoặc chẩn đoán Plugin vốn
không dành cho kênh công khai. Trong ngữ cảnh nhóm, hãy coi chúng là **chỉ để gỡ lỗi**
và giữ tắt trừ khi bạn thật sự cần.

Hướng dẫn:

* Giữ `/reasoning`, `/verbose`, và `/trace` bị tắt trong phòng công khai.
* Nếu bạn bật chúng, chỉ làm vậy trong DM đáng tin cậy hoặc phòng được kiểm soát chặt.
* Hãy nhớ: đầu ra verbose và trace có thể bao gồm đối số công cụ, URL, chẩn đoán Plugin và dữ liệu mô hình đã thấy.

## Ví dụ gia cố cấu hình

### Quyền tệp

Giữ cấu hình + trạng thái riêng tư trên máy chủ gateway:

* `~/.openclaw/openclaw.json`: `600` (chỉ người dùng đọc/ghi)
* `~/.openclaw`: `700` (chỉ người dùng)

`openclaw doctor` có thể cảnh báo và đề nghị siết chặt các quyền này.

### Phơi bày mạng (bind, cổng, tường lửa)

Gateway ghép kênh **WebSocket + HTTP** trên một cổng duy nhất:

* Mặc định: `18789`
* Cấu hình/cờ/env: `gateway.port`, `--port`, `OPENCLAW_GATEWAY_PORT`

Bề mặt HTTP này bao gồm Control UI và máy chủ lưu trữ canvas:

* Control UI (tài sản SPA) (đường dẫn cơ sở mặc định `/`)
* Máy chủ lưu trữ canvas: `/__openclaw__/canvas/` và `/__openclaw__/a2ui/` (HTML/JS tùy ý; coi là nội dung không đáng tin)

Nếu bạn tải nội dung canvas trong trình duyệt thông thường, hãy coi nó như bất kỳ trang web không đáng tin nào khác:

* Đừng phơi bày máy chủ lưu trữ canvas cho mạng/người dùng không đáng tin.
* Đừng để nội dung canvas dùng chung origin với các bề mặt web đặc quyền trừ khi bạn hiểu đầy đủ hệ quả.

Chế độ bind kiểm soát nơi Gateway lắng nghe:

* `gateway.bind: "loopback"` (mặc định): chỉ máy khách cục bộ có thể kết nối.
* Các bind không phải loopback (`"lan"`, `"tailnet"`, `"custom"`) mở rộng bề mặt tấn công. Chỉ dùng chúng với xác thực gateway (token/mật khẩu chia sẻ hoặc proxy đáng tin được cấu hình đúng) và tường lửa thật.

Quy tắc kinh nghiệm:

* Ưu tiên Tailscale Serve thay vì bind LAN (Serve giữ Gateway trên loopback, còn Tailscale xử lý truy cập).
* Nếu bắt buộc phải bind vào LAN, hãy dùng tường lửa giới hạn cổng theo danh sách cho phép chặt chẽ của các IP nguồn; không port-forward rộng rãi.
* Không bao giờ phơi bày Gateway không xác thực trên `0.0.0.0`.

### Công bố cổng Docker với UFW

Nếu bạn chạy OpenClaw bằng Docker trên VPS, hãy nhớ rằng các cổng container được công bố
(`-p HOST:CONTAINER` hoặc Compose `ports:`) được định tuyến qua các chuỗi chuyển tiếp của Docker,
không chỉ qua các quy tắc `INPUT` của host.

Để giữ lưu lượng Docker nhất quán với chính sách tường lửa của bạn, hãy thực thi quy tắc trong
`DOCKER-USER` (chuỗi này được đánh giá trước các quy tắc accept riêng của Docker).
Trên nhiều distro hiện đại, `iptables`/`ip6tables` dùng frontend `iptables-nft`
và vẫn áp dụng các quy tắc này vào backend nftables.

Ví dụ danh sách cho phép tối thiểu (IPv4):

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
# /etc/ufw/after.rules (append as its own *filter section)
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
-A DOCKER-USER -s 127.0.0.0/8 -j RETURN
-A DOCKER-USER -s 10.0.0.0/8 -j RETURN
-A DOCKER-USER -s 172.16.0.0/12 -j RETURN
-A DOCKER-USER -s 192.168.0.0/16 -j RETURN
-A DOCKER-USER -s 100.64.0.0/10 -j RETURN
-A DOCKER-USER -p tcp --dport 80 -j RETURN
-A DOCKER-USER -p tcp --dport 443 -j RETURN
-A DOCKER-USER -m conntrack --ctstate NEW -j DROP
-A DOCKER-USER -j RETURN
COMMIT
```

IPv6 có các bảng riêng. Thêm chính sách tương ứng trong `/etc/ufw/after6.rules` nếu
Docker IPv6 được bật.

Tránh hardcode tên giao diện như `eth0` trong các đoạn tài liệu. Tên giao diện
khác nhau giữa các image VPS (`ens3`, `enp*`, v.v.) và sai lệch có thể vô tình
bỏ qua quy tắc từ chối của bạn.

Xác thực nhanh sau khi reload:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
ufw reload
iptables -S DOCKER-USER
ip6tables -S DOCKER-USER
nmap -sT -p 1-65535 <public-ip> --open
```

Các cổng bên ngoài dự kiến chỉ nên là những gì bạn chủ ý phơi bày (với hầu hết
thiết lập: SSH + các cổng reverse proxy của bạn).

### Khám phá mDNS/Bonjour

Khi Plugin `bonjour` đi kèm được bật, Gateway phát sự hiện diện của nó qua mDNS (`_openclaw-gw._tcp` trên cổng 5353) để khám phá thiết bị cục bộ. Ở chế độ đầy đủ, điều này bao gồm các bản ghi TXT có thể phơi bày chi tiết vận hành:

* `cliPath`: đường dẫn hệ thống tệp đầy đủ tới binary CLI (tiết lộ tên người dùng và vị trí cài đặt)
* `sshPort`: quảng bá khả năng SSH trên host
* `displayName`, `lanHost`: thông tin hostname

**Cân nhắc bảo mật vận hành:** Việc phát thông tin hạ tầng giúp bất kỳ ai trên mạng cục bộ trinh sát dễ hơn. Ngay cả thông tin "vô hại" như đường dẫn hệ thống tệp và khả năng SSH cũng giúp kẻ tấn công lập bản đồ môi trường của bạn.

**Khuyến nghị:**

1. **Giữ Bonjour tắt trừ khi cần khám phá LAN.** Bonjour tự khởi động trên host macOS và là tùy chọn bật ở nơi khác; URL Gateway trực tiếp, Tailnet, SSH, hoặc DNS-SD diện rộng tránh multicast cục bộ.

2. **Chế độ tối thiểu** (mặc định khi Bonjour được bật, khuyến nghị cho các gateway bị phơi bày): bỏ các trường nhạy cảm khỏi broadcast mDNS:

   ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
   {
     discovery: {
       mdns: { mode: "minimal" },
     },
   }
   ```

3. **Tắt chế độ mDNS** nếu bạn muốn giữ Plugin được bật nhưng chặn khám phá thiết bị cục bộ:

   ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
   {
     discovery: {
       mdns: { mode: "off" },
     },
   }
   ```

4. **Chế độ đầy đủ** (tùy chọn bật): bao gồm `cliPath` + `sshPort` trong bản ghi TXT:

   ```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
   {
     discovery: {
       mdns: { mode: "full" },
     },
   }
   ```

5. **Biến môi trường** (thay thế): đặt `OPENCLAW_DISABLE_BONJOUR=1` để tắt mDNS mà không thay đổi cấu hình.

Khi Bonjour được bật ở chế độ tối thiểu, Gateway phát đủ thông tin để khám phá thiết bị (`role`, `gatewayPort`, `transport`) nhưng bỏ qua `cliPath` và `sshPort`. Các ứng dụng cần thông tin đường dẫn CLI có thể lấy thông tin đó qua kết nối WebSocket đã xác thực thay thế.

### Khóa chặt Gateway WebSocket (xác thực cục bộ)

Xác thực Gateway là **bắt buộc theo mặc định**. Nếu không có đường dẫn xác thực gateway hợp lệ nào được cấu hình,
Gateway từ chối kết nối WebSocket (đóng khi lỗi).

Onboarding tạo token theo mặc định (ngay cả với loopback), nên
client cục bộ phải xác thực.

Đặt token để **mọi** client WS phải xác thực:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  gateway: {
    auth: { mode: "token", token: "your-token" },
  },
}
```

Doctor có thể tạo một token cho bạn: `openclaw doctor --generate-gateway-token`.

<Note>
  `gateway.remote.token` và `gateway.remote.password` là nguồn thông tin xác thực client. Chúng **không** tự bảo vệ truy cập WS cục bộ. Các đường gọi cục bộ chỉ có thể dùng `gateway.remote.*` làm fallback khi `gateway.auth.*` chưa được đặt. Nếu `gateway.auth.token` hoặc `gateway.auth.password` được cấu hình rõ ràng qua SecretRef và không phân giải được, quá trình phân giải sẽ đóng khi lỗi (không có fallback từ xa che lấp).
</Note>

Tùy chọn: ghim TLS từ xa bằng `gateway.remote.tlsFingerprint` khi dùng `wss://`.
Plaintext `ws://` được chấp nhận cho loopback, literal IP riêng, `.local`, và
URL gateway Tailnet `*.ts.net`. Với các tên private-DNS tin cậy khác, đặt
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` trên tiến trình client như cơ chế khẩn cấp.
Điều này cố ý chỉ là môi trường tiến trình, không phải khóa cấu hình `openclaw.json`.
Các tuyến ghép đôi di động và gateway Android thủ công hoặc được quét thì nghiêm ngặt hơn:
cleartext được chấp nhận cho loopback, nhưng private-LAN, link-local, `.local`, và
hostname không có dấu chấm phải dùng TLS trừ khi bạn chủ động chọn đường cleartext
mạng riêng tin cậy.

Ghép đôi thiết bị cục bộ:

* Ghép đôi thiết bị được tự động phê duyệt cho các kết nối local loopback trực tiếp để giữ
  client cùng host hoạt động mượt.
* OpenClaw cũng có một đường tự kết nối backend/container-local hẹp cho
  các luồng helper shared-secret tin cậy.
* Các kết nối Tailnet và LAN, bao gồm bind tailnet cùng host, được xem là
  từ xa cho ghép đôi và vẫn cần phê duyệt.
* Bằng chứng forwarded-header trên một yêu cầu loopback làm mất tư cách
  cục bộ loopback. Tự động phê duyệt nâng cấp metadata được giới hạn hẹp. Xem
  [Ghép đôi Gateway](/vi/gateway/pairing) để biết cả hai quy tắc.

Chế độ xác thực:

* `gateway.auth.mode: "token"`: shared bearer token (khuyến nghị cho hầu hết thiết lập).
* `gateway.auth.mode: "password"`: xác thực bằng mật khẩu (ưu tiên đặt qua env: `OPENCLAW_GATEWAY_PASSWORD`).
* `gateway.auth.mode: "trusted-proxy"`: tin tưởng reverse proxy nhận biết danh tính để xác thực người dùng và truyền danh tính qua header (xem [Xác thực proxy tin cậy](/vi/gateway/trusted-proxy-auth)).

Checklist xoay vòng (token/mật khẩu):

1. Tạo/đặt secret mới (`gateway.auth.token` hoặc `OPENCLAW_GATEWAY_PASSWORD`).
2. Khởi động lại Gateway (hoặc khởi động lại ứng dụng macOS nếu nó giám sát Gateway).
3. Cập nhật mọi client từ xa (`gateway.remote.token` / `.password` trên các máy gọi vào Gateway).
4. Xác minh bạn không còn có thể kết nối bằng thông tin xác thực cũ.

### Header danh tính Tailscale Serve

Khi `gateway.auth.allowTailscale` là `true` (mặc định cho Serve), OpenClaw
chấp nhận header danh tính Tailscale Serve (`tailscale-user-login`) để xác thực Control
UI/WebSocket. OpenClaw xác minh danh tính bằng cách phân giải địa chỉ
`x-forwarded-for` qua daemon Tailscale cục bộ (`tailscale whois`)
và khớp nó với header. Điều này chỉ kích hoạt cho các yêu cầu đi tới loopback
và bao gồm `x-forwarded-for`, `x-forwarded-proto`, và `x-forwarded-host` như
được Tailscale chèn vào.
Với đường kiểm tra danh tính bất đồng bộ này, các lần thử thất bại cho cùng `{scope, ip}`
được tuần tự hóa trước khi limiter ghi nhận thất bại. Vì vậy các lần thử lại sai đồng thời
từ một client Serve có thể khóa lần thử thứ hai ngay lập tức
thay vì chạy đua như hai lần không khớp thông thường.
Các endpoint HTTP API (ví dụ `/v1/*`, `/tools/invoke`, và `/api/channels/*`)
**không** dùng xác thực header danh tính Tailscale. Chúng vẫn tuân theo
chế độ xác thực HTTP đã cấu hình của gateway.

Ghi chú ranh giới quan trọng:

* Xác thực bearer HTTP của Gateway về cơ bản là quyền truy cập operator tất cả-hoặc-không-gì-cả.
* Xem thông tin xác thực có thể gọi `/v1/chat/completions`, `/v1/responses`, các tuyến Plugin như `/api/v1/admin/rpc`, hoặc `/api/channels/*` là secret operator toàn quyền cho gateway đó.
* Trên bề mặt HTTP tương thích OpenAI, xác thực bearer shared-secret khôi phục đầy đủ các phạm vi operator mặc định (`operator.admin`, `operator.approvals`, `operator.pairing`, `operator.read`, `operator.talk.secrets`, `operator.write`) và ngữ nghĩa owner cho lượt agent; các giá trị `x-openclaw-scopes` hẹp hơn không giảm quyền của đường shared-secret đó.
* Ngữ nghĩa phạm vi theo từng yêu cầu trên HTTP chỉ áp dụng khi yêu cầu đến từ chế độ mang danh tính như xác thực trusted proxy, hoặc từ ingress riêng tư rõ ràng không xác thực.
* Trong các chế độ mang danh tính đó, việc bỏ qua `x-openclaw-scopes` fallback về bộ phạm vi mặc định operator thông thường; gửi header rõ ràng khi bạn muốn bộ phạm vi hẹp hơn. Các header tương thích OpenAI ở cấp owner như `x-openclaw-model` yêu cầu `operator.admin` khi phạm vi bị thu hẹp.
* `/tools/invoke` và các endpoint lịch sử phiên HTTP tuân theo cùng quy tắc shared-secret: xác thực bearer token/mật khẩu cũng được xem là quyền truy cập operator đầy đủ ở đó, trong khi các chế độ mang danh tính vẫn tôn trọng phạm vi đã khai báo.
* Không chia sẻ các thông tin xác thực này với caller không tin cậy; ưu tiên gateway riêng theo từng ranh giới tin cậy.

**Giả định tin cậy:** xác thực Serve không token giả định host gateway là đáng tin cậy.
Đừng xem đây là biện pháp bảo vệ khỏi các tiến trình cùng host độc hại. Nếu mã cục bộ
không tin cậy có thể chạy trên host gateway, hãy tắt `gateway.auth.allowTailscale`
và yêu cầu xác thực shared-secret rõ ràng bằng `gateway.auth.mode: "token"` hoặc
`"password"`.

**Quy tắc bảo mật:** không chuyển tiếp các header này từ reverse proxy riêng của bạn. Nếu
bạn kết thúc TLS hoặc proxy phía trước gateway, hãy tắt
`gateway.auth.allowTailscale` và dùng xác thực shared-secret (`gateway.auth.mode:
"token"` hoặc `"password"`) hoặc [Xác thực proxy tin cậy](/vi/gateway/trusted-proxy-auth)
thay thế.

Proxy tin cậy:

* Nếu bạn kết thúc TLS phía trước Gateway, đặt `gateway.trustedProxies` thành các IP proxy của bạn.
* OpenClaw sẽ tin tưởng `x-forwarded-for` (hoặc `x-real-ip`) từ các IP đó để xác định IP client cho kiểm tra ghép đôi cục bộ và kiểm tra xác thực HTTP/cục bộ.
* Đảm bảo proxy của bạn **ghi đè** `x-forwarded-for` và chặn truy cập trực tiếp tới cổng Gateway.

Xem [Tailscale](/vi/gateway/tailscale) và [Tổng quan web](/vi/web).

### Điều khiển trình duyệt qua node host (khuyến nghị)

Nếu Gateway của bạn ở xa nhưng trình duyệt chạy trên máy khác, hãy chạy một **node host**
trên máy trình duyệt và để Gateway proxy các hành động trình duyệt (xem [Công cụ trình duyệt](/vi/tools/browser)).
Xem ghép đôi node như quyền truy cập admin.

Mẫu khuyến nghị:

* Giữ Gateway và node host trên cùng tailnet (Tailscale).
* Ghép đôi node một cách chủ ý; tắt định tuyến proxy trình duyệt nếu bạn không cần.

Tránh:

* Phơi bày các cổng relay/điều khiển qua LAN hoặc Internet công cộng.
* Tailscale Funnel cho các endpoint điều khiển trình duyệt (phơi bày công khai).

### Secret trên ổ đĩa

Giả định mọi thứ dưới `~/.openclaw/` (hoặc `$OPENCLAW_STATE_DIR/`) có thể chứa secret hoặc dữ liệu riêng tư:

* `openclaw.json`: cấu hình có thể bao gồm token (Gateway, Gateway từ xa), thiết lập nhà cung cấp và danh sách cho phép.
* `credentials/**`: thông tin xác thực kênh (ví dụ: thông tin xác thực WhatsApp), danh sách cho phép ghép đôi, bản nhập OAuth cũ.
* `agents/<agentId>/agent/auth-profiles.json`: khóa API, hồ sơ token, token OAuth và `keyRef`/`tokenRef` tùy chọn.
* `agents/<agentId>/agent/codex-home/**`: tài khoản app-server Codex theo từng agent, cấu hình, skills, plugins, trạng thái luồng gốc và chẩn đoán (mặc định).
* `$CODEX_HOME/**` hoặc `~/.codex/**`: khi plugin Codex sử dụng rõ ràng
  `appServer.homeScope: "user"`, Gateway có thể đọc và cập nhật tài khoản Codex
  gốc, cấu hình, plugins và luồng. Hãy xem đây là quyền truy cập chủ sở hữu đặc quyền;
  chế độ này chỉ dùng local-stdio và quản lý luồng gốc chỉ dành cho chủ sở hữu.
* `secrets.json` (tùy chọn): payload bí mật dựa trên tệp được dùng bởi các nhà cung cấp SecretRef `file` (`secrets.providers`).
* `agents/<agentId>/agent/auth.json`: tệp tương thích cũ. Các mục `api_key` tĩnh sẽ bị xóa sạch khi được phát hiện.
* `agents/<agentId>/sessions/**`: bản ghi phiên (`*.jsonl`) + siêu dữ liệu định tuyến (`sessions.json`) có thể chứa tin nhắn riêng tư và đầu ra công cụ.
* các gói plugin đi kèm: plugin đã cài đặt (cộng với `node_modules/` của chúng).
* `sandboxes/**`: không gian làm việc sandbox của công cụ; có thể tích lũy các bản sao của tệp bạn đọc/ghi bên trong sandbox.

Mẹo tăng cường bảo mật:

* Giữ quyền thật chặt (`700` cho thư mục, `600` cho tệp).
* Dùng mã hóa toàn bộ đĩa trên máy chủ Gateway.
* Ưu tiên một tài khoản người dùng OS chuyên dụng cho Gateway nếu máy chủ được dùng chung.

### Tệp `.env` trong workspace

OpenClaw tải các tệp `.env` cục bộ trong workspace cho agent và công cụ, nhưng không bao giờ cho phép những tệp đó âm thầm ghi đè các điều khiển runtime của Gateway.

* Biến môi trường thông tin xác thực nhà cung cấp bị chặn khỏi các tệp `.env` workspace không đáng tin cậy. Ví dụ bao gồm `GEMINI_API_KEY`, `GOOGLE_API_KEY`, `XAI_API_KEY`, `MISTRAL_API_KEY`, `GROQ_API_KEY`, `DEEPSEEK_API_KEY`, `PERPLEXITY_API_KEY`, `BRAVE_API_KEY`, `TAVILY_API_KEY`, `EXA_API_KEY`, `FIRECRAWL_API_KEY` và khóa xác thực nhà cung cấp do plugin đáng tin cậy đã cài đặt khai báo. Đặt thông tin xác thực nhà cung cấp trong môi trường tiến trình Gateway, `~/.openclaw/.env` (`$OPENCLAW_STATE_DIR/.env`), khối cấu hình `env` hoặc bản nhập login-shell tùy chọn.
* Bất kỳ khóa nào bắt đầu bằng `OPENCLAW_*` đều bị chặn khỏi các tệp `.env` workspace không đáng tin cậy.
* Thiết lập endpoint kênh cho Matrix, Mattermost, IRC và Synology Chat cũng bị chặn khỏi ghi đè `.env` workspace, nên các workspace được clone không thể chuyển hướng lưu lượng connector đi kèm qua cấu hình endpoint cục bộ. Các khóa env endpoint (chẳng hạn như `MATRIX_HOMESERVER`, `MATTERMOST_URL`, `IRC_HOST`, `SYNOLOGY_CHAT_INCOMING_URL`) phải đến từ môi trường tiến trình Gateway hoặc `env.shellEnv`, không phải từ `.env` được tải từ workspace.
* Việc chặn theo kiểu fail-closed: một biến điều khiển runtime mới được thêm trong bản phát hành tương lai không thể được kế thừa từ `.env` đã được commit hoặc do kẻ tấn công cung cấp; khóa đó bị bỏ qua và gateway giữ giá trị riêng của nó.
* Các biến môi trường tiến trình/OS đáng tin cậy, dotenv runtime toàn cục, `env` trong cấu hình và bản nhập login-shell đã bật vẫn áp dụng - điều này chỉ ràng buộc việc tải tệp `.env` workspace.

Lý do: tệp `.env` workspace thường nằm cạnh mã agent, bị commit do nhầm lẫn hoặc được công cụ ghi ra. Chặn thông tin xác thực nhà cung cấp ngăn workspace được clone thay thế bằng tài khoản nhà cung cấp do kẻ tấn công kiểm soát. Chặn toàn bộ tiền tố `OPENCLAW_*` nghĩa là việc thêm cờ `OPENCLAW_*` mới sau này không bao giờ có thể thoái hóa thành kế thừa âm thầm từ trạng thái workspace.

### Nhật ký và bản ghi phiên (biên tập và lưu giữ)

Nhật ký và bản ghi phiên có thể rò rỉ thông tin nhạy cảm ngay cả khi kiểm soát truy cập đúng:

* Nhật ký Gateway có thể bao gồm tóm tắt công cụ, lỗi và URL.
* Bản ghi phiên có thể bao gồm bí mật được dán vào, nội dung tệp, đầu ra lệnh và liên kết.

Khuyến nghị:

* Giữ bật biên tập nhật ký và bản ghi phiên (`logging.redactSensitive: "tools"`; mặc định).
* Thêm mẫu tùy chỉnh cho môi trường của bạn qua `logging.redactPatterns` (token, tên máy chủ, URL nội bộ).
* Khi chia sẻ chẩn đoán, ưu tiên `openclaw status --all` (có thể dán, bí mật đã được biên tập) thay vì nhật ký thô.
* Cắt tỉa bản ghi phiên và tệp nhật ký cũ nếu bạn không cần lưu giữ lâu.

Chi tiết: [Ghi nhật ký](/vi/gateway/logging)

### DM: ghép đôi theo mặc định

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: { whatsapp: { dmPolicy: "pairing" } },
}
```

### Nhóm: yêu cầu nhắc đến ở mọi nơi

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  "channels": {
    "whatsapp": {
      "groups": {
        "*": { "requireMention": true }
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "main",
        "groupChat": { "mentionPatterns": ["@openclaw", "@mybot"] }
      }
    ]
  }
}
```

Trong trò chuyện nhóm, chỉ phản hồi khi được nhắc đến rõ ràng.

### Số riêng biệt (WhatsApp, Signal, Telegram)

Đối với các kênh dựa trên số điện thoại, hãy cân nhắc chạy AI của bạn trên một số điện thoại riêng với số cá nhân:

* Số cá nhân: Các cuộc trò chuyện của bạn vẫn riêng tư
* Số bot: AI xử lý những cuộc trò chuyện này, với ranh giới phù hợp

### Chế độ chỉ đọc (qua sandbox và công cụ)

Bạn có thể xây dựng hồ sơ chỉ đọc bằng cách kết hợp:

* `agents.defaults.sandbox.workspaceAccess: "ro"` (hoặc `"none"` để không có quyền truy cập workspace)
* danh sách cho phép/từ chối công cụ chặn `write`, `edit`, `apply_patch`, `exec`, `process`, v.v.

Tùy chọn tăng cường bổ sung:

* `tools.exec.applyPatch.workspaceOnly: true` (mặc định): bảo đảm `apply_patch` không thể ghi/xóa bên ngoài thư mục workspace ngay cả khi sandboxing tắt. Chỉ đặt thành `false` nếu bạn cố ý muốn `apply_patch` chạm vào các tệp bên ngoài workspace.
* `tools.fs.workspaceOnly: true` (tùy chọn): giới hạn đường dẫn `read`/`write`/`edit`/`apply_patch` và đường dẫn tự động tải ảnh prompt gốc vào thư mục workspace (hữu ích nếu hiện bạn cho phép đường dẫn tuyệt đối và muốn một rào chắn duy nhất).
* Giữ gốc hệ thống tệp hẹp: tránh các gốc rộng như thư mục home của bạn cho workspace agent/workspace sandbox. Gốc rộng có thể làm lộ các tệp cục bộ nhạy cảm (ví dụ trạng thái/cấu hình dưới `~/.openclaw`) cho công cụ hệ thống tệp.

### Đường cơ sở bảo mật (sao chép/dán)

Một cấu hình "mặc định an toàn" giữ Gateway riêng tư, yêu cầu ghép đôi DM và tránh bot nhóm luôn bật:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  gateway: {
    mode: "local",
    bind: "loopback",
    port: 18789,
    auth: { mode: "token", token: "your-long-random-token" },
  },
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}
```

Nếu bạn cũng muốn thực thi công cụ "an toàn hơn theo mặc định", hãy thêm sandbox + từ chối các công cụ nguy hiểm cho bất kỳ agent không phải chủ sở hữu nào (ví dụ bên dưới trong "Hồ sơ truy cập theo từng agent").

Đường cơ sở tích hợp cho lượt agent do chat điều khiển: người gửi không phải chủ sở hữu không thể dùng công cụ `cron` hoặc `gateway`.

## Sandboxing (khuyến nghị)

Tài liệu riêng: [Sandboxing](/vi/gateway/sandboxing)

Hai cách tiếp cận bổ trợ:

* **Chạy toàn bộ Gateway trong Docker** (ranh giới container): [Docker](/vi/install/docker)
* **Sandbox công cụ** (`agents.defaults.sandbox`, gateway máy chủ + công cụ cô lập bằng sandbox; Docker là backend mặc định): [Sandboxing](/vi/gateway/sandboxing)

<Note>
  Để ngăn truy cập chéo giữa các agent, giữ `agents.defaults.sandbox.scope` ở `"agent"` (mặc định) hoặc `"session"` để cô lập nghiêm ngặt hơn theo từng phiên. `scope: "shared"` dùng một container hoặc workspace duy nhất.
</Note>

Cũng cân nhắc quyền truy cập workspace của agent bên trong sandbox:

* `agents.defaults.sandbox.workspaceAccess: "none"` (mặc định) giữ workspace agent ngoài phạm vi truy cập; công cụ chạy trên workspace sandbox dưới `~/.openclaw/sandboxes`
* `agents.defaults.sandbox.workspaceAccess: "ro"` mount workspace agent chỉ đọc tại `/agent` (vô hiệu hóa `write`/`edit`/`apply_patch`)
* `agents.defaults.sandbox.workspaceAccess: "rw"` mount workspace agent đọc/ghi tại `/workspace`
* Các `sandbox.docker.binds` bổ sung được xác thực theo đường dẫn nguồn đã chuẩn hóa và chính tắc hóa. Các thủ thuật symlink cha và bí danh home chính tắc vẫn fail closed nếu chúng phân giải vào các gốc bị chặn như `/etc`, `/var/run` hoặc thư mục thông tin xác thực dưới home OS.

<Warning>
  `tools.elevated` là cửa thoát đường cơ sở toàn cục chạy exec bên ngoài sandbox. Máy chủ hiệu lực mặc định là `gateway`, hoặc `node` khi đích exec được cấu hình là `node`. Giữ `tools.elevated.allowFrom` thật chặt và đừng bật nó cho người lạ. Bạn có thể giới hạn thêm elevated theo từng agent qua `agents.list[].tools.elevated`. Xem [Chế độ elevated](/vi/tools/elevated).
</Warning>

### Rào chắn ủy quyền sub-agent

Nếu bạn cho phép công cụ phiên, hãy xem các lượt chạy sub-agent được ủy quyền như một quyết định ranh giới khác:

* Từ chối `sessions_spawn` trừ khi agent thực sự cần ủy quyền.
* Giữ `agents.defaults.subagents.allowAgents` và mọi ghi đè `agents.list[].subagents.allowAgents` theo từng agent bị giới hạn trong các agent đích đã biết là an toàn.
* Với bất kỳ workflow nào phải duy trì trong sandbox, gọi `sessions_spawn` với `sandbox: "require"` (mặc định là `inherit`).
* `sandbox: "require"` thất bại nhanh khi runtime con đích không được sandbox.

## Rủi ro điều khiển trình duyệt

Bật điều khiển trình duyệt cho mô hình khả năng điều khiển một trình duyệt thật.
Nếu hồ sơ trình duyệt đó đã chứa phiên đăng nhập, mô hình có thể
truy cập các tài khoản và dữ liệu đó. Hãy xem hồ sơ trình duyệt là **trạng thái nhạy cảm**:

* Ưu tiên một hồ sơ chuyên dụng cho agent (hồ sơ `openclaw` mặc định).
* Tránh trỏ agent vào hồ sơ trình duyệt cá nhân dùng hằng ngày của bạn.
* Giữ điều khiển trình duyệt máy chủ tắt cho agent trong sandbox trừ khi bạn tin tưởng chúng.
* API điều khiển trình duyệt local loopback độc lập chỉ tôn trọng xác thực bằng bí mật chia sẻ
  (xác thực bearer token Gateway hoặc mật khẩu gateway). Nó không dùng
  header danh tính trusted-proxy hoặc Tailscale Serve.
* Xem tải xuống từ trình duyệt là đầu vào không đáng tin cậy; ưu tiên một thư mục tải xuống cô lập.
* Tắt đồng bộ trình duyệt/trình quản lý mật khẩu trong hồ sơ agent nếu có thể (giảm phạm vi ảnh hưởng).
* Với Gateway từ xa, giả định "điều khiển trình duyệt" tương đương "quyền truy cập operator" tới bất kỳ thứ gì hồ sơ đó có thể chạm tới.
* Giữ Gateway và máy chủ node chỉ trong tailnet; tránh phơi cổng điều khiển trình duyệt ra LAN hoặc Internet công cộng.
* Tắt định tuyến proxy trình duyệt khi bạn không cần (`gateway.nodes.browser.mode="off"`).
* Chế độ phiên hiện có Chrome MCP **không** "an toàn hơn"; nó có thể hành động như bạn trong bất kỳ thứ gì hồ sơ Chrome trên máy chủ đó có thể truy cập.

### Chính sách SSRF trình duyệt (nghiêm ngặt theo mặc định)

Chính sách điều hướng trình duyệt của OpenClaw nghiêm ngặt theo mặc định: đích riêng tư/nội bộ/dùng đặc biệt vẫn bị chặn trừ khi bạn rõ ràng chọn tham gia.

* Mặc định: `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` không được đặt, nên điều hướng trình duyệt tiếp tục chặn đích riêng tư/nội bộ/dùng đặc biệt.
* Bí danh cũ: `browser.ssrfPolicy.allowPrivateNetwork` vẫn được chấp nhận để tương thích.
* Chế độ chọn tham gia: đặt `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true` để cho phép đích riêng tư/nội bộ/dùng đặc biệt.
* Ở chế độ nghiêm ngặt, dùng `hostnameAllowlist` (mẫu như `*.example.com`) và `allowedHostnames` (ngoại lệ máy chủ chính xác, bao gồm tên bị chặn như `localhost`) cho ngoại lệ rõ ràng.
* Điều hướng được kiểm tra trước yêu cầu và được kiểm tra lại theo best-effort trên URL `http(s)` cuối cùng sau điều hướng để giảm pivot dựa trên chuyển hướng.

Ví dụ chính sách nghiêm ngặt:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  browser: {
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: false,
      hostnameAllowlist: ["*.example.com", "example.com"],
      allowedHostnames: ["localhost"],
    },
  },
}
```

## Hồ sơ truy cập theo từng agent (đa agent)

Với định tuyến đa agent, mỗi agent có thể có sandbox + chính sách công cụ riêng:
dùng điều này để cấp **quyền truy cập đầy đủ**, **chỉ đọc** hoặc **không có quyền truy cập** theo từng agent.
Xem [Sandbox & công cụ đa agent](/vi/tools/multi-agent-sandbox-tools) để biết đầy đủ chi tiết
và quy tắc ưu tiên.

Trường hợp sử dụng phổ biến:

* Agent cá nhân: quyền truy cập đầy đủ, không sandbox
* Agent gia đình/công việc: sandbox + công cụ chỉ đọc
* Agent công cộng: sandbox + không có công cụ hệ thống tệp/shell

### Ví dụ: quyền truy cập đầy đủ (không sandbox)

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      {
        id: "personal",
        workspace: "~/.openclaw/workspace-personal",
        sandbox: { mode: "off" },
      },
    ],
  },
}
```

### Ví dụ: công cụ chỉ đọc + không gian làm việc chỉ đọc

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: {
          mode: "all",
          scope: "agent",
          workspaceAccess: "ro",
        },
        tools: {
          allow: ["read"],
          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
        },
      },
    ],
  },
}
```

### Ví dụ: không có quyền truy cập hệ thống tệp/shell (cho phép nhắn tin qua nhà cung cấp)

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      {
        id: "public",
        workspace: "~/.openclaw/workspace-public",
        sandbox: {
          mode: "all",
          scope: "agent",
          workspaceAccess: "none",
        },
        // Session tools can reveal sensitive data from transcripts. By default OpenClaw limits these tools
        // to the current session + spawned subagent sessions, but you can clamp further if needed.
        // See `tools.sessions.visibility` in the configuration reference.
        tools: {
          sessions: { visibility: "tree" }, // self | tree | agent | all
          allow: [
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
            "whatsapp",
            "telegram",
            "slack",
            "discord",
          ],
          deny: [
            "read",
            "write",
            "edit",
            "apply_patch",
            "exec",
            "process",
            "browser",
            "canvas",
            "nodes",
            "cron",
            "gateway",
            "image",
          ],
        },
      },
    ],
  },
}
```

## Ứng phó sự cố

Nếu AI của bạn làm điều gì đó không đúng:

### Kiềm chế

1. **Dừng nó:** dừng ứng dụng macOS (nếu ứng dụng đó giám sát Gateway) hoặc chấm dứt tiến trình `openclaw gateway` của bạn.
2. **Đóng điểm phơi bày:** đặt `gateway.bind: "loopback"` (hoặc tắt Tailscale Funnel/Serve) cho đến khi bạn hiểu chuyện gì đã xảy ra.
3. **Đóng băng quyền truy cập:** chuyển các DM/nhóm rủi ro sang `dmPolicy: "disabled"` / yêu cầu nhắc đến, và xóa các mục cho phép tất cả `"*"` nếu bạn đã có chúng.

### Xoay vòng (giả định đã bị xâm phạm nếu bí mật bị rò rỉ)

1. Xoay vòng xác thực Gateway (`gateway.auth.token` / `OPENCLAW_GATEWAY_PASSWORD`) và khởi động lại.
2. Xoay vòng bí mật máy khách từ xa (`gateway.remote.token` / `.password`) trên bất kỳ máy nào có thể gọi Gateway.
3. Xoay vòng thông tin xác thực nhà cung cấp/API (thông tin xác thực WhatsApp, token Slack/Discord, khóa mô hình/API trong `auth-profiles.json`, và các giá trị payload bí mật đã mã hóa khi được dùng).

### Kiểm tra

1. Kiểm tra nhật ký Gateway: `/tmp/openclaw/openclaw-YYYY-MM-DD.log` (hoặc `logging.file`).
2. Xem lại bản ghi phiên liên quan: `~/.openclaw/agents/<agentId>/sessions/*.jsonl`.
3. Xem lại các thay đổi cấu hình gần đây (bất kỳ thứ gì có thể đã mở rộng quyền truy cập: `gateway.bind`, `gateway.auth`, chính sách DM/nhóm, `tools.elevated`, thay đổi Plugin).
4. Chạy lại `openclaw security audit --deep` và xác nhận các phát hiện nghiêm trọng đã được giải quyết.

### Thu thập cho báo cáo

* Dấu thời gian, hệ điều hành máy chủ Gateway + phiên bản OpenClaw
* Bản ghi phiên + một đoạn cuối nhật ký ngắn (sau khi biên tập lại)
* Kẻ tấn công đã gửi gì + tác nhân đã làm gì
* Gateway có bị phơi bày ra ngoài loopback hay không (LAN/Tailscale Funnel/Serve)

## Quét bí mật

CI chạy hook pre-commit `detect-private-key` trên kho lưu trữ. Nếu hook này
thất bại, hãy xóa hoặc xoay vòng tài liệu khóa đã commit, rồi tái hiện cục bộ:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pre-commit run --all-files detect-private-key
```

## Báo cáo vấn đề bảo mật

Bạn tìm thấy lỗ hổng trong OpenClaw? Vui lòng báo cáo có trách nhiệm:

1. Email: [security@openclaw.ai](mailto:security@openclaw.ai)
2. Không đăng công khai cho đến khi đã được khắc phục
3. Chúng tôi sẽ ghi nhận công lao của bạn (trừ khi bạn muốn ẩn danh)
