Skip to Content

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 :

  1. Une application tente d’accéder à une ressource protégée (telle que des fichiers, une caméra, un réseau, etc.)
  2. AppArmor intercepte la demande d’accès
  3. Le système affiche une boîte de dialogue d’invite d’autorisation
  4. L’utilisateur choisit “Autoriser” ou “Refuser”
  5. L’utilisateur peut choisir “Juste cette fois” ou “Toujours autoriser/refuser”.
  6. Le système mémorise le choix de l’utilisateur et l’applique aux demandes futures

Types de ressources protégées

Type de ressourceDescriptionExemple
Système de fichiersAccéder aux fichiers utilisateurLecture de fichiers dans ~/Documents
CaméraUtiliser des appareils photoApplications d’appel vidéo
MicrophoneUtiliser des appareils d’enregistrementApplications d’enregistrement vocal
EmplacementObtenir la localisation géographiqueApplications cartographiques
RéseauAccès au réseauAccès à des ports ou adresses spécifiques
NotificationsEnvoyer des notifications sur le bureauApplications de messagerie
Démarrage automatiqueExécuter au démarrageServices 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 camera

Affichage 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/rules

Ré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:home

Interfaces 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 files

Interfaces 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 joystick

Interfaces réseau

# network - network access # network-bind - listen on ports # network-observe - network monitoring # firewall-control - firewall control snap connections --all | grep network

Configuration 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 Center

Configuration 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/rules

Impact 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 profiles

Guide 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: null

Meilleures pratiques

  1. Demandez uniquement les autorisations nécessaires - Suivez le principe du moindre privilège
  2. Demande à la demande : demandez des autorisations uniquement lorsque l’utilisateur déclenche une fonctionnalité associée.
  3. Fournir une solution de secours – Proposer des fonctionnalités alternatives lorsqu’une autorisation est refusée
  4. 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/supported

L’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