2

我正在运行 ColdFusion 9 添加 Windows Server Datacenter。我编写了一个在系统上创建目录的批处理文件。如果我使用cfexecute调用cmd.exe来运行批处理文件,创建的目录的所有者是谁?是运行 ColdFusion 的用户,还是创建批处理文件的用户,或者两者都不是?

我被限制创建 Windows 计划任务,并且我无法用于cfdirectory创建文件夹,因为 CF 用户具有提升的权限,甚至mode=777无法正常工作。感谢任何输入或见解。

4

3 回答 3

5

Coldfusion 执行的任何操作都是在运行 Coldfusion 服务的用户的上下文中完成的,因此任何文件/文件夹也将归该用户所有。由于它是 Windows 服务器,因此您不能使用 unix 命令来更改权限。

如果您可以访问 cfexecute,那么您几乎可以从命令行执行任何操作,因此限制 cfdirectory 对他们来说毫无意义,也许您应该向他们指出这一点。如果他们想限制访问,那么最好使用安全沙箱以及运行服务的用户的权限来执行此操作。

于 2016-03-07T14:25:24.203 回答
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>
于 2016-03-07T16:47:46.977 回答
0

作为蛇的正确答案的简短附录,您可以使用一点 NIO 检查从 Java7+开始的文件/目录的所有权:

    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());
于 2016-03-08T05:59:14.637 回答