我正在从我的主目录运行以下命令:
python -m CGIHTTPServer
这会运行服务器,但是当我尝试访问 cgi-bin 目录中的脚本时,我得到:
Traceback (most recent call last):
File "/usr/lib/python2.7/CGIHTTPServer.py", line 251, in run_cgi
os.execve(scriptfile, args, env)
OSError: [Errno 13] Permission denied
以 root 身份运行并没有什么区别。这些文件似乎具有所有正确的权限:
student@bandersnatch:~$ ls -lhR
.:
total 12K
drwxr-xr-x 2 student student 4.0K Jun 13 18:38 cgi-bin
drwxr--r-- 2 student student 4.0K Jun 10 2004 kalpy
-rwxrwxrwx 1 student student 2.0K Jun 13 12:37 test.html
./cgi-bin:
total 8.0K
-rwxr-xr-x 1 student student 31 Jun 13 18:38 test.py
编辑:test.py 的内容是:
#!/usr/bin/python
print "test"
shebang 有效:
~$ which python
/usr/bin/python
您是否以 root 身份运行该进程?
If you 使用源,你会看到CGIHTTPServer.py
,就在打电话之前execve
:
try:
os.setuid(nobody)
except os.error:
pass
也就是说,如果它能够更改 UID(即如果它是 root),它将以无人身份运行 CGI 脚本。如果不是 root,则此调用很可能会失败并继续。
所以我的猜测是您正在以 root 身份运行服务器,因此脚本运行为nobody,但该用户无权访问该脚本。正如您所说,这是预期的,它位于您的主目录中。
我能想到的两个解决方案:
- 建议:不要以 root 身份运行服务器!
- 解决方法:将脚本复制到所在目录nobody可以阅读它(
/tmp
例如)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)