centos7安装kerberos+ldap(长沙方信)

一、介绍

在centos7中,实现Kerberos+openldap来实现集中身份认证,其中Kerberos来作认证,openldap用来做账号管理。
LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP,类似DNS的树形结构来组织信息.
一般情况下,LDAP需要结合Kerberos做认证,kerberos提供了一个不需要传输密码的情况下,可以给你和你想使用的服务之间建立信任关系的服务,而且不需要你每次都输入密码。实现单点登陆.


二、openldap

1.名词解释

1、entry
条目,也叫记录项,是LDAP中最基本的颗粒,就像字典中的词条,或者是数据库中的记录。通常对LDAP的添加、删除、更改、检索都是以条目为基本对象的。

2、dn
每一个条目都有一个唯一的标识名(distinguished Name ,DN)
类似URI的功能

3、Attribute
每个entry都可以有很多属性,比如常见的人都有姓名、地址、电话等属性。
属性不是随便定义的,需要符合一定的规则,而这个规则可以通过schema制定。

常用的属性:
dn:一条entry的唯一路径
cn:用户的全名
sn:用户的姓
uid:用户的登陆名称
c:两个字符的国家代码,比如:中国,cn
o:组织名称(公司名)
ou:部门名称
mail:邮件地址

4、schema
schema定义了哪些属性可用,以及属性的格式(类似mysql的约束)
比如:电话号码,就不能输入英文字母,否则报错
openlda默认自带RFC标准的schema,如果没有特殊需求,导入即可

5、ObjectClass
对象类是属性的集合,LDAP预想了很多人员组织机构中常见的对象,并将其封装成对象类。

6、 LDIF
LDIF文件,用来定义对数据的操作或配置的修改

2.配置YUM源

cat /etc/yum.repos.d/base.repo

[os]
name=os
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
enabled=1
gpgcheck=0

[epel]
name=epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
enabled=1
gpgcheck=0

3.安装ldap

yum install -y openldap-servers openldap-clients
    #openldap-servers,服务端
    #openldap-clients,客户端


4.配置openldap

https://www.openldap.org/doc/admin24/slapdconf2.html

openldap 2.4有两种配置方式:
(1)slapd.conf,这是2.3版本以前的配置方式,2.4版本也支持
(2)LDIF数据库,2.3版本以后,使用动态运行时配置引擎的方式来配置ldap,其配置数据存储在LDIF数据库中,位于/etc/openldap/slapd.d

优势:
ldap的配置在运行中就可以进行修改,无需重启服务即可生效  


4.1、配置

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
#ldap的数据库配置文件
#不用修改

chown -R ldap. /var/lib/ldap/ 

slappasswd
    #产生一个加密过后的密码

vi /etc/openldap/slapd.d/cn\=config/olcDatabase\={0}config.ldif

olcRootPW: {SSHA}fdD1iX+g42FnwbjVhuDuKv2FEj69U9No
#设置管理员密码
    #在最后添加一行
    #密码为上面产生的密码

vi /etc/openldap/slapd.d/cn\=config/olcDatabase\={2}hdb.ldif

olcSuffix: dc=example,dc=com
olcRootDN: cn=Manager,dc=example,dc=com
olcRootPW: {SSHA}oe7odi30W9Jy4YbqW348HV4p7B5n6khU
olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=Manager,dc=example,dc=com" write by anonymous auth by none
olcAccess: {1}to
by dn.base="cn=Manager,dc=example,dc=com" write by self write by * read
#设置manager的密码
#将dc改成自己的域名


4.2、监控

vi /etc/openldap/slapd.d/cn\=config/olcDatabase\={1}monitor.ldif

olcAccess: {0}to by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth" read by dn.base="cn=Manager,dc=example,dc=com" read by
none
   #将dc改成自己的域名


4.3、测试配置文件

slaptest -u


4.4、启动服务

systemctl start slapd
systemctl enable slapd


4.5、定义schema

