5,719 瀏覽數

LDAP-用於 samba PDC 認證

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(用戶端)

網友的想法

  1. 自動參照通知: LDAP | Benjr.tw

發表迴響