我正在运行一些 Python 代码,urllib2.urlopen
当以用户身份运行时,这些代码可以正常工作root
(Linux)。
但是,以用户身份运行时它不起作用apache
(我们通过 apache 版本 1 运行它) - 我收到此错误:
Traceback (most recent call last):
File "/srv/www/vm/custom/ipn.py", line 118, in ?
a = confirm_paypal(f, f1)
File "/srv/www/vm/custom/ipn.py", line 47, in confirm_paypal
response = urllib2.urlopen(PP_URL, params)
File "/usr/lib64/python2.4/urllib2.py", line 130, in urlopen
return _opener.open(url, data)
File "/usr/lib64/python2.4/urllib2.py", line 358, in open
response = self._open(req, data)
File "/usr/lib64/python2.4/urllib2.py", line 376, in _open
'_open', req)
File "/usr/lib64/python2.4/urllib2.py", line 337, in _call_chain
result = func(*args)
File "/usr/lib64/python2.4/urllib2.py", line 1040, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib64/python2.4/urllib2.py", line 1006, in do_open
raise URLError(err)
URLError: <urlopen error (13, 'Permission denied')>
有没有办法让用户apache
访问此功能?
更新 1
运行 Python 2.4.3 和 Apache 2.2.3
答案1
我不确定答案是什么,但我想我会尝试这样解决问题。
使用 su 切换到 apache 用户上下文,然后使用 strace 运行 python 脚本。我猜它正在尝试访问文件或在某处创建临时文件或某些东西。
如果我大胆猜测的话,我就会发现你似乎正在尝试使用 https。也许它正在尝试加载 CA 证书,但没有访问权限?
它不以 apache 用户身份运行,你的 python 脚本会以不同的非 root 用户身份运行吗?
答案2
事实证明 SELinux 阻止了 apache 使用端口;关闭 SELinux 后,问题就消失了。