Kerberos+LDAP+NFSv4 实现单点登陆(续1)--dns+dhcp

Kerberos+LDAP+NFSv4 实现单点登陆(续1)--dns+dhcp前端

本文是<Kerberos+LDAP+NFSv4 实现单点登陆>的续篇
上篇连接地址https://blog.51cto.com/13752418/2135225数据库

1.架设dhcp
为客户机自动分配IP地址、默认域、DNS服务器等网络参数,简化了网络配置.后端

2.架设dns
为客户机提供将主机域名解析为IP地址;
并经过SRV(服务器)资源记录为客户机提供服务器定位.
SRV记录为某些应用服务(kerberos、ldap)指定服务器(主机域名、端口).这些应用的客户端只需指定从SRV记录查询,而不需指定服务器(主机域名或IP地址),从而简化客户端配置.api

三台主机: 服务器

IP地址                 主机名
------------------------------------------------------------------------------------------
nfs服务器 : 自动分配                  srvnf   即krb5客户机
nfs客户机 : 自动分配                  clnf    即krb5客户机,也即SSSD客户端+NFS客户端
kdc服务器 : 静态分配 192.168.1.101    mykdc   即krb5服务器,也即Kerberos+LDAP,也即dns+dhcp

一.配置主机
配置三台主机的/etc/hostname,查看以下:
1)nfs服务器
linlin@srvnf:~$ cat /etc/hostname
srvnf网络

2)nfs客户机
linlin@clnf:~$ cat /etc/hostname
clnf.ctp.netapp

3)kdc服务器
linlin@mykdc:~$ cat /etc/hostname
mykdcfrontend

以上三台主机的/etc/hosts文件内容都配置以下(仅一行便可):
127.0.0.1 localhostdom

二.安装网络管理
在全部主机都安装network-manager
# apt-get install network-managertcp

在kdc服务器设置静态地址
# nmtui

在其它主机设置自动分配地址(默认)

主机启动后,network-manager从dhcp获取默认域、DNS服务器,并自动设置/etc/resolv.conf的内容,以下:
1)nfs服务器
linlin@srvnf:~$ cat /etc/resolv.conf
domain ctp.net
search ctp.net
nameserver 192.168.1.101

2)nfs客户机
linlin@clnf:~$ cat /etc/resolv.conf
nameserver 192.168.1.101
search ctp.net

3)kdc服务器
linlin@mykdc:~$ cat /etc/resolv.conf
linlin@mykdc:~$ (为空)

若是没安装network-manager或使用其它的网络管理程序,请手工编辑或确保/etc/resolv.conf的内容如上述.

说明:以上是手工设置或是dhcp建成后自动设置.一般/etc/resolv.conf的内容nameserver项还需增长设置外网电信互联网服务商的DNS IP地址,以便安装软件.

三.修改配置
在上篇<Kerberos+LDAP+NFSv4 实现单点登陆>的基础上修改配置

1.krb5服务器
1)kdc.conf
linlin@mykdc:~$ cat /etc/heimdal-kdc/kdc.conf
[logging]
kdc = FILE:/var/log/heimdal-kdc.log

[kdc]
database = {
dbname = ldap:ou=hdkrb5,dc=ctp,dc=net
acl_file = /etc/heimdal-kdc/kadmind.acl
mkey_file = /var/lib/heimdal-kdc/m-key
realm = CTP.NET
}

#--v-- 增长,在任意地址监听
addresses = 0.0.0.0
#--^--

[kadmin]

[password_quality]

linlin@mykdc:~$

2)krb5.conf
本文实验了两种不一样的dns+dhcp方式,其krb5服务器的/etc/krb5.conf有细小差异,详见第四章节.

2.krb5客户机
全部krb5客户机按下面修改

1)krb5.conf
使用DNS SRV资源记录,[realms]一节可留空
使用TXT记录,default_realm一行可删

$ cat /etc/krb5.conf
[libdefaults]
allow_weak_crypto=true

#--v-- 增长,使用DNS SRV资源记录
dns_lookup_kdc=true
dns_lookup_realm=true
#--^--

