Acontece que o SELinux estava impedindo o apache de usar portas; depois de desligar o SELinux, o problema desapareceu.
Estou executando um código Python que usa urllib2.urlopen
, que funciona bem quando executado como usuário, root
(Linux).
No entanto, ele não funciona quando executado como usuário apache
(estamos executando-o pela versão 1 do apache) - recebo este erro:
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')>
Existe uma maneira de conceder ao usuário, apache
, acesso a essa função?
Executando o Python 2.4.3 e o Apache 2.2.3
Não tenho certeza qual é a resposta, mas acho que tentaria solucionar esse problema.
Use su para mudar para o contexto de usuários do apache e, em seguida, execute o script python com strace. Eu acho que ele está tentando acessar um arquivo ou criar um arquivo temporário ou algo em algum lugar.
Se eu fosse fazer uma suposição, veria que parece que você está tentando usar https. Talvez esteja tentando carregar os certificados de CA e não tenha acesso?
Ele não é executado como o usuário do apache, seu script python será executado como um usuário não-root diferente?
Tags python apache-2.2