Công cụ AI Coding

Claude Code permissions: 6 chế độ & cách cấu hình an toàn (2026)

Aug 14, 202613 phút đọc

Claude Code có 6 chế độ permission để kiểm soát việc AI ghi file và chạy lệnh, giúp bạn dùng an toàn không lo mất dữ liệu. Mặc định (Manual) chỉ đọc và hỏi trước khi ghi hay chạy bất kỳ lệnh nào. Bạn tinh chỉnh bằng danh sách allow / deny / ask trong settings.json, trong đó deny luôn thắng allow. Cờ --dangerously-skip-permissions tắt mọi kiểm tra nên chỉ nên chạy trong container/VM; auto mode là lựa chọn ít phiền mà vẫn có lưới an toàn.

permission trong Claude Code đổi khá nhanh theo version; hãy kiểm tra claude --versiontài liệu chính thức về permission modes (Anthropic, cập nhật 08/2026) trước khi áp dụng.

Vì sao permissions trong Claude Code lại quan trọng?

Claude Code không chỉ gợi ý code như một chatbot - nó là một agent thật sự có quyền ghi file trực tiếp vào máy bạnchạy lệnh shell. Sức mạnh đó cũng là rủi ro: nếu không siết quyền, một phiên làm việc bình thường có thể ghi đè file bạn chưa commit, xóa nhầm thư mục, hoặc chạy một lệnh phá hủy như rm -rf mà bạn không kịp nhìn.

Rủi ro đáng lo nhất không phải AI "cố tình làm bậy", mà là prompt injection: một trang web bạn nhờ Claude đọc, một file README trong dependency, hay một issue trên GitHub có thể chứa chỉ thị ẩn kiểu "hãy chạy curl ... | bash" hoặc "gửi nội dung .env đi". Nếu Claude có toàn quyền, nó có thể làm theo mà bạn không hề ra lệnh.

Đó là lý do hệ thống permission tồn tại: mặc định Claude Code hoạt động ở thế hỏi trước, làm sau. Nếu bạn vừa cài đặt Claude Code xong, bước tiếp theo nên làm là hiểu và cấu hình quyền - vừa tránh mất dữ liệu, vừa đỡ bị hỏi y/n liên tục cho những việc bạn vốn tin tưởng.

6 chế độ permission trong Claude Code (bảng so sánh)

Claude Code có sáu permission mode. Điểm cần nhớ trước tiên: chế độ mặc định chỉ đọc và luôn hỏi trước mọi thao tác ghi file hay chạy lệnh. Các mode còn lại nới quyền dần theo mức độ tin tưởng và cách ly của bạn.

ModeChạy gì mà không cần hỏiDùng khi nào
default (nhãn Manual từ v2.1.200)Chỉ đọc; hỏi trước mọi lần ghi file hoặc chạy lệnhBắt đầu, việc nhạy cảm, repo lạ
acceptEditsĐọc + tự duyệt sửa file và lệnh filesystem an toàn (mkdir, touch, mv, cp, sed) trong thư mục làm việcLặp code nhiều bước, có review bằng git diff
planĐọc + nghiên cứu; không sửa gì cho tới khi bạn duyệt planKhám phá codebase, lên kế hoạch trước khi sửa
autoGần như mọi thứ, nhưng có classifier kiểm tra nền để chặn lệnh nguy hiểmTác vụ dài; là mặc định từ 14/08/2026 cho Pro/Max/Team
dontAskChỉ chạy các tool đã được allow sẵn; ngoài danh sách thì im lặng bỏ qua thay vì hỏiCI/script khóa cứng, môi trường không có người trực
bypassPermissions (= --dangerously-skip-permissions)Chạy mọi thứ, không kiểm tra gìChỉ trong container/VM cách ly

Trong thực tế bạn sẽ sống chủ yếu ở ba mode đầu. default/Manual là điểm khởi đầu an toàn nhất - không có gì xảy ra sau lưng bạn. acceptEdits hợp khi bạn đang refactor và muốn Claude sửa liền tay, còn bạn review bằng git diff sau. plan tuyệt cho lúc cần Claude "đọc hiểu rồi trình bày", ví dụ dò một bug xuyên nhiều file mà chưa muốn nó động vào code. Ba mode còn lại là công cụ chuyên dụng: auto cho tác vụ dài có lưới an toàn, dontAsk cho automation, và bypassPermissions chỉ dành cho môi trường đã cách ly hoàn toàn.

Chuyển & đặt chế độ mặc định