#The following krb5.conf variables are only for MIT Kerberos.
kdc_timesync = 1
ccache_type = 4

#The following libdefaults parameters are only for Heimdal Kerberos.
fcc-mit-ticketflags = true

[realms]

[domain_realm]

2)nsswitch.conf
主机名搜索顺序要设dns优先,将/etc/nsswitch.conf中
hosts: files mdns4_minimal [NOTFOUND=return] dns
一行改成
hosts: dns files mdns4_minimal [NOTFOUND=return]

3.nfs主机
全部nfs主机(包括客/服)按下面修改

1)idmapd.conf
NFSv4名称映射

$ cat /etc/idmapd.conf
[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs

#--v-- 增长
Domain = ctp.net
#--^--

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

4.nfs服务器
1)nslcd.conf
root@srvnf:~# cat /etc/nslcd.conf
uid nslcd
gid nslcd

#--v-- 填LDAP服务器(即kdc服务器)主机名,nslcd应不支持DNS SRV资源记录
uri ldap://mykdc.ctp.net/
#--^--

base dc=ctp,dc=net

root@srvnf:~#

5.sssd客户机
1)sssd.conf
删除掉有关ldap_uri、krb5_server行,默认使用DNS SRV资源记录

root@clnf:~# cat /etc/sssd/sssd.conf
[sssd]
config_file_version = 2

services = nss, pam
domains = intern

[nss]

[pam]

[domain/intern]

id_provider = ldap
auth_provider = krb5
chpass_provider = krb5

ldap_search_base = ou=hdkrb5,dc=ctp,dc=net
ldap_tls_reqcert = allow

#--v-- 必须保留
krb5_realm = CTP.NET
#--^--

krb5_auth_timeout = 60

root@clnf:~#

四.安装dns+dhcp
到kdc服务器上安装dns+dhcp(即Kerberos+LDAP+dns+dhcp为一体),有两种方式:
1)dnsmasq
此方式简单易用

2)bind9+isc-dhcp-server
此方式复杂灵活

一)方式1: dnsmasq
dnsmasq同时具有dns+dhcp功能,默认dhcp动态更新dns

1.安装dnsmasq
root@mykdc:~# apt-get install dnsmasq

2.修改krb5服务器/etc/krb5.conf
linlin@mykdc:~$ cat /etc/krb5.conf
[libdefaults]
allow_weak_crypto = true

#--v-- krb5服务器必需保留此项
default_realm = CTP.NET
#--^--

dns_lookup_kdc=true
dns_lookup_realm=true

#The following krb5.conf variables are only for MIT Kerberos.
kdc_timesync = 1
ccache_type = 4

#The following libdefaults parameters are only for Heimdal Kerberos.
fcc-mit-ticketflags = true

[realms]

[domain_realm]

linlin@mykdc:~$

3.配置dnsmasq.conf
linlin@mykdc:~$ cat /etc/dnsmasq.conf
#域
domain=ctp.net

#debian8服务器需此行
listen-address=192.168.1.101,127.0.0.1

dhcp-range=192.168.1.150,192.168.1.200,255.255.255.0,12h

#--v-- SRV资源记录
srv-host=_kerberos._udp.ctp.net,"mykdc.ctp.net",88
srv-host=_kerberos._tcp.ctp.net,"mykdc.ctp.net",88
srv-host=_kpasswd._udp.ctp.net,"mykdc.ctp.net",464

#for ldap、for sssd
srv-host=_ldap._tcp.ctp.net,"mykdc.ctp.net",389
#--^--

#NFSv4需反向解析kdc服务器
ptr-record=101.1.168.192.in-addr.arpa.,"mykdc.ctp.net"

address=/mykdc.ctp.net/192.168.1.101

txt-record=_kerberos.ctp.net,"CTP.NET"

linlin@mykdc:~$

二)方式2: bind9+isc-dhcp-server
此方式较为复杂
本文为实现LDAP的集中统一管理,摒弃dhcp、dns传统的文本数据库,使用LDAP做为bind九、isc-dhcp-server后端,使其实现起来更为复杂.

