Отказано в доступе при доступе к Hypertable в программе CGI - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь разработать веб-приложение на Perl, используя Hypertable .Пример кода:

#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use CGI::Session ('-ip_match');
use Hypertable::ThriftClient;
use Data::Dumper;

my $q = new CGI;
print $q->header(-cache_control => "no-cache, no-store, must-revalidate");

eval {
    my $client    = new Hypertable::ThriftClient("localhost", 38080);
    my $namespace = $client->open_namespace("glinpe");
    my $result    = $client->hql_exec($namespace, "select * from words where row=\"maths\" keys_only");
};

if ($@) {
    if ($@->isa('Thrift::TException')) {
        print Dumper($@);
    } else {
        print Dumper($@);
    }
}
print "<h1>works</h1>";

Проблема в том, что при попытке выполнить из веб-браузера появляется ошибка:

$VAR1 = bless( { 'code' => 0, 'message' => 'TSocket: Could not connect to localhost:38080 (Permission denied)' }, 'Thrift::TException' );

Сценарии работают правильно при запуске из терминала (под пользователем apache), а также в браузере, если удалить весь Hypertable код.

В iptables открыт порт 38080:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 38080 -j ACCEPT

ОС: Centos 5.6.

Ответы [ 2 ]

0 голосов
/ 13 июня 2011

ОК, так что есть два решения этой конкретной проблемы: 1. отключить selinux - изменить конфигурацию в / etc / selinux / config 2. запустите команду:

setsebool -P httpd_can_network_connect 1

Спасибо за предыдущий ответ за то, что вернул меня на круги своя.

0 голосов
/ 13 июня 2011

В сообщении об ошибке говорится, что у вас нет разрешения, поэтому это будет ответом (пользователь apache, не имеет разрешения на создание сокета для localhost: 38080)

обновление: чтобы уточнить, когда вы запускаете его из терминала, он работает как обычный пользователь, но когда apache запускает его, чаще всего он работает под учетной записью пользователя apache, которая может не иметь разрешения на открытие сокетов

Возможно, вы используете SELinux, в этом случае смотрите 'man chcon' или найдите «Учебник SELinux: Настройка RHEL 5 и веб-серверов»

...