我有以下Perl代码工作,其中客户端是通过cgi脚本的apache,而另一个进程是普通用户。目的是解决apache用户的安全问题,因此我可以在cgi脚本中执行更多API活动。它是一种安全的解决方案,因为它是一个专用的应用程序(以及一个锁定的内部网络)。
这里的关键词是“正在”工作,因为现在任何两个用户都无法共享UNIX套接字。我试过从命令行运行客户端作为“apache”,我尝试从命令行运行客户端作为另一个用户。如果我以与服务器相同的用户运行它并且我在$ socket中得到一个有效的套接字,但这是它工作的唯一情况。现在我的IT帮助禁用了SELinux,在selinux配置中设置(允许,有针对性),所以这不应该妨碍(这个线程不是关于selinux的最佳实践,所以请不要去那里)。
任何有关套接字权限的帮助以及妨碍的方法都将非常受欢迎!
use IO::Socket::UNIX qw(SOCK_STREAM);
my $OLSS_SOCK_PATH = "/tmp/OLSS_Sock";
my $socket;
my $server = 1; # Run two instances, one set as server the other client
if( $server ){
$socket = IO::Socket::UNIX->new( # Reader
Local => $OLSS_SOCK_PATH,
Listen => SOXMAXCONN,
Type => SOCK_STREAM,
);
}else{
$socket = IO::Socket::UNIX->new( # Writer
Type => SOCK_STREAM,
Peer => $OLSS_SOCK_PATH,
);
}