Quyền

Cấu hình các hồ sơ quyền Codex beta để truy cập hệ thống tệp và mạng

allowed_permission_profiles được quản lý là ngoại lệ: cài đặt này khiến Codex sử dụng hồ sơ quyền. Hãy xóa các cài đặt cũ như sandbox_mode và [sandbox_workspace_write] trước khi triển khai danh sách cho phép của hồ sơ được quản lý. Khi triển khai cho doanh nghiệp có nhiều phiên bản, bạn có thể giữ yêu cầu allowed_sandbox_modes được quản lý làm ràng buộc tương thích tạm thời cho đến khi mọi máy khách đều chạy Codex 0.138.0 trở lên.

Hồ sơ quyền cho phép bạn áp dụng các ranh giới đặc quyền tối thiểu cho những lệnh cục bộ mà Codex chạy thay mặt bạn. Hồ sơ là một chính sách có tên, kết hợp các quy tắc hệ thống tệp (xác định lệnh có thể đọc hoặc ghi nội dung nào) với các quy tắc mạng (xác định lệnh có thể truy cập những đích nào).

Hãy dùng hồ sơ để cấp cho Codex vừa đủ quyền truy cập cho cuộc trò chuyện hiện tại mà không cấp quyền rộng đối với máy hoặc mạng của bạn. Ví dụ: hồ sơ chỉ đọc có thể cho phép Codex kiểm tra một dự án mà không chỉnh sửa, còn hồ sơ có quyền ghi có thể giới hạn việc chỉnh sửa trong các thư mục gốc không gian làm việc đã chọn.

Hồ sơ quyền cục bộ được hỗ trợ trên macOS, Linux, WSL và Windows gốc. Xem Phạm vi và cơ chế thực thi để biết chi tiết và lưu ý riêng cho từng nền tảng.

Để biết các thiết lập mạng hiện tại của Codex Cloud, hãy xem Kết nối với các dịch vụ. Đối với Codex Cloud (Legacy), hãy xem Truy cập internet.

Định nghĩa và chọn hồ sơ

Codex cung cấp ba hồ sơ quyền tích hợp sẵn:

  • :read-only giữ cho việc thực thi lệnh cục bộ ở chế độ chỉ đọc.
  • :workspace cho phép ghi bên trong các thư mục gốc không gian làm việc đang hoạt động và thư mục tạm của hệ thống.
  • :danger-full-access loại bỏ các hạn chế môi trường cô lập cục bộ và chỉ nên được dùng khi bạn chủ ý cấp quyền truy cập rộng như vậy.

Tạo một hồ sơ có tên trong [permissions.<name>], sau đó đặt khóa cấp cao nhất default_permissions thành tên hồ sơ đó hoặc một trong các hồ sơ tích hợp sẵn ở trên. Trong ví dụ này, project-edit là tên hồ sơ do người dùng định nghĩa, không phải một giá trị tích hợp sẵn.

Quản trị viên doanh nghiệp có thể định nghĩa hồ sơ và hạn chế những hồ sơ mà người dùng được phép chọn thông qua requirements.toml được quản lý. Khi allowed_permission_profiles xuất hiện, các hồ sơ bị bỏ qua sẽ bị từ chối, bao gồm cả hồ sơ tích hợp sẵn bị bỏ qua và hồ sơ được thêm trong các phiên bản Codex tương lai. Xem Kiểm soát các hồ sơ quyền khả dụng để biết cấu hình được quản lý nên dùng.

Hồ sơ tùy chỉnh sử dụng hai khái niệm có liên quan:

  • [permissions.<name>.workspace_roots] thêm các thư mục cụ thể cần được xem là thư mục gốc không gian làm việc cho hồ sơ đó.
  • [permissions.<name>.filesystem.":workspace_roots"] định nghĩa các quy tắc hệ thống tệp mà Codex áp dụng bên trong mọi thư mục gốc không gian làm việc có hiệu lực: các thư mục gốc không gian làm việc khi chạy của phiên hiện tại cộng với các thư mục gốc do hồ sơ định nghĩa ở trên.

Hồ sơ cũng sử dụng mô hình lớp cấu hình thông thường. Các lớp có độ ưu tiên cao hơn có thể thêm hoặc thay thế mục dưới cùng một tên hồ sơ mà không cần khai báo lại toàn bộ hồ sơ.

Ví dụ: cấu hình cấp tổ chức và cấu hình cấp người dùng có thể mở rộng độc lập cùng một hồ sơ:

# /etc/codex/config.toml
[permissions.server.workspace_roots]
"~/code/server" = true
# ~/.codex/config.toml
[permissions.server.workspace_roots]
"~/code/mobile-app" = true

Khi server đang hoạt động, cả hai thư mục gốc không gian làm việc đều tham gia vào hồ sơ có hiệu lực.

default_permissions = "project-edit"

