Skip to Content

权限提示

Ubuntu 26.04 引入了全新的权限提示(Permission Prompting)系统,当应用尝试访问敏感资源时,系统会弹出提示窗口请求用户授权。这一机制显著提升了桌面安全性,让用户能够精细控制每个应用的权限。

工作原理

核心概念

权限提示系统基于 AppArmor 4.0 的提示接口(prompting interface)实现。当受限应用(主要是 Snap 应用)尝试执行需要特定权限的操作时,系统会拦截请求并弹出对话框让用户决定是否授权。

工作流程如下:

  1. 应用尝试访问受保护的资源(如文件、摄像头、网络等)
  2. AppArmor 拦截该访问请求
  3. 系统弹出权限提示对话框
  4. 用户选择”允许”或”拒绝”
  5. 用户可以选择”仅此一次”或”始终允许/拒绝”
  6. 系统记住用户的选择并应用到后续请求

受保护的资源类型

资源类型说明示例
文件系统访问用户文件读取 ~/Documents 中的文件
摄像头使用摄像设备视频通话应用
麦克风使用录音设备语音录制应用
位置获取地理位置地图应用
网络网络访问特定端口或地址的访问
通知发送桌面通知消息应用
自动启动开机自动运行后台服务

权限提示界面

当权限提示触发时,会出现一个系统级对话框,包含以下信息:

  • 请求应用的名称和图标
  • 请求的权限类型
  • 具体的资源路径(如文件路径)
  • 操作选项:
    • 允许一次
    • 始终允许
    • 拒绝一次
    • 始终拒绝

高级选项

对于文件系统权限,用户可以进一步选择:

  • 允许访问特定文件
  • 允许访问整个目录
  • 允许只读访问
  • 允许读写访问

管理权限

通过 Security Center 管理

打开 Security Center 的”应用权限”部分,可以:

  • 查看所有已授权的权限
  • 修改或撤销权限
  • 按应用或按权限类型浏览

通过命令行管理

# 查看 snap 应用的连接(权限) snap connections firefox # 查看所有 snap 连接 snap connections --all # 手动授权连接 sudo snap connect firefox:camera # 断开连接(撤销权限) sudo snap disconnect firefox:camera # 查看可用的接口 snap interface camera

查看权限规则

权限提示规则由 snapd 管理(而非手写文件)。可通过图形界面的”Security Center / 安全中心”查看和管理,或使用 snapd 的 Prompting API 查询。

# 通过 snapd REST API 查询当前的提示规则 sudo snap interface snap-interfaces-requests-control # 通过本地 socket 调用 Prompting API 列出规则 sudo curl -s --unix-socket /run/snapd.socket \ http://localhost/v2/interfaces/requests/rules

重置权限

# 推荐通过 Security Center 图形界面清除某个应用的权限决定 # 或调用 Prompting API 删除规则(需规则 ID) # 重置特定 snap 接口连接 sudo snap disconnect firefox:home

Snap 接口详解

权限提示系统主要围绕 Snap 接口运作。常见接口包括:

文件访问接口

# home - 访问用户主目录 snap connections firefox | grep home # removable-media - 访问可移动存储 sudo snap connect myapp:removable-media # personal-files - 访问特定的个人文件 # system-files - 访问特定的系统文件

硬件接口

# camera - 摄像头 snap interface camera # audio-record - 麦克风 snap interface audio-record # bluetooth-control - 蓝牙 snap interface bluetooth-control # joystick - 游戏手柄 snap interface joystick

网络接口

# network - 网络访问 # network-bind - 监听端口 # network-observe - 网络监控 # firewall-control - 防火墙控制 snap connections --all | grep network

配置权限提示行为

全局设置

# 权限提示在 26.04 仍是实验性特性,通过 snapd 实验选项启用/禁用 sudo snap set system experimental.apparmor-prompting=true # 查看当前是否启用 snap get system experimental.apparmor-prompting # 也可在图形界面的 Security Center(安全中心)中开关

针对特定应用配置

# 查看应用的 snap 声明 snap info firefox # 查看应用请求的所有接口 snap connections firefox # 输出示例: # Interface Plug Slot Notes # camera firefox:camera :camera - # home firefox:home :home - # network firefox:network :network - # audio-playback firefox:audio-playback :audio-playback -

持久化授权规则

权限提示规则由 snapd 统一管理,不通过手写文件配置。当你在提示弹窗中选择”始终允许”时,snapd 会自动创建一条持久化规则。

如需以编程方式管理规则,应通过 snapd 的 Prompting API(/v2/interfaces/requests/rules),并由具备 snap-interfaces-requests-control 接口的客户端发起;规则的查询、创建与删除均由 snapd 负责,而非直接编辑磁盘上的 JSON 文件。

# 列出当前持久化规则 sudo curl -s --unix-socket /run/snapd.socket \ http://localhost/v2/interfaces/requests/rules

对传统 deb 应用的影响

权限提示系统主要针对 Snap 应用。传统通过 APT 安装的 deb 应用仍然使用传统的 Linux 权限模型:

  • deb 应用默认拥有用户级别的所有权限
  • 可以通过 AppArmor 手动为 deb 应用配置限制
  • 建议敏感应用优先使用 Snap 版本以获得更好的权限隔离
# 检查 AppArmor 状态 sudo aa-status # 查看已加载的 AppArmor 配置文件 sudo aa-status | grep profiles

开发者指南

为 Snap 应用声明接口

在 snapcraft.yaml 中声明应用需要的接口:

apps: myapp: command: myapp plugs: - home - network - camera - audio-playback plugs: home: read: all write: all camera: null audio-playback: null

最佳实践

  1. 只请求必要的权限 - 遵循最小权限原则
  2. 按需请求 - 在用户触发相关功能时才请求权限
  3. 提供降级方案 - 权限被拒绝时提供替代功能
  4. 说明用途 - 在请求权限时清楚告知用户原因

故障排除

权限提示不显示

# 检查 AppArmor 提示服务是否运行 systemctl --user status snap.snapd-desktop-integration.snapd-desktop-integration.service # 检查 snapd 版本(需要 2.66 或更高) snap version # 检查内核是否支持 AppArmor 提示 cat /sys/kernel/security/apparmor/features/prompting/supported

应用因权限被拒而无法正常工作

# 查看被拒绝的权限请求 journalctl --user | grep -i "permission\|denied\|apparmor" # 手动授权必要的接口 sudo snap connect myapp:home sudo snap connect myapp:network # 或重置所有权限决定 rm ~/.local/share/apparmor/prompting/snap.myapp.json
Last updated on