有没有办法解决 urllib2.urlopen 出现的“权限被拒绝”错误?

有没有办法解决 urllib2.urlopen 出现的“权限被拒绝”错误?

我正在运行一些 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 后,问题就消失了。

相关内容