我正在运行一些 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
我不确定答案是什么,但我想我会尝试像这样解决问题。
使用 su 更改为 apache 用户上下文,然后使用 strace 运行 python 脚本。我猜它正在尝试访问文件或创建临时文件或某处的东西。
如果我要进行疯狂的猜测,我会发现您似乎正在尝试使用 https。也许它正在尝试加载 CA 证书并且没有访问权限?
它不会以 apache 用户身份运行,您的 python 脚本会以不同的非 root 用户身份运行吗?
原来 SELinux 正在阻止 apache 使用端口;关闭 SELinux 后,问题就消失了。