zoukankan      html  css  js  c++  java
  • kerberos+ldap

    基于Kerberos +LDAP的集中用户认证及授权系统搭建实验

    [root@localhost openldap]# kinit ldapadmin
    kinit: Cannot resolve network address for KDC in realm "EXAMPLE.COM" while getting initial credentials

    问题解决:可能的方法:编辑我的/etc/hosts文件并将以下内容添加到其中:10.0.0.1 example.com(krb5.conf里面的realm设置的域名)

     

    1、安装ldap

    yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y

    yum install openldap openldap-clients openldap-servers openldap-devel compat-openldap -y

     

     

    查看安装的版本:

    rpm -qa openldap

     

    2、 配置ldap

    更新配置库:

    rm -rf /var/lib/ldap/*

    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

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

     

    注意:在2.4以前的版本中,OpenLDAP 使用 slapd.conf 配置文件来进行服务器的配置,而2.4开始则使用 slapd.d 目录保存细分后的各种配置,这一点需要注意,其数据存储位置即目录 /etc/openldap/slapd.d 。尽管该系统的数据文件是透明格式的,还是建议使用 ldapadd, ldapdelete, ldapmodify 等命令来修改而不是直接编辑。下面所有用户的添加,配置的修改都是生成.ldif后缀的文件然后使用ldapdelete, ldapmodify等命令是其生效

     

    默认配置文件保存在 /etc/openldap/slapd.d,将其备份:

    cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak

     

    添加一些基本配置,并引入 kerberos 和 openldap 的 schema:

    (ldap的schema定义了ldap目录所应遵循的结构和规则,schema给ldap服务器提供了ldap目录中的类别,属性等识别的方式,让这些可以被ldap服务器识别)

    cp  /usr/share/doc/krb5-server-ldap-1.9/kerberos.schema  /etc/openldap/schema/

    touch /etc/openldap/slapd.conf

    vim /etc/openldap/slapd.conf

     

    更新slapd.d

    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

    chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

     

    注明:/etc/openldap/slapd.conf不要添加corba.schama,否则有可能会报错

    启动slapd  service slapd start

    删除该目录中的所有文件,否则无法启动LDAP服务

    rm -f  /etc/openldap/slapd.d/cn=config/cn=schema/*

     或者去目录下面删除所有的重复项

    3、启动服务

    启动 LDAP 服务:

    chkconfig --level 345 slapd on

     service slapd start

    启动失败,重新更新slapd.d

    slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

    chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d

    再启动service slapd start

     

    查看状态,验证服务端口:

    ps aux | grep slapd | grep -v grep

    netstat -tunlp  | grep :389

     

    4、LDAP集成Kerberos

    先装上kerberos服务之后再进行集成

    1安装并开启ntp服务

    yum intall -y ntp

     service ntpd start

    安装完成后,

    2安装kerberos服务器

    yum install -y krb5-server krb5-libs krb5-workstation krb5- krb5-auth-dialog

    查看安装版本:

    rpm -qa krb5-server-ldap

    修改kerberos配置文件

    vim /etc/krb5.conf

    [logging]

     default = FILE:/var/log/krb5libs.log

     kdc = FILE:/var/log/krb5kdc.log

     admin_server = FILE:/var/log/kadmind.log

    [libdefaults]

     default_realm = EXAMPLE.COM

     dns_lookup_realm = false

     dns_lookup_kdc = false

     ticket_lifetime = 24h

     renew_lifetime = 7d

     forwardable = true

    [realms]

     EXAMPLE.COM = {

      kdc = 192.168.10.130:88 (Kerberos服务器ip)

      admin_server = 192.168.10.130:749

      default_domain = EXAMPLE.COM

     }

    [domain_realm]

     .example.com = EXAMPLE.COM

     example.com = EXAMPLE.COM

    其中,EXAMPLE.COM可任取,但需要前后统一。

    vim /var/kerberos/krb5kdc/kdc.conf   ,不用改

    创建/初始化kerberos database

    (设置数据库管理密码是12345678  EXAMPLE.COM是数据库名[-r 指定 的realm name ])

    /usr/sbin/kdb5_util create -s -r EXAMPLE.COM  (-s表示生成stash file 并再其中存储master server key[ krb5kdc] -r 制定一个 realm name ,当krb5。conf中定义了多个realm时才是必要的)

    vim /var/kerberos/krb5kdc/kadm5.acl

     

    启动kerberos服务

       service krb5kdc start

    service kadmin start

     

    当数据库创建好了 ,/var/Kerberos/krb5kdc/目录下生成

    Kadm5.acl

    kdc.conf

    principal

    principal.adm5

    principal.kadmin5.lock

    principal.ok

     

    为了使Kerberos能够绑定到OpenLDAP服务器,需要创建一个管理员用户和一个principal,并生成keytab文件

    设置该文件的权限为LDAP服务运行用户可读(一般为ldap):

     添加数据库管理员:

    新建一管理用户 ldapadmin 密码是12345678

    kadmin.local -q "addprinc ldapadmin@EXAMPLE.COM"  (生成指定key的principal

    新建另一个用户 ldap/c2bde55 (-randkey 是生成随机key的principal)

    kadmin.local -q "addprinc -randkey ldap/c2bde55@EXAMPLE.COM"

      

    拓展:

    查看principal: listprincs

    修改用户密码:change_password -pw xxx 用户

    删除principal :delete_principal 用户

     

    形成ldap.keytab文件

    kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/c2bde55@EXAMPLE.COM"2

     chown ldap:ldap /etc/openldap/ldap.keytab && chmod 640 /etc/openldap/ldap.keytab

     

    使用ldapadmin用户测试:

    kinit ldapadmin

      

    重启slapd服务

    service slapd restart

     

    如果不生效,执行如下命令:

    cp /etc/openldap/ldap.keytab /etc/krb5.keytab

    chgrp ldap /etc/krb5.keytab && chmod 640 /etc/krb5.keytab

     

    5、创建LDAP的数据库

    进入到 /etc/openldap/slapd.d目录,查看

    cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}bdb.ldif 可以看到一些默认的配置,例如:

    olcSuffix: dc=my-domain,dc=com

    olcRootDN: cn=Manager,dc=my-domain,dc=com

     

    建立modify.ldif文件,内容如下:

    vim /etc/openldap/slapd.d/modify.ldif

    dn: olcDatabase={2}bdb,cn=config

    changetype: modify

    replace: olcSuffix

    olcSuffix: dc=example,dc=com

    dn: olcDatabase={2}bdb,cn=config

    changetype: modify

    replace: olcRootDN

    # Temporary lines to allow initial setup

    olcRootDN: uid=ldapadmin,ou=people,dc=example,dc=com

    dn: olcDatabase={2}bdb,cn=config

    changetype: modify

    add: olcRootPW

    olcRootPW: 12345678

    dn: cn=config

    changetype: modify

    add: olcAuthzRegexp

    olcAuthzRegexp: uid=([^,]*),cn=GSSAPI,cn=auth uid=#1,ou=people,dc=example,dc=com

    dn: olcDatabase={2}bdb,cn=config

    changetype: modify

    add: olcAccess

    # Everyone can read everything

    olcAccess: {0}to dn.base="" by * read

    # The ldapadm dn has full write access

    olcAccess: {1}to * by dn="uid=ldapadmin,ou=people,dc=example,dc=com" by dn="cn=root,dc=example,dc=com" write by * read

    使用下面命令导入更新配置:

    ldapmodify -Y EXTERNAL -H ldapi:/// -f modify.ldif

     

    注明:cn=root,dc=example,dc=com授权,以便整合Kerberos使用

    更新配置过程中出现错误:additional info: modify/add: olcRootPW: no equality matching rule,修改modify.ldif中对应选项的add为replace即可

     

    6、导入linux系统用户

    接下来你可以从 /etc/passwd, /etc/shadow, /etc/groups 中生成 ldif 更新 ldap 数据库,这需要用到 migrationtools 工具。

    安装migrationtools工具:

    yum install migrationtools -y

     

    利用迁移工具生成模板,先修改默认的配置:

    # vim /usr/share/migrationtools/migrate_common.ph

    #71行默认的dns域名

    DEFAULT_MAIL_DOMAIN = "example.com";

    #74行默认的base

    DEFAULT_BASE = "dc=example,dc=com";

     

    生成模板文件:导入的系统用户信息,变成ldif格式

    /usr/share/migrationtools/migrate_base.pl > /opt/base.ldif

     

    然后,可以修改该文件,然后执行导入命令:

     ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 123456 -f /opt/base.ldif

     

    将test用户导入到 ldap 中,可以有选择的导入指定的用户:

    # 先添加用户

    useradd test

    # 查找系统上的 test用户,将test的用户信息导入passwd.txt

    grep -E "test" /etc/passwd >/opt/passwd.txt

    使用工具将passwd.txt 变成 ldif格式的文件

    /usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif

    最后再将passwd.ldif 中的信息导入到 /etc/openslapd/slapd.d中

    ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 -f /opt/passwd.ldif

    将用户组导入到 ldap 中:

    # 生成用户组的 ldif文件,然后导入到

    grep -E "test" /etc/group >/opt/group.txt

    /usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif

    ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 -f /opt/group.ldif

    7、LDAP用户增删修改

    查询:查询新添加的 test 用户:

    # ldapsearch -LLL -x -D 'uid=ldapadmin,ou=people,dc=example,dc=com' -w 12345678 -b 'dc=example,dc=com' 'uid=test'

     

    修改

    用户添加好以后,需要给其设定初始密码,运行命令如下:

    ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=example,dc=com' -w 12345678  " uid=test,ou=people,dc=example,dc=com" -S

    密码修改为 123456

     

    删除(就不要删除了,否则还得新建)

    删除用户

    # ldapdelete -x -w 12345678 -D'uid=ldapadmin,ou=people,dc=example,dc=com' "uid=test,ou=people,dc=example,dc=com"

    删除组条目:

    # ldapdelete -x -w 12345678 -D'uid=ldapadmin,ou=people,dc=example,dc=com' "cn=test,ou=group,dc=example,dc=com"

     

    8、客户端配置 开启另外一台虚拟机 ip是192.168.10.131

    安装openldap客户端:

    yum install openldap-clients -y

    修改 /etc/openldap/ldap.conf 以下两个配置:

    BASE    dc=example,dc=com

    URI     ldap://192.168.10.130(服务器IP)

    vim /etc/krb5.conf

     

    然后,运行下面命令测试:

    先删除 ticket

    运行kdestroy会报异常

     

    运行ldapsearch -x -b 'dc=example,dc=com'

    (注意此时应该到服务器端关闭防火墙,不然运行这个命令会报错)

     

    # 重新获取 ticket

    kinit ldapadmin  

     

    没有报错

    运行 ldapsearch -b 'dc=example,dc=com'  -x

     

    # ldapwhoami -x

     

    #直接输入 ldapsearch -x 不会报错

     

    # ldapsearch   报错

    报ldap_sasl_interactive_bind_s错误,且发现/etc/krb5.keytab不存在, 执行如下操作:cp /etc/openldap/ldap.keytab (服务器) /etc/krb5.keytab(客户端)

    chgrp ldap /etc/krb5.keytab && chmod 640 /etc/krb5.keytab

    要以 root 用户身份运行 slapd)

    如果报错:SASL(-4): no mechanism available: No worthy mechs found

    ldapsearch 加一个 -x 参数,略过sasl认证

      

    9、Kerberos整合(共用LDAP数据库的集成方式)服务器端

    1)配置

    Kerberos 相关的数据也需要存储在某个数据库中,在这里我们选择使用 LDAP 作为其数据库,目的是为了数据备份的方便(只需要统一备份 LDAP 数据库即可)。如果需要使用其自身的数据库,则需要将下面的 kdb5_ldap_util 命令替换为 kdb5_util。

    vim /etc/krb5.conf末尾内容如下:

    [dbdefaults]

        ldap_kerberos_container_dn = cn=kerberos,dc=example,dc=com

    [dbmodules]

        openldap_ldapconf = {

            db_library = kldap

            ldap_servers = ldapi://

            ldap_kerberos_container_dn = cn=kerberos,dc=example,dc=com

            ldap_kdc_dn = cn=root,dc=example,dc=com

            ldap_kadmind_dn = cn=root,dc=example,dc=com

            ldap_service_password_file = /etc/krb5.ldap

            ldap_conns_per_server = 5

        }

    其中 ldap_kdc_dn 和 ldap_kadmind_dn 分别对应 Kerberos 访问 LDAP 数据库时的服务和管理帐号。前者需要有读权限,后者需要读写权限。此处为了简单方便统一用cn=root,dc=example,dc=com一个进行管理

    说明: ldap_kerberos_container_dn must start with a 'cn'

    2)ldap添加用户

    vim user.ldif内容如下:

    dn: cn=kerberos,dc=example,dc=com

    cn: kerberos          #这是添加的一个kerberos用户

    objectClass: organizationalRole

    dn: cn=root,dc=example,dc=com

    cn: root                  #这是添加一个root用户

    userPassword:: e1NTSEF9UTg2T1hqeXcreCtzck5yL1JEUzhLbTBGQ2tZeFBzWnI=

    objectClass: simpleSecurityObject

    objectClass: organizationalRole

      

    执行命令:ldapadd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 -f user.ldif

    管理员修改普通用户的密码:

    ldappasswd -x -D "uid=ldapadmin,ou=people,dc=example,dc=com" -w 12345678 "cn=root,dc=example,dc=com" -s 123456

    把密码修改出123456

     

    3)生成访问ldap的服务密码文件

    因为 Kerberos 需要有 ldap_kdc_dn 和 ldap_kadmind_dn 的密码才能访问 LDAP数据库,执行如个命令:12345678

    # kdb5_ldap_util -D uid=ldapadmin,ou=people,dc=example,dc=com  -w 12345678 stashsrvpw -f /etc/krb5.ldap cn=root,dc=example,dc=com

     

    这里输入的是12345678

    # cat /etc/krb5.ldap

     

    4)创建kerberos数据库   密码:12345678  123456   123456

    kdb5_ldap_util -D uid=ldapadmin,ou=people,dc=example,dc=com -H ldapi:// create -r EXAMPLE.COM -s

     

    5)重启Kerberos

    service krb5kdc restart

     

    6)测试:添加用户

    # kadmin.local

    kadmin.local:  addprinc test

     

    密码是123456

    然后

    # slapcat |grep “test”

     

    使用Kerberos+LDAP进行认证整合,LDAP进行账号管理,Kerberos进行认证。

    1)采用该 LDAP作为用户认证。

    只需要对用户 (如uid=test,ou=People,dc=example,dc=com)添加 userPassword成员即可。如果通过 命令行添加,需要先准备如下文件(userPassword对应的密码为123456):

    vim  test.ldif

    dn: uid=test,ou=People,dc=example,dc=com

    changetype: modify

    add: userPassword

    userPassword:: e1NTSEF9Ym0rZXloV1ExalB1aWNEVU1BaHlNM0hZVHh3REIrWU4K

    然后执行命令

    # ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 123456 -h 127.0.0.1 -f test.ldif

     

     命令执行成功后,通过

    # ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 123456 127.0.0.1 -b 'ou=People,dc=example,dc=com'

    确认。

     

    2)使用 Kerberos 认证。

    需要将用户的密码域做如下修改(userPassword 对应的密码由echo -n "{SASL}test@EXAMPLE.COM" | base64生成):

    dn: uid=test,ou=People,dc=example,dc=com

    changetype: modify

    replace: userPassword

    userPassword:: e1NBU0x9dGVzdEBFWEFNUExFLkNPTQ==

    执行ldapmodify -x -D 'cn=root,dc=example,dc=com' -w 123456 -h 127.0.0.1 -f test.ldif应用该修改。

     

    3)修改配置

    # vim /etc/sysconfig/saslauthd

    修改值

    MECH=kerberos5

    重启:service saslauthd restart

     

    创建vim /etc/sasl2/slapd.conf文件

    内容:pwcheck_method: saslauthd

    重启:service slapd restart

    4)执行命令:service saslauthd status -l查看是否报错

     不报错

     执行如下操作:

    # kadmin.local -q "ank -clearpolicy -randkey host/c2bde55"

    # kadmin.local -q "ktadd host/c2bde55"

     

    # service saslauthd restart

    # ps -aux | grep saslauthd

     

    # kadmin.local -q 'ank -pw 123456 test'

    配置 test 用户的密码为:123456

    # testsaslauthd -u test -p 123456

     

    报错执行以下命令

     kadmin.local -q "ank -clearpolicy -randkey host/localhost"

    kadmin.local -q "ktadd host/localhost"

      

    配置 test 用户的密码为:123456 成功

     

    至此, Kerberos 认证测试成功。

    执行 ldapsearch测试LDAP 认证是否成功

    ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 123456 -h 127.0.0.1 -b 'ou=People,dc=example,dc=com'

     结果成功

    如果不成功执行:

    kadmin.local -q "ank -clearpolicy -randkey host/localhost"

    kadmin.local -q "ktadd host/localhost"

    客户端验证:将服务器端的防火墙关闭

    ldapsearch -x -D 'uid=test,ou=People,dc=example,dc=com' -w 123456 -h 192.168.10.130(服务器ip地址) -b 'ou=People,dc=example,dc=com'

     

     

  • 相关阅读:
    37个绝对不容错过的HTML5教程和资源
    Google的自动驾驶汽车无事故成功完成30万英里的驾驶路程
    一个基于jQuery Mobile的移动设备实时幻灯javascript类库 taciónJS
    推荐免费黑色UI工具包下载
    分享一些前端开发人员必备的工具,脚本和资源
    使用HTML5画布实现的超棒javascript动画仪表板:gauge.js
    Google(谷歌)将打算在搜索结果中展示Gmail内容
    免费资源下载:30个用户界面工具栏图标设计
    一张超诡异的HTML图片“松鼠” 是图片同时也是web页面
    带给你设计灵感的30个超棒的暗色系网站设计
  • 原文地址:https://www.cnblogs.com/wsnan/p/11074636.html
Copyright © 2011-2022 走看看