Indice
Bubble wrap
Autore: Fabio Di Matteo
Ultima revisione: 03/10/2026 17:46
Bubblewrap (`bwrap`) è uno strumento Linux per eseguire programmi in una sandbox, isolandoli parzialmente dal sistema tramite namespace. È usato, ad esempio, da Flatpak e altri programmi per limitare l’accesso a file, processi, rete e risorse del sistema. Alcune note sull'utilizzo. Avvio una sandbox alpine in questo caso.
Assumendo che in $ROOTFS ci sia un intero sistema chrootatto. Come per esempio un' Alpine Linux. Esempio:
./run.sh firefox
con questo script:
# #!/usr/bin/env bash ROOTFS="$PWD/ctr" bwrap \ --die-with-parent \ --bind "$ROOTFS" / \ --unshare-user \ --uid 1000 \ --dev /dev \ --proc /proc \ --tmpfs /tmp \ --ro-bind /tmp/.X11-unix /tmp/.X11-unix \ --bind /dev/snd /dev/snd \ --bind /run/user/1000 /run/user/1000 \ --ro-bind /etc/resolv.conf /etc/resolv.conf \ --setenv HOME /home/user $1
Tenere presente che il primo Bind deve essere quello della root (/) e a seguire gli altri. Altrimenti il bind della root sovrascrive tutti gli altri
Creare un lanciatore per un'applicazione installata
#!/usr/bin/env xdg-open [Desktop Entry] Version=1.0 Type=Application Terminal=true Name[it_IT]=Alpine sandbox Path=/home/fabio/alpine/ Exec=/home/fabio/alpine/shell.sh Comment[it_IT]=Una sandbox alpine con bubble wrap Icon=yakuake Icon[it_IT]=yakuake Name=Alpine sandbox Comment=Una sandbox alpine con bubble wrap
Avvio lo script shell.sh e imposto la cartella corrente con la direttiva Path=…
Abilitare audio
Installare client per l'audio dentro la sandbox:
apk add pulseaudio-utils pipewire-pulse alsa-utils
Mountare 1:1 la cartella /run/user/1000 e /dev/snd con
--bind /dev/snd /dev/snd --bind /run/user/1000 /run/user/1000
Abilitare/disabilitare capacità del container
Esempio di utilizzo:
Per disabilitare una capability si usa invece:
--cap-drop CAP_NET_RAW
Per disabilitarle tutte:
--cap-drop ALL
Per abilitarne una soltanto partendo da zero:
bwrap --cap-drop ALL --cap-add CAP_NET_BIND_SERVICE ...
| Capability | Funzione principale | Esempio con bwrap |
|---|---|---|
CAP_AUDIT_CONTROL | Configurare il sottosistema Linux Audit | --cap-add CAP_AUDIT_CONTROL |
CAP_AUDIT_READ | Leggere gli eventi di audit | --cap-add CAP_AUDIT_READ |
CAP_AUDIT_WRITE | Scrivere eventi nel log di audit | --cap-add CAP_AUDIT_WRITE |
CAP_BLOCK_SUSPEND | Impedire o ritardare la sospensione | --cap-add CAP_BLOCK_SUSPEND |
CAP_BPF | Eseguire operazioni BPF privilegiate | --cap-add CAP_BPF |
CAP_CHECKPOINT_RESTORE | Supportare checkpoint e restore dei processi | --cap-add CAP_CHECKPOINT_RESTORE |
CAP_CHOWN | Cambiare arbitrariamente proprietario e gruppo dei file | --cap-add CAP_CHOWN |
CAP_DAC_OVERRIDE | Ignorare i normali controlli di permesso sui file | --cap-add CAP_DAC_OVERRIDE |
CAP_DAC_READ_SEARCH | Ignorare i controlli di lettura e attraversamento directory | --cap-add CAP_DAC_READ_SEARCH |
CAP_FOWNER | Ignorare alcuni controlli riservati al proprietario | --cap-add CAP_FOWNER |
CAP_FSETID | Preservare i bit setuid e setgid dei file | --cap-add CAP_FSETID |
CAP_IPC_LOCK | Bloccare pagine di memoria e usare IPC privilegiato | --cap-add CAP_IPC_LOCK |
CAP_IPC_OWNER | Ignorare i permessi sulle operazioni System V IPC | --cap-add CAP_IPC_OWNER |
CAP_KILL | Inviare segnali a processi senza esserne proprietario | --cap-add CAP_KILL |
CAP_LEASE | Creare lease sui file | --cap-add CAP_LEASE |
CAP_LINUX_IMMUTABLE | Modificare attributi immutabili e append-only | --cap-add CAP_LINUX_IMMUTABLE |
CAP_MAC_ADMIN | Amministrare sistemi Mandatory Access Control | --cap-add CAP_MAC_ADMIN |
CAP_MAC_OVERRIDE | Ignorare i controlli Mandatory Access Control | --cap-add CAP_MAC_OVERRIDE |
CAP_MKNOD | Creare file speciali con mknod | --cap-add CAP_MKNOD |
CAP_NET_ADMIN | Configurare rete, interfacce, routing e firewall | --cap-add CAP_NET_ADMIN |
CAP_NET_BIND_SERVICE | Usare porte inferiori alla 1024 | --cap-add CAP_NET_BIND_SERVICE |
CAP_NET_BROADCAST | Inviare pacchetti broadcast e multicast | --cap-add CAP_NET_BROADCAST |
CAP_NET_RAW | Usare socket RAW e packet socket | --cap-add CAP_NET_RAW |
CAP_PERFMON | Usare il performance monitoring privilegiato | --cap-add CAP_PERFMON |
CAP_SETFCAP | Assegnare capabilities ai file | --cap-add CAP_SETFCAP |
CAP_SETGID | Modificare il GID e i gruppi supplementari | --cap-add CAP_SETGID |
CAP_SETPCAP | Modificare alcuni capability set dei processi | --cap-add CAP_SETPCAP |
CAP_SETUID | Modificare l’UID e l’identità del processo | --cap-add CAP_SETUID |
CAP_SYS_ADMIN | Eseguire numerose operazioni amministrative, inclusi mount e namespace | --cap-add CAP_SYS_ADMIN |
CAP_SYS_BOOT | Eseguire operazioni di reboot e boot | --cap-add CAP_SYS_BOOT |
CAP_SYS_CHROOT | Usare chroot | --cap-add CAP_SYS_CHROOT |
CAP_SYS_MODULE | Caricare e rimuovere moduli del kernel | --cap-add CAP_SYS_MODULE |
CAP_SYS_NICE | Modificare priorità, scheduling e CPU affinity | --cap-add CAP_SYS_NICE |
CAP_SYS_PACCT | Abilitare o disabilitare il process accounting | --cap-add CAP_SYS_PACCT |
CAP_SYS_PTRACE | Eseguire tracing e debugging dei processi | --cap-add CAP_SYS_PTRACE |
CAP_SYS_RAWIO | Eseguire operazioni di I/O hardware raw | --cap-add CAP_SYS_RAWIO |
CAP_SYS_RESOURCE | Superare alcuni limiti delle risorse di sistema | --cap-add CAP_SYS_RESOURCE |
CAP_SYS_TIME | Modificare l’orologio di sistema | --cap-add CAP_SYS_TIME |
CAP_SYS_TTY_CONFIG | Configurare terminali virtuali | --cap-add CAP_SYS_TTY_CONFIG |
CAP_SYSLOG | Eseguire operazioni privilegiate su syslog | --cap-add CAP_SYSLOG |
CAP_WAKE_ALARM | Usare timer capaci di risvegliare il sistema | --cap-add CAP_WAKE_ALARM |
