2014-03-25 70 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