1 votes

Existe-t-il un moyen de contourner l'erreur "Permission refusée" de urllib2.urlopen ?

J'exécute un code Python qui utilise urllib2.urlopen qui fonctionne bien lorsqu'il est exécuté en tant qu'utilisateur, root (Linux).

Cependant, il ne fonctionne pas lorsqu'il est exécuté en tant qu'utilisateur. apache (nous l'exécutons via apache version 1) - Je reçois cette erreur :

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')>

Y a-t-il un moyen de donner à l'utilisateur, apache l'accès à cette fonction ?

Mise à jour 1

Exécution de Python 2.4.3 et Apache 2.2.3

1voto

jammus Points 1796

Je ne suis pas sûr de la réponse, mais je pense que j'essaierais de résoudre le problème de la manière suivante.

Utilisez su pour passer dans le contexte des utilisateurs apache, puis exécutez le script Python script avec strace. Je suppose qu'il essaie d'accéder à un fichier ou de créer un fichier temporaire ou quelque chose quelque part.

Si je devais deviner, je dirais qu'il semble que vous essayez d'utiliser https. Peut-être essaie-t-il de charger les certificats de l'autorité de certification et n'y a pas accès ?

Il ne s'exécute pas sous l'utilisateur apache, est-ce que votre script Python s'exécutera sous un autre utilisateur non root ?

1voto

Blair Beckwith Points 81

Il s'est avéré que SELinux empêchait Apache d'utiliser les ports ; après avoir désactivé SELinux, le problème a disparu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X