方案:
1)dhcp动态更新dns
因本实验的dhcp和dns的共享密钥任何人可见,因此需设只kdc服务器本机可更新dns

2)LDAP做为后端数据库
dhcp需isc-dhcp-server-ldap
dns需bind9-dyndb-ldap

3)免密码链接LDAP
dhcp只是作到参数配置和固定地址分配存储到ldap数据库中,而动态分配的地址记录还是传统的文本文件,isc-dhcp-server-ldap只需读LDAP,因此匿名链接便可.

dns要求能动态更新,而且DNS记录存储到LDAP,就必须有写ldap数据库的权限.
bind9-dyndb-ldap能够提供简单认证链接LDAP,但必须在配置文件中提供明文密码;
bind9-dyndb-ldap不支持EXTERNAL认证(免密码);
bind9-dyndb-ldap提供了GSSAPI机制,一样能够作到免密码,避免明文密码出如今配置文件中

4)GSSAPI机制
须要Kerberos的支持,需libsasl2-modules-gssapi-heimdal
本文的Kerberos又是将LDAP做为后端数据库,而要使用GSSAPI机制,LDAP服务器又必须做为Kerberos的应用服务器(如NFS应用服务器)

5)启用DNS的SRV资源记录
为尽可能减小配置工做量,使用DNS的SRV资源记录自动获取krb5服务器、LDAP服务器地址

终上述,很容易形成各服务的循环依赖,好在本实验一切正常.

1.安装相关软件
root@mykdc:~# apt-get install bind9 bind9-dyndb-ldap isc-dhcp-server isc-dhcp-server-ldap libsasl2-modules-gssapi-heimdal

2.修改krb5服务器/etc/krb5.conf
linlin@mykdc:~$ cat /etc/krb5.conf
[libdefaults]
allow_weak_crypto = true
default_realm = CTP.NET
dns_lookup_kdc = true
dns_lookup_realm = true

#The following krb5.conf variables are only for MIT Kerberos.
kdc_timesync = 1
ccache_type = 4

#The following libdefaults parameters are only for Heimdal Kerberos.
fcc-mit-ticketflags = true

[realms]
#--v-- 用于sasl,此为kdc服务器上的dns要经过sasl认证链接LDAP,必须指定kdc,若不用sasl,可删掉[realms]此节
CTP.NET = {
kdc = 127.0.0.1
}
#--^--

[domain_realm]

linlin@mykdc:~$

3.添加dns、dhcp模式
1)dns
下载bind-dyndb-ldap的模式文件(https://pagure.io/bind-dyndb-ldap)
该软件包的schema仅提供ldif格式,且是用于389 DS,而本文是使用openldap,需按其说明手工修改以适用于openldap

修改内容:
将下面一行
dn: cn=schema
删除掉,这个是用于389 DS

将下面两行
#dn: cn=dns,cn=schema,cn=config
#objectClass: olcSchemaConfig
去掉注释,这个是用于openldap,即以下
dn: cn=dns,cn=schema,cn=config
objectClass: olcSchemaConfig

删除有关COSINE
从aRecord到cNAMERecord删除掉,即删相似0.9.2342.19200300.100.1.xxxx,这些属性已在COSINE定义了

全部attributeTypes替换为olcAttributeTypes
全部objectClasses替换为olcObjectClasses

修改后的内容以下:(注意括号里的行尾有空格符)

dn: cn=dns,cn=schema,cn=config
objectClass: olcSchemaConfig
olcAttributeTypes: ( 1.3.6.1.4.1.2428.20.0.0 
 NAME 'dNSTTL' 
 DESC 'An integer denoting time to live' 
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 
 EQUALITY integerMatch )

。。。略

在线添加模式
root@mykdc:~# ldapadd -Y EXTERNAL -H ldapi:/// -f dns.ldif

2)dhcp
isc-dhcp-server-ldap的模式文件在/usr/share/doc/isc-dhcp-server-ldap/dhcp.schema.gz

安装p7zip-full解压软件
root@mykdc:~# apt-get install p7zip-full

