2012-05-11 48 views
1

我有一个Python CGI脚本这需要形式输入xy(整数),并把它传递给使用subprocess一个C++可执行该程序这两个值的总和写入到文本文件。无法写入Linux服务器编程文件

该代码在我的本地机器上正常工作。然而,经过多次测试后,我发现无论何时在我的服务器上运行此程序(在/var/www中)并尝试写入文件时都会发生某种错误,因为我收到了“内部服务器错误”页面。

服务器不是我的,所以我实际上没有sudo权限。但是从putty中,我可以手动运行可执行文件,并且它确实写入文件。

我的猜测是我必须以某种方式运行python脚本中的可执行文件,但有一定的权限,但我不确定。我将不胜感激任何建议!

编辑:
@gnibbler:有趣的是,我能够写入文件到/ tmp目录没有问题。

所以我认为你的建议是正确的,服务器根本不允许我从浏览器调用脚本时写入。

另外,我无法访问带有错误日志的目录,所以我将尝试获得该权限。

+0

脚本是否通过网络服务器“启动”?因为如果是这样,WS已经是如何在服务器上的用户(或我认为是这样) – DonCallisto

+0

是Web服务器正确配置,以启动CGI脚本?你有没有测试cgi是否可以工作? –

+3

脚本不会以您的权限运行,它将以Web服务器的权限运行。如果服务器没有写访问权限,那么脚本将会因为错误而死亡,就像您所描述的那样。 – tripleee

回答

1

或者环境不同(可能是试图写入错误的目录)或更可能,cgi没有以与登录时相同的用户身份运行。

例如,它是很常见的CGI脚本为“无人”或“WWW”等

你可以尝试获得CGI到一个文件中写入/tmp执行。至少应该确认cgi运行的用户为

+0

是的,我可以写入/ tmp。我试图明确地写入cgi-bin(“/var/www/cgi-bin/test.out”)以及相对路径(“test.out”);都提供了内部服务器错误页面。 – Aaron

+0

@Aaron,但是谁拥有你在'/ tmp'中创建的文件,并且该用户是否有权写入'/ var/www/cgi-bin /'。除此之外:你是否正在将文件写入cgi-bin目录?这看起来很不安全 –

+0

其实,我无法删除我在/ tmp(whoops)中创建的文件。无论如何,这是一种概念验证计划。我想发送文件的链接给用户。也许制作一个不同的目录公开查看并写入到那里会更安全? – Aaron

0

正如其他人所说,您可能正在遇到权限问题。但是,除非您查看错误日志 - 内部服务器错误通常掩盖实际错误,否则无法确定发生了什么情况。

要弄清楚实际的错误是什么,你可以做两件事之一。你说你在做CGI,所以我建议你在测试时调查cgitb;它会在你的浏览器中向你展示Python追溯(尽管这可能对你的子进程场景没有帮助)。

否则,你会想看看web服务器的错误日志,它可以包含Python回溯,希望能告诉你发生了什么事情。一个典型的地方是这些被保存的是/var/log/httpd。如果您没有访问权限,或者无法在其中找到日志,请询问您的服务器管理员可以在哪里找到它们。

0

尝试chmod 0666 filethatyouarewritingto.txt 如果不工作,然后确保你的C++文件在组“他人”可执行权限,尝试chmod 0755 yourprogram

Source