Demande d’autorisation
Ubuntu 26.04 introduit un nouveau système d’invite d’autorisation qui affiche une fenêtre d’invite demandant l’autorisation de l’utilisateur lorsqu’une application tente d’accéder à des ressources sensibles. Ce mécanisme améliore considérablement la sécurité du bureau en donnant aux utilisateurs un contrôle plus précis sur les autorisations de chaque application.
Comment ça marche
Concepts de base
Le système d’invite d’autorisation est construit sur l’interface d’invite d’AppArmor 4.0. Lorsqu’une application confinée (principalement les applications Snap) tente une opération nécessitant des autorisations spécifiques, le système intercepte la demande et affiche une boîte de dialogue permettant à l’utilisateur de décider s’il doit l’autoriser.
Le flux de travail est le suivant :
- Une application tente d’accéder à une ressource protégée (telle que des fichiers, une caméra, un réseau, etc.)
- AppArmor intercepte la demande d’accès
- Le système affiche une boîte de dialogue d’invite d’autorisation
- L’utilisateur choisit “Autoriser” ou “Refuser”
- L’utilisateur peut choisir “Juste cette fois” ou “Toujours autoriser/refuser”.
- Le système mémorise le choix de l’utilisateur et l’applique aux demandes futures
Types de ressources protégées
| Type de ressource | Description | Exemple |
|---|---|---|
| Système de fichiers | Accéder aux fichiers utilisateur | Lecture de fichiers dans ~/Documents |
| Caméra | Utiliser des appareils photo | Applications d’appel vidéo |
| Microphone | Utiliser des appareils d’enregistrement | Applications d’enregistrement vocal |
| Emplacement | Obtenir la localisation géographique | Applications cartographiques |
| Réseau | Accès au réseau | Accès à des ports ou adresses spécifiques |
| Notifications | Envoyer des notifications sur le bureau | Applications de messagerie |
| Démarrage automatique | Exécuter au démarrage | Services d’arrière-plan |
Interface d’invite d’autorisation
Lorsqu’une invite d’autorisation est déclenchée, une boîte de dialogue au niveau du système apparaît contenant les informations suivantes :
- Nom et icône de l’application demandeuse
- Type d’autorisation demandé
- Chemin de ressource spécifique (tel qu’un chemin de fichier)
- Options d’action :
- Autoriser une fois
- Toujours autoriser
- Refuser une fois
- Nier toujours
Options avancées
Pour les autorisations du système de fichiers, les utilisateurs peuvent en outre choisir :
- Autoriser l’accès à un fichier spécifique
- Autoriser l’accès à un répertoire entier
- Autoriser l’accès en lecture seule
- Autoriser l’accès en lecture-écriture
Gestion des autorisations
Via Security Center
Ouvrez la section « Autorisations de l’application » de Security Center pour :
- Afficher toutes les autorisations accordées
- Modifier ou révoquer les autorisations
- Parcourez par application ou par type d’autorisation
Via la ligne de commande
# View snap app connections (permissions)
snap connections firefox
# View all snap connections
snap connections --all
# Manually grant a connection
sudo snap connect firefox:camera
# Disconnect (revoke permission)
sudo snap disconnect firefox:camera
# View available interfaces
snap interface cameraAffichage des règles d’autorisation
Les règles d’invite d’autorisation sont gérées par snapd (et non par des fichiers écrits à la main). Vous pouvez les visualiser et les gérer via le graphique “Security Center”, ou les interroger via l’API d’invite d’snapd.
# Query the current prompting rules via the snapd REST API
sudo snap interface snap-interfaces-requests-control
# Call the Prompting API over the local socket to list rules
sudo curl -s --unix-socket /run/snapd.socket \
http://localhost/v2/interfaces/requests/rulesRéinitialisation des autorisations
# Recommended: clear an app's permission decisions via the Security Center GUI
# Or call the Prompting API to delete a rule (requires the rule ID)
# Reset a specific snap interface connection
sudo snap disconnect firefox:homeInterfaces Snap expliquées
Le système de demande d’autorisation fonctionne principalement autour des interfaces Snap. Les interfaces communes incluent :
Interfaces d’accès aux fichiers
# home - access user home directory
snap connections firefox | grep home
# removable-media - access removable storage
sudo snap connect myapp:removable-media
# personal-files - access specific personal files
# system-files - access specific system filesInterfaces matérielles
# camera - camera
snap interface camera
# audio-record - microphone
snap interface audio-record
# bluetooth-control - Bluetooth
snap interface bluetooth-control
# joystick - game controller
snap interface joystickInterfaces réseau
# network - network access
# network-bind - listen on ports
# network-observe - network monitoring
# firewall-control - firewall control
snap connections --all | grep networkConfiguration du comportement des invites d’autorisation
Paramètres globaux
# Permission prompting is still experimental in 26.04; enable/disable it via the snapd experimental option
sudo snap set system experimental.apparmor-prompting=true
# Check whether it is currently enabled
snap get system experimental.apparmor-prompting
# You can also toggle it in the graphical Security CenterConfiguration par application
# View an app's snap declaration
snap info firefox
# View all interfaces requested by an app
snap connections firefox
# Example output:
# Interface Plug Slot Notes
# camera firefox:camera :camera -
# home firefox:home :home -
# network firefox:network :network -
# audio-playback firefox:audio-playback :audio-playback -Règles d’autorisation persistantes
Les règles d’invite d’autorisation sont gérées uniformément par snapd et ne sont pas configurées via des fichiers écrits à la main. Lorsque vous choisissez « Toujours autoriser » dans une boîte de dialogue d’invite, snapd crée automatiquement une règle persistante.
Pour gérer les règles par programmation, utilisez l’API d’invite d’snapd (/v2/interfaces/requests/rules), initiée par un client qui contient l’interface snap-interfaces-requests-control ; les règles d’interrogation, de création et de suppression sont toutes gérées par snapd plutôt que par la modification directe des fichiers JSON sur le disque.
# List the current persistent rules
sudo curl -s --unix-socket /run/snapd.socket \
http://localhost/v2/interfaces/requests/rulesImpact sur les applications deb traditionnelles
Le système de demande d’autorisation cible principalement les applications Snap. Les applications traditionnelles installées via APT utilisent toujours le modèle d’autorisation Linux conventionnel :
- les applications deb ont toutes les autorisations au niveau de l’utilisateur par défaut
- AppArmor peut être configuré manuellement pour restreindre les applications Deb
- Pour les applications sensibles, préférez la version Snap pour une meilleure isolation des autorisations
# Check AppArmor status
sudo aa-status
# View loaded AppArmor profiles
sudo aa-status | grep profilesGuide du développeur
Déclaration des interfaces pour les applications Snap
Déclarez les interfaces dont votre application a besoin dans snapcraft.yaml :
apps:
myapp:
command: myapp
plugs:
- home
- network
- camera
- audio-playback
plugs:
home:
read: all
write: all
camera: null
audio-playback: nullMeilleures pratiques
- Demandez uniquement les autorisations nécessaires - Suivez le principe du moindre privilège
- Demande à la demande : demandez des autorisations uniquement lorsque l’utilisateur déclenche une fonctionnalité associée.
- Fournir une solution de secours – Proposer des fonctionnalités alternatives lorsqu’une autorisation est refusée
- Expliquez le but - Informez clairement l’utilisateur de la raison pour laquelle une autorisation est nécessaire
Dépannage
L’invite d’autorisation n’apparaît pas
# Check if the AppArmor prompting service is running
systemctl --user status snap.snapd-desktop-integration.snapd-desktop-integration.service
# Check snapd version (requires 2.66 or higher)
snap version
# Check if the kernel supports AppArmor prompting
cat /sys/kernel/security/apparmor/features/prompting/supportedL’application ne fonctionne pas en raison d’autorisations refusées
# View denied permission requests
journalctl --user | grep -i "permission\|denied\|apparmor"
# Manually grant necessary interfaces
sudo snap connect myapp:home
sudo snap connect myapp:network
# Or reset all permission decisions
rm ~/.local/share/apparmor/prompting/snap.myapp.json