解压出dhcp.schema
linlin@mykdc:~$ 7z e /usr/share/doc/isc-dhcp-server-ldap/dhcp.schema.gz

转换格式
root@mykdc:~# schema2ldif /home/linlin/dhcp.schema >dhcp.ldif

在线添加模式
root@mykdc:~# ldapadd -Y EXTERNAL -H ldapi:/// -f dhcp.ldif

4.用ddns-confgen生成密钥
linlin@mykdc:~$ /usr/sbin/ddns-confgen
#To activate this key, place the following in named.conf, and
#in a separate keyfile on the system or systems from which nsupdate
#will be run:
key "ddns-key" {
algorithm hmac-sha256;
secret "EQdIMR3a34SaPyc0pIOm4e3gsonl2fosMAxvqU4AkK4=";
};

#Then, in the "zone" statement for each zone you wish to dynamically
#update, place an "update-policy" statement granting update permission
#to this key. For example, the following statement grants this key
#permission to update any name within the zone:
update-policy {
grant ddns-key zonesub ANY;
};

#After the keyfile has been placed, the following command will
#execute nsupdate using this key:
nsupdate -k <keyfile>
linlin@mykdc:~$
记下"EQdIMR3a34SaPyc0pIOm4e3gsonl2fosMAxvqU4AkK4="这串共享密钥,dhcp、dns将用到

5.配置isc-dhcp-server

1)参照dhcpd.conf传统样式,转换为存储到ldap数据库
一般包括三部分:参数(ddns-update-style等)、声明(subnet等) 、选项(domain-name等)

新建文件dhcpconf.ldif并编辑

root@mykdc:~# cat dhcpconf.ldif
dn: cn=mykdc, dc=ctp, dc=net
objectClass: top
objectClass: dhcpServer
cn: mykdc
dhcpServiceDN: cn=DHCP Service Config, dc=ctp, dc=net

#Here is the config tree that mykdc.ctp.net points to.
dn: cn=DHCP Service Config, dc=ctp, dc=net
cn: DHCP Service Config
objectClass: top
objectClass: dhcpService
dhcpPrimaryDN: cn=mykdc, dc=ctp, dc=net
#动态更新DNS,要标准模式
dhcpStatements: ddns-update-style standard
dhcpStatements: allow client-updates
#动态更新DNS的密钥,同DNS,即上面ddns-confgen生成的密钥
dhcpStatements: key "ddns-key" { algorithm hmac-sha256; secret "EQdIMR3a34SaPyc0pIOm4e3gsonl2fosMAxvqU4AkK4="; }
dhcpStatements: zone ctp.net { primary 127.0.0.1; key ddns-key; }
dhcpStatements: default-lease-time 600
dhcpStatements: max-lease-time 7200

#Set up a subnet declaration with a pool statement. Also note that we have a dhcpOptions object with this entry
dn: cn=192.168.1.0, cn=DHCP Service Config, dc=ctp, dc=net
cn: 192.168.1.0
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpOption: domain-name "ctp.net"
dhcpOption: domain-name-servers 192.168.1.101
dhcpOption: routers 192.168.1.1
dhcpOption: subnet-mask 255.255.255.0
dhcpOption: broadcast-address 192.168.1.255
dhcpNetMask: 24

#Set up a pool for this subnet. Only known hosts will get these IPs
dn: cn=Known Pool, cn=192.168.1.0, cn=DHCP Service Config, dc=ctp, dc=net
cn: Known Pool
objectClass: top
objectClass: dhcpPool
dhcpRange: 192.168.1.150 192.168.1.200

root@mykdc:~#

导入到ldap数据库
root@mykdc:~# ldapadd -Y EXTERNAL -H ldapi:/// -f dhcpconf.ldif

2)修改缺省配置
将/etc/default/isc-dhcp-server中的
INTERFACESv4=""
改成
INTERFACESv4="enp0s3"

接口名请根据实际状况填上,如eth0等,本文是enp0s3

3)修改dhcpd.conf
传统上各项参数、子网定义、地址池范围、租约期等等都在dhcpd.conf配置,如今改成仅仅链接LDAP,而各项配置存储在ldap数据库

