2014-03-25 2 views
3

아파치 업그레이드 후 발생한 문제를 디버그하려고합니다. redmine을 내 아파치 인증/액세스 제어에 통합하려고합니다. 여기 Apache 2.4 디버그 PerlAuthenHandler

내 아파치 설정입니다 :

<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 
    ... 

그리고 이것은 액세스/authen 핸들러 : 당신이 볼 수 있듯이

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;                          
    }                               
} 

는, 액세스 처리기가 일부 더미 방법으로 인증 핸들러를 재설정 인증이 필요하지 않은 경우. 이론적으로 이는 선택적 익명 액세스를 허용합니다. 실제로

, 아파치 2.4는 오류 얻을 수 있지만 : 나는 set_handlers 문을 주석을 해제하는 경우 이미 액세스 처리기에서 해킹에 문제를 못을 박았다

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

을, 나는 레드 마인에 대해 인증 할 수 있습니다. 그래서 나는이 "해킹"에 잘못된 것이 있다고 생각합니다. 불행히도 나는 정말로 perl 녀석이 아니므로 더 이상 문제를 조사하는 방법을 모른다.

"해킹 된"제어 흐름 (즉, 인증 핸들러를 프로그래밍 방식으로 설정)과 정상적인 제어 흐름 간의 중요한 차이점을 파악할 수있는 방법이 있습니까?

답변

1

최근에 2.3에서 2.5.1으로 업그레이드되었습니다. 이제는 프로젝트가 공개 된 이상 이상한 행동을합니다. 나는 redmine 사이트에 등록하지 않고 다른 사람들이 접근해야하는 프로젝트가있다. 그래서 나는 빠른 해결책이 필요하다. 그러나 나는 또한 그것을 어떻게 해결해야할지 모른다. 따라서 나는 레드 마인 프로젝트 측에 버그 리포트를 생성 : 조금 더러운 해결 방법은 항상 익명 모드에서조차 "사용자"(REMOTE_USER) 변수를 설정하는 것입니다

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

4

, 그래서 "유효한 사용자 필요" 행복하게 보입니다.

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

지연 등록 (Shibboleth 스타일)을 구현할 때이 문제가있었습니다.

+0

내 문제가 너무 고쳐졌습니다. 그러나 이것이 보안 위반 사항을 만든다면 걱정할 필요가 있습니까?이 수정 사항 이후 보안 결함을 발견 했습니까? – Ganesh

관련 문제