C++升降权限的原理与实践
本文主要介绍几种C++程序内部进行权限升降的方法,为以后开发过程中可能会遇到的操作系统权限相关问题提供参考意见。
Windows权限基本概念
Windows程序可能拥有的权限
简单来说,Windows环境下的程序运行时所拥有的权限有以下四种:
- 用户管理员权限
- 用户普通权限
- 系统管理员权限
- 系统普通权限(很少有程序拥有该权限)
Windows session介绍
在Windows XP、Windows Server 2003 或早期Windows 系统时代,当第一个用户登录系统后服务和应用程序是在同一个Session 中运行的。但是这种运行方式提高了系统安全风险,因为服务是通过提升了用户权限运行的,而应用程序往往是那些不具备管理员身份的普通用户运行的。
从Vista 开始Session 0 中只包含系统服务,其他应用程序则通过分离的Session 运行,将服务与应用程序隔离提高系统的安全性。这样使得Session 0 与其他Session 之间无法进行交互,不能通过服务向桌面用户弹出信息窗口、UI 窗口等信息。如下图所示:
C++程序内的权限升降
SYSTEM管理员进程创建USER普通权限进程
基于上述相关内容,Windows服务程序与其他程序运行于不同session,所以要使拥有系统管理员权限的程序创建拥有用户普通权限的进程,需要以下三步:
- 获取当前用户