runas 是什么
runas 让你在不注销当前登录的前提下,用另一个账户的身份启动单个程序——比如用域管理员账号只开一个服务管理控制台,其余窗口仍是自己的普通身份。它是「临时借用身份」的工具,不是提权工具:新进程完全属于目标账户,当前会话的环境、映射盘、变量都不会带过去。它的实现依赖 Secondary Logon 服务,该服务被禁用时 runas 会直接失败。
基本信息
| 适用平台 | Windows 全版本 CMD 与 PowerShell |
|---|---|
| 语法 | runas /user:域\账户 "命令" |
| 常用参数 | /savecred 保存凭据(有安全代价)、/netonly 凭据只用于远程访问、/env 沿用当前环境变量、/noprofile 不加载目标用户配置、/showtrustlevels 列出信任级别 |
| 口令输入 | 交互式提示输入,命令行不提供口令参数 |
| 依赖服务 | Secondary Logon(seclogon)必须处于运行状态 |
| 权限要求 | 需知道目标账户口令;账户还需具备相应登录权利 |
典型使用场景
- 单点管理:用管理员账户只开一个管理工具,避免整台机器都用高权限身份
- 权限复现:以业务账户运行同一程序,验证「是不是权限差异导致功能异常」
- 异构身份:本机账户与域账户之间切换,测试不同身份下的资源访问
- 远程资源访问:用 /netonly 让网络访问使用另一套凭据,本地身份保持不变
- 遗留软件:必须用本地管理员才能启动的老程序,临时以该身份运行
常用示例
常用示例
runas /user:DOMAIN\admin cmd.exe # 以域账户身份打开命令提示符
runas /user:localhost\localadmin "mmc services.msc" # 以本机管理员身份打开服务控制台
runas /netonly /user:DOMAIN\fileaccess "cmd.exe" # 本地身份不变,仅网络访问用该账户
runas /env /user:DOMAIN\admin "cmd.exe" # 沿用当前环境变量
runas /noprofile /user:DOMAIN\admin "notepad.exe" # 不加载目标用户配置,启动更快
runas /showtrustlevels # 查看可用信任级别
REM 注意:新会话里看不到当前用户映射的网络盘,需要重新建立
REM net use Z: \\SRV01\share /user:DOMAIN\fileaccess参数与风险对照
| 参数 | 作用 | 风险或限制 |
|---|---|---|
| /user: | 指定运行身份 | 拼错域名会退回本地账户查找,导致登录失败 |
| /savecred | 保存凭据供下次免密使用 | 凭据留在凭据管理器里,共用设备上等于后门 |
| /netonly | 凭据仅用于远程访问 | 本地操作仍是当前身份,容易误判「提权没生效」 |
| /env | 沿用当前环境变量 | 不指定时使用目标用户的环境,脚本行为可能不同 |
| /noprofile | 跳过目标用户配置文件 | 能加快启动,但对依赖用户级配置的程序不适用 |
新进程不继承当前会话的映射网络盘,因为网络连接属于登录会话。以其他身份运行后如果需要访问共享,要在该会话里重新 net use 或直接用 UNC 路径。
runas 启动的是以目标账户身份运行的普通进程,它不会替你在界面上完成 UAC 提权确认。需要提升权限的操作,应在得到的会话里再按常规方式请求提权,别指望 runas 一步到位。
PowerShell 侧的做法
PowerShell 侧的做法
# 以其他账户启动进程(会提示输入口令,不支持 -Verb 与 -Credential 同时用)
Start-Process -FilePath 'cmd.exe' -Credential (Get-Credential 'DOMAIN\admin')
# 需要无人值守时改用计划任务指定运行账户
# schtasks /Create /TN RunAsTask /TR "cmd.exe /c D:\ops\job.cmd" /SC ONCE /ST 02:00 /RU DOMAIN\svc /RP *
# 查看当前会话里可用的凭据(谨慎使用)
# cmdkey /list不要使用 /savecred:凭据会被保存到当前用户的凭据管理器中,之后任何人无需知道口令即可用该身份启动程序。自动化场景应改用计划任务的运行账户或托管服务账户。