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-manager
tcp
在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轉過來