Я запускаю код 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
, доступ к этой функции?
Запуск Python 2.4.3 и Apache 2.2.3
Оказывается, SELinux не позволял apache использовать порты; после выключения SELinux проблема исчезла.
Я не уверен, каков ответ, но я бы попытался снять это вот так.
Используйте su, чтобы перейти в контекст пользователей apache, а затем запустите скрипт python с помощью strace. Я бы предположил, что он пытается получить доступ к файлу или создать временный файл или что-то еще.
Если бы я сделал безумное предположение, я бы увидел, что похоже, что вы пытаетесь использовать https. Возможно, он пытается загрузить сертификаты CA и не имеет доступа?
Он не запускается от имени пользователя apache, будет ли ваш скрипт python запускаться от имени другого пользователя без полномочий root?