====== 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.
In questo repository ho messo degli script capaci di creare la sandbox (auto-alpine-sandbox) lanciando un singolo comando: [[https://www.freemedialab.org/code/project.php?p=auto-scripts|Auto-script]]
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 |