Permiso denegado al acceder a hipertables en el programa CGI
-
27-10-2019 - |
Pregunta
Estoy tratando de desarrollar una aplicación web en Perl usando Hipertible. Código de muestra:
#!/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>";
El problema es que cuando se intenta ejecutar desde un navegador web recibo un error:
$VAR1 = bless( { 'code' => 0, 'message' => 'TSocket: Could not connect to localhost:38080 (Permission denied)' }, 'Thrift::TException' );
Los scripts funcionan correctamente cuando se ejecutan desde un terminal (bajo el usuario de Apache), y también en un navegador si elimina todo el código hipertible.
Tengo el puerto 38080 abierto en iptables:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 38080 -j ACCEPT
OS: Centos 5.6.
Solución 2
OK, entonces hay dos solución a este problema en particular: 1. Desactivar Selinux - Cambiar la configuración en/etc/selinux/config 2. Ejecutar comando:
setsebool -p httpd_can_network_connect 1
Gracias a la respuesta anterior por volver a encaminarme.
Otros consejos
El mensaje de error dice que le falta permiso, por lo que esa sería la respuesta (el usuario Apache no tiene permiso para crear socket a localhost: 38080)
ACTUALIZACIÓN: Para elaborar, cuando lo ejecuta desde un terminal, se está ejecutando como un usuario normal, pero cuando Apache lo ejecuta, la mayoría de las veces se ejecuta en la cuenta de usuario Apache, que puede no tener permiso para abrir enchufes
Podría ser que esté utilizando Selinux en cuyo caso consulte 'Man Chcon' o busque "Tutorial de Selinux: Configuración de RHEL 5 y servidores web"