[features]
network_proxy = true

[permissions.project-edit.workspace_roots]
"~/code/app" = true
"~/code/shared-lib" = true

[permissions.project-edit.filesystem]
":minimal" = "read"

[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"
".devcontainer" = "read"
"**/*.env" = "deny"

[permissions.project-edit.network]
enabled = true

[permissions.project-edit.network.domains]
"api.openai.com" = "allow"
"objects.githubusercontent.com" = "allow"
"*.github.com" = "allow"
"tracking.example.com" = "deny"

Hồ sơ này:

  • Đọc các đường dẫn khi chạy tối thiểu mà những công cụ phổ biến dành cho nhà phát triển cần.
  • Áp dụng cùng các quy tắc thư mục gốc không gian làm việc cho phiên hiện tại và các thư mục gốc do hồ sơ định nghĩa.
  • Giữ các cài đặt liền kề IDE như .devcontainer/ ở chế độ chỉ đọc trong từng thư mục gốc.
  • Từ chối các tệp môi trường khớp với quy tắc glob.
  • Chỉ cho phép truy cập mạng thông qua chính sách miền đã cấu hình.

Trong một hồ sơ đang hoạt động, các quy tắc từ chối hẹp hơn vẫn có hiệu lực ngay cả khi một đường dẫn rộng hơn có thể đọc hoặc ghi. Ví dụ: hồ sơ có thể cho phép ghi vào các thư mục gốc không gian làm việc nhưng vẫn đặt một đường dẫn .env khớp thành deny.

Mở rộng hồ sơ

Dùng extends khi một hồ sơ gần giống với hồ sơ tích hợp sẵn hoặc một hồ sơ có tên khác. Ưu tiên kế thừa hồ sơ tích hợp sẵn thay vì tạo từ đầu để các biện pháp bảo vệ cơ bản được giữ lại. Ví dụ, việc kế thừa :workspace sẽ giữ các đường dẫn .git, .agents, .codex và .aws ở thư mục gốc không gian làm việc ở chế độ chỉ đọc trừ khi bạn chủ động ghi đè các quy tắc đó. Thiết lập hồ sơ cha một lần, rồi chỉ thêm hoặc ghi đè những quy tắc khác biệt.

default_permissions = "project-edit"

[features]
network_proxy = true

[permissions.project-edit]
description = "Project editing with OpenAI API access."
extends = ":workspace"

[permissions.project-edit.filesystem.":workspace_roots"]
"**/*.env" = "deny"

[permissions.project-edit.network]
enabled = true

[permissions.project-edit.network.domains]
"api.openai.com" = "allow"

Hồ sơ này bắt đầu từ :workspace, tiếp tục từ chối các tệp .env khớp và cho phép yêu cầu đến api.openai.com. Một hồ sơ có thể mở rộng :read-only, :workspace hoặc một hồ sơ có tên khác. Hồ sơ không thể mở rộng :danger-full-access; Codex cũng từ chối hồ sơ cha không xác định và chu trình kế thừa.

Đặc tả cấu hình

Mục Kiểu / giá trị Mặc định Chi tiết
default_permissions Tên hồ sơ dạng chuỗi Không có Chỉ định tên hồ sơ quyền mà Codex áp dụng theo mặc định. Tên này phải khớp với một hồ sơ trong [permissions] hoặc một hồ sơ tích hợp sẵn như :workspace. Hãy đặt rõ giá trị này để hành vi có thể dự đoán được; các yêu cầu được quản lý chỉ có thể bỏ qua giá trị này khi cả :workspace và :read-only đều được cho phép rõ ràng. Codex sử dụng các thiết lập môi trường cô lập cũ trừ khi allowed_permission_profiles được quản lý chỉ dẫn sử dụng hồ sơ quyền trong cấu hình này.
[permissions.<name>] Bảng Không có Định nghĩa một hồ sơ có tên. default_permissions chọn một hồ sơ làm mặc định; các thiết lập hồ sơ quyền khác cũng sử dụng tên hồ sơ.
permissions.<name>.description Chuỗi Không có Cung cấp mô tả dễ đọc cho hồ sơ. Hồ sơ không kế thừa mô tả của hồ sơ cha thông qua extends.
permissions.<name>.extends Tên hồ sơ dạng chuỗi Không có Khởi tạo hồ sơ này dựa trên một hồ sơ có tên khác hoặc hồ sơ tích hợp sẵn :read-only hay :workspace. Codex từ chối :danger-full-access, các hồ sơ cha không xác định và các vòng lặp kế thừa.
[permissions.<name>.workspace_roots] Bảng Không có Bổ sung các thư mục gốc không gian làm việc do hồ sơ định nghĩa để áp dụng các quy tắc hệ thống tệp :workspace_roots cùng với các thư mục gốc không gian làm việc tại thời điểm chạy của phiên hiện tại.
permissions.<name>.workspace_roots."<path>" boolean false Thêm đường dẫn vào tập hợp thư mục gốc không gian làm việc của hồ sơ khi có giá trị true. Các mục được đặt thành false vẫn không hoạt động.
[permissions.<name>.filesystem] Bảng Không có Ánh xạ các đường dẫn hệ thống tệp tới các giá trị quyền truy cập hoặc các bảng ánh xạ đường dẫn con có phạm vi giới hạn. Bảng hệ thống tệp bị thiếu hoặc để trống sẽ giữ quyền truy cập hệ thống tệp ở trạng thái hạn chế và phát cảnh báo khi khởi động.
permissions.<name>.filesystem.glob_scan_max_depth Số Không có Giới hạn việc mở rộng mẫu glob cấm đọc trên Linux, WSL và Windows gốc khi Codex chụp lại các kết quả khớp trước khi khởi động môi trường cô lập. Giá trị lớn hơn có thể làm tăng khối lượng quét lúc khởi động. Sử dụng giá trị ít nhất là 1 khi một mẫu ** không giới hạn cần được mở rộng trước trong phạm vi giới hạn.
[permissions.<name>.filesystem]."<path>" read, write hoặc deny Không có Cấp quyền truy cập trực tiếp cho một đường dẫn được hỗ trợ. deny từ chối quyền truy cập và được ưu tiên hơn các mục write hoặc read có cùng độ cụ thể. Codex từ chối các quy tắc ghi trực tiếp mà môi trường thực thi đang hoạt động không thể thực thi.
[permissions.<name>.filesystem."<path>"]."<subpath>" read, write hoặc deny Không có Cấp quyền truy cập cho một đường dẫn con của <path>. Sử dụng . cho đường dẫn cơ sở. Các đường dẫn con khác phải là đường dẫn tương đối nằm bên dưới và không được chứa các thành phần . hoặc ...
[permissions.<name>.network] Bảng Không có Cấu hình quyền truy cập mạng của lệnh và chính sách mà proxy mạng đang hoạt động thực thi. Bật features.network_proxy trừ khi các yêu cầu mạng do quản trị viên quản lý khởi động proxy.
permissions.<name>.network.enabled boolean false Cho phép các lệnh trong hồ sơ truy cập mạng. Thiết lập này không khởi động proxy mạng; nếu không có proxy đang hoạt động, các lệnh có thể kết nối trực tiếp mà không bị hạn chế theo tên miền.
[permissions.<name>.network.domains] Bảng Không có Ánh xạ các mẫu máy chủ tới allow hoặc deny. Các quy tắc chỉ áp dụng khi proxy mạng đang hoạt động. Proxy đang hoạt động chặn các yêu cầu tới tên miền nếu không có mục allow nào, và các mục từ chối được ưu tiên hơn các mục cho phép.
permissions.<name>.network.domains."<pattern>" allow hoặc deny Không có Hỗ trợ máy chủ được chỉ định chính xác, *.example.com cho tên miền con, **.example.com cho tên miền gốc cùng các tên miền con và * làm ký tự đại diện toàn cục chỉ dùng để cho phép. Các mẫu máy chủ được chuẩn hóa bằng cách loại bỏ khoảng trắng ở hai đầu, chuyển thành chữ thường, bỏ dấu chấm cuối và bỏ số cổng hoặc dấu ngoặc.
[permissions.<name>.network.unix_sockets] Bảng Không có Ánh xạ các thiết lập ghi đè danh sách cho phép socket Unix. Chỉ sử dụng cho các tích hợp cục bộ như Docker.
permissions.<name>.network.unix_sockets."<path>" allow hoặc deny Không có Thêm đường dẫn socket Unix tuyệt đối vào danh sách cho phép có hiệu lực bằng allow hoặc từ chối đường dẫn đó bằng deny. Các mục bị từ chối được loại khỏi danh sách cho phép có hiệu lực.
permissions.<name>.network.proxy_url Chuỗi URL http://127.0.0.1:3128 Trình lắng nghe proxy HTTP dùng cho HTTP_PROXY, HTTPS_PROXY, các biến proxy WebSocket và các biến môi trường proxy của công cụ có liên quan.
permissions.<name>.network.enable_socks5 boolean true Bật trình lắng nghe SOCKS5 dùng cho ALL_PROXY và các biến proxy FTP.
permissions.<name>.network.socks_url Chuỗi URL http://127.0.0.1:8081 Địa chỉ trình lắng nghe SOCKS5.
permissions.<name>.network.enable_socks5_udp boolean true Bật hỗ trợ SOCKS5 UDP khi trình lắng nghe SOCKS5 được bật.
permissions.<name>.network.allow_upstream_proxy boolean true Cho phép proxy mạng của môi trường cô lập tuân theo các thiết lập HTTP(S)_PROXY và ALL_PROXY ở phía thượng nguồn cho các yêu cầu gửi đi.
permissions.<name>.network.allow_local_binding boolean false Tắt cơ chế bảo vệ mạng cục bộ/riêng khi có giá trị true. Khi có giá trị false, các giá trị địa chỉ cục bộ cụ thể như localhost hoặc 127.0.0.1 phải được thêm rõ ràng vào danh sách cho phép, còn các tên máy chủ phân giải thành IP cục bộ hoặc riêng vẫn bị chặn.
permissions.<name>.network.dangerously_allow_non_loopback_proxy boolean false Cho phép các trình lắng nghe proxy liên kết với địa chỉ không phải loopback. Để trống khi phát triển cục bộ thông thường.
permissions.<name>.network.dangerously_allow_all_unix_sockets boolean false Bỏ qua danh sách cho phép socket Unix ở những nơi hỗ trợ chuyển tiếp qua proxy socket Unix. Đây là cơ chế bỏ qua hạn chế cục bộ với phạm vi rộng.

Quyền hệ thống tệp

Các mục hệ thống tệp sử dụng read, write hoặc deny:

Quyền truy cập Ý nghĩa
read Cho phép lệnh đọc tệp và liệt kê thư mục bên dưới đường dẫn. Lệnh không thể tạo, sửa đổi, đổi tên hoặc xóa tệp tại đó.
write Cho phép lệnh đọc và sửa đổi tệp bên dưới đường dẫn, bao gồm tạo, đổi tên và xóa tệp khi hệ điều hành cho phép.
deny Từ chối cả quyền đọc lẫn ghi bên dưới đường dẫn. Dùng mục này để tách một đường dẫn con bị từ chối khỏi quyền cấp read hoặc write rộng hơn.

Mục cụ thể hơn sẽ ghi đè mục rộng hơn. Khi hai mục nhắm đến cùng một đường dẫn, deny được ưu tiên hơn write và write được ưu tiên hơn read.

Thứ tự ưu tiên này cho phép hồ sơ mô tả một khu vực làm việc rộng trước, rồi tách các tệp hoặc thư mục cần giữ ở trạng thái không thể đọc:

[permissions.project-edit.filesystem]
":minimal" = "read"

[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"
".devcontainer" = "read"
"**/*.env" = "deny"

Trong ví dụ này, thư mục gốc không gian làm việc vẫn có thể ghi, .devcontainer/ vẫn có thể đọc mà không trở thành có thể ghi, còn các tệp môi trường khớp vẫn không khả dụng đối với những lệnh trong môi trường cô lập.

Một đường dẫn cụ thể hơn cũng có thể mở lại cây con hẹp hơn bên trong một quy tắc từ chối rộng hơn:

[permissions.project-edit.filesystem]
"~/Documents" = "deny"
"~/Documents/codex" = "write"

Các dạng đường dẫn được hỗ trợ:

Đường dẫn Ý nghĩa Đường dẫn con có phạm vi
:root Thư mục gốc của hệ thống tệp Chỉ .
:minimal Các đường dẫn nền tảng và môi trường chạy mà những công cụ phổ biến cần Chỉ .
:workspace_roots Các thư mục gốc không gian làm việc của phiên hiện tại cùng mọi thư mục gốc do hồ sơ định nghĩa đã bật Có
:tmpdir Vị trí $TMPDIR, khi khả dụng Chỉ .
:slash_tmp Thư mục /tmp, nếu tồn tại Chỉ .
/absolute/path Một đường dẫn tuyệt đối của nền tảng, chẳng hạn /path trên macOS/Linux/WSL hoặc C:\path trên Windows gốc Có
~/path Một đường dẫn bên dưới thư mục chính của người dùng hiện tại Có

Trên Windows gốc, các đường dẫn tương đối với thư mục chính cũng có thể dùng dấu gạch chéo ngược, chẳng hạn ~\work.

Chỉ dùng :root khi hồ sơ chủ ý cần phạm vi đọc rộng:

[permissions.audit.filesystem]
":root" = "read"

Dùng các mục lồng nhau dưới :workspace_roots để giới hạn quyền truy cập vào các đường dẫn con tương đối với thư mục gốc không gian làm việc:

[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"          # each workspace root
"docs" = "read"        # each workspace-root docs directory
"generated" = "deny"   # each workspace-root generated directory

Đường dẫn con lồng nhau phải nằm trong thư mục gốc không gian làm việc. Phép duyệt lên thư mục cha như ../other-repo sẽ bị từ chối.

Từ chối đọc bằng đường dẫn chính xác hoặc glob

Dùng deny cho các tệp hoặc cây con mà Codex không được đọc, ngay cả khi một quy tắc hồ sơ rộng hơn cấp quyền truy cập ở gần đó. Đường dẫn chính xác phù hợp với các vị trí ổn định như ~/.ssh. Mẫu glob phù hợp hơn khi hồ sơ cần bao phủ một nhóm tệp nhạy cảm có vị trí chính xác khác nhau giữa các kho lưu trữ.

Khi một glob nằm dưới :workspace_roots, Codex diễn giải nó tương đối với từng thư mục gốc không gian làm việc có hiệu lực. Ví dụ:

[permissions.project-edit.filesystem.":workspace_roots"]
"**/*.env" = "deny"

Quy tắc này từ chối đọc các tệp .env khớp được tìm thấy bên dưới mỗi thư mục gốc không gian làm việc khi chạy hoặc do hồ sơ định nghĩa. Hãy dùng quy tắc này khi bạn muốn giữ nguyên quyền ghi thông thường trong không gian làm việc, đồng thời khiến tệp môi trường, bí mật được tạo hoặc các tệp tương tự chứa thông tin xác thực không thể đọc được.

Trên Linux, WSL và Windows gốc với MXC hoặc elevated, các tệp khớp mẫu glob từ chối đọc được liệt kê khi mỗi tiến trình trong môi trường cô lập khởi động. Các tệp khớp mẫu được tạo sau đó không được thêm vào danh sách từ chối của tiến trình đó và vẫn có thể đọc được nếu các quyền khác của nó cho phép truy cập. Ví dụ: một shell, tập lệnh, trình theo dõi hoặc máy chủ phát triển chạy lâu có thể đọc tệp .env khớp mẫu được tạo sau khi tiến trình đó khởi động.

Bản chụp này tồn tại trong suốt vòng đời của tiến trình trong môi trường cô lập, chứ không phải toàn bộ phiên Codex . Khi khởi động tiến trình mới trong môi trường cô lập thông qua Codex, các tệp khớp mẫu sẽ được liệt kê lại; việc tiếp tục sử dụng tiến trình đang chạy không làm mới danh sách từ chối của nó. Đừng dựa vào mẫu glob để chặn các tệp mới được tạo trong tiến trình đang chạy đó. Xem Khả năng tương thích của Windows MXC để biết các giới hạn riêng trên Windows.

Mẫu glob deny được hỗ trợ làm quy tắc từ chối đọc. Các glob read hoặc write kém khả chuyển hơn trên môi trường cô lập Linux, WSL và Windows gốc, vì vậy hãy ưu tiên đường dẫn chính xác hoặc quy tắc cây con như "docs/**" = "read" khi có thể.

Trên Linux, WSL và Windows gốc, một mẫu từ chối đọc ** không giới hạn có thể cần được mở rộng trước trong phạm vi hữu hạn trước khi môi trường cô lập khởi động. Hãy đặt glob_scan_max_depth khi bạn dùng mẫu không giới hạn như "**/*.env" = "deny":

[permissions.project-edit.filesystem]
glob_scan_max_depth = 3

[permissions.project-edit.filesystem.":workspace_roots"]
"**/*.env" = "deny"

glob_scan_max_depth phải có giá trị ít nhất là 1. Giá trị cao hơn sẽ quét sâu hơn trước khi khởi động môi trường cô lập, có thể làm tăng khối lượng công việc lúc khởi động trên Linux, WSL và Windows gốc. Nếu không muốn sử dụng tính năng mở rộng có giới hạn, hãy liệt kê rõ các độ sâu như *.env, */*.env và */*/*.env.

Thêm các thư mục gốc không gian làm việc có thể tái sử dụng vào hồ sơ khi cần áp dụng cùng các quy tắc cho nhiều thư mục hơn thư mục gốc của phiên hiện tại:

[permissions.project-edit.workspace_roots]
"~/code/app" = true
"~/code/shared-lib" = true

Khi hồ sơ này hoạt động, Codex áp dụng các quy tắc :workspace_roots cho các thư mục gốc không gian làm việc khi chạy của phiên hiện tại và từng thư mục gốc không gian làm việc do hồ sơ định nghĩa đã bật.

Trên Windows gốc, đường dẫn ký tự ổ đĩa như D:\work và đường dẫn UNC như \\server\share được hỗ trợ dưới dạng đường dẫn tuyệt đối.

Quyền mạng

Quyền truy cập mạng và lọc mạng là hai cài đặt riêng biệt. Đặt permissions.<name>.network.enabled = true để cho phép lệnh truy cập mạng và bật features.network_proxy để thực thi các quy tắc miền của hồ sơ:

[features]
network_proxy = true

[permissions.project-edit.network]
enabled = true

[permissions.project-edit.network.domains]
"example.com" = "allow"      # exact host
"*.example.com" = "allow"    # subdomains only
"**.example.com" = "allow"   # apex and subdomains
"ads.example.com" = "deny"   # deny wins over allow

Hành vi thu được phụ thuộc vào cả hai cài đặt:

  • Tắt mạng: Lệnh không thể truy cập mạng, bất kể tính năng proxy có được bật hay không.
  • Bật mạng, tắt proxy: Lệnh có quyền truy cập mạng trực tiếp, không hạn chế. Các quy tắc miền trong hồ sơ quyền không được thực thi.
  • Bật mạng, bật proxy: Lệnh sử dụng proxy, nơi thực thi các quy tắc miền của hồ sơ. Nếu proxy đang hoạt động không có miền nào được phép, proxy sẽ chặn các đích bên ngoài.

Việc thêm [permissions.<name>.network.domains] hoặc đặt permissions.<name>.network.enabled = true không bật features.network_proxy. Thay vào đó, quản trị viên có thể bật proxy bằng [experimental_network] trong requirements.toml. Xem Cấu hình được quản lý.

Khi hoạt động, proxy mạng của môi trường cô lập liên kết với các trình lắng nghe cục bộ theo mặc định:

[permissions.project-edit.network]
enabled = true
proxy_url = "http://127.0.0.1:3128"
enable_socks5 = true
socks_url = "http://127.0.0.1:8081"
enable_socks5_udp = true

Giữ nguyên giá trị mặc định của các cài đặt trình lắng nghe này, trừ khi bạn đang tích hợp với một môi trường chạy cụ thể. Các khóa mạng dangerously_* là lối thoát dành cho môi trường chuyên biệt và không nên được dùng cho hoạt động phát triển cục bộ thông thường.

Mạng cục bộ và riêng tư

Khi proxy mạng hoạt động, Codex áp dụng cơ chế bảo vệ mạng cục bộ/riêng tư theo mặc định để phòng chống liên kết lại DNS và việc vô tình truy cập các dịch vụ cục bộ. Để chủ ý cho phép một đích cục bộ dạng giá trị trực tiếp, hãy thêm chính xác máy chủ hoặc địa chỉ IP đó vào danh sách cho phép:

[permissions.project-edit.network.domains]
"localhost" = "allow"
"127.0.0.1" = "allow"

Chỉ đặt allow_local_binding = true khi hồ sơ phải truy cập các tên máy chủ trong danh sách cho phép nhưng được phân giải thành địa chỉ cục bộ hoặc riêng tư:

[permissions.project-edit.network]
enabled = true
allow_local_binding = true

[permissions.project-edit.network.domains]
"localhost" = "allow"

Socket Unix

Proxy socket Unix là một lối thoát cục bộ dành cho các công cụ như Docker. Chỉ nên dùng khi thật sự cần thiết:

[permissions.project-edit.network.unix_sockets]
"/var/run/docker.sock" = "allow"
"/tmp/old.sock" = "deny"

Dùng deny để từ chối một đường dẫn socket, kể cả mục cho phép được kế thừa. Các đường dẫn socket bị từ chối sẽ bị loại khỏi danh sách cho phép có hiệu lực.

Khi bật socket Unix, hãy giữ các trình lắng nghe proxy liên kết với địa chỉ loopback.

Di chuyển từ các cài đặt môi trường cô lập cũ

Hồ sơ quyền thay thế tổ hợp cũ gồm sandbox_mode và sandbox_workspace_write khi bạn muốn một hồ sơ tái sử dụng được mô tả cả hành vi hệ thống tệp lẫn mạng. Hãy dùng hệ thống này hoặc hệ thống kia cho một phiên, không dùng cả hai.

Các điểm khởi đầu nên dùng:

  • Đối với quy trình chỉ đọc, hãy dùng hồ sơ :read-only tích hợp sẵn hoặc định nghĩa một hồ sơ tùy chỉnh chỉ có quyền đọc ở nơi cần thiết.
  • Để chỉnh sửa không gian làm việc, hãy dùng hồ sơ :workspace tích hợp sẵn hoặc định nghĩa một hồ sơ tùy chỉnh ghi thông qua :workspace_roots và chỉ thêm các đường dẫn tạm hoặc bộ nhớ đệm bổ sung mà quy trình cần.
  • Để thực thi cục bộ không hạn chế, chỉ dùng :danger-full-access khi bạn chủ ý muốn mô hình truy cập cục bộ rộng nhất.

Hồ sơ mô tả trạng thái cục bộ mặc định cho một phiên. Các yêu cầu do tổ chức quản lý vẫn có thể thêm những hạn chế mà cấu hình người dùng không được phép mở rộng. Xem Cấu hình được quản lý để biết các ràng buộc hệ thống tệp và mạng do quản trị viên thực thi.

Phạm vi và cơ chế thực thi

Truy cập máy tính cục bộ bằng Work Cloud và chính sách môi trường

Xem xét chính sách cho từng môi trường sử dụng tính năng truy cập máy tính cục bộ bằng Work Cloud:

  • Yêu cầu của doanh nghiệp: Đối với Work có quyền truy cập cục bộ và dots, chính sách Global được hỗ trợ chi phối bộ điều phối đám mây dùng chung khi chính sách được quản lý được bật; các yêu cầu thực thi cục bộ có liên quan chi phối máy tính được kết nối.
  • Thực thi trên đám mây: Các container đám mây của Work sử dụng các chính sách Work Cloud hiện có.
  • Thứ tự chính sách cục bộ: MDM và các yêu cầu quản lý thiết bị kiểu cũ có mức ưu tiên cao hơn Bảo mật tác nhân. Tệp yêu cầu hệ thống của thiết bị có mức ưu tiên thấp hơn Bảo mật tác nhân.
  • Mức ưu tiên của chính sách: Chính sách có mức ưu tiên cao hơn được áp dụng ngay cả khi chính sách có mức ưu tiên thấp hơn cụ thể hơn. Trong một chính sách, các thiết lập ghi đè môi trường dành riêng cho từng hệ điều hành được ưu tiên hơn các thiết lập ghi đè môi trường cho mọi hệ điều hành, tiếp đến là Global.

Một số yêu cầu có quy tắc hợp nhất riêng cho từng trường. Xem Cấu hình được quản lý và Tài liệu tham chiếu cấu hình để biết các trường được hỗ trợ và giới hạn khi chạy. Đừng mặc định rằng Work Cloud hỗ trợ các hồ sơ quyền của Codex được trình bày ở đây.

Hồ sơ quyền định nghĩa các ranh giới cho việc thực thi lệnh cục bộ trong môi trường cô lập. Hãy dùng chúng cùng chính sách phê duyệt và các cơ chế kiểm soát riêng cho tìm kiếm web, trình kết nối, MCP server, trình duyệt tích hợp, Computer Use và Codex cloud.

Những gì hồ sơ kiểm soát

  • Thực thi lệnh cục bộ: Hồ sơ quyền chi phối các lệnh trong môi trường cô lập chạy trên máy của bạn. Trình kết nối, MCP server, giao diện trình duyệt hoặc computer-use, cài đặt môi trường Codex cloud và các lần nâng quyền đã phê duyệt sử dụng cơ chế kiểm soát riêng.
  • Ghi vào hệ thống tệp: Hồ sơ có quyền ghi có thể tạo ra thay đổi lâu dài. Hãy coi thao tác ghi vào tập lệnh, bước xây dựng, hook của trình quản lý gói, tệp khởi động shell và thư mục dùng chung là nhạy cảm, vì công cụ hoặc người dùng sau đó có thể thực thi các tệp đó bên ngoài ngữ cảnh môi trường cô lập ban đầu.
  • Đích gửi đi: Các quy tắc miền mạng chỉ giới hạn lưu lượng lệnh trong môi trường cô lập có thể đi đến đâu khi proxy mạng đang hoạt động. Chúng không xác định một đích được phép có đáng tin cậy hay không, và các quy tắc cho phép bằng ký tự đại diện vẫn có phạm vi rộng.
  • Dịch vụ cục bộ: Proxy mạng đang hoạt động mặc định chặn các đích mạng cục bộ và riêng tư. Việc thêm localhost, IP riêng tư hoặc socket Unix vào danh sách cho phép hay đặt allow_local_binding = true sẽ mở rõ ràng quyền truy cập vào các dịch vụ cục bộ.

Những gì proxy mạng không kiểm soát

Proxy mạng chỉ lọc lưu lượng từ các lệnh cục bộ chạy bên trong môi trường cô lập. Proxy không áp dụng danh sách cho phép miền của hồ sơ cho:

  • Tìm kiếm trên web: Công cụ tìm kiếm được lưu trữ trên máy chủ sử dụng các thiết lập truy cập riêng. Sử dụng web_search và, đối với các ứng dụng khách được quản lý, allowed_web_search_modes để kiểm soát công cụ này. tools.web_search.allowed_domains lọc kết quả tìm kiếm, không kiểm soát quyền truy cập mạng của lệnh.
  • Ứng dụng và trình kết nối: Các công cụ dựa trên trình kết nối sử dụng các kết nối riêng ở phía dịch vụ, quyền của không gian làm việc và thiết lập của ứng dụng hoặc công cụ.
  • MCP servers: Các MCP servers cục bộ và từ xa sử dụng tiến trình hoặc cơ chế truyền tải riêng. Kiểm soát chúng bằng cấu hình mcp_servers và danh sách cho phép máy chủ được quản lý.
  • Trình duyệt và Computer Use: Hoạt động điều hướng trình duyệt và các thao tác sử dụng máy tính dùng các cơ chế kiểm soát tính năng và phê duyệt riêng.
  • Lưu lượng dịch vụ Codex: Các yêu cầu mô hình, xác thực và dịch vụ khác của ứng dụng khách sử dụng các thiết lập HTTP và proxy hệ thống riêng của ứng dụng khách.
  • Codex Cloud: Các tác vụ này sử dụng thiết lập mạng riêng của môi trường tương ứng. Codex Cloud (Legacy) có thiết lập truy cập internet riêng.

Để giới hạn các giao diện này, hãy cấu hình trực tiếp từng khả năng. Danh sách cho phép mạng của lệnh không phải chính sách mạng toàn cục cho mọi hành động mà Codex có thể thực hiện.

Cách cơ chế thực thi hoạt động

  • Trên macOS, Codex dùng các hồ sơ môi trường cô lập Seatbelt. Nếu môi trường cô lập của nền tảng không thể thực thi chính sách đã chọn, Codex sẽ từ chối chạy lệnh thay vì âm thầm chạy lệnh bên ngoài môi trường cô lập.
  • Trên Linux và WSL, Codex sử dụng bubblewrap và seccomp để thực thi các hạn chế đối với hệ thống tệp. Tùy chọn Landlock cũ không thể cô lập các Unix socket của app-server và bị từ chối đối với các chính sách hạn chế hệ thống tệp. Tắt features.use_legacy_landlock khi nâng cấp. Các máy chủ chặn những thao tác bubblewrap bắt buộc sẽ không thể chạy các chính sách này.
  • Trên Windows, MXC dùng cơ chế cách ly tiến trình để kiểm soát quyền đối với hệ thống tệp và mạng. Xem khả năng tương thích với MXC trước khi bật. Phương án dự phòng cũ elevated dùng các tài khoản người dùng môi trường cô lập riêng có ít đặc quyền hơn, các ranh giới quyền đối với hệ thống tệp và quy tắc tường lửa. unelevated là phương án dự phòng cũ có khả năng cách ly mạng yếu hơn và không thể thực thi mọi ngoại lệ phân tách quyền đọc/ghi, nên các chính sách không được hỗ trợ sẽ bị từ chối. Dùng WSL khi bạn cần mô hình môi trường cô lập của Linux.

Hướng dẫn vận hành

Chọn hồ sơ hẹp nhất vẫn cho phép tác vụ hoàn tất, đặc biệt khi bạn cấp quyền ghi hoặc quyền truy cập mạng gửi đi. Hãy căn chỉnh chính sách phê duyệt, cách xử lý bí mật và các quy tắc cho phép với mức truy cập đó.

Hồ sơ thông dụng

Chỉ đọc với danh sách cho phép mạng

default_permissions = "readonly-net"

[features]
network_proxy = true

[permissions.readonly-net.filesystem]
":minimal" = "read"

[permissions.readonly-net.filesystem.":workspace_roots"]
"." = "read"

[permissions.readonly-net.network]
enabled = true

[permissions.readonly-net.network.domains]
"api.openai.com" = "allow"

Chỉ cho phép truy cập tệp trong không gian làm việc

Dưới đây là ví dụ về hồ sơ quyền giúp Codex có thể ghi vào các thư mục không gian làm việc của bạn, đồng thời từ chối đọc phần còn lại của hệ thống tệp (với một số ngoại lệ có giới hạn, do :minimal xác định).

default_permissions = "workspace-only"

[permissions.workspace-only]
# By extending the :workspace profile, you get Codex's safeguards to ensure
# paths such as .git/, .agents/, .codex/, and .aws/ within a workspace root
# are read-only while the rest of the folder is writable.
extends = ":workspace"

[permissions.workspace-only.filesystem]
# By default, deny read access to all files on disk.
":root" = "deny"

# Though in practice, a software agent needs to be able to read folders that
# contain common tools, such as `/usr/bin`, to get work done, so grant access
# to a "minimal" set of files and folders, as determined by Codex.
":minimal" = "read"

# By extending the :workspace profile, :tmpdir and :slash_tmp are "write" by
# default, though you can deny access to them altogether, if desired.
":tmpdir" = "deny"
":slash_tmp" = "deny"

Ghi vào không gian làm việc mà không có mạng

default_permissions = "project-edit"

[permissions.project-edit.filesystem]
":minimal" = "read"

[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"

[permissions.project-edit.network]
enabled = false

Ghi vào không gian làm việc với quyền truy cập web công khai

default_permissions = "workspace-net"

[features]
network_proxy = true

[permissions.workspace-net.filesystem]
":minimal" = "read"

[permissions.workspace-net.filesystem.":workspace_roots"]
"." = "write"

[permissions.workspace-net.network]
enabled = true

[permissions.workspace-net.network.domains]
"*" = "allow"

Chỉ dùng quy tắc cho phép toàn cục "*" khi bạn chủ ý cho phép truy cập mạng công khai. Các quy tắc từ chối có thể thu hẹp một danh sách cho phép rộng.