linlin@mykdc:~$ cat /etc/dhcp/dhcpd.conf
ldap-server "127.0.0.1";
ldap-base-dn "dc=ctp,dc=net";
ldap-method dynamic;
linlin@mykdc:~$

6.配置bind9

1)定义正、反向区域存储到ldap数据库
root@mykdc:~# cat dnsconf.ldif
#Top container
dn: ou=dyndns,dc=ctp,dc=net
objectClass: organizationalUnit
ou: dyndns

#Zone ctp.net
dn: idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: top
objectClass: idnsZone
objectClass: idnsRecord
idnsName: ctp.net
#动态更新策略,ddns-key见named.conf.local定义
idnsUpdatePolicy: grant ddns-key zonesub ANY;
idnsZoneActive: TRUE
idnsSOAmName: mykdc
idnsSOArName: root.mykdc
idnsSOAserial: 1
idnsSOArefresh: 10800
idnsSOAretry: 900
idnsSOAexpire: 604800
idnsSOAminimum: 86400
#域名服务器记录
NSRecord: ctp.net.
ARecord: 192.168.1.101

#别名
dn: idnsName=mykdc, idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: mykdc
CNAMERecord: ctp.net.

#DNS records for zone ctp.net
#--v-- SRV资源记录
dn: idnsName=_kerberos._udp, idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: _kerberos._udp
SRVRecord: 0 100 88 mykdc

dn: idnsName=_kerberos._tcp, idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: _kerberos._tcp
SRVRecord: 0 100 88 mykdc

dn: idnsName=_kpasswd._udp, idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: _kpasswd._udp
SRVRecord: 0 100 464 mykdc

dn: idnsName=_ldap._tcp, idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: _ldap._tcp
SRVRecord: 0 100 389 mykdc

dn: idnsName=_ntp._udp, idnsName=ctp.net, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: _ntp._udp
SRVRecord: 0 100 123 mykdc
#--^--

#--v-- 反向解析
dn: idnsName=1.168.192.in-addr.arpa, ou=dyndns, dc=ctp, dc=net
objectClass: top
objectClass: idnsZone
objectClass: idnsRecord
idnsName: 1.168.192.in-addr.arpa
idnsUpdatePolicy: grant ddns-key zonesub ANY;
idnsZoneActive: TRUE
idnsSOAmName: mykdc.ctp.net.
idnsSOArName: root.mykdc.ctp.net.
idnsSOAserial: 1
idnsSOArefresh: 10800
idnsSOAretry: 900
idnsSOAexpire: 604800
idnsSOAminimum: 86400
NSRecord: mykdc.ctp.net.

#必须配置kdc服务器地址的反向解析
dn: idnsName=101, idnsName=1.168.192.in-addr.arpa, ou=dyndns, dc=ctp, dc=net
objectClass: idnsRecord
objectClass: top
idnsName: 101
PTRRecord: mykdc.ctp.net.
#--^--
root@mykdc:~#

导入到ldap数据库
root@mykdc:~# ldapadd -Y EXTERNAL -H ldapi:/// -f dnsconf.ldif

2)修改named.conf.local
传统上区域定义在named.conf.local配置,如今改成仅仅链接LDAP,而区域定义及动态更新DNS记录都存储在ldap数据库
linlin@mykdc:~$ cat /etc/bind/named.conf.local
logging {
channel default_debug {
file "named.run";
severity debug;
};
};

key "ddns-key" {
algorithm hmac-sha256;
//动态更新DNS的密钥,同dhcp,即上面ddns-confgen生成的密钥
secret "EQdIMR3a34SaPyc0pIOm4e3gsonl2fosMAxvqU4AkK4=";
};

controls {
//仅仅容许本机更新,即只容许来自本机dhcp的更新
inet 127.0.0.1 allow { 127.0.0.1; } keys { ddns-key; };
};

