gpt4 book ai didi

perl - Perl IO::Socket::INET权限被拒绝

转载 作者:行者123 更新时间:2023-12-03 11:51:14 26 4
gpt4 key购买 nike

有一个perl脚本来连接在本地主机上运行的Java服务,传递加密的cookie,并返回解密的数据。当我从命令行运行脚本时,它可以正常工作。甚至给apache用户一个shell,并以该用户的身份从命令行运行,这也可以正常工作。如果脚本从apache作为CGI运行,则socket new返回undef和$!设置为“拒绝权限”。 ???

在此服务器上运行CentOS 6.3,并且禁用IPtables。

#!/usr/bin/perl

use strict;

use CGI;
use IO::Socket;
use JSON;

my $cgi = CGI->new();

my $cookie = $cgi->cookie('attESSec') || shift (@ARGV) || undef;
my $data = JSON::false;

if($cookie){
my $socket = IO::Socket::INET->new(
'PeerHost' => '127.0.0.1',
'PeerPort' => '1500',
'Proto' => 'tcp'
);
if($socket){
$socket->send($cookie . "\r\n");
$socket->recv(my $auth,1024);
$socket->close();
chomp($auth);
if($auth){
$data = (split(/\|/,$auth))[5];
}
}
else{
$data = $!;
}
}

print($cgi->header('application/javascript'));
print(JSON->new()->allow_nonref()->utf8()->encode($data));

exit();

最佳答案

我找到了答案。问题是SElinux。默认情况下,它不会让httpd进程(或由此产生的任何东西,例如CGI脚本)建立网络套接字。因此,只需使用命令“setsebool -P httpd_can_network_connect 1”启用该特定功能。现在,它可以完美运行了。

关于perl - Perl IO::Socket::INET权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com