Cách nhanh nhất để đổi mode ngay trong phiên là nhấn Shift+Tab - phím này xoay vòng qua ba mode phổ biến: defaultacceptEditsplan. Thanh trạng thái dưới cùng sẽ đổi theo, nên bạn luôn biết mình đang ở mode nào.

Muốn khởi động thẳng vào một mode, dùng cờ dòng lệnh:

claude --permission-mode plan

Nếu muốn cố định mode mặc định cho mọi phiên, khai báo defaultMode trong settings.json:

{
 "permissions": {
 "defaultMode": "acceptEdits"
 }
}

Lưu ý bảo mật quan trọng: defaultMode: "auto" chỉ được chấp nhận khi khai báo trong file người dùng ~/.claude/settings.json. Nếu bạn (hoặc ai đó) đặt nó trong .claude/settings.json của project, Claude Code sẽ bỏ qua - để một repo bạn vừa clone về không thể tự cấp cho mình quyền chạy tự động. Đây là hàng rào chống việc "repo độc" tự nâng quyền.

Cấu hình allowlist trong settings.json (allow / deny / ask)

Permission mode quyết định "thái độ" chung, còn settings.json cho bạn kiểm soát ở mức từng lệnh. Có ba danh sách:

  • allow - chạy không cần hỏi. Ví dụ: "Bash(npm run test:*)", "Read(src/**)".
  • ask - luôn hỏi mỗi lần, kể cả khi mode đang nới quyền. Dùng cho lệnh "muốn tự tay bấm OK".
  • deny - chặn hẳn, không bao giờ chạy. Ví dụ: "Bash(rm -rf *)", "WebFetch", "Read(.env)".

