bwrap - utilitaire de configuration de conteneur
bwrap [OPTION...] [COMMAND]
bwrap est une aide privilégiée pour la configuration des conteneurs. Il est peu probable que vous l'utilisiez directement à partir de la ligne de commande, bien que cela soit possible.
Cela fonctionne en créant un nouvel espace de noms de système de fichiers complètement vide où la racine se trouve sur un tmpfs qui est invisible de l'hôte et qui sera automatiquement nettoyé à la fin du dernier processus. Vous pouvez ensuite utiliser les options de ligne de commande pour construire le système de fichiers racine et l'environnement de processus pour que la commande s'exécute dans l'espace de noms.
Par défaut, bwrap crée un nouvel espace de noms de montage pour le bac à sable. En option, il configure également de nouveaux espaces de noms utilisateur, ipc, pid, réseau et uts (mais notez que l'espace de noms utilisateur est requis si bwrap n'est pas installé setuid root). L'application dans le bac à sable peut être configurée pour s'exécuter avec un UID et un GID différents.
Si nécessaire (par exemple, lors de l'utilisation d'un espace de noms PID), bwrap exécute un processus pid 1 minimal dans le bac à sable responsable de la récolte des zombies. Il détecte également le moment où le processus d'application initial (pid 2) meurt et signale son état de sortie au générateur d'origine. Le processus pid 1 se termine pour nettoyer le bac à sable lorsqu'il ne reste aucun autre processus dans le bac à sable.
Lorsque les options sont utilisées plusieurs fois, la dernière option l'emporte, sauf indication contraire.
Imprimer l'aide et quitter
Version imprimée
Analyse les arguments séparés par des valeurs nulles à partir du descripteur de fichier donné. Cette option peut être utilisée plusieurs fois pour analyser les options de plusieurs sources.
Créer un nouvel espace de noms d'utilisateur
Créez un nouvel espace de noms d'utilisateur si possible, sinon ignorez-le
Créer un nouvel espace de noms ipc
Créer un nouvel espace de noms pid
Créer un nouvel espace de noms réseau
Créer un nouvel espace de noms uts
Créer un nouvel espace de noms cgroup
Créez un nouvel espace de noms de cgroup si possible, sinon ignorez-le
Annuler le partage de tous les espaces de noms possibles. Actuellement équivalent à : --unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try
Conserver l'espace de noms du réseau, en remplaçant un ancien --unshare-all ou --unshare-net
Utilisez un espace de noms d'utilisateur existant au lieu d'en créer un nouveau. L'espace de noms doit remplir les conditions d'autorisation pour setns(), ce qui signifie généralement qu'il doit être un descendant de l'espace de noms d'utilisateur actuellement actif, détenu par le même utilisateur.
Ceci est incompatible avec --unshare-user et ne fonctionne pas dans la version setuid de bubblewrap.
Après avoir configuré le nouvel espace de noms, basculez vers l'espace de noms spécifié. Pour que cela fonctionne, l'espace de noms spécifié doit être un descendant de l'espace de noms d'utilisateur utilisé pour la configuration, donc cela n'est utile qu'en combinaison avec --userns.
Ceci est utile car parfois bubblewrap lui-même crée des espaces de noms d'utilisateurs imbriqués (pour contourner certains problèmes de noyau) et --userns2 peut être utilisé pour les entrer.
Empêchez le processus dans le bac à sable de créer d'autres espaces de noms d'utilisateurs, afin qu'il ne puisse pas réorganiser l'espace de noms du système de fichiers ou effectuer d'autres modifications d'espace de noms plus complexes. Ceci est actuellement implémenté en définissant le sysctl user.max_user_namespaces sur 1, puis en entrant un espace de noms d'utilisateur imbriqué qui ne peut pas augmenter cette limite dans l'espace de noms externe. Cette option nécessite --unshare-user et ne fonctionne pas dans la version setuid de bubblewrap.
Confirmez que le processus dans le bac à sable a été empêché de créer d'autres espaces de noms d'utilisateurs, mais sans prendre aucune mesure particulière pour empêcher cela. Par exemple, cela peut être combiné avec --userns pour vérifier que l'espace de noms d'utilisateur donné a déjà été configuré pour empêcher la création d'autres espaces de noms d'utilisateur.
Utilisez un espace de noms pid existant au lieu d'en créer un. Ceci est souvent utilisé avec --userns, car l'espace de noms pid doit appartenir au même espace de noms d'utilisateur que celui utilisé par bwrap.
Notez que cela peut être combiné avec --unshare-pid, et dans ce cas cela signifie que le bac à sable sera dans son propre espace de noms pid, qui est un enfant du passé en un.
Utiliser un ID utilisateur personnalisé dans le bac à sable (nécessite --unshare-user)
Utiliser un identifiant de groupe personnalisé dans le bac à sable (nécessite --unshare-user)
Utiliser un nom d'hôte personnalisé dans le bac à sable (nécessite --unshare-uts)
Changer de répertoire en DIR
Définir une variable d'environnement
Annuler la définition d'une variable d'environnement
Annulez toutes les variables d'environnement, à l'exception de PWD et de celles qui sont ensuite définies par --setenv
Verrouillez DEST pendant que le bac à sable est en cours d'exécution. Cette option peut être utilisée plusieurs fois pour verrouiller plusieurs fichiers.
Gardez ce descripteur de fichier ouvert pendant que le bac à sable est en cours d'exécution
Ce sont toutes des opérations qui modifient directement le système de fichiers ou montent des éléments dans le système de fichiers. Ceux-ci sont appliqués dans l'ordre où ils sont donnés comme arguments.
Tous les répertoires parents manquants qui sont requis pour créer une destination spécifiée sont automatiquement créés selon les besoins. Leurs autorisations sont normalement définies sur 0755 (rwxr-xr-x). Cependant, si une option --perms est en vigueur et qu'elle définit les autorisations pour le groupe ou autre sur zéro, les répertoires parents nouvellement créés auront également leur autorisation correspondante définie sur zéro. --size modifie la taille du montage créé lorsqu'il précède une action --tmpfs ; --perms et --size peuvent être combinés.
Cette option ne fait rien par elle-même et doit être suivie de l'une des options qu'elle affecte. Il définit les autorisations pour la prochaine opération sur OCTAL. Les opérations ultérieures ne sont pas affectées : par exemple,
--perms 0700 --tmpfs /a --tmpfs /b
Note that --perms and --size can be combined:
--perms 0700 --size 10485760 --tmpfs /s
will apply permissions as well as a maximum size to the created tmpfs.
Cette option ne fait rien par elle-même et doit être suivie de --tmpfs. Il définit la taille en octets pour les prochains tmpfs. Par exemple,
--size 10485760 --tmpfs /tmp
va créer un tmpfs à /tmp de taille 10MiB. Les opérations ultérieures ne sont pas affectées : par exemple,
--size 10485760 --tmpfs /a --tmpfs /b
montera /a avec une taille de 10 Mo, puis reviendra à la taille par défaut pour /b.
Notez que --perms et --size peuvent être combinés :
--size 10485760 --perms 0700 --tmpfs /s
appliquera des permissions ainsi qu'une taille maximale aux tmpfs créés.
Lier monter le chemin de l'hôte SRC sur DEST
Égal à --bind mais ignore le SRC inexistant
Liez le montage du chemin d'accès de l'hôte SRC sur DEST, permettant l'accès au périphérique
Égal à --dev-bind mais ignore le SRC inexistant
Lier monter le chemin de l'hôte SRC en lecture seule sur DEST
Égal à --ro-bind mais ignore le SRC inexistant
Remontez le chemin DEST en lecture seule. Il fonctionne uniquement sur le point de montage spécifié, sans modifier aucun autre point de montage sous le chemin spécifié
Monter procfs sur DEST
Monter de nouveaux devtmpfs sur DEST
Montez de nouveaux tmpfs sur DEST. Si l'option précédente était --perms, elle définit le mode de tmpfs. Sinon, le tmpfs a le mode 0755. Si l'option précédente était --size, elle définit la taille en octets du tmpfs. Sinon, le tmpfs a la taille par défaut.
Monter le nouveau mqueue sur DEST
Créez un répertoire sur DEST. Si le répertoire existe déjà, ses autorisations ne sont pas modifiées, en ignorant --perms (utilisez --chmod si les autorisations d'un répertoire existant doivent être modifiées). Si le répertoire est nouvellement créé et que l'option précédente était --perms, il définit le mode du répertoire. Sinon, les répertoires nouvellement créés ont le mode 0755.
Copiez du descripteur de fichier FD vers DEST. Si l'option précédente était --perms, elle définit le mode du nouveau fichier. Sinon, le fichier a le mode 0666 (notez que ce n'est pas la même chose que --bind-data).
Copiez depuis le descripteur de fichier FD vers un fichier monté en liaison sur DEST. Si l'option précédente était --perms, elle définit le mode du nouveau fichier. Sinon, le fichier a le mode 0600 (notez que ce n'est pas la même chose que --file).
Copiez depuis le descripteur de fichier FD vers un fichier monté en lecture seule sur DEST. Si l'option précédente était --perms, elle définit le mode du nouveau fichier. Sinon, le fichier a le mode 0600 (notez que ce n'est pas la même chose que --file).
Créer un lien symbolique à DEST avec le SRC cible
Définissez les autorisations de PATH, qui doivent déjà exister, sur OCTAL.
Chargez et utilisez les règles seccomp de FD. Les règles doivent être sous la forme d'un programme cBPF compilé, tel que généré par seccomp_export_bpf. Si cette option est donnée plus d'une fois, seule la dernière est utilisée. Utilisez --add-seccomp-fd si plusieurs programmes seccomp sont nécessaires.
Chargez et utilisez les règles seccomp de FD. Les règles doivent être sous la forme d'un programme cBPF compilé, tel que généré par seccomp_export_bpf. Cette option peut être répétée, auquel cas tous les programmes seccomp seront chargés dans l'ordre indiqué (notez que le noyau les évaluera dans l'ordre inverse, donc le dernier programme sur la ligne de commande bwrap est évalué en premier). Tous, sauf peut-être le dernier, doivent permettre l'utilisation du prctl PR_SET_SECCOMP. Cette option ne peut pas être combinée avec --seccomp.
Exec Label du bac à sable. Sur un système SELinux, vous pouvez spécifier le contexte SELinux pour le(s) processus sandbox.
Libellé de fichier pour le contenu temporaire du bac à sable. Sur un système SELinux, vous pouvez spécifier le contexte SELinux pour le contenu du bac à sable.
Bloquez le bac à sable lors de la lecture à partir de FD jusqu'à ce que certaines données soient disponibles.
N'initialisez pas l'espace de noms d'utilisateur mais attendez sur FD jusqu'à ce qu'il soit prêt. Cela permet aux processus externes (comme newuidmap/newgidmap) de configurer l'espace de noms de l'utilisateur avant qu'il ne soit utilisé par le processus sandbox.
Écrivez des informations au format JSON sur le bac à sable dans FD.
Plusieurs documents JSON sont écrits dans FD, un par ligne (format "Lignes JSON"[1]). Chaque ligne est un objet JSON unique. Une fois que bwrap a démarré le processus enfant à l'intérieur du bac à sable, il écrit un objet avec un membre child-pid dans --json-status-fd (cela duplique l'ancien --info-fd). La valeur correspondante est l'ID de processus du processus enfant dans l'espace de noms pid à partir duquel bwrap a été exécuté. S'ils sont disponibles, les ID d'espace de noms sont également inclus dans l'objet avec le pid-enfant ; encore une fois, cela duplique l'ancien --info-fd. Lorsque le processus enfant à l'intérieur du bac à sable se termine, bwrap écrit un objet avec un membre de code de sortie, puis ferme le --json-status-fd. La valeur correspondant à exit-code est le statut de sortie du fils, dans l'encodage habituel du shell (n s'il s'est terminé normalement avec le statut n, ou 128+n s'il a été tué par le signal n). D'autres membres peuvent être ajoutés à ces objets dans les futures versions de bwrap, et d'autres objets JSON peuvent être ajoutés avant ou après les objets actuels, de sorte que les lecteurs doivent ignorer les membres et les objets qu'ils ne comprennent pas.
Créez une nouvelle session de terminal pour le bac à sable (appels setsid()). Cela déconnecte le bac à sable du terminal de contrôle, ce qui signifie que le bac à sable ne peut pas, par exemple, injecter d'entrée dans le terminal.
Remarque : Dans un bac à sable général, si vous n'utilisez pas --new-session, il est recommandé d'utiliser seccomp pour interdire l'ioctl TIOCSTI, sinon l'application peut transmettre l'entrée clavier au terminal.
Garantit que le processus enfant (COMMAND) meurt lorsque le parent bwraps meurt. Tue (SIGKILL) tous les processus de bac à sable bwrap dans l'ordre du parent à l'enfant, y compris le processus COMMAND lorsque le parent bwrap ou bwraps meurt. Voir prctl, PR_SET_PDEATHSIG.
Ne créez pas de processus avec PID=1 dans le sandbox pour récolter les processus enfants.
Ajoutez la capacité spécifiée lors de l'exécution en tant qu'utilisateur privilégié. Il accepte la valeur spéciale ALL pour ajouter tous les plafonds autorisés.
Supprimez la capacité spécifiée lors de l'exécution en tant qu'utilisateur privilégié. Il accepte la valeur spéciale ALL pour supprimer toutes les majuscules. Par défaut, aucune limite n'est laissée dans le processus en bac à sable. Les options --cap-add et --cap-drop sont traitées dans l'ordre dans lequel elles sont spécifiées sur la ligne de commande. Veuillez faire attention à l'ordre dans lequel ils sont spécifiés.
Utilisé comme cwd dans le bac à sable si --chdir n'a pas été explicitement spécifié et le cwd actuel n'est pas présent dans le bac à sable. L'option --setenv peut être utilisée pour remplacer la valeur utilisée ici.
La commande bwrap renvoie l'état de sortie du processus d'application initial (pid 2 dans le bac à sable).
1. Format « lignes JSON » : https://jsonlines.org/