2014-03-25 67 views
3

我正在尝试调试apache升级后发生的问题。我想将redmine集成到我的apache验证/访问控制中。调试Apache 2.4 PerlAuthenHandler

这里是我的Apache配置:

<Location "/git/">           

    AuthType Basic           

    AuthName "Git Access"          

    Require valid-user          

    Order deny,allow           
    Allow from all           

    PerlAccessHandler Apache::Authn::Redmine::access_handler 
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler 
    ... 

这是接入/认证介绍处理器:

sub access_handler {                          
    my $r = shift;                           

    unless ($r->some_auth_required) {                       
     $r->log_reason("No authentication has been configured");                
     return FORBIDDEN;                          
    }                               

    return OK unless request_is_read_only($r);                    

    my $project_id = get_project_identifier($r);                    

    $r->log_error("Setting Auth to OK") if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r); 
    $r->log_error("Content: " . $r->get_handlers("PerlAuthenHandler"));              

    $r->set_handlers(PerlAuthenHandler => [\&ok_authen_handler])                
     if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);         

    return OK                             
}                               

sub ok_authen_handler {                          
    my $r = shift;                           
    $r->log_error("ok_authen_handler()...");                     

    my ($res, $redmine_pass) = $r->get_basic_auth_pw();                  

    return OK;                            
}                               

sub authen_handler {                          
    my $r = shift;                           
    $r->log_error("authen_handler() ...");                     
    my ($res, $redmine_pass) = $r->get_basic_auth_pw();                  
    return $res unless $res == OK;                       

    if (is_member($r->user, $redmine_pass, $r)) {                    
     $r->log_error("Auth succeeded");                      
     return OK;                           
    } else {                             
     $r->log_error("Auth failed...");                      
     $r->note_auth_failure();                        
     return DECLINED;                          
    }                               
} 

正如你所看到的,进入处理程序的权威性处理程序重置为在一些虚拟方法如果不需要认证。理论上,这允许选择性的匿名访问。

但在实践中的Apache 2.4产生错误:

AH00027: No authentication done but request not allowed without authentication for $PATH. Authentication not configured? 

我已经钉在问题的处理程序访问黑客,如果我取消了set_handlers声明,我可以对管理平台进行身份验证。所以我猜这个“黑客”有什么问题。不幸的是,我不是一个真正的perl家伙,所以我不知道如何进一步调查这个问题。

有什么办法搞清楚的是什么“黑客”控制流之间和正常的一个重要差异(即设置身份验证处理程序)?

回答

1

我最近从2.3升级到2.5.1。现在只要项目是公开的,我就会得到同样奇怪的行为。我有一些项目,其他人需要访问而无需在redmine站点上注册。所以我需要一个快速解决方案。但我也不知道如何解决它。因此,我在管理平台项目方创造了一个错误报告:

http://www.redmine.org/issues/16948

4

一点点脏的解决方法是总是在匿名模式中设置的“用户”(REMOTE_USER)变均匀,所以“需要有效的用户”看起来很高兴,

$r->user(""); 
    return Apache2::Const::OK; 

我们有这个问题来实现延迟认证(Shibboleth风格)。

+0

这也解决了我的问题:)但担心如果这造成任何安全漏洞,你有没有注意到这个修复后的任何安全漏洞? – Ganesh