samba PDC 使用LDAP認證
一般的 Linux clients 可以直接使用 PAM 來支援 LDAP 目錄的身份驗證,但是 Windows clients 會主動找尋 AD 或 PDC 來做身分認證,所以有兩種方式來設定 windows clients 用 openLDAP 來做身分認證
1.修改 windows client 的認證方式,可以使用 pGina 來改變它的認證方式,有興趣的可以參考 pGina 的網站
2.用 samba 架 PDC 這將是我採用的方式.
Step0:需求
1.openldap (RedHat 光碟中 openldap.xxx.rpm 可找到)
2.samba3.x (可到 samba 網站下載)
note: samba 2.x 預設的版本並不支援 LDAP 目錄的認證,需要重新編輯過才能使用,不過目前大多數的 Linux 都已經採用了 samba 3 的版本這步驟就可以省略.
source rpm 可由 RedHat Linux 光碟片或網站 http://www.samba.org/samba/download.html取得.
[root@benjr ~]# rpm -ivh samba-xxx.src.rpm
安裝 samba source rpm 後,要修改 /usr/src/redhat/SPECS/samba.spec
[root@benjr ~]# cd /usr/src/redhat/SPECS/ [root@benjr ~]# vi samba.spec ……略………………. %configure \ –with-ldapsam \ ……略……………….
在 %configure \ 下加入–with-ldapsam
[root@benjr ~]# rpmbuild -ba samba.spec
-ba build binary and source packages
會產生五個新的 rpm 在 /usr/src/redhat/RPMS/i386 下面,使用這些新的 rpm 來安裝,samba 3.0 已經支援 LDAP 目錄的認證.
加入 include /etc/openldap/schema/samba.schema 這一行,以支援 samba 使用 LDAP 的認證,但 samba.schema 檔案並不是存放在 /etc/openldap/schema/ 目錄下,而且它是包在 samba.xxxx.rpm 中,安裝後存放在 /usr/share/doc/samba-xx/LDAP/ 目錄下.所以要手動複製檔案至 /etc/openldap/schema/ 目錄下.
[root@benjr ~]# cp /usr/share/doc/samba-xx/LDAP/samba.schema /etc/openldap/schema/
並且修改 slapd.conf
[root@benjr ~]# vi /etc/openldap/slapd.conf # $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.7 2001/09/27 20:00:31 kurt Exp $ # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/samba.schema include /etc/openldap/schema/redhat/rfc822-MailMember.schema include /etc/openldap/schema/redhat/autofs.schema include /etc/openldap/schema/redhat/kerberosobject.schema
這樣就大致完成了 samba LDAP 伺服器端的安裝.
Step1:安裝
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 : OpenLDAP 的設定
關於 OpenLDAP 的設定安裝,下面連結將會講到如何設定 OpenLDAP Server LDAP(安裝)
Step3:Samba的設定
假設 openldap 已經裝好了,而且設定的網域如下
baseDN : dc=example,dc=com
bindDN : cn=Manager,dc=example,dc=com
修改 smb.conf global 的部份加上支援 LDAP 身份驗證的設定:
[root@benjr ~]# vi /etc/samba/smb.conf workgroup = example netbios name =sun01 ldap admin dn = "cn=Manager,dc=example,dc=com" passdb backend = ldapsam:ldap://192.0.0.1, guest ldap ssl = off ldap suffix = "dc=example,dc=com" security = user encrypt passwords = yes
說明
- workgroup = EXAMPLE
所在的網域名稱,也是 OpenLDAP 之前設定的 - netbios name =sun01
netbios name 也就是 windows 的電腦名稱 - ldap admin dn = “cn=Manager,dc=example,dc=com”
OpenLDAP 之前設定的管理者 - passdb backend = ldapsam:ldap://192.0.0.1, guest
指定身份驗證交給 ldap server 來處理,其中的 IP 就是你的 OpenLDAP server 的 IP - ldap ssl = off
指定資料在網路傳送是否經由 ssl 加密,可用選項為 off:不使用 1.on(default):使用 2.ssl 加密 3.start tls:使用 tls(類似 ssl) 加密 - ldap suffix = “dc=example,dc=com”
samba 會從此資料路徑開始找起 - security = user
密碼驗證指定為 user - encrypt passwords = yes
密碼的傳送要先加密
還要修改 smb.conf global 的部份加上 PDC 的設定
[root@benjr ~]# vi /etc/samba/smb.conf local master = yes os level = 64 domain master = yes prepferred master = yes domain logons = yes
note: samba PDC 的相關資料請參考下列的連結
[root@benjr ~]# chkconfig smb on
重新啟動 samba server
[root@benjr ~]#service smb restart Restarting SMB services: Shutting down SMB services : [ OK ] Starting down SMB services: [ OK ]
samba 要與 openldap 溝通前,samba 要先將 openldap 的密碼存在 /etc/samba/secrets.tdb,密碼就是剛剛設定 openldap 時要一樣
[root@benjr ~]# smbpasswd -w secret setting stored password for "cn=Manager,dc=example,dc=com" in secrets.tdb
最後我們還要修改 openldap 使用者的資料,才能給 samba 使用
Step4:新增 samba account LDAP 的登錄檔 I. 現在新增第一筆 BDN.ldif (Base Distinguish Name)資料至 openldap
[root@benjr ~]# vi BDN.ldif dn:dc=example,dc=com objectclass:top objectclass:Domain dc:example
至於他們各代表什麼意思請參考
執行 ldapadd 將資料加入 OpenLDAP 中
[root@benjr ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f BDN.ldif Enter LDAP Password: adding new entry "dc=example,dc=com"
這樣就成功加入一筆資料
II.新增使用者資料至 openldap
這裡的使用者將會給 Linux 與 Windows 的 client 來使用,所以會有較多的屬性設定
[root@benjr ~]# vi user1.ldif dn: uid=user1,dc=example,dc=com uid: user1 cn: user1 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: shadowLastChange: 12374 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 500 homeDirectory: /home/user1
userPassword: 不用先設定.之後再用 ldappasswd 設定即可,至於他們各代表什麼意思請參考 LDAP(帳號伺服器)
執行 ldapadd 將資料加入 OpenLDAP 中
[root@benjr ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user1.ldif Enter LDAP Password: adding new entry "uid=user1,dc=example,dc=com"
這樣就成功加入一筆資料,最後再設定使用者密碼即可.
[root@benjr ~]# ldappasswd -x -D "cn=Manager,dc=example,dc=com" -W "uid=user1,dc=example,dc=com" -S New password: Re-enter new password: Enter bind password: Result: Success (0)
note:"Enter bind password" 是 "cn=Manager,dc=example,dc=com" 管理者的密碼
來搜尋一下結果吧
[root@benjr ~]# ldapsearch -x -b 'uid=user1,dc=example,dc=com' dn: uid=user1,dc=example,dc=com uid: user1 cn: user1 objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 11933 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 501 gidNumber: 501 homeDirectory: /home/user1 userPassword:: e1NTSEF9YUtuMFNWT0ZrcW5qSks3Q2FBVytzdUtJYnFUdUFWZkw=
可以看到 'uid=user1,dc=example,dc=com' 成功加入,但這樣的資料還無法給 samba 來使用,這些資料只是給 LDAP 的 Linux clients 使用,如果要給 samb PDC 的使用者登入使用,就要將 samba 所需的資料補上去.
III.加入 sambaAccount 至 openldap 使用者
[root@benjr ~]# smbpasswd -a root
因為只有 root 有權限將使用者加入網域,所以我們必須要將 root 這個使用者加入 ldap 的使用者資料庫中.
[root@benjr ~]# adduser user1 [root@benjr ~]# passwd user1 Changing password for user user1. New password: Retype new password: passwd: all authentication tokens updated successfully
因為在使用下面指令時使用者必須先存在 /etc/passwd
[root@benjr ~]# smbpasswd -a user1 New SMB password: Retype new SMB password: Added user user1
來搜尋一下結果吧
[root@benjr ~]# ldapsearch -x -b "uid=user1,dc=example,dc=com" dn: uid=user1,dc=example,dc=com ………………略…………………… sambaSID: S-1-5-21-710610727-3552547972-1245264387-2000 sambaPrimaryGroupSID: S-1-5-21-710610727-3552547972-1245264387-2001 sambaPwdCanChange: 1069184314 sambaPwdMustChange: 2147483647 sambaLMPassword: FC26CDB2863917C1AAD3B435B51404EE sambaNTPassword: 00B2C85DDFBD8CC81602D6FC7340EB0B sambaPwdLastSet: 1069184314 sambaAcctFlags: [U ]
可以看到很多以 samba 開頭的資料這些都是 openLDAP 要驗證 samba 使用者所需的資料
- sambaSID:
The security identifier(SID) of the user.The Windows equivalent of UNIX UIDs. - sambaPrimaryGroupSID:
The security Identifier(SID) of the primary group of the user - sambaPwdCanChange:
Specifies the time (UNIX time format) from which on the user is allowed to chamge his password. If attribute is not set,the user will be free to change his password whenever the wants. - sambaPwdMustChange:
Specifies the time (UNIX time format) since when the user is forced to change his password. If this value is set to "0", the user will have to change his password at first login. If this attribute is not set , then the password will never expire. - sambaLMPassword:
The LANMAN password 16-byte hash stored as a character represemtation of a hexadecimal - sambaNTPassword:
The LANMAN password 16-byte hash stored as a character represemtation of a hexadecimal - sambaPwdLastSet:
The integer time in seconds since 1970 when the lmPassword and ntPassword attributes were last set - sambaAcctFlags:
string of 11 characters surrounded by square brackets [] representing account flags such as U(user),W(workatation),X(no password expiration),I(Domain trust account),H(Home dir required),S(Server trust account), and D(Disabled)
IV.加入使用者的電腦名稱帳號
[root@benjr ~]# adduser computername$
這裡是加入使用者的電腦名稱的帳號,記得要以 $ 為結尾
[root@benjr ~]# smbpasswd -a -m computername<MACHINE_NAME>$
這時就可以將這筆資料加入至 ldap 資料庫中
Step 5.Windows clients 的登入
現在 Windows Clients 就可以用 LDAP 目錄來做身份驗證,詳細方法請參考 LDAP(用戶端)
One thought on “LDAP-用於 samba PDC 認證”