利用NTLM 驗證整合Squid及Samba3實現Win2k3域用戶認證
Windows的IIS中有項配置使用集成的Windows驗證,在AD的環境中我們可以通過啟用集成的Windows驗證來使用用戶登陸Windows系統的帳號進行認證,在用戶訪問網頁時,IE會將用戶的帳號憑據發往伺服器自動做認證,不需要用戶輸入用戶名和密碼。最好的例子就是用戶登陸Outlook Web Access(OWA)。當我們利用Squid做代理伺服器需要利用用戶身份做認證是,用戶每次訪問網頁,系統會提示用戶輸入用戶名和密碼,這樣給用戶帶來很多麻煩,有沒有方法集成Windows的帳號做認證呢?通過查找資料,發現實際上在Linux等系統下,利用SQUID集成SAMB同樣可以集成windows的認證,用戶在通過訪問代理伺服器時自動利用登陸計算機的帳號做身份驗證,對用戶完全透明,不需要手動輸入用戶名及密碼。下面是我進行Squid集成Windows帳號認證的總結,希望對有這方面需求的朋友有所幫助,其中有什麼不正確及有更好的方法也希望各位給予指點,共同研究進步。
1. 實現環境
FreeBSD 5.4 + Squid 2.5 + Samba 3.0 + Krb5
2. 軟體包安裝
Squid、Samba及Krb5均通過Ports安裝最新版本。
3. Kerberos配置
Win2003系統默認通過Kerberos做身份驗證,Kerberos驗證需要安裝Krb5軟體包。配置文件及測試都很簡單。Krb5的配置文件為/etc/krb5.conf,配置如下
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
default_realm = TEST.COM (驗證域的realm,必須全部大寫)
dns_lookup_realm = false
dns_lookup_kdb = false
TEST.COM = {
kdc = 192.168.0.1:88 (域控制器名,可以是IP地址)
default_domain = TEST.COM (預設域名,同樣必須全部大寫)
}
配置完成後可以通過Kinit工具進行測試方法如下
root# kinit [email protected]
Password for [email protected]
正確輸入密碼后系統返回
kinit: NOTICE: ticket renewable lifetime is 1 week
表示正確驗證,如果返回有錯誤,檢查krb5.conf文件設置。
4. Samba配置
通常samba配置文件在/usr/local/etc/smb.conf,編輯smb.conf文件如下
注意,安裝Samba是選擇Winbind組件
log file = /var/log/samba/log.%m
dns proxy = No
idmap gid = 10000-20000
server string = Samba Server
idmap uid = 10000-20000
password server = 192.168.0.1
workgroup = TEST (域的NetBios名)
os level = 20
encrypt passwords = yes
security = ads (設置為AD驗證)
realm = TEST.COM (驗證域realm,必須大寫)
winbind use default domain = yes
max log size = 50
這裡需要正確配置你的workgroup、Netbios名、realm,password servers(域控制器,可以有多台)。一旦配置正確,你可以使用net ads join將你的Samba主機加入AD中。輸入
root# net ads join –U [email protected]
將主機加入AD。
重新啟動samba
/usr/local/etc/rc.d/samba.sh restart
同時winbind也將重新啟動。
5. 確認Samba主機帳號在AD中正確註冊
使用wbinfo –t驗證Samba主機已成功加入AD
root# wbinfo –t
系統返回
checking the trust secret via RPC calls succeeded
說明主機信任已成功建立
使用wbinfo –u 可以列出AD中註冊的帳號信息。Wbinfo –g可以返回AD中的組信息。
6. 測試ntlm_auth驗證
root# ntlm_auth –username=administrator
Password:**************
NT_STATUS_OK: NT_STATUS_OK (0x0)
說明域帳號administrator已成功驗證
7. 配製NSS
Nss為Name Service Switch,控制帳號的驗證。編輯/etc/nsswitch.conf,如下
passwd: files winbind
group: files winbind
8. 配置Squid
在squid.conf文件中增加
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 5 hours
acl NTLMUsers proxy_auth REQUIRED
http_access allow all NTLMUsers
配置Squid使用ntlm_auth驗證,並允許驗證用戶通過代理伺服器訪問。
這裡要注意一點,用戶要通過驗證squid必須能訪問winbind pipe,否則用戶不能通過Squid驗證,我剛配置完成時就是因為這裡總是不能通過squid身份驗證。修改winbind pipe許可權
root# chown -R root:squid /var/db/samba/winbindd_privileged
root#chmod -R 750 /var/db/samba/winbindd_privileged
9. 重新啟動squid伺服器,驗證使用域用戶身份驗證。
如果使用域帳號登陸計算機,那麼瀏覽網頁時就不會提示輸入用戶名及密碼認證,非域用戶登陸計算機,通過代理訪問網站時,IE將彈出用戶身份驗證窗口要求用戶輸入用戶名及密碼驗證。
在squid.conf中同樣可以設置允許訪問的域用戶,及不允許訪問的域用戶。對於windows域用戶來說,說有的驗證都是透明的。不需要手動輸入用戶名及密碼,方便用戶的使用。
[火星人 ] 利用NTLM 驗證整合Squid及Samba3實現Win2k3域用戶認證已經有603次圍觀