# Sprawdź użytkownika kontenera
docker exec secure-webapp whoami
→ appuser
# Test read-only filesystem
docker exec secure-webapp sh -c "touch /pwned.txt 2>&1"
→ touch: /pwned.txt: Read-only file system
# Sprawdź capabilities
docker exec secure-webapp sh -c "cat /proc/1/status | grep Cap"
→ CapEff: 0000000000000000
# Nagłówki HTTP (dev)
curl -I http://localhost:8080
# Uruchom klaster
minikube start
# Wdróż wszystkie manifesty
kubectl apply -f k8s/
# Sprawdź status podów
kubectl get pods -n webapp-prod
# Test Network Policy (powinno się nie udać)
kubectl run attacker --image=alpine -n default -it --rm -- sh
wget -q --timeout=5 http://webapp-service.webapp-prod/
→ timeout (Network Policy blokuje)
# Port-forward do testów
kubectl port-forward svc/webapp-service 8080:80 -n webapp-prod
# Instalacja (WSL2)
pip3 install ansible
ansible-galaxy collection install ansible.posix community.docker kubernetes.core
# Wdróż aplikację
ansible-playbook -i ansible/inventory/hosts.ini \
ansible/playbooks/03-deploy-app.yml
# Hartowanie hosta (wymaga sudo)
ansible-playbook -i ansible/inventory/hosts.ini \
ansible/playbooks/01-host-hardening.yml -K
# Pełny audyt bezpieczeństwa
ansible-playbook -i ansible/inventory/hosts.ini \
ansible/playbooks/05-security-audit.yml
# Skanowanie CVE w obrazie
trivy image docker-webapp:latest --severity HIGH,CRITICAL
# Skanowanie aplikacji webowej
nikto -h http://localhost:8080
# Audyt konfiguracji Docker
sudo sh docker-bench-security/docker-bench-security.sh
# Skanowanie portów
nmap -sV -p 8080 localhost
# OWASP ZAP (pasywny scan)
docker run -t ghcr.io/zaproxy/zaproxy:stable \
zap-baseline.py -t http://host.docker.internal:8080
# Status stacku produkcyjnego
docker compose -f docker/docker-compose.prod.yml ps
# Nagłówki HTTPS — powinien zwrócić HTTP/2 200
curl -I https://secure-box.szymonsulejczak.pl
→ HTTP/2 200
→ strict-transport-security: max-age=31536000
# Weryfikacja certyfikatu TLS
echo | openssl s_client -connect secure-box.szymonsulejczak.pl:443 2>/dev/null \
| openssl x509 -noout -dates -issuer
→ issuer=C=US, O=Let's Encrypt
# Przekierowanie HTTP → HTTPS (powinno zwrócić 301)
curl -I http://secure-box.szymonsulejczak.pl
→ HTTP/1.1 301 Moved Permanently
→ Location: https://secure-box.szymonsulejczak.pl/
# Logi Traefik (certyfikat Let's Encrypt)
docker logs traefik --tail=50
# Aktualizacja obrazu do najnowszej wersji
docker compose -f docker/docker-compose.prod.yml pull
docker compose -f docker/docker-compose.prod.yml up -d