Przejdź do głównej zawartości

Uprawnienia i bezpieczeństwo w Claude Code

To najważniejsza lekcja w tej sekcji. Wszystko inne da się nadrobić, ale źle ustawione uprawnienia kosztują dane.

Przełączasz je przez Shift+Tab, flagę --permission-mode albo defaultMode w settings.

  • default (etykieta Manual) - pyta przed edycją i komendami, odczyt bez pytania.
  • acceptEdits - automatycznie akceptuje edycje plików i bezpieczne operacje na plikach w katalogu roboczym.
  • plan - tylko odczyt. Claude bada i przedstawia plan, nic nie zmienia (komendy eksploracji nadal mogą pytać).
  • auto - klasyfikator w tle decyduje o większości promptów. Pro, Max i Team startują domyślnie właśnie tu.
  • dontAsk - nigdy nie pyta. Działają tylko preaprobowane narzędzia, reszta jest odrzucana.
  • bypassPermissions - pomija prompty, to samo co --dangerously-skip-permissions.

Kolejność ewaluacji: deny → ask → allow, pierwsze trafienie wygrywa. Specyficzność nie zmienia kolejności, a deny wygrywa zawsze.

{
"permissions": {
"allow": ["Bash(git diff:*)", "Read(./src/**)", "Bash(npm test:*)"],
"ask": ["Bash(git push:*)"],
"deny": ["Read(./.env)", "Read(./.env.*)", "Bash(rm -rf:*)", "Edit(*.env)"],
"additionalDirectories": ["../shared-lib"],
"defaultMode": "acceptEdits"
}
}

Składnia reguł to Tool(specifier). Bash używa wildcardów - spacja plus * to granica słowa, a złożone komendy wymagają dopasowania każdej podkomendy. Read i Edit przyjmują ścieżki w stylu gitignore. Pobieranie z sieci: WebFetch(domain:example.com). MCP: mcp__server__tool.

Od najwyższej: managed (enterprise) → CLI (--settings) → local (.claude/settings.local.json) → project (.claude/settings.json) → user (~/.claude/settings.json).

Managed na macOS leży w /Library/Application Support/ClaudeCode/managed-settings.json. Interaktywnie zarządzasz tym przez /permissions.

NOWE v2.1.246: zakładka Auto mode w /permissions. Listuje wszystkie reguły allow, soft_deny i hard_deny, których używa klasyfikator trybu auto. Dodajesz i zmieniasz je tam, zamiast ręcznie edytować JSON. To pierwszy moment, w którym tryb auto przestaje być czarną skrzynką - przejrzyj go, zanim zaczniesz w nim pracować na serio.

Prompt injection. Serwery MCP i treści z sieci mogą zawierać wrogie instrukcje. Claude Code skanuje wyjścia subagentów i chroni przed wstrzyknięciami, ale to nie zastępuje ograniczania narzędzi. Trzymaj deny na .env i sekretach.

Sandboxing i izolacja sieci. /sandbox na wspieranych platformach, sandbox na macOS, WSL2 dla sandboxingu na Windows, kontenery dla trybu bypass. Administratorzy mogą wyłączyć bypass przez disableBypassPermissionsMode.

Ścieżki chronione (.git, .claude, .vscode, .idea, .husky i podobne) oraz rm i rmdir na krytycznych ścieżkach nie są automatycznie akceptowane w żadnym trybie poza bypass.

  1. Dodaj do projektowego settings.json regułę deny na .env.
  2. Dodaj regułę allow na Bash(git diff:*).
  3. Uruchom /permissions i sprawdź, z którego pliku pochodzą reguły.

Zaliczenie: widzisz obie reguły w /permissions razem ze źródłem. Jeśli któraś przyszła z innego pliku, niż myślałeś, właśnie zrozumiałeś precedencję.

Jeśli nic nie zgrzyta i zostaje czas: poproś Claude o odczytanie .env i sprawdź, że odmawia. To najtańszy test, czy Twoja konfiguracja faktycznie działa.

  • Sześć trybów, a plan jest tym, od którego warto zaczynać w nieznanym kodzie.
  • deny wygrywa zawsze - to jedyna reguła, na której możesz polegać bezwarunkowo.
  • Bypass ma sens tylko tam, gdzie zniszczenie maszyny nic nie kosztuje.

Następny krok: Subagenci - osobne okno kontekstu na osobne zadanie, z własnym zestawem narzędzi i uprawnień.

Częste pytania

W jakiej kolejności sprawdzane są reguły uprawnień?

Najpierw deny, potem ask, na końcu allow. Pierwsze trafienie wygrywa, a specyficzność reguły nie zmienia tej kolejności. Deny wygrywa zawsze.

Kiedy nie wolno używać flagi pomijającej pytania o zgodę?

Nigdy na maszynie z produkcyjnymi poświadczeniami, nigdy w nieznanym repozytorium i nigdy wtedy, gdy chcesz recenzować zmiany. Tylko w izolowanych środowiskach: kontenerze, maszynie wirtualnej albo efemerycznym CI.

Który plik settings.json ma pierwszeństwo?

Od najwyższego: managed dla organizacji, potem wskazany flagą settings, potem lokalny plik projektu, potem plik projektu w repozytorium, na końcu plik użytkownika.

made with ❤️ by aitomate.pl - Łukasz Podgórski