星期三, 5月 02, 2012

在Linux環境中讓Apache使用NTLM認證

簡單地說,就是我不想再用Windows Server開發,但是又需要NTLM/AD整合認證,所以只好DIY自力更生。

Ubuntu 12.04還是用Apache 2.2,所以就以Apache 2.2為主。
方法1:

可以先看Setting up Apache 2.2.x for NTLM Authentication using Mod NTLM2,再看NTLM Windows domain authentication for Rails application,這兩個都是用mod_ntlm的方式,要稍微改一下,Raimonds Simanovskis已經改好,放在
因為Ubuntu的Apache 2.2把 apxs 改名為 apxs2 ,我編譯的方法是
apxs2 -DAPACHE2 -c -i mod_ntlm.c
會自己裝到 /usr/lib/apache2/modules/mod_ntlm.so ,加上 /etc/apache2/mods-available/ntlm.load 內容為:
LoadModule ntlm_module /usr/lib/apache2/modules/mod_ntlm.so
使用方法為
<Directory "你要NTLM認證的目錄">
AuthName "My Application"
AuthType NTLM
NTLMAuth on
NTLMAuthoritative on
NTLMDomain domain.com
NTLMServer dc01.domain.com
NTLMBackup dc02.domain.com
require valid-user
</Directory>
MOD_NTLM確實比較方便,但是它有一個缺點,只能認證一個DOMAIN,也沒有LOGON_USER的Server variable,只會把認證後的user 傳到 REMOTE_USER ,例如: mydomain\userid 就會變成 userid 塞到 REMOTE_USER 。
==================================================
方法2:

用比較新的mod_auth_ntlm_winbind,但這個必須配合samba 3,有中國人分享做法,如果看這篇的話順序有問題,How to join Ubuntu/Samba to a Windows 2003 Active Directory domain寫得才對,smbd和winbind都得啟動才可以join domain,否則會有錯誤訊息,一直加不進。
net ads join -U administrator 和 net ads join -U administrator@your-domain-name.not-copy-me 都可以,現在的samba 3真的不錯用
接下來
autoconf
./configure
apxs2 -DAPACHE2 -c -i mod_auth_ntlm_winbind.c
還要加上需要的權限(請千萬不要改成777)
chmod 750 /var/run/samba/winbindd_privileged
再編輯 /etc/group ,把 www-data 加到 winbindd_priv 群組,加完後得重啟winbind,service winbind restart

最後 /etc/apache2/mods-available 加上 auth_ntlm_winbind.load內容為
LoadModule auth_ntlm_winbind_module /usr/lib/apache2/modules/mod_auth_ntlm_winbind.so
使用方法
<Directory "你要NTLM認證的目錄">
AuthName "NTLM Authentication thingy"
  NTLMAuth on
  NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
  NTLMBasicAuthoritative on
  AuthType NTLM
  require valid-user
</Directory>
mod_auth_ntlm_winbind很可惜地,也是用認證user放到REMOTE_USER變數裡,也並不能對group限制,只有windows上的mod_auth_sspi可以設定到group權限;使用PHP的朋友可以配合adLDAP使用。
==================================================

注意:以上兩種方法只能擇一使用,同時啟動兩種認證在同一個process似乎會打架,mod_ntlm會失效。

沒有留言: