Beta. Os perfis de permissões estão em desenvolvimento e podem mudar.
Os perfis de permissões não podem ser combinados com as configurações antigas do sandbox. Configure apenas um dos conjuntos: default_permissions e [permissions], ou sandbox_mode / sandbox_workspace_write. Se sandbox_mode aparecer em qualquer arquivo de configuração carregado, se você passar --sandbox ou se o perfil de configuração selecionado definir sandbox_mode, o Codex usará as configurações antigas do sandbox em vez de default_permissions.
A exceção é a configuração gerenciada allowed_permission_profiles, que faz o Codex usar perfis de permissões. Remova configurações antigas como sandbox_mode e [sandbox_workspace_write] antes de implantar uma lista gerenciada de perfis permitidos. Em uma implantação corporativa com várias versões, você pode manter o requisito gerenciado allowed_sandbox_modes como restrição temporária de compatibilidade até que todos os clientes executem o Codex 0.138.0 ou posterior.
Com os perfis de permissões, você pode aplicar o princípio do menor privilégio aos comandos locais que o Codex executa em seu nome. Um perfil é uma política identificada por nome que combina regras do sistema de arquivos, que definem o que os comandos podem ler ou gravar, com regras de rede, que definem quais destinos os comandos podem acessar.
Em um perfil, network.enabled = true permite que os comandos acessem a rede, mas não inicia o proxy de rede. Para aplicar as regras de domínio do perfil, também defina features.network_proxy = true em config.toml ou use os requisitos de [experimental_network] habilitados e gerenciados pelo administrador. Sem um proxy ativo, as regras de domínio do perfil não restringem o acesso direto à rede.
Use perfis para conceder ao Codex o acesso necessário para o chat atual sem dar acesso amplo ao computador ou à rede. Por exemplo, com um perfil somente leitura, o Codex pode inspecionar um projeto sem editá-lo. Já um perfil com permissão de gravação pode limitar as edições a determinadas raízes do espaço de trabalho.
O macOS, o Linux, o WSL e o Windows nativo oferecem suporte a perfis de permissões locais. Consulte Escopo e aplicação das regras para ver detalhes e ressalvas de cada plataforma.
Para consultar as configurações de rede atuais do Codex Cloud, veja Conectar-se a serviços. Para o Codex Cloud (legado), veja Acesso à internet.
Definir e selecionar um perfil
O Codex inclui três perfis de permissões predefinidos:
:read-onlylimita os comandos locais a operações de leitura.:workspacepermite gravações nas raízes ativas do espaço de trabalho e nos diretórios temporários do sistema.:danger-full-accessremove as restrições do sandbox local. Use esse perfil somente quando quiser conceder esse nível de acesso.
Crie um perfil com nome em [permissions.<name>]. Em seguida, defina a chave de nível superior default_permissions com o nome desse perfil ou de um dos perfis predefinidos acima. Neste exemplo, project-edit é um nome de perfil definido pelo usuário, e não um valor predefinido.
Administradores de ambientes corporativos podem definir perfis e restringir quais deles os usuários podem selecionar por meio do arquivo gerenciado requirements.toml. Quando allowed_permission_profiles está presente, todos os perfis omitidos são bloqueados, inclusive os predefinidos que não constam na lista e os que forem adicionados em versões futuras do Codex. Consulte Controlar os perfis de permissões disponíveis para ver a configuração gerenciada recomendada.
Os perfis personalizados usam dois conceitos relacionados:
[permissions.<name>.workspace_roots]adiciona diretórios específicos que o perfil deve considerar raízes do espaço de trabalho.[permissions.<name>.filesystem.":workspace_roots"]define as regras do sistema de arquivos que o Codex aplica em cada raiz efetiva do espaço de trabalho. Isso inclui tanto as raízes que o ambiente de execução fornece à sessão atual quanto as definidas pelo perfil acima.
Os perfis também seguem o modelo usual de configuração em camadas. Camadas de maior precedência podem adicionar ou substituir entradas de um perfil com o mesmo nome sem precisar repetir toda a definição.
Por exemplo, as configurações da organização e do usuário podem estender o mesmo perfil de forma independente:
# /etc/codex/config.toml
[permissions.server.workspace_roots]
"~/code/server" = true
# ~/.codex/config.toml
[permissions.server.workspace_roots]
"~/code/mobile-app" = true
Quando server está ativo, as duas raízes do espaço de trabalho fazem parte do perfil efetivo.
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"
Esse perfil:
- Permite ler o conjunto mínimo de caminhos de execução necessários para ferramentas comuns de desenvolvimento.
- Aplica as mesmas regras às raízes do espaço de trabalho da sessão atual e às definidas pelo perfil.
- Mantém configurações relacionadas ao IDE, como
.devcontainer/, em modo somente leitura em cada raiz. - Bloqueia o acesso aos arquivos de ambiente que correspondem a um padrão glob.
- Permite acesso à rede somente conforme a política de domínios configurada.
Em um perfil ativo, as regras de bloqueio mais específicas continuam valendo mesmo quando um caminho mais abrangente permite leitura ou gravação. Por exemplo, um perfil pode permitir gravações nas raízes do espaço de trabalho e ainda bloquear um caminho .env correspondente com a regra deny.
Estender um perfil
Use extends quando um perfil tiver quase as mesmas regras que um perfil predefinido ou outro perfil com nome. Prefira estender um perfil predefinido a começar do zero para manter as proteções básicas. Ao estender :workspace, por exemplo, os caminhos .git, .agents, .codex e .aws na raiz do espaço de trabalho permanecem em modo somente leitura, a menos que você substitua essas regras explicitamente. Defina o perfil pai uma vez e adicione ou substitua apenas as regras que forem diferentes.
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"
Esse perfil parte de :workspace, mantém o bloqueio dos arquivos .env que correspondem ao padrão e permite solicitações a api.openai.com. Um perfil pode estender :read-only, :workspace ou outro perfil com nome. Ele não pode estender :danger-full-access. O Codex também rejeita perfis pais desconhecidos e ciclos de herança.
Especificação da configuração
| Entrada | Tipo / valores | Padrão | Detalhes |
|---|---|---|---|
default_permissions |
Nome do perfil (string) | Nenhum | Indica o perfil de permissões que o Codex aplica por padrão. O nome deve corresponder a um perfil em [permissions] ou a um perfil predefinido, como :workspace. Defina-o explicitamente para que o comportamento seja previsível. Os requisitos gerenciados só podem omitir essa chave quando permitem explicitamente tanto :workspace quanto :read-only. Nessa configuração, o Codex usa as configurações antigas do sandbox, a menos que o requisito gerenciado allowed_permission_profiles determine o uso de perfis de permissões. |
[permissions.<name>] |
Tabela | Nenhum | Define um perfil com nome. default_permissions seleciona um perfil como padrão. Outras configurações de perfis de permissões também usam o nome do perfil. |
permissions.<name>.description |
String | Nenhum | Descreve o perfil em linguagem natural. Um perfil não herda a descrição do perfil pai por meio de extends. |
permissions.<name>.extends |
Nome do perfil (string) | Nenhum | Usa como base outro perfil com nome ou um dos perfis predefinidos :read-only ou :workspace. O Codex rejeita :danger-full-access, perfis pais desconhecidos e ciclos de herança. |
[permissions.<name>.workspace_roots] |
Tabela | Nenhum | Adiciona raízes do espaço de trabalho definidas pelo perfil. Essas raízes recebem as regras de sistema de arquivos de :workspace_roots, assim como as raízes fornecidas pelo ambiente de execução da sessão atual. |
permissions.<name>.workspace_roots."<path>" |
Booleano | false |
Adiciona o caminho ao conjunto de raízes do espaço de trabalho do perfil quando o valor é true. Entradas com o valor false permanecem inativas. |
[permissions.<name>.filesystem] |
Tabela | Nenhum | Associa caminhos do sistema de arquivos a valores de acesso ou a mapas de subcaminhos relativos a esses caminhos. Se a tabela estiver ausente ou vazia, o acesso ao sistema de arquivos permanece restrito e o Codex emite um aviso na inicialização. |
permissions.<name>.filesystem.glob_scan_max_depth |
Número | Nenhum | Limita a expansão de padrões glob de bloqueio de leitura no Linux, no WSL e no Windows nativo quando o Codex registra as correspondências antes de iniciar o sandbox. Valores maiores podem exigir uma varredura mais extensa na inicialização. Use um valor de pelo menos 1 quando um padrão ** sem limite de profundidade precisar de expansão prévia limitada. |
[permissions.<name>.filesystem]."<path>" |
read, write ou deny |
Nenhum | Define o acesso direto a um caminho compatível. deny bloqueia o acesso e tem precedência sobre entradas write ou read de mesma especificidade. O Codex rejeita regras de gravação direta que o ambiente de execução ativo não consegue aplicar. |
[permissions.<name>.filesystem."<path>"]."<subpath>" |
read, write ou deny |
Nenhum | Concede acesso a um descendente de <path>. Use . para o caminho base. Os demais subcaminhos devem ser relativos e apontar para descendentes. Eles não podem conter os componentes . ou ... |
[permissions.<name>.network] |
Tabela | Nenhum | Configura o acesso dos comandos à rede e a política que o proxy de rede aplica quando está ativo. Habilite features.network_proxy, a menos que os requisitos de rede gerenciados pelo administrador iniciem o proxy. |
permissions.<name>.network.enabled |
Booleano | false |
Habilita o acesso à rede para os comandos executados com o perfil. Essa opção não inicia o proxy de rede. Sem um proxy ativo, os comandos podem se conectar diretamente, sem restrições de domínio. |
[permissions.<name>.network.domains] |
Tabela | Nenhum | Associa padrões de host a allow ou deny. As regras só se aplicam quando o proxy de rede está ativo. Se não houver entradas allow, o proxy ativo bloqueará as solicitações a domínios. As entradas de bloqueio prevalecem sobre as de permissão. |
permissions.<name>.network.domains."<pattern>" |
allow ou deny |
Nenhum | Aceita hosts exatos, *.example.com para subdomínios, **.example.com para o domínio raiz e seus subdomínios, e * como curinga global apenas para regras de permissão. Para normalizar os padrões de host, o Codex remove espaços em branco das extremidades, converte as letras em minúsculas e remove o ponto final, números de porta ou colchetes. |
[permissions.<name>.network.unix_sockets] |
Tabela | Nenhum | Define exceções à lista de sockets Unix permitidos. Use apenas para integrações locais, como o Docker. |
permissions.<name>.network.unix_sockets."<path>" |
allow ou deny |
Nenhum | Adiciona um caminho absoluto de socket Unix à lista efetiva de permissões com allow ou o rejeita com deny. As entradas bloqueadas ficam fora da lista efetiva. |
permissions.<name>.network.proxy_url |
URL (string) | http://127.0.0.1:3128 |
Endereço de escuta do proxy HTTP usado nas variáveis HTTP_PROXY, HTTPS_PROXY, nas variáveis de proxy de WebSocket e nas variáveis de ambiente de proxy de ferramentas relacionadas. |
permissions.<name>.network.enable_socks5 |
Booleano | true |
Habilita a escuta SOCKS5 usada por ALL_PROXY e pelas variáveis de proxy de FTP. |
permissions.<name>.network.socks_url |
URL (string) | http://127.0.0.1:8081 |
Endereço de escuta SOCKS5. |
permissions.<name>.network.enable_socks5_udp |
Booleano | true |
Habilita o suporte a UDP no SOCKS5 quando a escuta SOCKS5 está habilitada. |
permissions.<name>.network.allow_upstream_proxy |
Booleano | true |
Permite que o proxy de rede do sandbox respeite as configurações HTTP(S)_PROXY e ALL_PROXY do proxy upstream nas solicitações de saída. |
permissions.<name>.network.allow_local_binding |
Booleano | false |
Desativa a proteção de redes locais e privadas quando o valor é true. Com false, é preciso incluir explicitamente na lista de permissões os valores literais locais exatos, como localhost ou 127.0.0.1. Nomes de host que resolvem para IPs locais ou privados continuam bloqueados. |
permissions.<name>.network.dangerously_allow_non_loopback_proxy |
Booleano | false |
Permite que o proxy escute em endereços fora da interface de loopback. Para desenvolvimento local comum, deixe essa opção sem definir. |
permissions.<name>.network.dangerously_allow_all_unix_sockets |
Booleano | false |
Ignora a lista de sockets Unix permitidos nos ambientes que oferecem suporte ao encaminhamento desses sockets pelo proxy. Essa exceção concede acesso local amplo. |
Permissões do sistema de arquivos
As entradas do sistema de arquivos usam read, write ou deny:
| Acesso | Significado |
|---|---|
read |
Permite que os comandos leiam arquivos e listem diretórios sob o caminho. Os comandos não podem criar, modificar, renomear ou excluir arquivos nesse local. |
write |
Permite que os comandos leiam e modifiquem arquivos sob o caminho. Isso inclui criar, renomear e excluir arquivos quando o sistema operacional permite. |
deny |
Bloqueia tanto a leitura quanto a gravação sob o caminho. Use essa regra para bloquear um subcaminho dentro de uma permissão mais abrangente de read ou write. |
Entradas mais específicas prevalecem sobre as mais abrangentes. Quando duas entradas se aplicam ao mesmo caminho, deny tem precedência sobre write, e write tem precedência sobre read.
Com essa ordem de precedência, o perfil pode definir primeiro uma área de trabalho ampla e depois excluir arquivos ou diretórios que devem permanecer inacessíveis para leitura:
[permissions.project-edit.filesystem]
":minimal" = "read"
[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"
".devcontainer" = "read"
"**/*.env" = "deny"
Neste exemplo, a raiz do espaço de trabalho continua permitindo gravação, .devcontainer/ permanece em modo somente leitura e os arquivos de ambiente que correspondem ao padrão continuam inacessíveis aos comandos executados no sandbox.
Um caminho mais específico também pode restabelecer o acesso a uma subárvore dentro de uma área bloqueada por uma regra mais abrangente:
[permissions.project-edit.filesystem]
"~/Documents" = "deny"
"~/Documents/codex" = "write"
Formatos de caminho aceitos:
| Caminho | Significado | Subcaminhos relativos |
|---|---|---|
:root |
Raiz do sistema de arquivos | Apenas . |
:minimal |
Caminhos da plataforma e do ambiente de execução necessários para ferramentas comuns | Apenas . |
:workspace_roots |
Raízes do espaço de trabalho da sessão atual e todas as raízes habilitadas que o perfil define | Sim |
:tmpdir |
Local indicado por $TMPDIR, quando disponível |
Apenas . |
:slash_tmp |
Pasta /tmp, se existir |
Apenas . |
/absolute/path |
Caminho absoluto da plataforma, como /path no macOS, Linux ou WSL, ou C:\path no Windows nativo |
Sim |
~/path |
Caminho dentro do diretório pessoal do usuário atual | Sim |
No Windows nativo, caminhos relativos ao diretório pessoal também podem usar barras invertidas, como ~\work.
Use :root somente quando quiser conceder ao perfil acesso amplo de leitura:
[permissions.audit.filesystem]
":root" = "read"
Use entradas aninhadas em :workspace_roots para delimitar o acesso a subcaminhos relativos a cada raiz do espaço de trabalho:
[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write" # each workspace root
"docs" = "read" # each workspace-root docs directory
"generated" = "deny" # each workspace-root generated directory
Os subcaminhos aninhados devem permanecer dentro da respectiva raiz do espaço de trabalho. O Codex rejeita caminhos que sobem para o diretório pai, como ../other-repo.
Bloquear leituras com caminhos exatos ou padrões glob
Use deny para arquivos ou subárvores que o Codex não deve ler, mesmo que uma regra mais abrangente do perfil conceda acesso à área em que se encontram. Caminhos exatos funcionam bem para locais fixos, como ~/.ssh. Padrões glob são mais adequados quando o perfil precisa abranger um conjunto de arquivos confidenciais cuja localização varia de um repositório para outro.
Quando um padrão glob está em :workspace_roots, o Codex o interpreta em relação a cada raiz efetiva do espaço de trabalho. Por exemplo:
[permissions.project-edit.filesystem.":workspace_roots"]
"**/*.env" = "deny"
Essa regra bloqueia a leitura dos arquivos .env que correspondem ao padrão em cada raiz do espaço de trabalho fornecida pelo ambiente de execução ou definida pelo perfil. Use-a quando quiser manter as permissões normais de gravação no espaço de trabalho e impedir a leitura de arquivos de ambiente, segredos gerados ou outros arquivos semelhantes que contenham credenciais.
No Linux, no WSL e no Windows nativo com MXC ou elevated, o Codex lista os arquivos que correspondem aos padrões glob de bloqueio de leitura no início de cada processo executado no sandbox. Se um arquivo que corresponde ao padrão for criado depois, ele não entrará na lista de bloqueio desse processo. O processo poderá lê-lo se as demais permissões permitirem o acesso. Por exemplo, um shell, script, monitor de arquivos ou servidor de desenvolvimento de longa duração pode ler um arquivo .env correspondente criado após o início do processo.
Essa lista vale durante a execução do processo no sandbox. Seu alcance não se estende a toda a sessão do Codex. Ao iniciar um novo processo no sandbox, o Codex lista novamente as correspondências. Continuar usando um processo em execução não atualiza a lista de bloqueio dele. Não conte com um padrão glob para bloquear arquivos recém-criados nesse processo. Consulte Compatibilidade do MXC no Windows para conhecer as limitações específicas do Windows.
Os padrões glob com deny são aceitos como regras de bloqueio de leitura. Padrões glob com read ou write têm menor portabilidade entre os ambientes isolados do Linux, do WSL e do Windows nativo. Sempre que possível, prefira caminhos exatos ou regras de subárvore, como "docs/**" = "read".
No Linux, no WSL e no Windows nativo, um padrão ** de bloqueio de leitura sem limite de profundidade pode exigir uma expansão prévia limitada antes de iniciar o sandbox. Defina glob_scan_max_depth ao usar um padrão sem limite, como "**/*.env" = "deny":
[permissions.project-edit.filesystem]
glob_scan_max_depth = 3
[permissions.project-edit.filesystem.":workspace_roots"]
"**/*.env" = "deny"
O valor de glob_scan_max_depth deve ser de pelo menos 1. Valores maiores fazem a varredura percorrer mais níveis antes de iniciar o sandbox, o que pode aumentar o trabalho de inicialização no Linux, no WSL e no Windows nativo. Se preferir não usar a expansão limitada, especifique as profundidades explicitamente com padrões como *.env, */*.env e */*/*.env.
Adicione raízes reutilizáveis do espaço de trabalho ao perfil quando as mesmas regras precisarem ser aplicadas além da raiz da sessão atual:
[permissions.project-edit.workspace_roots]
"~/code/app" = true
"~/code/shared-lib" = true
Quando esse perfil está ativo, o Codex aplica as regras de :workspace_roots às raízes do espaço de trabalho fornecidas pelo ambiente de execução da sessão atual e a cada raiz habilitada definida pelo perfil.
No Windows nativo, caminhos com letra de unidade, como D:\work, e caminhos UNC, como \\server\share, são aceitos como caminhos absolutos.
Permissões de rede
O acesso à rede e a filtragem de rede são configurações independentes. Defina permissions.<name>.network.enabled = true para permitir que os comandos acessem a rede e habilite features.network_proxy para aplicar as regras de domínio do perfil:
[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
O comportamento depende das duas configurações:
- Rede desativada: os comandos não podem acessar a rede, independentemente da configuração do proxy.
- Rede ativada, proxy desativado: os comandos têm acesso direto e irrestrito à rede. As regras de domínio do perfil de permissões não são aplicadas.
- Rede e proxy ativados: os comandos usam o proxy, que aplica as regras de domínio do perfil. Se não houver domínios permitidos, o proxy ativo bloqueará os destinos externos.
Adicionar [permissions.<name>.network.domains] ou definir permissions.<name>.network.enabled = true não habilita features.network_proxy. Como alternativa, os administradores podem habilitar o proxy com [experimental_network] em requirements.toml. Consulte Configuração gerenciada.
Quando ativo, o proxy de rede do sandbox escuta em endereços locais por padrão:
[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
Mantenha as configurações de escuta nos valores padrão, a menos que esteja fazendo uma integração com um ambiente de execução específico. As chaves de rede dangerously_* permitem contornar restrições em ambientes especializados e não devem ser usadas no desenvolvimento local comum.
Redes locais e privadas
Quando o proxy de rede está ativo, o Codex protege as redes locais e privadas por padrão contra ataques de DNS rebinding e acesso acidental a serviços locais. Para permitir intencionalmente um destino local especificado de forma literal, inclua o nome exato do host ou o endereço IP literal na lista de permissões:
[permissions.project-edit.network.domains]
"localhost" = "allow"
"127.0.0.1" = "allow"
Defina allow_local_binding = true somente quando o perfil precisar acessar nomes de host que estejam na lista de permissões e que resolvam para endereços locais ou privados:
[permissions.project-edit.network]
enabled = true
allow_local_binding = true
[permissions.project-edit.network.domains]
"localhost" = "allow"
Sockets Unix
O encaminhamento de sockets Unix pelo proxy permite abrir uma exceção local para ferramentas como o Docker. Use esse recurso com moderação:
[permissions.project-edit.network.unix_sockets]
"/var/run/docker.sock" = "allow"
"/tmp/old.sock" = "deny"
Use deny para bloquear um caminho de socket, mesmo que uma entrada herdada permita o acesso. Os caminhos de socket bloqueados ficam fora da lista efetiva de permissões.
Quando os sockets Unix estiverem habilitados, mantenha o proxy escutando apenas em endereços de loopback.
Migrar das configurações antigas do sandbox
Os perfis de permissões substituem a combinação antiga de sandbox_mode e sandbox_workspace_write quando você quer definir o comportamento do sistema de arquivos e da rede em um único perfil reutilizável. Use apenas um dos dois sistemas por sessão.
Sugestões para começar:
- Para um fluxo de trabalho somente leitura, use o perfil predefinido
:read-onlyou defina um perfil personalizado que permita leitura somente onde for necessário. - Para editar arquivos no espaço de trabalho, use o perfil predefinido
:workspaceou defina um perfil personalizado que permita gravação por meio de:workspace_roots. Adicione apenas os caminhos temporários ou de cache adicionais que o fluxo de trabalho exigir. - Para executar comandos locais sem restrições, use
:danger-full-accesssomente quando quiser conceder o nível mais amplo de acesso local.
Os perfis definem as permissões locais padrão de uma sessão. Os requisitos gerenciados pela organização ainda podem impor restrições, e a configuração do usuário não deve ampliar o acesso além desses limites. Consulte Configuração gerenciada para conhecer as restrições de sistema de arquivos e de rede impostas pelo administrador.
Escopo e aplicação das regras
Acesso ao computador local com o Work na nuvem e política de ambiente
Verifique a política de cada ambiente em que o Work na nuvem usa o acesso ao computador local:
- Requisitos corporativos: Para o modo Work com acesso local e para os dots, as regras compatíveis da política Global regem o orquestrador compartilhado na nuvem quando a política gerenciada está habilitada. Os requisitos de execução local aplicáveis regem o computador conectado.
- Execução na nuvem: Os contêineres do Work na nuvem usam as políticas existentes do Work na nuvem.
- Ordem das políticas locais: Os requisitos de MDM e os requisitos legados de dispositivos gerenciados têm prioridade sobre a segurança de agentes. O arquivo de requisitos do sistema do dispositivo tem prioridade inferior à da segurança de agentes.
- Prioridade das políticas: A política de maior prioridade prevalece mesmo quando uma de menor prioridade é mais específica. Dentro de uma mesma política, as substituições de ambiente específicas de um sistema operacional têm prioridade sobre as que se aplicam a todos os sistemas operacionais. A política Global vem em seguida.
Alguns requisitos têm regras de mesclagem específicas por campo. Consulte Configuração gerenciada e a Referência de configuração para conhecer os campos compatíveis e os limites do ambiente de execução. Não presuma que o Work na nuvem oferece suporte aos perfis de permissões do Codex apresentados aqui.
Os perfis de permissões definem os limites da execução de comandos locais no sandbox. Use-os em conjunto com as políticas de aprovação e os controles separados da pesquisa na Web, dos conectores, dos servidores MCP, do navegador integrado, do Uso do computador e do Codex Cloud.
O que os perfis controlam
- Execução de comandos locais: Os perfis de permissões regem os comandos executados no sandbox do seu computador. Conectores, servidores MCP, recursos de navegador ou de uso do computador, configurações de ambiente do Codex Cloud e elevações de privilégios aprovadas têm controles próprios.
- Gravações no sistema de arquivos: Um perfil com permissão de gravação pode fazer alterações persistentes. Trate como sensíveis as gravações em scripts, etapas de build, hooks de gerenciadores de pacotes, arquivos de inicialização do shell e diretórios compartilhados. Outras ferramentas ou usuários poderão executar esses arquivos fora do contexto original do sandbox.
- Destinos do tráfego de saída: As regras de domínio de rede restringem os destinos do tráfego gerado pelos comandos no sandbox somente enquanto o proxy de rede está ativo. Elas não determinam se um destino permitido é confiável. Regras de permissão com curingas continuam tendo alcance amplo.
- Serviços locais: Um proxy de rede ativo bloqueia por padrão os destinos em redes locais e privadas. Incluir
localhost, IPs privados ou sockets Unix na lista de permissões, ou definirallow_local_binding = true, abre explicitamente o acesso a serviços locais.
O que o proxy de rede não controla
O proxy de rede filtra apenas o tráfego de comandos locais executados dentro do sandbox. Ele não aplica a lista de domínios permitidos do perfil aos seguintes recursos:
- Pesquisa na Web: A ferramenta de pesquisa hospedada usa configurações de acesso próprias. Para controlá-la, use
web_searche, em clientes gerenciados,allowed_web_search_modes. A configuraçãotools.web_search.allowed_domainsfiltra os resultados da pesquisa e não interfere no acesso dos comandos à rede. - Apps e conectores: As ferramentas que usam conectores têm conexões próprias no lado do serviço, permissões do espaço de trabalho e configurações do aplicativo ou da ferramenta.
- Servidores MCP: Os servidores MCP locais e remotos usam seus próprios processos ou meios de transporte. Controle-os com a configuração
mcp_serverse as listas gerenciadas de servidores permitidos. - Navegador e Uso do computador: A navegação e as ações de uso do computador têm controles próprios de recursos e aprovação.
- Tráfego de serviço do Codex: Solicitações a modelos, solicitações de autenticação e outras solicitações de serviço do cliente usam configurações separadas do cliente para HTTP e para o proxy do sistema.
- Codex Cloud: Essas tarefas usam as configurações de rede do próprio ambiente. O Codex Cloud (legado) tem configurações de acesso à internet separadas.
Para limitar esses recursos, configure cada um diretamente. A lista de destinos de rede permitidos para comandos não funciona como política de rede global para todas as ações que o Codex pode executar.
Como as restrições são aplicadas
- No macOS, o Codex usa perfis de sandbox do Seatbelt. Se o sandbox da plataforma não conseguir aplicar a política selecionada, o Codex se recusará a executar o comando, em vez de executá-lo silenciosamente fora do sandbox.
- No Linux e no WSL, o Codex usa bubblewrap e seccomp para aplicar as restrições do sistema de arquivos. A opção legada Landlock não consegue isolar os sockets Unix do App Server. Por isso, o Codex rejeita essa opção em políticas que restringem o sistema de arquivos. Desative
features.use_legacy_landlockao atualizar. Hosts que bloqueiam as operações necessárias do bubblewrap não conseguem executar comandos sob essas políticas. - No Windows, o MXC usa isolamento de processos para aplicar as permissões do sistema de arquivos e da rede. Consulte Compatibilidade do MXC antes de habilitá-lo. A alternativa legada
elevatedusa contas de usuário dedicadas ao sandbox com privilégios reduzidos, limites de permissão no sistema de arquivos e regras de firewall. A alternativa legadaunelevatedoferece isolamento de rede mais fraco e não consegue aplicar todas as exceções que distinguem leitura de gravação. Por isso, o Codex rejeita as políticas incompatíveis. Use o WSL quando precisar do modelo de sandbox do Linux.
Orientações de uso
Escolha o perfil mais restritivo que ainda permita concluir a tarefa, especialmente ao conceder acesso de gravação ou acesso de saída à rede. Mantenha a política de aprovação, o tratamento de segredos e as regras de permissão alinhados a esse nível de acesso.
Perfis comuns
Somente leitura com lista de domínios permitidos
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"
Acesso a arquivos limitado ao espaço de trabalho
O perfil de permissões a seguir permite que o Codex grave nas pastas do espaço de trabalho e bloqueia a leitura no restante do sistema de arquivos, com as poucas exceções determinadas por :minimal.
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"
Gravação no espaço de trabalho sem acesso à rede
default_permissions = "project-edit"
[permissions.project-edit.filesystem]
":minimal" = "read"
[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"
[permissions.project-edit.network]
enabled = false
Gravação no espaço de trabalho com acesso à Web pública
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"
Use a regra global de permissão "*" somente quando quiser permitir o acesso à rede pública. Regras de bloqueio podem restringir o alcance de uma lista de permissões ampla.