JAVA提权执行Windows指令

1 前言

       **平台要求实现FTP账户同步。FTP账户同步分为两步,第一步将平台用户写入FTP服务器(FileZilla Server)配置文件中(Dom4J读写XML文件),第二部重启FTP服务(指令为net stop/strat “FileZilla Server”)。

       在实际测试过程中,我们发现只有Administrator用户才能执行重启FTP服务,如果当前登录的不是Administrator用户,即使该用户是管理员也不能执行重复FTP服务的操作。系统会提示:


JAVA提权执行Windows指令
 

为解决该问题,需要对当前用户进行提权操作。本次调研了三种可行方案。

2方案一PSToolspsexec

2.1简介

pstoolssysinternals出的一个功能强大的nt/2k远程管理工具包。
它的主页为http://www.sysinternals.com/
下载地址为http://www.sysinternals.com/files/Pstools.zip

2.2Psexec指令说明

psexec是一个远程执行工具,你可以像使用telnet一样使用它。
它的使用格式为:
psexec \\
远程机器ip [-u username [-p password]] [-c [-f]] [-i][-d] program [arguments]
它的参数有:
-u
后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
-c <[
路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d
不等待程序执行完就返回,(比如要让远程机器运行tftp服务端的时候使用,不然psexec命令会一直等待tftp程序结束才会返回)
-i
在远程机器上运行一个名为psexesvc进程

2.3使用说明

  1. psexec.exe拷贝进工程下的指定目录
  2. JAVA代码中用Runtime.getRuntime().exec()执行以下指令:指定目录/PsExec.exe -accepteula -u administrator –p 密码net stop/strat “FileZilla Server”

 

3方案二NIRCMD

3.1简介

       NirCmd是一套免费的命令行指令,提供许多控制Windows的参数。让你运行命令行的方式,来执行一些常用的动作,例如开启或关闭光驱,增加或减少计算机音量。让你在执行一些常用的动作时,可以更加的有效率。

3.2Elevate指令说明

 

elevate [Program] {Command-Line Parameters}

仅适用于 Windows Vista/7/2008 ,以管理员权限运行。如果Program包含空格符,则需要用引号括起来。

示例:
elevate notepad.exe
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS
elevate "c:\program files\my software\abc.exe"

3.3使用说明

  1. nircmd.exe拷贝进工程下的指定目录
  2. JAVA代码中用Runtime.getRuntime().exec()执行以下指令:指定目录/ nircmd.exe elevate net stop/strat “FileZilla Server”

4方案三SUBINACL

4.1简介

       Subinacl微软提供的用于对文件、注册表、服务等对象进行权限管理的工具软件。

       官方下载地址:

http://www.microsoft.com/en-us/download/details.aspx?id=23510

4.2Subinacl指令说明

Subinacl的命令语法为:

SUBINACL /SERVICE \\MachineName\ServiceName

/GRANT=[DomainName\]UserName[=Access]

运行此命令,用户必须具有管理员权限才能成功完成。

如果省略 MachineName,则假定为本地计算机。

如果省略 DomainName,在本地计算机帐户的搜索。

可以对组进行授权。

Access 可以接受的值如下所示:

F : Full Control

R : Generic Read

W : Generic Write

X : Generic eXecute

L : Read controL

Q : Query Service Configuration

S : Query Service Status

E : Enumerate Dependent Services

C : Service Change Configuration

T : Start Service

O : Stop Service

P : Pause/Continue Service

I : Interrogate Service

U : Service User-Defined Control Commands

 

4.3使用说明

 

  1. 下载subinacl.msi
  2. 安装subinacl.msi
  3. 打开cmd,输入net config workstation,红圈中为当前登录的用户名“局域网_aaa”JAVA提权执行Windows指令
  4.  切换用户,使用administrator用户登录
  5. 打开cmd
  6. 进入subinacl.msi安装目录下,默认为C:\Program Files (x86)\Windows Resource Kits\Tools
  7. 执行指令Subinacl  /service  “FileZilla Server”  /grant=局域网_aaa=TO该指令意味着将FileZilla Server服务的启动和关闭权限赋给用户“局域网_aaa”
  8. 切换用户,使用局域网_aaa登录,在cmd中执行net stop/Start “FileZilla Server”,可成功执行。

 

5方案对比

方案

优点

缺点

方案一PSTools

通用性较好,测试Win7WinServer2008下均可实现服务重启

程序需知道Administrator用户密码,有安全隐患。

方案二NIRCMD

Win7下可实现服务重启

无需管理员密码

WinServer2008弹框需输入Administrator密码,上线环境中不适用。

方案三SUBINACL

一次性配置,仅开放指定权限

程序无需知道Administrator密码。

较安全。

需以administrator用户登录安装配置

 

 

 

经过上述三种方案的比较,综合考虑,建议选择第三种方案。

你可能感兴趣的:(windows)