1 前言
**平台要求实现FTP账户同步。FTP账户同步分为两步,第一步将平台用户写入FTP服务器(FileZilla Server)配置文件中(Dom4J读写XML文件),第二部重启FTP服务(指令为net stop/strat “FileZilla Server”)。
在实际测试过程中,我们发现只有Administrator用户才能执行重启FTP服务,如果当前登录的不是Administrator用户,即使该用户是管理员也不能执行重复FTP服务的操作。系统会提示:
为解决该问题,需要对当前用户进行提权操作。本次调研了三种可行方案。
2方案一PSTools(psexec)
2.1简介
pstools是sysinternals出的一个功能强大的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使用说明
- 将psexec.exe拷贝进工程下的指定目录
- 在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使用说明
- 将nircmd.exe拷贝进工程下的指定目录
- 在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使用说明
- 下载subinacl.msi
- 安装subinacl.msi
- 打开cmd,输入net config workstation,红圈中为当前登录的用户名“局域网_aaa”
- 切换用户,使用administrator用户登录
- 打开cmd
- 进入subinacl.msi安装目录下,默认为C:\Program Files (x86)\Windows Resource Kits\Tools
- 执行指令Subinacl /service “FileZilla Server” /grant=局域网_aaa=TO该指令意味着将FileZilla Server服务的启动和关闭权限赋给用户“局域网_aaa”
- 切换用户,使用局域网_aaa登录,在cmd中执行net stop/Start “FileZilla Server”,可成功执行。
5方案对比
方案 | 优点 | 缺点 |
方案一PSTools | 通用性较好,测试Win7,WinServer2008下均可实现服务重启 | 程序需知道Administrator用户密码,有安全隐患。 |
方案二NIRCMD | Win7下可实现服务重启 无需管理员密码 | WinServer2008弹框需输入Administrator密码,上线环境中不适用。 |
方案三SUBINACL | 一次性配置,仅开放指定权限 程序无需知道Administrator密码。 较安全。 | 需以administrator用户登录安装配置 |
经过上述三种方案的比较,综合考虑,建议选择第三种方案。