Bezpieczeństwo Claude Code: Jak kontrolować uprawnienia AI

Agent AI z pełnym dostępem do Twojego repozytorium — brzmi jak przepis na katastrofę. Ale Claude Code od Anthropic ma system uprawnień, który daje Ci pełną kontrolę nad tym, co AI może robić. Żadna edycja pliku, żadna komenda nie wykona się bez Twojej świadomej zgody.

W tym artykule pokażę jak skonfigurować uprawnienia, by Claude Code był jednocześnie pomocny i bezpieczny.

  1. System uprawnień Claude Code
  2. Tryby uprawnień: od ostrożnego do autonomicznego
  3. Składnia reguł: allow, ask, deny
  4. Reguły dla komend Bash
  5. Reguły dla plików
  6. Praktyczna konfiguracja

System uprawnień Claude Code

Claude Code używa warstwowego systemu uprawnień, który balansuje między produktywnością a bezpieczeństwem.

Typy narzędzi i wymagane zgody
Typ narzędziaPrzykładWymaga zgodyZapamiętanie zgody
Tylko odczytCzytanie plików, GrepNieN/A
Komendy BashUruchamianie skryptówTakNa stałe per projekt i komenda
Modyfikacja plikówEdycja, zapisTakDo końca sesji

Zasada jest prosta: odczyt jest wolny, każda zmiana wymaga zgody. Gdy raz zatwierdzisz komendę npm test w danym projekcie, Claude Code już nie będzie pytał. Ale edycja plików wymaga zgody w każdej nowej sesji.

Możesz sprawdzić i zarządzać uprawnieniami komendą /permissions. Wyświetla wszystkie reguły i ich źródła.

Tryby uprawnień: od ostrożnego do autonomicznego

Claude Code wspiera kilka trybów określających poziom autonomii agenta.

Tryby uprawnień w Claude Code
TrybZachowanieUżycie
defaultPyta przy pierwszym użyciu narzędziaStandardowa praca
acceptEditsAuto-akceptuje edycje plików w sesjiSzybkie kodowanie
planTylko analiza, bez zmian i komendBezpieczny przegląd kodu
dontAskAuto-odmawia, chyba że pre-approvedRestrykcyjne środowisko
bypassPermissionsPomija wszystkie pytania o zgodęTylko izolowane kontenery!

Plan Mode jest szczególnie przydatny, gdy chcesz by Claude przeanalizował kod bez ryzyka wprowadzenia zmian. Agent może czytać pliki i odpowiadać na pytania, ale nie wykona żadnej komendy ani edycji.

Ostrzeżenie: Tryb bypassPermissions wyłącza wszystkie kontrole bezpieczeństwa. Używaj go wyłącznie w izolowanych środowiskach — kontenerach Docker lub maszynach wirtualnych. Administratorzy mogą zablokować ten tryb w ustawieniach zarządzanych.

Składnia reguł: allow, ask, deny

Reguły uprawnień dzielą się na trzy kategorie:

  • Allow — Claude Code używa narzędzia bez pytania
  • Ask — zawsze pyta przed użyciem
  • Deny — blokuje użycie narzędzia

Kolejność ewaluacji: deny → ask → allow. Reguły deny zawsze wygrywają.

Reguły definiujesz w pliku settings.json:

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}

W tym przykładzie Claude może uruchamiać npm run test, git commit -m "fix", ale nie może wykonać git push.

Reguły dla komend Bash

Reguły Bash wspierają wzorce z gwiazdką *. Pozycja gwiazdki ma znaczenie:

  • Bash(npm run build) — dokładnie ta komenda
  • Bash(npm run *) — komendy zaczynające się od npm run
  • Bash(* --version) — komendy kończące się na --version
  • Bash(git * main) — np. git checkout main, git merge main

Spacja przed gwiazdką wymusza granicę słowa. Bash(ls *) pasuje do ls -la, ale nie do lsof. Natomiast Bash(ls*) bez spacji pasuje do obu.

Bezpieczeństwo operatorów shell: Claude Code rozpoznaje operatory jak &&. Reguła Bash(safe-cmd *) nie pozwoli na wykonanie safe-cmd && dangerous-cmd — to by wymagało osobnej zgody.

Ograniczenia wzorców

Wzorce ograniczające argumenty są podatne na obejście. Na przykład Bash(curl http://github.com/ *) nie złapie:

  • Opcji przed URL: curl -X GET http://github.com/...
  • Innego protokołu: curl https://github.com/...
  • Przekierowań: curl -L http://bit.ly/xyz

Dla bardziej niezawodnej kontroli URL-i użyj reguł WebFetch(domain:example.com) zamiast ograniczania curl.

Reguły dla plików

Reguły Read i Edit używają składni zgodnej ze specyfikacją gitignore.

Wzorce ścieżek w regułach plików
WzorzecZnaczeniePrzykład
//pathŚcieżka absolutna od rootaRead(//Users/jan/secrets/**)
~/pathŚcieżka od katalogu homeRead(~/Documents/*.pdf)
/pathWzględem roota projektuEdit(/src/**/*.ts)
path lub ./pathWzględem bieżącego kataloguRead(*.env)

Ważne: * dopasowuje pliki w jednym katalogu, ** dopasowuje rekurencyjnie przez wszystkie podkatalogi.

Przykłady:

  • Edit(/docs/**) — edycje w <projekt>/docs/
  • Read(~/.zshrc) — odczyt pliku konfiguracyjnego z home
  • Edit(//tmp/scratch.txt) — edycja konkretnego pliku systemowego

Praktyczna konfiguracja

Oto rekomendowane ustawienia dla typowych scenariuszy.

Dla zespołu developerskiego

{
  "defaultMode": "default",
  "permissions": {
    "allow": [
      "Bash(npm *)",
      "Bash(pnpm *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push --force *)",
      "Bash(git reset --hard *)"
    ]
  }
}

Dla przeglądu kodu (Plan Mode)

{
  "defaultMode": "plan"
}

Claude analizuje kod, odpowiada na pytania, ale nic nie zmienia.

Dla CI/CD

{
  "defaultMode": "dontAsk",
  "permissions": {
    "allow": [
      "Read",
      "Bash(npm run lint)",
      "Bash(npm run test)"
    ]
  }
}

Tylko jawnie dozwolone operacje, reszta automatycznie odrzucana.

Checklista bezpieczeństwa:

  • ✅ Reguły deny mają pierwszeństwo — użyj ich dla niebezpiecznych komend
  • ✅ Plan Mode do bezpiecznego przeglądu kodu
  • ✅ Wzorce Bash z ostrożnością — sprawdź edge cases
  • ✅ /permissions do audytu aktualnych reguł
  • ✅ Ustawienia zarządzane do wymuszania standardów w zespole

Więcej o instalacji i pierwszych krokach znajdziesz w kompletnym poradniku konfiguracji Claude Code. A jeśli chcesz dowiedzieć się jak Claude Code chroni przed prompt injection, przeczytaj artykuł o bezpieczeństwie i prywatności danych w ChatGPT.

Bezpieczne wdrożenie agentów AI
Bezpieczeństwo Claude Code: Jak kontrolować uprawnienia AI