CentOS7上搭建LDAP-PDC并且将windows 2008 R2加入LDAP-PDC域

 

  由于测试原因,要涉及到将windows机器加入到ldap域,所以查看各种文档进行ldap-pdc域的搭建,并成功将windows 2008r2加入到ldap-pdc域中。下面简单记录一下搭建过程

  Linux : CentOS7.4.1708  ip:10.2.48.125

  Windows  : Windows 2008 R2 ip:10.2.48.86

  配置了163yum源,并且把seLinux关闭

  先安装openldap 和 samba

1 yum install openldap openldap-clients openldap-servers migrationtools samba

     更改配置文件

1 cp /usr/share/doc/samba-4.7.1/LDAP/samba.ldif  /etc/openldap/schema/
2 cp /usr/share/openldap-servers/slapd.ldif  /home/

 生成ldap的管理密码slappasswd

1 [root@ldap-pdc ~]# slappasswd 
2 New password: 
3 Re-enter new password: 
4 {SSHA}sGQJ/b8qamHOmbbBxdxUldfxm3R6ODIj

将slapd.ldif中的dc=my-doamin,dc=com修改为自己的域名,例如我的dc=ldap-pdc,dc=com,并添加部分配置文件,贴出配置文件,标红的位置需要修改

  1 #
  2 # See slapd-config(5) for details on configuration options.
  3 # This file should NOT be world readable.
  4 #
  5 
  6 dn: cn=config
  7 objectClass: olcGlobal
  8 cn: config
  9 olcArgsFile: /var/run/openldap/slapd.args
 10 olcPidFile: /var/run/openldap/slapd.pid
 11 #
 12 # TLS settings
 13 #
 14 olcTLSCACertificatePath: /etc/openldap/certs
 15 olcTLSCertificateFile: "OpenLDAP Server"
 16 olcTLSCertificateKeyFile: /etc/openldap/certs/password
 17 #
 18 # Do not enable referrals until AFTER you have a working directory
 19 # service AND an understanding of referrals.
 20 #
 21 #olcReferral: ldap://root.openldap.org
 22 #
 23 # Sample security restrictions
 24 #       Require integrity protection (prevent hijacking)
 25 #       Require 112-bit (3DES or better) encryption for updates
 26 #       Require 64-bit encryption for simple bind
 27 #
 28 #olcSecurity: ssf=1 update_ssf=112 simple_bind=64
 29 
 30 
 31 #
 32 # Load dynamic backend modules:
 33 # - modulepath is architecture dependent value (32/64-bit system)
 34 # - back_sql.la backend requires openldap-servers-sql package
 35 # - dyngroup.la and dynlist.la cannot be used at the same time
 36 #
 37 
 38 #dn: cn=module,cn=config
 39 #objectClass: olcModuleList
 40 #cn: module
 41 #olcModulepath: /usr/lib/openldap
 42 #olcModulepath: /usr/lib64/openldap
 43 #olcModuleload: accesslog.la
 44 #olcModuleload: auditlog.la
 45 #olcModuleload: back_dnssrv.la
 46 #olcModuleload: back_ldap.la
 47 #olcModuleload: back_mdb.la
 48 #olcModuleload: back_meta.la
 49 #olcModuleload: back_null.la
 50 #olcModuleload: back_passwd.la
 51 #olcModuleload: back_relay.la
 52 #olcModuleload: back_shell.la
 53 #olcModuleload: back_sock.la
 54 #olcModuleload: collect.la
 55 #olcModuleload: constraint.la
 56 #olcModuleload: dds.la
 57 #olcModuleload: deref.la
 58 #olcModuleload: dyngroup.la
 59 #olcModuleload: dynlist.la
 60 #olcModuleload: memberof.la
 61 #olcModuleload: pcache.la
 62 #olcModuleload: ppolicy.la
 63 #olcModuleload: refint.la
 64 #olcModuleload: retcode.la
 65 #olcModuleload: rwm.la
 66 #olcModuleload: seqmod.la
 67 #olcModuleload: smbk5pwd.la
 68 #olcModuleload: sssvlv.la
 69 #olcModuleload: syncprov.la
 70 #olcModuleload: translucent.la
 71 #olcModuleload: unique.la
 72 #olcModuleload: valsort.la
 73 #
 74 # Schema settings
 75 #
 76 
 77 dn: cn=schema,cn=config
 78 objectClass: olcSchemaConfig
 79 cn: schema
 80 
 81 include: file:///etc/openldap/schema/core.ldif
 82 include: file:///etc/openldap/schema/corba.ldif
 83 include: file:///etc/openldap/schema/cosine.ldif
 84 include: file:///etc/openldap/schema/duaconf.ldif
 85 include: file:///etc/openldap/schema/dyngroup.ldif
 86 include: file:///etc/openldap/schema/inetorgperson.ldif
 87 include: file:///etc/openldap/schema/java.ldif
 88 include: file:///etc/openldap/schema/misc.ldif
 89 include: file:///etc/openldap/schema/nis.ldif
 90 include: file:///etc/openldap/schema/openldap.ldif
 91 include: file:///etc/openldap/schema/ppolicy.ldif
 92 include: file:///etc/openldap/schema/collective.ldif
 93 include: file:///etc/openldap/schema/samba.ldif
 94 
 95 
 96 
 97 #
 98 # Frontend settings
 99 #
