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.

In questo repository ho messo degli script capaci di creare la sandbox (auto-alpine-sandbox) lanciando un singolo comando: 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