Linux – samba Join Domain

Linux 可以藉由 samba server 去 join windows 網域,可以藉此來存取網域的資料

samba 2.X 的方式

samba 2.X 是將 samba server 模擬成 Windows NT 4.X 的機器來和網域溝通.

Step1:需求與安裝

samba2.x 可到 samba 網站下載.

Step2: samba 的設定

我們假設已經有一個 Windows AD 網域 SUN.COM 的存在了

[root@benjr ~]#vi /etc/samba/smb.conf
workgroup = SUN
netbios name = unsvr01
security = domain
encrypt passwords =yes

workgroup = SUN # 所在的網域名稱
netbios name = unsvr01 # netbios name 也就是 windows 的電腦名稱
security = domain # 修改自己所處的網域
encrypt passwords =yes # 密碼以加密的方式驗證.

重新啟動 samba server

[root@benjr ~]#service smb restart
Restarting SMB services: Shutting down SMB services : [  OK  ]
Starting down SMB services:                           [  OK  ]

Step3:加入 Domain

[root@benjr ~]#smbpasswd -j Domain_name -r DC_machine -U Domain_username
Passwd:
Joined domain Domain_name

此時你可以執行 Windows 2000 server "開始/程式集/系統管理工具/Active Directory 使用者及電腦" 就可以看到 unsvr01 已經加入網域中了.
joined

samba 3.X 的方式

samba 3.X 中加入一個新的模式  samba ADS Domain Membership (samba 模擬成 Windows 2000),此時就算網域為 Native mode(身份認證採用 kerberos 模式) , samba 還是可以加入網域.

Step1:需求與安裝

1.Kerberos (RedHat 光碟中 krb5*.rpm 可找到)
2.samba3.x  (可到 samba 網站下載) Step2: samba 的設定
我們假設已經有一個 Windows AD 網域 SUN.COM 的存在了

[root@benjr ~]#vi /etc/samba/smb.conf 
workgroup = SUN
netbios name = unsvr01
realm = SUN.COM 
security = ads 
password server = sun.com 
encrypt password = yes 

說明
workgroup = SUN #所在的網域名稱
netbios name = unsvr01 #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

這邊主要加入 kerberos 驗證的 PAM 模組.

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
 }

這邊網域名稱都要大寫,其中的 SUN.COM 請改成你所在的網域名稱
先來驗證看看我們指定的 Kerberos server 是否能正確工作

[root@benjr ~]# kinit administrator@SUN.COM
password for administrator@SUN.COM

這裡的網域名稱必須為大寫,輸入密碼後,若無訊息表示成功,可以加上 -V, 顯示更多訊息
kinit 的工作是取得 kerberos 核發的 ticket (取得後使用者將不需再輸入帳號密碼來存取資源)
在加入網域會發生下面的常見問題
1.網域名稱一定要大寫,否則會得到下列的錯誤訊息

kinit(v5): Cannot find KDC for requested realm while getting initial credentials

2.如果輸入密碼錯誤,會得到下列的錯誤訊息

kinit(v5):Preauthentication failed while getting initial credentials

3.Windows Administrator password 不能少於6碼,要不然會到下列的錯誤訊息

kinit(v5):KDC has no support for encryption type while getting inital credentials.

在向 kerberos 要求 ticket 時會發生下面的常見問題
1.如果兩台機器的時間相差超過 5 mins 你將無法獲得 kerberos 核發的 ticket,並得到下列的錯誤訊息

kinit(v5)Clock skew too great while getting initial credentials if the time difference is more than five minutes

2.當你尚未加入 Windows 網域時,去向 kerberos 要求 ticket 會得到下列的錯誤

kinit(v5):Cannot read password while getting initial credentials

除了手動設定外 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 'unsvr01' to realm 'SUN.COM'

or

[root@benjr ~]#kinit administrator@SUN.COM
Password for administrator@SUN.COM
[root@benjr ~]#net ads join
Joined 'unsvr01' to realm 'SUN.COM'

此時你可以執行 Windows 2000 server "開始/程式集/系統管理工具/Active Directory 使用者及電腦" 就可以看到 unsvr01 已經加入網域中了.
joined

3 thoughts on “Linux – samba Join Domain

  1. 通告: samba | Benjr.tw

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料