gpt4 book ai didi

perl - 为什么 SSL Web 访问在交互式 shell 中以 root 身份工作,但在提交后脚本中不能以用户 `apache` 身份工作?

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:25 25 4
gpt4 key购买 nike

我有一个 Perl 程序,旨在从颠覆 post-commit 脚本运行,它需要连接到基于 HTTPS 的 Web API。

当我以 root 身份从交互式 shell 测试该程序时,它工作得很好。

当它从 post-commit 脚本运行时,它出错了,LWP 的响应类似于“500 Connect failed”。

有一些证据表明,当从 post-commit 脚本运行时,SS 未启用,因为当我设置 $ENV{HTTPS_DEBUG} =1; 并运行它作为 root,我看到调试输出,例如

SSL_connect:before/connect initialization

但是从 post-commit 脚本中,没有打印 SLL 调试信息。

  • post-commit 脚本作为用户 apache 运行。
  • 我正在运行 CentOS 64 位。

自从我完成任何 Unix 工作以来已经有好几年了,所以我不确定在这种情况下下一步要做什么才能使 SSL 正常工作。

最佳答案

环境的不同让我很疑惑。就像运行 cron 作业一样,环境、INC 路径或 perl 解释器本身可能存在很大差异,以至于它无法找到 Crypt::SSLeay 或您用于 SSL 支持的任何其他内容。

作为故障排除步骤,请尝试在您的 shell 和提交后 Hook 中使用此程序,以查看两者之间是否存在环境差异。这会将几个运行时变量转储到一个临时文件中,这些变量显示 perl 对其环境的了解。

#!/usr/bin/perl

use Data::Dumper;
use File::Temp qw( tempfile );
use strict;
use warnings;

my $tempdir = '/tmp'; # Change this if necessary.

my( $fh, $fname ) = tempfile( "tempXXXXXX", DIR => $tempdir, UNLINK => 0 );
print $fh Data::Dumper->Dump( [ \@INC, \%INC, $^X, $0, $], \@ARGV, \%ENV ],
[ qw( @INC %INC ^X 0 ] @ARGV %ENV ] ) ] );
close( $fh );

# Change this if the post-commit hook doesn't pass stdout back to you.
print "Wrote data to $fname.\n";

__END__

如果它们有很大的不同,你的下一步就是使提交后 Hook 中的环境与你的 shell 下的环境相同,例如通过设置 PERL5LIB<,将 use lib qw(/path/to/where/ssl/modules/are/installed ); 行添加到脚本的 use 部分,使用不同 Perl 解释器的完整路径,或任何合适的路径。如果您不熟悉某些变量,请参阅 perldoc perlvar

关于perl - 为什么 SSL Web 访问在交互式 shell 中以 root 身份工作,但在提交后脚本中不能以用户 `apache` 身份工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211859/

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