dynamic-db "my_db_name" {
library "ldap.so";
arg "uri ldap://127.0.0.1";
arg "base ou=dyndns, dc=ctp, dc=net";

//认证机制
arg "auth_method sasl";
arg "sasl_mech GSSAPI";
//--v-- 见小节5)添加krb5主体
arg "sasl_auth_name DNS/mykdc";
arg "krb5_keytab FILE:/etc/bind/krb5.keytab";
//--^--

//动态更新
arg "dyn_update yes";

//同步反向解析
arg "sync_ptr yes";
};

linlin@mykdc:~$

3)
linlin@mykdc:~$ cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

//注释掉
//include "/etc/bind/named.conf.default-zones";
linlin@mykdc:~$

4)
linlin@mykdc:~$ cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";

//注释掉
/*
dnssec-validation auto;

auth-nxdomain no;    # conform to RFC1035
listen-on-v6 { any; };

*/

//做为局域网,禁止递归查询互联网的根服务器
allow-recursion { none; };

};
linlin@mykdc:~$

5)添加krb5主体

5.1)
root@mykdc:~# kadmin -l
kadmin> add -r ldap/mykdc
新增

一路回车缺省

kadmin> modify -a -disallow-svr ldap/mykdc
使ldap/mykdc成为应用服务器

kadmin> ext -k /etc/ldap/krb5.keytab ldap/mykdc
导出keytab

krb5.keytab拥有者改成openldap,并只openldap用户可读
root@mykdc:~# chown openldap:openldap /etc/ldap/krb5.keytab
root@mykdc:~# chmod o-r /etc/ldap/krb5.keytab
root@mykdc:~# chmod g-r /etc/ldap/krb5.keytab

在/etc/default/slapd里增长一行
export KRB5_KTNAME=/etc/ldap/krb5.keytab

5.2)
root@mykdc:~# kadmin -l
kadmin> add -r DNS/mykdc
一路回车缺省

kadmin> ext -k /etc/bind/krb5.keytab DNS/mykdc
导出keytab

krb5.keytab拥有者改成bind,并只bind用户可读
root@mykdc:~# chown bind:bind /etc/bind/krb5.keytab
root@mykdc:~# chmod o-r /etc/bind/krb5.keytab
root@mykdc:~# chmod g-r /etc/bind/krb5.keytab

6)修改LDAP配置数据库
直接修改文件(虽不推荐,修改后要重启openldap)

6.1)将krb5用户主体映射到ldap用户
修改/etc/ldap/slapd.d/cn=config.ldif文件,增长一行
olcAuthzRegexp: {0}uid=dns/mykdc,cn=gssapi,cn=auth krb5PrincipalName=DNS/mykdc@CTP.NET,ou=hdkrb5,dc=ctp,dc=net

6.2)设置LDAP ACL,容许DNS/mykdc@CTP.NET写ldap数据库
修改/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif文件

将原olcAccess: {2} 一行的2改成3 ,并在该行前插入一行
olcAccess: {2}to dn.subtree="ou=dyndns,dc=ctp,dc=net" by dn="krb5PrincipalName=DNS/mykdc@CTP.NET,ou=hdkrb5,dc=ctp,dc=net" write

即以下

olcAccess: {2}to dn.subtree="ou=dyndns,dc=ctp,dc=net" by dn="krb5PrincipalName=DNS/mykdc@CTP.NET,ou=hdkrb5,dc=ctp,dc=net" write
olcAccess: {3}to * by dn="cn=admin,dc=ctp,dc=net" write by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * read

7.重启kdc服务器
一切正常,能自动分配地址,自动添加DNS记录

四.后记
1.添加模式
debian9的bind9-dyndb-ldap模式文件在/usr/share/doc/bind9-dyndb-ldap/schema.ldif.gz
但该文件错漏百出,在线添加模式时,出现"topAUXILIARY"之类的错误,正确是"top AUXILIARY"
这是由于LDIF语法如

SUP top
 AUXILIARY

" AUXILIARY"前面的空格是表示续上行的,假如上行" SUP top"后面没留空格,续下行变成" SUP topAUXILIARY"
而咱们是须要" SUP top AUXILIARY",因此" SUP top"需改成" SUP top ",后面留空格.
或者将两行就写为一行" SUP top AUXILIARY"也能够.