ls /etc/openldap/schema/*.ldif |xargs -I {} ldapadd -Y EXTERNAL -H ldapi:/// -f {} 


4.6、定义命名空间

也就是定义整个组织的架构

vi /etc/openldap/base.ldif

dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
dc: example
o: ldap
#定义suffix,也就是目录树的最顶端

dn: ou=People,dc=example,dc=com
objectclass: organizationalUnit
ou: People
#在根下面定义一个分支,叫people,使用部门这个类,表示这定义的是一个部门信息

dn: ou=Group,dc=example,dc=com
objectclass: organizationalUnit
ou: Group
#同上,定义另一个部门

注意
    1.条目之间必须要有一个空行
    2.文件的最后不能有空行 

ldapadd -x -D cn=Manager,dc=example,dc=com -W -f /etc/openldap/base.ldif
    #使用ldapadd工具,将上面的定义,写进数据库
    #-x,使用简单身份认证,也就是使用账号和密码
#-D,指定账号
#-W,指定密码,不指定,回车会提示输密码
#-f,指定ldif文件


4.7、查询

ldapsearch -x -D cn=Manager,dc=example,dc=com -w -b "dc=example,dc=com"
#使用ldapsearch工具,对数据库进行查询


5、migrationtools

要往ldap数据库中添加用户信息,有两种方法:
1.将用户信息写到一个ldif文件,然后用ldapadd工具导入
2.使用migrationtools工具,将本地/etc/passwd和/etc/group文件内容,转换成ldif文件,然后用ldapadd工具导入

为了方便,我们这里使用migrationtools工具

5.1、安装

yum install -y migrationtools


5.2添加用户

useradd demouser1

useradd demouser2

grep demo /etc/passwd > /tmp/users

grep demo /etc/group > /tmp/groups


5.3更改migrationtools的配置文件

vi /usr/share/migrationtools/migrate_common.ph

$DEFAULT_MAIL_DOMAIN = "example.com";
$DEFAULT_BASE = "dc=example,dc=com";
$EXTENDED_SCHEMA = 1;
#指定转换中,需要用到的信息


5.4转换成ldif文件

cd /usr/share/migrationtools/

./migrate_passwd.pl /tmp/users /tmp/users.ldif

./migrate_group.pl /tmp/groups /tmp/groups.ldif 


5.5导入

ldapadd -x -D cn=Manager,dc=example,dc=com -w redhat -f /tmp/groups.ldif

ldapadd -x -D cn=Manager,dc=example,dc=com -w redhat -f /tmp/users.ldif 


6、LDAP客户端

配置ldap客户端,要改的配置文件太多,所以我们使用工具来配置

配置工具有:
1.authconfig,命令行
2.authconfig-tui,文本图形
3.authconfig-gtk,图形化,系统装了图形化才能用

这里我们使用authconfig-tui工具


6.1 装包

yum install -y nss-pam-ldapd


6.2 配置

authconfig-tui
   #图形化配置客户端 

centos7安装kerberos+ldap(长沙方信)

centos7安装kerberos+ldap(长沙方信)


6.3 测试

getent passwd demouser1
    #如果能获取到用户信息,说明OK 

id demouser1 

注意,
默认ldap用户在客户端本地是没办法创建家目录的 


7、共享家目录


7.1、服务端

使用nfs共享家目录

yum install -y nfs-utils

vi /etc/exports

/home *(rw,sync) 

systemctl start rpcbind

systemctl enable rpcbind

systemctl start nfs-server 

systemctl enable nfs-server


7.2、客户端

使用autofs挂载家目录

yum install -y nfs-utils autofs

vi /etc/auto.master

/home /etc/auto.autofs --timout=600

vi /etc/auto.autofs

  • kerberos.example.com:/home/&

systemctl enable autofs 

systemctl start autofs


8、配置TLS加密  

http://www.openldap.org/doc/admin24/tls.html#Server%20Certificates

如果要通过客户端的sssd进行LDAP认证,必须开启TLS加密。sssd不支持不加密的认证通道。


8.1、创建CA机构

cd /etc/pki/tls/certs

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.crt -days 3650

cd /etc/pki/CA

touch serial index.txt

echo 01 > serial


8.2、生成用户证书

cd /etc/pki/tls/certs 

(umask 077;openssl genrsa -out slapd.key 1024)

openssl req -new -key slapd.key -out slapd.csr
    #生成请求文件

openssl ca -in slapd.csr -out slapd.crt -days 3650
    #CA机构签发用户证书


8.3、配置服务端

vi /etc/openldap/slapd.d/cn\=config.ldif

olcTLSCACertificateFile: /etc/pki/tls/certs/cacert.crt
olcTLSCertificateFile: /etc/pki/tls/certs/slapd.crt
olcTLSCertificateKeyFile: /etc/pki/tls/certs/slapd.key
    #指定3个文件的位置,并将将3个文件拷贝到指定位置
#olcTLSCACertificateFile,指定CA证书的位置
#olcTLSCertificateFile,指定kerberos服务器的证书
#olcTLSCertificateKeyFile,指定kerberos服务器的key
    #删除TLSCACertificatePath这一行

systemctl restart slapd

注意:
1.TLSCACertificatePath,指CA证书所在目录,指定的路径下面只能放CA证书,不能放其它证书
2.TLSCACertificatePath和olcTLSCACertificateFile这两个参数冲突,二选一


8.4 配置客户端

注意:
默认,会到/etc/openldap/cacert目录下找CA证书,所以提前将CA证书拷贝过去

authconfig-tui

centos7安装kerberos+ldap(长沙方信)

centos7安装kerberos+ldap(长沙方信)


三、kerberos

1、kerbors身份验证过程

kerberos服务器,有一个角色叫KDC(票据分发中心),他为用户端生成好密码,并分发给用户
1.KDC知道所有人的密码,因为客户端的密码就是由KDC生成的
2.每个人都知道自己的密码
3.所有人都向KDC申请验证

客户端输入用户密码-->密码hash保存到本地,用户名以明文发给KDC,请求验证
KDC收到请求,在数据库搜索该用户,找到,就用该用户的密码hash值加密一个TGT(key1),发送给客户端。
客户端收到TGT(key1),如果上面输入的密码正确,就可以解密,验证成功,并将解开的TGT缓存到本地
客户端-->向KDC申请访问某个服务的请求,KDC将生成一个新的TGT,将新的TGT用key1加密,生成key2;再用服务的密码加密,生成key3,都发给客户端
客户端拿到这两个加密的TGT,将用自己key1解开key2;然后用解开的新TGT加密系统当前的时间戳,生成key4,然后将key4和key3一起发给要访问的服务
服务收到这两个key,用自己的密码解开key3,拿到TGT,然后解开key4,如果能解开,说明客户端可信。


2、安装kerberos

yum install -y krb5-server
    #安装kerberos


3、配置

vi /etc/krb5.conf

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}

[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = kerberos.example.com
}

[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM

注意:
   1. kerberos.example.com这个主机名要能解析
   2. 不管服务端,还是客户端,都会用到/etc/krb5.conf,这是个通用配置文件

vi /var/kerberos/krb5kdc/kdc.conf
#服务端的主配置文件
#没有特殊需求,只需要将realm改下即可

vi /var/kerberos/krb5kdc/kadm5.acl
    #配置访问控制
    #将域名改为自己的就好


3、初始化kerberos

kdb5_util create -s -r EXAMPLE.COM
#创建kerberos数据库

systemctl start kadmin
#kadmin,管理工具

systemctl start krb5kdc
#krb5kdc,kerberos守护进程

systemctl enable krb5kdc

systemctl enable kadmin


4、创建认证

Kerberos认证的唯一ID叫principal,由primary、instance、realm三部分组成
格式为:primary/instance@realm 

principal有3种类型:user、service、host

kadmin.local

addprinc root/admin
   #创建一个用户root,角色是admin
#并创建密码
addprinc demouser1
addprinc demouser2
    #创建两个普通用户
addprinc -randkey host/node1.example.com
addprinc -randkey host/node2.example.com
    #创建两台主机,用户和服务都需要认证主机
#-randkey,随机创建密码,因为主机的密码,我们不需要记忆
addprinc -randkey nfs/node1.example.com
    #创建一个service,在node1.example.com这台主机上
    #后面node1节点配置NFS,可通过kerberos安全导出
ktadd -k /tmp/node1.keytab host/node1.example.com
ktadd -k /tmp/node2.keytab host/node2.example.com
ktadd -k /tmp/nfs.keytab nfs/node1.example.com
    #将key从KDC导出
listprincs
    #列出客户端
quit

scp /etc/krb5.conf /tmp/node1.keytab root@node1:/tmp
scp /etc/krb5.conf /tmp/node2.keytab root@node2:/tmp
    #拷贝krb5配置文件和客户端的key


5、客户端配置


5.1 装包

yum install -y pam_krb5 sssd krb5-workstation
#pam_krb5,默认,kerberos会绕过pam,安装此包,就是让使用pam的应用程序可以使用kerberos进行身份验证
#krb5-workstation,kerberos的客户端小工具,可不装
#sssd,安全服务守护进程,负责检索和缓存用户信息和身份验证信息,可选


5.2 配置文件

cp /tmp/krb5.conf /etc/
#将之前从kerberos服务器拷贝的配置文件,拷贝到/etc/

mkdir /etc/krb5.conf.d/
    #因为配置文件里有includedir /etc/krb5.conf.d/,所以必须创建这个目录,否则下面的命令失败
#也可以将配置文件中的inludedir删掉


5.3 导入keytab

ktutil

rkt /tmp/node1.keytab
#读取文件
wkt /etc/krb5.keytab
#将上面读取的内容,生成一个新文件:brb5.keytab
list
#查看
quit
#退出


5.4 配置

authconfig-tui

centos7安装kerberos+ldap(长沙方信)

centos7安装kerberos+ldap(长沙方信)

centos7安装kerberos+ldap(长沙方信)


6、配置ssh

        GSSAPI:Generic Security Services Application Program Interface,GSSAPI 本身是一套 API,由 IETF 标准化。其最主要也是著名的实现是基于 Kerberos 的。一般说到 GSSAPI 都暗指 Kerberos 实现。
        GSSAPI 是一套通用网络安全系统接口。该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度。

vi /etc/ssh/ssh_config

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes 

vi /etc/ssh/sshd_config

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

systemctl reload sshd


7、测试

ssh demouser1@node1

klist
    #列出连接信息

转载于:https://blog.51cto.com/gongxin12/2174978

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值