1,967 瀏覽數

samba-ADS Security Mode

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 還是可以加入網域
其示意圖如下
ads
關於 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
winbind100
這些工具還會修改到 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 已經加入網域中了.
joined

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 個網友的想法 “samba-ADS Security Mode

  1. 自動參照通知: RHEL5 – Samba | Benjr.tw

  2. 自動參照通知: samba | Benjr.tw

發表迴響