查看了debian9的bind9-dyndb-ldap模式文件,好几处都是在续行上遗漏加上空格,更甚者遗漏了属性idnsTemplateAttribute定义

到https://pagure.io/bind-dyndb-ldap下载最新的源码,见../doc/schema.ldif

2.导出keytab
原本要将ldap/mykdc、DNS/mykdc都导出到/etc/krb5.keytab,二者合并在同一/etc/krb5.keytab文件.
但openldap、bind9不是以root根用户运行,而是以各自用户运行.为确保/etc/krb5.keytab不为任何人读取,因此在/etc/krb5.keytab文件权限设置上会冲突.
所以将各自的krb5.keytab分开目录存放.

3.添加DNS记录
在设置LDAP ACL后,要手工添加DNS记录到"ou=dyndns,dc=ctp,dc=net"下
1)
在root下运行
ldapadd -Y EXTERNAL -H ldapi:/// -f xxxx.ldif
却提示无权限.

2)
运行
ldapadd -x -D "cn=admin,dc=ctp,dc=net" -W -f xxxx.ldif
虽有权限.
但要先中止bind9,才能正常添加;
而在bind9运行状态,却致使整个openldap崩溃,需重启kdc服务器才恢复正常.

不知何缘由.

所以,在架设bind9+isc-dhcp-server时,先初始化DNS记录,再设LDAP ACL权限,后面正常自动添加DNS记录

4.
在配置初始化DNS记录时,如前面的配置反向解析
PTRRecord: mykdc.ctp.net.
注意最后一个点号,应是表示根域
即要设为"mykdc.ctp.net.",不要设为"mykdc.ctp.net"
设为"mykdc.ctp.net"会反向解析为mykdc.ctp.net.1.168.192.in-addr.arpa

5.LDAP ACL
我不太懂LDAP ACL的规则,但规则顺序也很重要.
如我一开始是在原olcAccess: {2}to 下再增长olcAccess: {3},实验是无效果.
可能要把olcAccess: {x}to
置在最后吧

6.sudo模式
debian9的软件包sudo-ldap的sudo模式见/usr/share/doc/sudo-ldap/schema.OpenLDAP
该模式文件有错漏,其

attributeTypes ( 1.3.6.1.4.1.15953.9.1.10
    NAME 'sudoOrder'

的attributeTypes应为attributetype

该错漏如同bind9-dyndb-ldap模式文件的错漏,都是在软件包所在的帮助文档,不属源代码.可能包维护人员不重视文档的查漏.

7.缺省搜索
修改/etc/ldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif文件,增长一行
olcDefaultSearchBase: dc=ctp,dc=net

搜索时基本DN指定为""空白,不需指定为"dc=ctp,dc=net"
linlin@mykdc:~$ ldapsearch -x -h 127.0.0.1 -b ""

8.过滤条件
如要搜索uidNumber数值大于、等于某值时

用'='正确

但用'>'出错
linlin@mykdc:~$ ldapsearch -x -b "dc=ctp,dc=net" "(uidNumber>2000)"
ldap_search_ext: Bad search filter (-7) 错误的搜索过滤

需用'>='才正确
linlin@mykdc:~$ ldapsearch -x -b "dc=ctp,dc=net" "(uidNumber>=2000)"

因此过滤条件不能用'>'、'<',要用 '>='、'<='

9.
本实验是在公司局域网内经过代理服务器上外网安装软件,因此/etc/resolv.conf不需设置外网DNS.
如在家庭里经过路由器(除非三台主机debian软件源镜像地址用IP地址),三台主机需设置外网电信互联网服务商的DNS IP地址或谷歌的8.8.8.8
如:
nameserver 8.8.8.8

三台主机安装设置完毕,自组网实验

五.附录

( 附:LXC容器图形前端 fglxc-ver0.0.9.zip 源代码 下载地址 http://u.163.com/xtfcsdnT 提取码: lAPs2V9m )

本篇从原网易http://lulinlin1.lofter.com/post/1cf3848f_11f58066?act=qbbloglofter_20150506_01转过来

相关文章
相关标签/搜索