我正在运行一些使用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
,访问这个function?
运行Python 2.4.3和Apache 2.2.3
我不确定答案是什么,但我想我会尝试像这样解决问题。
使用su切换到apache用户上下文,然后用strace运行python脚本。 我猜测它试图访问一个文件或创build一个临时文件或某处。
如果我想做一个疯狂的猜测,我会看到,似乎你正在尝试使用https。 也许它试图加载CA证书并且无法访问?
它不作为apache用户运行,您的python脚本是否会以不同的非root用户身份运行?
原来SELinux正在停止使用端口的Apache; closuresSELinux之后,问题就消失了。