100 
101 dn: olcDatabase=frontend,cn=config
102 objectClass: olcDatabaseConfig
103 objectClass: olcFrontendConfig
104 olcDatabase: frontend
105 #
106 # Sample global access control policy:
107 #       Root DSE: allow anyone to read it
108 #       Subschema (sub)entry DSE: allow anyone to read it
109 #       Other DSEs:
110 #               Allow self write access
111 #               Allow authenticated users read access
112 #               Allow anonymous users to authenticate
113 #
114 #olcAccess: to dn.base="" by * read
115 #olcAccess: to dn.base="cn=Subschema" by * read
116 #olcAccess: to *
117 #       by self write
118 #       by users read
119 #       by anonymous auth
120 #
121 # if no access controls are present, the default policy
122 # allows anyone and everyone to read anything but restricts
123 # updates to rootdn.  (e.g., "access to * by * read")
124 #
125 # rootdn can always read and write EVERYTHING!
126 #
127 
128 #
129 # Configuration database
130 #
131 
132 dn: olcDatabase=config,cn=config
133 objectClass: olcDatabaseConfig
134 olcDatabase: config
135 olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,c
136  n=auth" manage by * none
137 
138 #
139 # Server status monitoring
140 #
141 dn: olcDatabase=monitor,cn=config
142 objectClass: olcDatabaseConfig
143 olcDatabase: monitor
144 olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,c
145  n=auth" read by dn.base="cn=Manager,dc=ldap-pdc,dc=com" read by * none
146 
147 #
148 # Backend database definitions
149 #
150 
151 dn: olcDatabase=hdb,cn=config
152 objectClass: olcDatabaseConfig
153 objectClass: olcHdbConfig
154 olcDatabase: hdb
155 olcSuffix: dc=ldap-pdc,dc=com
156 olcRootDN: cn=Manager,dc=ldap-pdc,dc=com
157 olcDbDirectory: /var/lib/ldap
158 olcDbIndex: objectClass eq,pres
159 olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
160 olcRootPW:      {SSHA}CC+i80oqumZigXsWtKf4PJFHEfmyUtTd     #密码前边是TAB贱,注意不要留空格

  执行命令

