Step0:前言
如果你的 Windows 2000 AD 設定為 Native mode,這意味著只有 Windows 2000 以上的機器能加入 Domain.
所以以前將 samba 當成 Domain security mode ( samba 模擬成 Windows NT 4.0),時的方式就無法將 samba 2.X 加入 Native mode 的網域.在 samba 3.X 中加入一個新的模式 samba ADS Domain Membership (samba 模擬成 Windows 2000),此時就算網域為 Native mode , samba 還是可以加入網域
其示意圖如下
關於 Windows 2000 Native mode & Mixed mode
這2個模式只是差別在 Mixed mode下,win9x、nt、win2k都是以ntlm的方式來驗證
而在Naive mode下,win9x、nt還是以ntlm方式驗證,而win2k則會以kerberos的方式驗證 NTLM(NTLM V5)和Kerberos V5只是中間驗證的過程不同,以及之間對各伺服器之間是否需持續認證的步驟不同。
NTLM的過程如下:
Client -> Logon process -> LSA -> Client Netlogon -> DC netlogon->DC Authenication Package -> DC SAM -> Domain Directory DB,之後依原步驟回去
Kerberos v5如下:
(1)Client -> Kerberos Client system -> Hash -> Digest(Long-Term Key) -> Time Stamp加密 + UserAccount -> KDC -> LDAP(password) -> Hash ->Digest(Long-Term Key)
(2)比對Client產生出來的Digest和KDC產生出來的Digest是否相同
(3)KDC產生一Session Key給KDC和Client
Step1:需求與安裝
1.Kerberos (RedHat 光碟中 krb5*.rpm 可找到)
2.samba3.x (可到 samba 網站下載)
samba 3.x 安裝之前先移除 samba 2.x 的版本
[root@benjr ~]#rpm -e samba-swat [root@benjr ~]#rpm -e samba-client [root@benjr ~]#rpm -e redhat-config-samba [root@benjr ~]#rpm -e samba [root@benjr ~]#rpm -e samba-common [root@benjr ~]#rpm -ivh samba-3.....i386.rpm
Step2: samba 的設定
我們假設已經有一個 Windows AD 網域 SUN.COM 的存在了
[root@benjr ~]#vi /etc/samba/smb.conf ------------------------------------------------------------------------------ workgroup = SUN netbios name = benjr realm = SUN.COM security = ads password server = sun.com encrypt password = yes
說明
- workgroup = SUN
所在的網域名稱 - netbios name = benjr
netbios name 也就是 windows 的電腦名稱 - realm = SUN.COM
這裡我自己架的 Windows 2000 server 的網域名稱為 SUN.COM (記得這裡一定要大寫) - security = ads
指定 samba server 為 ADS Domain Membership - password server = sun.com
這裡要指定你的 windows kerberos server 是哪一台,我的則是放在同一台中. - encrypted password = yes
密碼的傳送要先加密
重新啟動 samba server
[root@benjr ~]#service smb restart Restarting SMB services: Shutting down SMB services : [ OK ] Starting down SMB services: [ OK ]
Step3: PAM 的設定
[root@benjr ~]#vi /etc/pam.d/system-auth #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is run. auth required /lib/security/$ISA/pam_env.so auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok auth sufficient /lib/security/$ISA/pam_krb5.so use_first_pass auth required /lib/security/$ISA/pam_deny.so account required /lib/security/$ISA/pam_unix.so account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] /lib/security/$ISA/pam_krb5.so password required /lib/security/$ISA/pam_cracklib.so retry=3 type= password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow password sufficient /lib/security/$ISA/pam_krb5.so use_authtok password required /lib/security/$ISA/pam_deny.so session required /lib/security/$ISA/pam_limits.so session required /lib/security/$ISA/pam_unix.so session optional /lib/security/$ISA/pam_krb5.so
這邊的設定對於加入網域並沒有影響,但是如果你其他 Linux 下的服務也要使用 Kerberos 作為身份認證時那這些設定將會影響所有的服務,請參考 samba(winbind) 的說明.
Step4: kerberos 的設定
主要修改 /etc/krb5.conf 檔案,並指定 kdc
[root@benjr ~]#vi /etc/krb5.cong [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] ticket_lifetime = 24000 default_realm = SUN.COM dns_lookup_realm = false dns_lookup_kdc = false [realms] EXAMPLE.COM = { kdc = kerberos.example.com:88 admin_server = kerberos.example.com:749 default_domain = example.com } SUN.COM = { kdc = SUN.COM:88 admin_server = SUN.COM:749 } [domain_realm] .example.com = SUN.COM example.com = SUN.COM [kdc] profile = /var/kerberos/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } [root@benjr ~]#vi /var/kerberos/krb5kdc/kdc.conf [kdcdefaults] acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab v4_mode = nopreauth [realms] SUN.COM = { master_key_type = des-cbc-crc supported_enctypes = des3-cbc-sha1:normal des3-cbc-sha1:norealm des3-cbc-sha1:onlyrealm des-cbc-crc:v4 des-cbc-crc:afs3 des-cbc-crc:normal des-cbc-crc:norealm des-cbc-crc:onlyrealm des-cbc-md4:v4 des-cbc-md4:afs3 des-cbc-md4:normal des-cbc-md4:norealm des-cbc-md4:onlyrealm des-cbc-md5:v4 des-cbc-md5:afs3 des-cbc-md5:normal des-cbc-md5:norealm des-cbc-md5:onlyrealm des-cbc-sha1:v4 des-cbc-sha1:afs3 des-cbc-sha1:normal des-cbc-sha1:norealm des-cbc-sha1:onlyrealm }
這邊網域名稱都要大寫
先來驗證看看我們指定的 Kerberos server 是否工作正確
[root@benjr ~]#kinit administrator@SUN.COM password for administrator@SUN.COM
這裡的網域名稱必須為大寫,輸入密碼後,若無訊息表示成功,可以加上 -V, 顯示更多訊息 kinit 的工作是取得 kerberos 核發的 ticket (取得後使用者將不需再輸入帳號密碼來存取資源)除了手動設定外 PAM 與 kerberos ,還可以用 RedHat 提供工具來設定 1.setup 選 Authentication configuration 2.authconfig
這些工具還會修改到 PAM 的設定檔 /etc/pam.d/system-auth ,以及 /etc/krb5.conf , /var/kerberos/krb5kdc/kdc.conf
Step5:加入 AD
[root@benjr ~]#net join -U administrator administrator password:
輸入密碼後,應該就會顯示成功訊息~
Joined 'benjr' to realm 'SUN.COM'
or
[root@benjr ~]#kinit administrator@SUN.COM Password for administrator@DEXTER.COM #net ads join Joined 'benjr' to realm 'SUN.COM'
此時你可以執行 Windows 2000 server "開始/程式集/系統管理工具/Active Directory 使用者及電腦" 就可以看到 unsvr01 已經加入網域中了.
Step6: Windows and linux clients
一般 windows 使用者在加入網域後存取並不會有太大的問題,但 Linux 的 clients 的使用者需要向 kerberos 要求 ticket.
步驟如下
[root@benjr ~]#kinit user1@SUN.COM
取得 kerberos 核發的 ticket,可以用 klist 來看 kerberos 核發的 kicket 狀態
[root@benjr ~]#klist Ticket cache:File:/tmp/krb5cc_0 Default principal:user1@SUN.COM valid starting Expires Service principal 09/09/04 11:08:13 09/09/04 21:08:13 krbtgt/SUN.COM@SUN.COM
接下來就可以用 smbmount 將我們要的 share folder mount 起來
[root@benjr ~]#smbclient -L sun01 -k
-k 代表要用 kerberos authentication
2 thoughts on “Linux samba-ADS Security Mode”