# Rohsocket-Berechtigungen fuer Nmap

Nmap benoetigt fuer SYN- (`-sS`), UDP- (`-sU`) und ICMP-Scans Rohsockets. Ohne
diese Rechte faellt Nmap auf `-sT` (TCP connect) zurueck bzw. bricht ab.

**Grundsatz: Apache bzw. `www-data` erhaelt keinerlei Sonderrechte.** Der
Webprozess startet niemals einen Scan.

## Variante 1 (empfohlen): Capability am systemd-Dienst

Der Worker laeuft als Benutzer `barox` und erhaelt die Faehigkeit ueber
`AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN` (siehe
`barox-secpen-worker.service`). Das ist die sauberste Variante: die Faehigkeit
gilt nur fuer diesen Dienst, nicht systemweit.

## Variante 2: Capability an einer eigenen Nmap-Kopie

Wenn die systemweite Nmap-Installation unveraendert bleiben soll:

```bash
install -m 0750 -o root -g barox /usr/bin/nmap /usr/local/bin/nmap-barox
setcap cap_net_raw,cap_net_admin,cap_net_bind_service=+eip /usr/local/bin/nmap-barox
getcap /usr/local/bin/nmap-barox
```

Danach in der `.env`:

```
NMAP_WRAPPER=/usr/local/bin/nmap-barox
```

Der Pfad muss in `config/scanner.binary_allowed_dirs` enthalten sein
(`/usr/local/bin` ist es standardmaessig). Die Anwendung loest den Pfad ueber
`realpath()` auf und prueft Verzeichnis und Ausfuehrbarkeit, bevor sie startet.

## Ausdruecklich nicht verwenden

- `sudo`-Regeln fuer `www-data` (auch keine eingeschraenkten)
- `setuid root` auf der Nmap-Binary
- Betrieb des Workers als `root`

## Pruefung

```bash
sudo -u barox php /var/www/html/barox-secpen/artisan barox:preflight
```

Der Befehl meldet, ob die Binary gefunden wurde, ob sie ausfuehrbar ist und ob
Capabilities gesetzt sind.
