基于SysRq的身份认证:Linux添加不可绕过类UAC授权提示的可行性探讨
可行性分析:Linux下实现类Windows UAC的不可绕过授权提示
针对你提出的需求——在Linux系统中实现软件层面不可绕过、仅允许物理在场键盘操作者完成授权的类Windows UAC提示,且支持任意进程申请权限提升,我结合Linux的系统机制做了如下分析:
核心实现思路
以需要交互式输入密码的特权命令(如su、RBAC工具gradm)作为授权触发载体,同时通过绑定物理输入设备、隔离虚拟输入路径的方式,确保授权操作无法被进程模拟绕过。
1. 特权认证载体的选择与配置
- 优先选择依赖PAM(Pluggable Authentication Modules)框架的命令,比如
su或gradm:- 这类命令原生支持交互式密码输入,且可以通过修改PAM配置(如
/etc/pam.d/su)强制开启仅交互式认证,禁止通过管道、脚本等非交互式方式传入密码。 - 以
su为例,可在PAM配置中添加限制规则,拒绝所有非交互式的认证请求,确保必须通过物理键盘输入密码。
- 这类命令原生支持交互式密码输入,且可以通过修改PAM配置(如
2. 实现软件不可绕过的关键:绑定物理输入设备
要避免进程通过xdotool、sendevent等工具模拟输入绕过授权,必须确保输入仅来自物理键盘:
- 虚拟控制台切换:触发授权时,自动切换到独立的虚拟控制台(如tty1),此时X11层面的模拟输入工具无法生效,只能通过物理键盘操作。认证完成后再切回原会话。
- 自定义PAM模块:编写PAM模块,验证输入来源是否为物理键盘设备(通过读取
/dev/input下设备的ID_INPUT_KEYBOARD属性),拒绝来自虚拟输入设备的输入。 - 直接读取物理设备节点:授权进程以root权限直接读取物理键盘的设备节点(如
/dev/input/event0),跳过系统的输入子系统,确保输入无法被进程劫持。
3. 支持任意进程申请提权的架构
- 编写一个后台守护进程(daemon),以root权限运行,监听系统中进程的提权请求:
- 进程可通过Unix域套接字或DBus接口向守护进程发送提权请求,附带需要执行的命令。
- 守护进程收到请求后,触发特权认证流程(如在虚拟控制台弹出
su的密码提示),认证通过后以root权限执行请求的命令,并将执行结果返回给发起请求的进程。
4. 潜在风险与应对方案
- 模拟输入绕过:定期扫描系统中的虚拟输入设备,禁止在授权期间加载虚拟输入驱动;或在PAM模块中添加输入来源验证逻辑。
- 权限滥用:结合
gradm等RBAC工具,限制守护进程仅能执行预定义的提权操作,避免被恶意进程利用执行任意命令。 - 用户体验:若需要图形化提示,可使用
pkexec(Polkit的工具)作为基础,修改Polkit的配置,强制要求物理键盘输入,并禁用远程认证选项。
内容的提问来源于stack exchange,提问作者forest
相关产品推荐
相关产品推荐