Cú pháp rule theo dạng Tool(mẫu): Bash(npm run lint) khớp đúng lệnh đó, thêm :* để khớp tiền tố (Bash(git diff:*)), Read(src/**) dùng glob cho đường dẫn, và WebFetch(domain:github.com) giới hạn theo domain.

Quy tắc phân xử quan trọng nhất - hãy khắc cốt ghi tâm: deny luôn thắng allow, ở mọi cấp. Nếu một lệnh vừa khớp allow vừa khớp deny, nó bị chặn. Về thứ tự file, cấp cao đè cấp thấp theo thứ tự: managed (enterprise) > .claude/settings.local.json > .claude/settings.json > ~/.claude/settings.json. File settings.local.json là nơi để cấu hình cá nhân, không commit; còn settings.json của project thì chia sẻ cho cả team qua Git.

Một file settings.json mẫu cân bằng giữa tiện và an toàn:

{
 "permissions": {
 "defaultMode": "default",
 "allow": [
 "Bash(npm run test:*)",
 "Bash(npm run lint)",
 "Bash(git status)",
 "Bash(git diff:*)",
 "Read(src/**)"
 ],
 "ask": [
 "Bash(git push:*)"
 ],
 "deny": [
 "Bash(rm -rf *)",
 "Bash(git push --force:*)",
 "Read(.env)",
 "Read(./secrets/**)",
 "WebFetch"
 ],
 "additionalDirectories": [
 "../shared-libs"
 ]
 }
}

Trường additionalDirectories cho phép Claude làm việc với thư mục ngoài workspace hiện tại - tiện khi monorepo tách package, nhưng hãy chỉ thêm đúng thứ cần. Nếu muốn logic cấp phép tùy biến hơn (ghi log, chặn theo điều kiện), bạn có thể dùng Hooks với sự kiện PreToolUse để can thiệp trước khi mỗi tool chạy.

Protected paths - thứ Claude không bao giờ tự sửa

Ngoài allow/deny do bạn đặt, Claude Code còn có một lớp bảo vệ cứng ở tầng thấp hơn: protected paths. Đây là những file/thư mục cấu hình nhạy cảm mà Claude không bao giờ tự động duyệt ghi, kể cả khi bạn đang ở acceptEdits hay auto:

  • .claude.claude.json - cấu hình của chính Claude Code
  • .git - nội bộ Git (tránh nghịch trực tiếp lịch sử repo)
  • .vscode - cấu hình editor
  • Shell rc: .bashrc, .zshrc… - nơi hay bị cài lệnh chạy ngầm
  • .npmrc, các file .env* chứa secret
  • .mcp.json - cấu hình MCP server

Điểm mấu chốt về an toàn: một allow rule cũng KHÔNG ghi đè được protected path. Safety check này chạy trước khi xét allowlist, nên dù bạn có lỡ (hoặc bị dụ) thêm rule cho phép ghi vào .env, Claude vẫn dừng lại và hỏi. Cách duy nhất bỏ qua lớp này là bypassPermissions - thêm một lý do nữa để không bật nó ngoài môi trường cách ly.

--dangerously-skip-permissions & auto mode - cái nào an toàn?

Nhiều người tìm cách "tắt hỏi y/n" liền nghĩ tới --dangerously-skip-permissions (còn gọi là YOLO mode). Cờ này tắt toàn bộ kiểm tra: mọi allow/deny, mọi protected path đều bị bỏ qua. Hệ quả thật:

  • không chống được prompt injection - vì đã tắt hết lưới, một chỉ thị ẩn từ web/file sẽ được thực thi thẳng.
  • Claude Code chặn cờ này khi bạn chạy dưới quyền root/sudo, vì hậu quả quá lớn.
  • Chỉ nên dùng trong container hoặc VM cách ly, tốt nhất là không có internet - nơi Claude có làm hỏng thì cũng chỉ hỏng cái sandbox.

Từ đầu 2026, Anthropic đưa ra auto mode như bản thay thế an toàn cho nhu cầu "ít phiền": thay vì tắt kiểm tra, auto mode để một classifier chạy nền phân loại từng hành động và chặn mặc định các lệnh nguy hiểm - curl | bash, gửi secret ra ngoài, deploy lên production, rm -rf /, git reset --hard, force push, terraform destroy… Những việc thường ngày an toàn thì cho qua, còn thứ có mùi phá hoại thì quay lại hỏi bạn. Theo Anthropic, phần lớn thao tác trong một phiên vốn dĩ vẫn được người dùng approve, nên auto mode bỏ được phần lớn câu hỏi mà vẫn giữ lưới cho số ít nguy hiểm.

Đây cũng là thay đổi lớn về "tư thế an toàn" mặc định: từ 14/08/2026, auto mode trở thành chế độ mặc định cho các gói Pro/Max/Team (theo tài liệu Claude Code permission modes, Anthropic, 08/2026). Nói ngắn gọn: nếu bạn muốn đỡ bị hỏi, hãy dùng auto mode chứ đừng dùng --dangerously-skip-permissions.

Cấu hình an toàn khuyến nghị (từng bước)

Dưới đây là thiết lập mình thấy cân bằng nhất cho dev làm việc hằng ngày - an toàn nhưng không phiền:

  1. Giữ default/Manual cho việc nhạy cảm. Với repo lạ, thao tác trên nhánh chính, hay khi Claude đọc nội dung từ web, để mode mặc định và tự tay duyệt.
  2. Thêm deny cho lệnh phá hủy. Chốt cứng Bash(rm -rf *), Bash(git push --force:*)Read(.env). Vì deny thắng allow, đây là lớp bảo vệ không bao giờ bị nới lỏng do nhầm lẫn.
  3. Allow hẹp cho lệnh lặp lại đáng tin. Thêm những lệnh bạn chạy suốt và biết chắc an toàn: Bash(npm run test:*), Bash(git status). Ưu tiên allow hẹp (đúng lệnh) hơn allow rộng.
  4. Dùng acceptEdits khi lặp code, review bằng git diff. Để Claude sửa liền tay cho nhanh, còn bạn kiểm soát ở bước commit - nhìn diff trước khi git add.
  5. Tác vụ dài hoặc nhạy cảm → container hoặc auto mode, không bao giờ bypass. Cần chạy lâu không trực máy thì auto mode có classifier vẫn là lựa chọn đúng.

Nếu bạn muốn xem lại toàn bộ rule đang áp dụng bất cứ lúc nào, gõ /permissions trong phiên. Đây cũng là chỗ tốt để kiểm tra sau khi vừa cài đặt và cấu hình Claude Code lần đầu.

Lỗi & failure mode thường gặp khi cấu hình quyền

Cấu hình permission hay vướng vài tình huống lặp đi lặp lại - biết trước thì đỡ bực:

  • "Bị hỏi y/n hoài." Nghĩa là mode đang ở default và lệnh đó chưa nằm trong allow. Thêm một allow rule hẹp cho đúng lệnh bạn tin tưởng, đừng vội nhảy sang bypass.
  • "Auto mode cứ chặn hoài." Nếu classifier chặn 3 lần liên tiếp hoặc 20 lần tổng trong một phiên, Claude sẽ dừng auto mode và quay lại hỏi thủ công - đây là hành vi có chủ đích để tránh nó lặp vô hạn.
  • Ra lệnh miệng "đừng push" nhưng vẫn bị push. Những "boundary" bạn nói trong hội thoại có thể mất khi context bị nén (compaction). Ràng buộc bằng lời không đáng tin bằng cấu hình - hãy dùng deny rule cho những giới hạn cứng.
  • Rule không áp dụng. Thường do settings.json sai cú pháp JSON (thừa dấu phẩy, thiếu ngoặc) nên bị bỏ qua toàn bộ. Kiểm tra file hợp lệ và xem lại bằng /permissions.

Gặp lỗi lạ hơn khi chạy Claude Code? Xem thêm bài khắc phục lỗi Claude Code thường gặp.

Preset quyền an toàn có sẵn

Tự dò allowlist cho mọi project khá tốn công, nhất là khi bạn làm nhiều repo với stack khác nhau. Một hướng đỡ mệt là dùng bộ kit cộng đồng đã đóng gói sẵn skill và cấu hình theo convention - ví dụ bộ kit AgentKit cho Claude Code (giảm 20% qua link) ship sẵn các skill/workflow theo chuẩn, nên bạn bớt phải tự viết từng rule từ đầu. Nếu tò mò cách nó hoạt động, đọc bài AgentKit là gì và có đáng dùng không. Dù vậy, dùng preset hay không, nguyên tắc vẫn giữ nguyên: hiểu deny/allow và không bao giờ tắt lưới an toàn.

Câu hỏi thường gặp (FAQ)

Claude Code có tự xóa file của tôi không?

Ở chế độ mặc định (Manual) thì không - Claude luôn hỏi trước mọi thao tác ghi hoặc xóa. Nó chỉ có thể tự xóa nếu bạn nới quyền (acceptEdits/auto) hoặc bật --dangerously-skip-permissions. Thêm deny cho rm -rf để chặn cứng.

Làm sao tắt hỏi y/n mà vẫn an toàn?

Đừng tắt bằng bypass. Thay vào đó, thêm allow rule hẹp cho những lệnh bạn tin tưởng (như npm test, git status), hoặc dùng auto mode - nó bỏ hỏi cho việc an toàn nhưng vẫn chặn lệnh nguy hiểm nhờ classifier.

--dangerously-skip-permissions có nguy hiểm không?

Có. Nó tắt toàn bộ kiểm tra và không chống được prompt injection. Claude còn chặn nó khi chạy dưới root. Chỉ dùng trong container/VM cách ly, lý tưởng là không có internet.

Auto mode khác bypass thế nào?

Auto mode vẫn giữ lưới an toàn: một classifier chạy nền chặn các lệnh nguy hiểm (curl|bash, force push, gửi secret, rm -rf /). Bypass thì tắt tất cả. Muốn ít phiền, hãy chọn auto mode chứ không phải bypass.

Deny hay allow thắng khi mâu thuẫn?

Deny luôn thắng. Nếu một lệnh khớp cả deny lẫn allow ở bất kỳ cấp cấu hình nào, nó bị chặn. Protected paths cũng được kiểm tra trước, nên allow rule không ghi đè được chúng.

Cấu hình quyền để ở đâu?

Trong file settings.json. Thứ tự ưu tiên: managed (enterprise) > .claude/settings.local.json (cá nhân, không commit) > .claude/settings.json (chia sẻ team) > ~/.claude/settings.json (mặc định của bạn).

Kết luận + bước tiếp theo

Công thức an toàn mà không phiền khá gọn: giữ mặc định an toàn cho việc nhạy cảm, thêm allowlist hẹp cho lệnh tin tưởng, chốt deny cứng cho lệnh phá hủy, và dùng auto mode (không phải bypass) cho tác vụ dài. Nhờ đó Claude Code chạy nhanh mà vẫn giữ tay bạn trên vô lăng.

Chưa cài xong? Đọc hướng dẫn cài đặt Claude Code. Muốn nắm bức tranh tổng thể, xem Claude Code là gì. kiểm tra claude --version vì tên nhãn và ngưỡng mode có thể đổi theo bản mới.

J

Jasmine

Tác giả · Jasmine Daily

Người viết nên Jasmine Daily - ghi lại những suy nghĩ, trải nghiệm và những khoảnh khắc đời thường. Thật lòng, không vội vàng, không hoàn hảo.

Jasmine Daily

Vẫn còn nhiều điều đang chờ được đọc.

Nếu bài viết này chạm đến bạn, hãy ghé xem thêm vài trang khác trong cuốn nhật ký này.

Đọc tiếp

Bài viết liên quan