我正在运行ColdFusion 9添加Windows Server Datacenter。我编写了一个批处理文件,用于在系统上创建目录。如果我使用cfexecute
来调用cmd.exe
来运行批处理文件,谁是创建目录的所有者?是运行ColdFusion的用户,还是创建批处理文件的用户,还是这两者都不是?
我限制创建Windows计划任务,但我无法使用cfdirectory
创建文件夹,因为CF用户具有提升的权限,甚至mode=777
也没有&# 39;工作。任何意见或见解都表示赞赏。
答案 0 :(得分:5)
Coldfusion执行的任何操作都是在运行coldfusion服务的用户的上下文中完成的,因此任何文件/文件夹也将由该用户拥有。 由于它是Windows服务器,因此无法使用unix命令来更改权限。
如果你有权访问cfexecute,那么你几乎可以从命令行做任何事情,所以他们限制cfdirectory是没有意义的,也许你应该指出它们。如果他们想要限制访问,那么最好使用安全沙箱以及运行服务的用户的权限来执行此操作。
答案 1 :(得分:2)
如果使用Windows,CFX_EXEC是一个提供比ColdFusion的内置CFExecute更多功能的选项:
http://adiabata.com/cfx_exec.cfm
它是用C ++编写的,应该可以在Windows上成功安装所有版本的ColdFusion。它将使您能够在特定帐户下运行外部流程,甚至可以执行即时批处理文件。
<!--- Credential Check --->
<cf_exec fnc="USER" user="#user#" pwd="#pwd#" domain="#domain#">
<cfif status neq "OK">
<cfoutput>Error: #MSG#<br>
Error number: #ERRN#</cfoutput>
<cfelse>
Credentials OK
</cfif>
<!--- On-the-fly BAT file --->
<cf_exec cmd="cmd.exe" user="#user#" pwd="#pwd#" domain="#domain#">
@echo off
netstat -e
cd c:\
dir "<cfoutput>#dir#</cfoutput>"
ipconfig /all
exit
</cf_exec>
答案 2 :(得分:0)
作为snake's correct answer的简要附录,您可以使用一些NIO来检查Java7 +的ownership of a file/directory:
Paths = createObject("java", "java.nio.file.Paths");
Files = createObject("java", "java.nio.file.Files");
fileOrDirectoryToCheck = Paths.get("c:\path\someFolder\", []);
owner = Files.getOwner(fileOrDirectoryToCheck, []);
writeDump("Owner: " & owner.getName());