1 rm -rf /etc/openldap/slapd.d/*
2 slapadd -F /etc/openldap/slapd.d/ -n 0 -l /home/slapd.ldif
3 slaptest -u -F /etc/openldap/slapd.d/

   当出现

1 [root@ldap-pdc home]# slaptest -u -F /etc/openldap/slapd.d/
2 config file testing succeeded
3 [root@ldap-pdc home]# 

  代表配置文件没有问题。可以往下进行

  执行命令

1 chown -Rv ldap.ldap /etc/openldap/slapd.d
2 cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
3 chown -Rv ldap.ldap /var/lib/ldap/DB_CONFIG
4 systemctl start slapd.service

  当显示

 1 [root@ldap-pdc home]# systemctl status slapd.service 
 2 ● slapd.service - OpenLDAP Server Daemon
 3    Loaded: loaded (/usr/lib/systemd/system/slapd.service; disabled; vendor preset: disabled)
 4    Active: active (running) since Wed 2018-06-06 11:18:27 CST; 1 day 8h ago
 5      Docs: man:slapd
 6            man:slapd-config
 7            man:slapd-hdb
 8            man:slapd-mdb
 9            file:///usr/share/doc/openldap-servers/guide.html
10   Process: 1218 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
11   Process: 1180 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
12  Main PID: 1220 (slapd)
13    CGroup: /system.slice/slapd.service
14            └─1220 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:///

  生成基本的ldap数据

 1 vim /usr/share/migrationtools/migrate_common.ph
 2 
 3 # Default DNS domain
 4 $DEFAULT_MAIL_DOMAIN = "ldap-pdc.com";
 5 
 6 # Default base
 7 $DEFAULT_BASE = "dc=ldap-pdc,dc=com";
 8 
 9 
10 chmod +x /usr/share/migrationtools/migrate_common.ph
11 /usr/share/migrationtools/migrate_base.pl > /root/base.ldif 
12 /usr/share/migrationtools/migrate_passwd.pl /etc/passwd /root/user.ldif
13 /usr/share/migrationtools/migrate_group.pl /etc/group /root/group.ldif

   在bash.ldif和user.ldif以及group.ldif文件中删除与ldap无关的信息,之后进行数据的导入

1 ldapadd -D "cn=Manager,dc=ldap-pdc,dc=com" -W -x -f base.ldif
2 ldapadd -D "cn=Manager,dc=ldap-pdc,dc=com" -W -x -f group.ldif
3 ldapadd -D "cn=Manager,dc=ldap-pdc,dc=com" -W -x -f user.ldif

   如果无报错信息,就代表数据正常导入。

  配置ldap日志

1 vi /etc/rsyslog.conf
2 
3 local4.*    /var/log/ldap.log    #尾部添加
4 
5 
6 touch /var/log/ldap.log         #创建日志文件
7 systemctl restart rsyslog.service   重启服务

  下面配置samba 

1 yum  install nss-pam-ldapd samba-winbind sssd-ldap perl perl-LDAP.noarch epel-release smbldap-tools.noarch   sssd* pam_ldap openldap-clients 
2 cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
3 cp /usr/share/doc/smbldap-tools-0.9.11/smb.conf.example /etc/samba/smb.conf

 

 1 vim /etc/samba/smb.conf
 2 
 3 
 4 
 5 
 6 [global]
 7         workgroup = ldap-pdc
 8         netbios name = PDC-SRV
 9 
10         deadtime = 10
11 
12         log level = 1
13         log file = /var/log/samba/log.%m
14         max log size = 5000
15         debug pid = yes
16         debug uid = yes
17         utmp = yes
18 
19         security = user
20         domain logons = yes
21         os level = 64
22         logon path =
23         logon home =
24         logon drive =
25         logon script =
26 
27         passdb backend = ldapsam:"ldap://10.2.48.125"
28         ldap ssl = no
29         ldap admin dn = cn=Manager,dc=ldap-pdc,dc=com
30         ldap delete dn = no
31 
32         ## Sync UNIX password with Samba password
33         ## Method 1:
34         unix password sync = no
35         ldap password sync = yes
36         ## Method 2:
37         ;ldap password sync = no
38         ;unix password sync = yes
39         ;passwd program = /usr/sbin/smbldap-passwd -u '%u'
40         ;passwd chat = "Changing *\nNew password*" %n\n "*Retype new password*" %n\n"
41 
42         ldap suffix = dc=ldap-pdc,dc=com
43         ldap user suffix = ou=Users
44         ldap group suffix = ou=Groups
45         ldap machine suffix = ou=Computers
46         ldap idmap suffix = ou=Idmap
47         add user script = /usr/sbin/smbldap-useradd -m '%u' -t 1
48         rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold'
49         delete user script = /usr/sbin/smbldap-userdel '%u'
50         set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
51         add group script = /usr/sbin/smbldap-groupadd -p '%g'
52         delete group script = /usr/sbin/smbldap-groupdel '%g'
53         add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
54         delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
55         add machine script = /usr/sbin/smbldap-useradd -w '%u' -t 1
56 
57 [NETLOGON]
58         path = /var/lib/samba/netlogon
59         browseable = no
60 
61 [PROFILES]
62         path = /var/lib/samba/profiles
63         browseable = no
64         writeable = yes
65         create mask = 0611
66         directory mask = 0700
67         csc policy = disable
68         map system = yes
69         map hidden = yes

  上述内容根据需要进行定制。

1 systemctl startt smb
2 smbldap-config
3 smbldap-populate

  修改nsswitch.conf

 1 # To use db, put the "db" in front of "files" for entries you want to be
 2 # looked up first in the databases
 3 #
 4 # Example:
 5 #passwd:    db files nisplus nis
 6 #shadow:    db files nisplus nis
 7 #group:     db files nisplus nis
 8 
 9 passwd:     files ldap
10 shadow:     files ldap
11 group:      files ldap
12 #initgroups: files sss
13 
14 #hosts:     db files nisplus nis dns
15 hosts:      files ldap myhostname
16 
17 # Example - obey only what nisplus tells us...
18 #services:   nisplus [NOTFOUND=return] files
19 #networks:   nisplus [NOTFOUND=return] files
20 #protocols:  nisplus [NOTFOUND=return] files
21 #rpc:        nisplus [NOTFOUND=return] files
22 #ethers:     nisplus [NOTFOUND=return] files
23 #netmasks:   nisplus [NOTFOUND=return] files     
24 
25 bootparams: nisplus [NOTFOUND=return] files
26 
27 ethers:     files
28 netmasks:   files
29 networks:   files
30 protocols:  files
31 rpc:        files
32 services:   files sss
33 
34 netgroup:   files  ldap
35 
36 publickey:  nisplus
37 
38 automount:  files ldap
39 aliases:    files nisplus

  修改/etc/nslcd.conf文件

  1 # This is the configuration file for the LDAP nameservice
  2 # switch library's nslcd daemon. It configures the mapping
  3 # between NSS names (see /etc/nsswitch.conf) and LDAP
  4 # information in the directory.
  5 # See the manual page nslcd.conf(5) for more information.
  6 
  7 # The user and group nslcd should run as.
  8 uid nslcd
  9 gid ldap
 10 
 11 # The uri pointing to the LDAP server to use for name lookups.
 12 # Multiple entries may be specified. The address that is used
 13 # here should be resolvable without using LDAP (obviously).
 14 #uri ldap://127.0.0.1/
 15 #uri ldaps://127.0.0.1/
 16 #uri ldapi://%2fvar%2frun%2fldapi_sock/
 17 # Note: %2f encodes the '/' used as directory separator
 18 uri ldap://10.2.48.125/
 19 
 20 # The LDAP version to use (defaults to 3
 21 # if supported by client library)
 22 #ldap_version 3
 23 
 24 # The distinguished name of the search base.
 25 base dc=ldap-pdc,dc=com
 26 
 27 # The distinguished name to bind to the server with.
 28 # Optional: default is to bind anonymously.
 29 #binddn cn=proxyuser,dc=example,dc=com
 30 
 31 # The credentials to bind with.
 32 # Optional: default is no credentials.
 33 # Note that if you set a bindpw you should check the permissions of this file.
 34 #bindpw secret
 35 
 36 # The distinguished name to perform password modifications by root by.
 37 #rootpwmoddn cn=admin,dc=example,dc=com
 38 
 39 # The default search scope.
 40 #scope sub
 41 #scope one
 42 #scope base
 43 
 44 # Customize certain database lookups.
 45 #base   group  ou=Groups,dc=example,dc=com
 46 #base   passwd ou=People,dc=example,dc=com
 47 #base   shadow ou=People,dc=example,dc=com
 48 #scope  group  onelevel
 49 #scope  hosts  sub
 50 
 51 # Bind/connect timelimit.
 52 #bind_timelimit 30
 53 
 54 # Search timelimit.
 55 #timelimit 30
 56 
 57 # Idle timelimit. nslcd will close connections if the
 58 # server has not been contacted for the number of seconds.
 59 #idle_timelimit 3600
 60 
 61 # Use StartTLS without verifying the server certificate.
 62 #ssl start_tls
 63 #tls_reqcert never
 64 
 65 # CA certificates for server certificate verification
 66 #tls_cacertdir /etc/ssl/certs
 67 #tls_cacertfile /etc/ssl/ca.cert
 68 
 69 # Seed the PRNG if /dev/urandom is not provided
 70 #tls_randfile /var/run/egd-pool
 71 
 72 # SSL cipher suite
 73 # See man ciphers for syntax
 74 #tls_ciphers TLSv1
 75 
 76 # Client certificate and key
 77 # Use these, if your server requires client authentication.
 78 #tls_cert
 79 #tls_key
 80 
 81 # Mappings for Services for UNIX 3.5
 82 #filter passwd (objectClass=User)
 83 #map    passwd uid              msSFU30Name
 84 #map    passwd userPassword     msSFU30Password
 85 #map    passwd homeDirectory    msSFU30HomeDirectory
 86 #map    passwd homeDirectory    msSFUHomeDirectory
 87 #filter shadow (objectClass=User)
 88 #map    shadow uid              msSFU30Name
 89 #map    shadow userPassword     msSFU30Password
 90 #filter group  (objectClass=Group)
 91 #map    group  member           msSFU30PosixMember
 92 
 93 # Mappings for Services for UNIX 2.0
 94 #filter passwd (objectClass=User)
 95 #map    passwd uid              msSFUName
 96 #map    passwd userPassword     msSFUPassword
 97 #map    passwd homeDirectory    msSFUHomeDirectory
 98 #map    passwd gecos            msSFUName
 99 #filter shadow (objectClass=User)
100 #map    shadow uid              msSFUName
101 #map    shadow userPassword     msSFUPassword
102 #map    shadow shadowLastChange pwdLastSet
103 #filter group  (objectClass=Group)
104 #map    group  member           posixMember
105 
106 # Mappings for Active Directory
107 #pagesize 1000
108 #referrals off
109 #idle_timelimit 800
110 #filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
111 #map    passwd uid              sAMAccountName
112 #map    passwd homeDirectory    unixHomeDirectory
113 #map    passwd gecos            displayName
114 #filter shadow (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
115 #map    shadow uid              sAMAccountName
116 #map    shadow shadowLastChange pwdLastSet
117 #filter group  (objectClass=group)
118 
119 # Alternative mappings for Active Directory
120 # (replace the SIDs in the objectSid mappings with the value for your domain)
121 #pagesize 1000
122 #referrals off
123 #idle_timelimit 800
124 #filter passwd (&(objectClass=user)(objectClass=person)(!(objectClass=computer)))
125 #map    passwd uid           cn
126 #map    passwd uidNumber     objectSid:S-1-5-21-3623811015-3361044348-30300820
127 #map    passwd gidNumber     objectSid:S-1-5-21-3623811015-3361044348-30300820
128 #map    passwd homeDirectory "/home/$cn"
129 #map    passwd gecos         displayName
130 #map    passwd loginShell    "/bin/bash"
131 #filter group (|(objectClass=group)(objectClass=person))
132 #map    group gidNumber      objectSid:S-1-5-21-3623811015-3361044348-30300820
133 
134 # Mappings for AIX SecureWay
135 #filter passwd (objectClass=aixAccount)
136 #map    passwd uid              userName
137 #map    passwd userPassword     passwordChar
138 #map    passwd uidNumber        uid
139 #map    passwd gidNumber        gid
140 #filter group  (objectClass=aixAccessGroup)
141 #map    group  cn               groupName
142 #map    group  gidNumber        gid
143 # This comment prevents repeated auto-migration of settings.
144 ssl no
145 tls_cacertdir /etc/openldap/cacerts

 修改 /etc/openldap/ldap.conf 

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.


#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

TLS_CACERTDIR /etc/openldap/cacerts

# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON    on
URI ldap://10.2.48.125/
BASE dc=ldap-pdc,dc=com

执行authconfig-tui

 

  重启几个服务

systemctl restart slapd
systemctl restart smb
systemctl restart nmb
systemctl restart nslcd
systemctl restart nscd
systemctl restart winbind.service

  测试本机加入ldap-pdc域

1 net rpc join -U root%111111
2 net rpc testjoin

  

1 [root@ldap-pdc etc]# net rpc testjoin
2 Join to 'LDAP-PDC' is OK
3 [root@ldap-pdc etc]# 

  ok.ldap-pdc服务器配置完毕,

  windows机器首先需要将其dns服务器改成ldap-pdc服务器的地址,其次需要更改注册表

  

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\services\LanmanWorkstation\
Parameters]
“DomainCompatibilityMode”=dword:0000 0001
“DNSNameResolutionRequired”=dword:00000000

  之后就可以正常加入LDAP-PDC域啦

posted @ 2018-06-07 20:49  苏陌宁  阅读(1698)  评论(0编辑  收藏  举报