2016-03-17 33 views
11

Mam PHP 5.6.17 i Apache 2.4.10 działa na Debianie 8.SSO - Get AD Nazwa użytkownika z Apache

Chcę wypełnić PHP zmienna $_SERVER['REMOTE_USER'] z nazwą użytkownika systemu Windows, aby zalogować się na użytkownika, jeśli nazwa użytkownika znajduje się w mojej bazie danych. Czuję się komfortowo z zagrożeniami bezpieczeństwa związanymi z tą metodą, ponieważ będzie ona dostępna tylko w sieci lokalnej.

Oto co zrobiłem w mojej definicji vhost Apache:

<LocationMatch "/login/ssologin"> 
    PerlAuthenHandler Apache2::AuthenNTLM 
    AuthBasicAuthoritative on 

    AuthType ntlm 
    AuthName "hello" 

    Require valid-user 

    PerlAddVar ntdomain "my.local" 
    PerlSetVar defaultdomain my.local 
    PerlSetVar splitdomainprefix 1 
    PerlSetVar ntlmauthoritative off 
    PerlSetVar ntlmdebug 1 
</LocationMatch> 

umieścić adres URL do zaufanych witryn w programie Internet Explorer, ale wciąż był poproszony o uwierzytelniania podstawowego.

Czego mi brakowało?

Jedynym moim celem jest uzyskanie nazwy użytkownika sesji systemu Windows. Czy istnieje inny, łatwiejszy sposób?

+0

http://stackoverflow.com/questions/12942065/can-serverremote-user-be -spoofed – mkaatman

+0

@mkaatman: dzięki za wpis, ale jestem w lokalnej sieci, dlatego ufam var. – BastienSander

+0

Czy dodałeś wyjątek ntlm dla twojego adresu URL/domeny w IE? coś takiego: https://technet.microsoft.com/en-us/library/jj865685(v=ws.10).aspx lub https://support.microsoft.com/en-us/kb/239869. – gmfm

Odpowiedz

5

Po pierwsze, Twój ntdomain jest niekompletny. According to documentation, zmienna jest ustawiona tak:

PerlAddVar ntdomain "my.local PDC_NAME BDC_NAME" 

bez kontrolera domeny w celu uwierzytelnienia przed wymóg valid-user nigdy nie mogą być spełnione.

Po drugie, Apache2 :: AuthenNTLM nie obsługuje uwierzytelniania NTLM w wersji 2.

Od wersji Windows Vista i Server 2008 NTLM w wersji 2 jest używany wyłącznie. Poprzednie wersje systemu Windows powracałyby do wersji 1, gdyby serwer nie obsługiwał wersji 2. Chociaż można zmodyfikować zasady zabezpieczeń, aby przywrócić stare zachowanie, są to: very dangerous.

Jak wspomniano w this answer, istnieje a Python module, który obsługuje uwierzytelnianie NTLM w wersji 2. Oczywiście będzie to wymagać instalacji mod_python, ale jest dość prosta w konfiguracji.

Wreszcie konfiguracja automatycznego logowania wymaga more than adding it to the Trusted Sites list. Powinieneś umieścić go w strefie intranetowej i upewnić się, że automatyczne logowanie jest włączone dla tej strefy (np. Ustawienia średnio-niskiego bezpieczeństwa).