权限提示
Ubuntu 26.04 引入了全新的权限提示(Permission Prompting)系统,当应用尝试访问敏感资源时,系统会弹出提示窗口请求用户授权。这一机制显著提升了桌面安全性,让用户能够精细控制每个应用的权限。
工作原理
核心概念
权限提示系统基于 AppArmor 4.0 的提示接口(prompting interface)实现。当受限应用(主要是 Snap 应用)尝试执行需要特定权限的操作时,系统会拦截请求并弹出对话框让用户决定是否授权。
工作流程如下:
- 应用尝试访问受保护的资源(如文件、摄像头、网络等)
- AppArmor 拦截该访问请求
- 系统弹出权限提示对话框
- 用户选择”允许”或”拒绝”
- 用户可以选择”仅此一次”或”始终允许/拒绝”
- 系统记住用户的选择并应用到后续请求
受保护的资源类型
| 资源类型 | 说明 | 示例 |
|---|---|---|
| 文件系统 | 访问用户文件 | 读取 ~/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:homeSnap 接口详解
权限提示系统主要围绕 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最佳实践
- 只请求必要的权限 - 遵循最小权限原则
- 按需请求 - 在用户触发相关功能时才请求权限
- 提供降级方案 - 权限被拒绝时提供替代功能
- 说明用途 - 在请求权限时清楚告知用户原因
故障排除
权限提示不显示
# 检查 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.jsonLast updated on