Bảo mật

Aki MCP Server giữ quyền truy cập theo điều kiện của bạn

Vì server có thể đối mặt với Internet công khai, bảo mật được thiết kế sẵn từ gốc, không phải thêm vào sau. Đây là những gì bảo vệ bạn, và cả những đánh đổi bạn phải chịu trách nhiệm.

Whitelist nghiêm ngặt, không phải blocklist

Công cụ shell chỉ chạy lệnh bạn cho phép rõ ràng. Blocklist dễ lọt vì mặc định là cho phép; whitelist thì an toàn khi có sự cố.

  • Fail-safe: lệnh lạ hoặc mới bị chặn tự động.
  • Bề mặt tối thiểu: chỉ đúng các lệnh bạn duyệt mới chạy được.
  • Chi tiết tới subcommand: git chỉ giới hạn ở status/log/diff/show.
  • Hạn chế prompt injection: lệnh bị chèn không có câu lệnh ngoài danh sách để leo thang.
  • Ưu tiên kiểm tra: các binary nhiều cờ có thể thoát khỏi chế độ chỉ-đọc bị cố tình loại ra, và các dạng ghi của git (branch -D, tag -d, remote set-url, --output=) bị từ chối mặc định.

Triết lý thiết kế: tiện dụng trước, guardrail sau. Allowlist bảo vệ trước model yếu hoặc quá hăng. Nó không phải ổ khóa chống lại chính bạn, chủ máy.

Xác thực và phân quyền

  • Mọi lệnh gọi /mcp cần Bearer token OAuth 2.1 hợp lệ. Không có kiểu token-in-URL.
  • Claude dùng Client ID/Secret bí mật cấp sẵn; ChatGPT và Grok tự đăng ký qua DCR (RFC 7591) như public client.
  • Chỉ redirect URI của các client đã biết được chấp nhận (claude.ai, chatgpt.com, grok.com và proxy OAuth redirect của Google), và client vẫn phải qua màn hình consent bằng passphrase và PKCE trước khi nhận token.
  • Một access token dùng chung (hiệu lực một năm) phục vụ mọi client, nên panel hiển thị và roll nó ở một chỗ.

Tự chặn dò mật khẩu và nhìn rõ

Gatekeeper giới hạn tần suất thử sai, và mục 7 của panel cho thấy ai đang giữ quyền truy cập và ai đã dùng.

  • 5 lần sai, bị chặn 15 phút: 5 thông tin xác thực bị từ chối trong 60 giây (sai passphrase, sai client secret, Bearer không hợp lệ ở /mcp) sẽ chặn người gọi 15 phút, trả 429 kèm Retry-After.
  • Chặn tràn đăng ký: 100 lần POST /register trong 10 phút cũng bị chặn, và danh sách client ngừng tăng ở mức 500.
  • Client thật an toàn: Bearer token hợp lệ không bao giờ bị tính hay từ chối, lỗi giao thức hoặc đường dẫn lạ cũng không bị tính.
  • Bạn tự chỉnh: mọi ngưỡng đều chỉnh được ở mục 7 của panel, nơi liệt kê người gọi bị chặn kèm nút Release.
  • Thấy tất cả: bảng Clients (lần đầu thấy, lần duyệt gần nhất, lần cấp token gần nhất, địa chỉ và agent), Active now, và 200 dòng mới nhất của security.log.
  • Bí mật được che: passphrase và access token hiện dạng dấu chấm kèm nút con mắt, ảnh chụp màn hình không lộ gì.

Nếu lộ bí mật

Panel biến việc dọn dẹp thành vài cú bấm. Chọn dòng khớp với thứ bị lộ.

  • Passphrase bị nhìn thấy: Roll passphrase, rồi Roll & sign out all clients.
  • Access token bị nhìn thấy: Roll & sign out all clients.
  • Có client lạ trong danh sách: cả hai lần roll, rồi kết nối lại các AI bạn tin.
  • Connector không còn dùng: Remove, rồi Roll token.

Mỗi tầng bảo vệ điều gì

Một gatekeeper, bearer cả trên loopback

Gatekeeper trên 127.0.0.1:9999 là lối vào duy nhất cho cả client local và (qua ingress tùy chọn) client từ xa; mọi tool chạy in-process phía sau, và Bearer token bắt buộc ngay cả trên loopback.

Panel chỉ ở local

Control panel bind vào 127.0.0.1:9998, cần token mỗi lần chạy, và không bao giờ được đẩy ra edge công khai.

Fetch chống SSRF

Bộ fetch LAN chặn cloud metadata, IP link-local, scheme không phải HTTP, kèm giới hạn dung lượng và thời gian.

Bí mật ở chế độ 0600

Passphrase, client secret và token nằm trong ~/.aki/mcpsv/ ở mode 0600, ngoài repo, không bao giờ vào git.

Mặc định AI làm được và không làm được gì

Mặc định được phép

Chạy bộ shell ưu tiên kiểm tra, đọc và tìm file trong thư mục được phép, và mọi hành động đều là tool call hiện rõ. Một số helper dev duyệt sẵn (npm run, open, sips, ffmpeg) có thể ghi.

Mặc định không thể

Chạy lệnh ngoài allowlist, chạy các dạng ghi của git, ghi vào thư mục script tin cậy qua công cụ file, chạm tới panel local, hay gọi mạng ra ngoài tùy ý.

Đánh đổi thật lòng bạn phải biết

  • Gốc file mặc định là toàn bộ thư mục home ($HOME) cộng ~/.aki và ~/.claude. Hãy thu hẹp trong panel trên máy nhạy cảm.
  • ~/.claude được cấp ở mức thư mục, nên token phiên và lịch sử chat bên trong cũng nằm trong tầm với. Gỡ bằng cách sửa trực tiếp danh sách thư mục.
  • Bất kỳ lệnh ghi nào bạn thêm vào allowlist (ví dụ git commit) là trách nhiệm của bạn và làm rộng bề mặt.
  • Với một token dùng chung, Remove đăng xuất client nhưng chưa phải thu hồi tức thì. Roll token để cắt quyền ngay.
  • Bộ giới hạn tần suất nằm trong bộ nhớ, nên khởi động lại sẽ xóa danh sách bị chặn. Tên client do client tự khai, nên hãy tin cột địa chỉ và thời gian hơn nhãn tên.
  • Gemini đang thử nghiệm: kết nối OAuth chạy được nhưng dùng tool chưa ổn định.

Thu hồi truy cập bất cứ lúc nào từ mục 7 của panel: Remove client, rồi Roll token. Nếu nghi lộ bí mật, dùng Roll & sign out all clients.