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 已經加入網域中了.
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
這些工具還會修改到 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 已經加入網域中了.
3 thoughts on “Linux – samba Join Domain”