zoukankan      html  css  js  c++  java
  • OpenLdap 部署

    环境介绍:

    OS: centos7.x
    slapd: 2.4.44
    防火墙和selinux都已经关闭
    所有的操作均在root用户下执行。
    

    一、服务端搭建

    1.1 安装软件包

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

    安装完成以后,主要关注以下的目录:

    /etc/openldap/slapd.d/* // 具体的数据配置信息
    /etc/openldap/schema/* // 官方写好的一些配置信息
    /var/lib/ldap/*   //OpenLDAP的数据文件
    /usr/share/openldap-servers/DB_CONFIG.example //模板数据库配置文件
    

    1.2 启动服务

    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown ldap. /var/lib/ldap/DB_CONFIG
    systemctl start slapd
    systemctl enable slapd
    

    OpenLDAP监听的端口:
    默认监听端口:389(明文数据传输)
    加密监听端口:636(密文数据传输)

    1.3 配置

    1.3.1 设置管理员密码

    [root@hadoop4 ~]# slappasswd -s "123456"
    {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
    

    注意:上述生成的这个加密的密码是需要用到的。
    创建修改密码的文件
    cat chrootpw.ldif

    # specify the password generated above for "olcRootPW" section
    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
    

    说明:上述这块的意思是修改数据库olcDatabase={0}config,添加olcRootPW字段。在ldap里面,组织关系是树形结构。所以叫轻量级目录服务。
    在centos6上面配置的时候,主要是使用slapd.conf文件来生成对应的信息。但是在centos7上面,建议是使用编写以ldif后缀的文件来定义。

    执行如下命令,配置管理员密码

    ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
    

    1.3.2 导入基本Schema模式

    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
    ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
    

    1.3.3 配置访问权限和设置基本的域名
    cat chdomain.ldif

    # replace to your own domain name for "dc=***,dc=***" section
    # specify the password generated above for "olcRootPW" section
    dn: olcDatabase={1}monitor,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
      read by dn.base="cn=admin,dc=example,dc=com" read by * none
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=example,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=admin,dc=example,dc=com
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}UhjtP0mnNz6g2WS9ZgNj1V051DIwydvT
    
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    olcAccess: {0}to attrs=userPassword,shadowLastChange by
      dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
    olcAccess: {1}to dn.base="" by * read
    olcAccess: {2}to * by dn="cn=admin,dc=example,dc=com" write by * read
    

    执行如下命令进行创建

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

    1.3.4 配置基本域
    cat basedomain.ldif

    # replace to your own domain name for "dc=***,dc=***" section
    dn: dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    o: Server com
    dc: example
    
    dn: cn=admin,dc=example,dc=com
    objectClass: organizationalRole
    cn: admin
    description: Directory Manager
    
    dn: ou=People,dc=example,dc=com
    objectClass: organizationalUnit
    ou: People
    
    dn: ou=Group,dc=example,dc=com
    objectClass: organizationalUnit
    ou: Group
    

    执行命令

    ldapadd -x -D cn=admin,dc=example,dc=com -W -f basedomain.ldif
    

    1.3.5 添加用户
    cat user.ldif

    # replace to your own domain name for "dc=***,dc=***" section
    dn: uid=yjt,ou=People,dc=example,dc=com
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: shadowAccount
    cn: yjt
    sn: Linux
    userPassword:123456
    loginShell: /bin/bash
    uidNumber: 1100
    gidNumber: 1100
    homeDirectory: /home/yjt
    
    dn: cn=yjt,ou=Group,dc=example,dc=com
    objectClass: posixGroup
    cn: yjt
    gidNumber: 1100
    memberUid: yjt
    

    执行命令:

    ldapadd -x -D "cn=admin,dc=example,dc=com" -w123456 -f user.ldif
    

    查询用户,以下几种方式均可

    ldapsearch -x -LLL uid=yjt +
    ldapsearch -x -b "uid=yjt,ou=People,dc=example,dc=com"
    ldapsearch -x -b "dc=example,dc=com"|grep yjt
    

    二、配置日志信息

    1、在 vim /etc/rsyslog.conf加上

    local4.*        /var/log/ldap.log
    

    2、重启rsyslog

    /etc/init.d/rsyslog restart
    

    3、重启slapd服务

    /etc/init.d/slapd restart
    

    4、查看日志信息

    cat /var/log/slapd/slapd.log
    

    三 、OpenLDAP与migrationtools实现导入系统账号的相关信息

    1、安装migrationtools
    这个已经安装过

    2、修改migrationtools的配置文件
    vim /usr/share/migrationtools/migrate_common.ph 修改以下的两个地方
    image
    3、生成数据文件
    生成基础的数据文件,可以自己修改这个生成的base.ldif文件,把不需要的去掉。
    执行命令

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

    这一步主要就是创建一些ou,也就是组
    执行命令

    ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
    

    记得加-c,表示遇到错误继续执行
    4、把系统的用户生成ldif文件

    [root@hadoop4 openldap]# /usr/share/migrationtools/migrate_passwd.pl /etc/passwd passwd.ldif
    [root@hadoop4 openldap]# /usr/share/migrationtools/migrate_group.pl /etc/group groupwd.ldif
    

    把uid小于1000的最好都去掉。
    这里用于演示,把passwd.ldif和groupwd.ldif里面的hduser相关的信息拿出来放到一个文件,如下:
    image
    执行导入命令:

    ldapadd -c -x -D "cn=admin,dc=example,dc=com" -W -f passwd.ldif
    

    查询:

    ldapsearch -x -LLL uid=hduser +
    

    四、OpenLDAP客户端的配置

    4.1 关闭ssd服务

    systemctl status sssd
    

    4.2 安装nslcd服务

    yum install nss-pam-ldapd
    

    4.3 修改nslcd配置
    vim /etc/nslcd.conf
    主要修改下面两项
    image
    4.4 system-auth
    vim /etc/pam.d/system-auth 修改,把sss行的注释掉,改成ldap的
    image
    同时添加一行:

    session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022
    

    这个是解决登录用户的时候不能创建家目录问题
    4.5 修改 nsswitch.conf
    vim /etc/nsswitch.conf 修改nsswitch.conf配置文件,修改后,默认登录的用户通过本地配置文件进行查找并匹配。当匹配不到用户信息时,会通过后端配置的LDAP认证服务进行匹配
    4.6 修改authconfig
    vim /etc/sysconfig/authconfig 确保标记的已打开为yes
    USESHADOW=yes 启用密码验证
    USELDAPAUTH=yes 启用OpenLDAP验证
    USELOCAUTHORIZE=yes 启用本地验证
    USELDAP=yes 启用LDAP认证协议

    4.7 重启nslcd服务
    /etc/init.d/nslcd restart

    如果Linux操作系统要与ldap连接,也可以使用setup来配置

    五、与ssh集成

    5.1 修改sshd_config
    vim /etc/ssh/sshd_config

    UsePAM yes  // 开启
    

    5.2 修改sshd
    vim /etc/pam.d/sshd 用于第一次登陆的账户自动创建家目录
    在最后添加:

    session    required   pam_mkhomedir.so
    

    5.3 password-auth
    vim /etc/pam.d/password-auth
    image
    注:把上述图片里面的划线的第一行改成下面这样,否则ssh连接的时候,输入密码总是失败

    auth        sufficient    pam_ldap.so forward_pass
    

    重启sshd

    六、限制用户登录

    6.1 修改/etc/pam.d/sshd
    添加上pam_access.so模块

    account    required     pam_access.so
    

    6.2 修改/etc/security/access.conf
    测试限制hduser用户ssh登录系统

    image

    测试

    image

    七、密码强度配置

    7.1 加载ppolicy模块
    检查模块是否存在:

    slapcat -n 0 | grep olcModuleLoad
    

    如果上面命令没有任何输出,使用ldapadd加载模块
    7.2 创建模块ldif文件
    cat add_ppolicy_module.ldif

    dn: cn=module,cn=config
    cn: module 
    objectClass: olcModuleList
    olcModulePath: /usr/lib64/openldap
    olcModuleLoad: ppolicy.la
    

    执行命令

    ldapadd -Y EXTERNAL -Q -H ldapi:/// -f add_ppolicy_module.ldif
    

    执行完在用上面的命令验证是否加载进来

    slapcat -n 0 | grep olcModuleLoad
    

    输出:olcModuleLoad: {0}ppolicy.la
    说明加载成功

    加载ppolicy模块的方法二

    加载 PPolicy 模块
    定义 olcModuleList 对象:
    cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
    dn: cn=module{0},cn=config
    objectClass: olcModuleList
    cn: module{0}
    olcModuleLoad: ppolicy.la
    EOF
    添加olcModulePath
    cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
    dn: cn=module{0},cn=config
    changetype: modify
    add: olcModulePath
    olcModulePath: /usr/lib64/openldap/
    EOF
    

    7.3 导入ppolicy的schema

    1、查看ppolicy的schema是否添加
    ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn | grep ppolicy
    如果没有添加进行添加
    ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif
    

    7.4 修改olcAccess规则

    cat << EOF | ldapmodify -c -Y EXTERNAL -Q -H ldapi:///
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=root,dc=example,dc=com" write by anonymous auth by * none
    olcAccess: {1}to dn.base="" by * read
    olcAccess: {2}to * by self write by dn="cn=root,dc=example,dc=com" write by * read
    EOF
    

    7.5 添加默认密码策略

    cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///
    dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config
    changetype: add
    objectClass: olcOverlayConfig
    objectClass: olcPPolicyConfig
    olcOverlay: ppolicy
    olcPPolicyDefault: cn=admin,ou=pwpolicies,dc=example,dc=com
    olcPPolicyHashCleartext: TRUE
    olcPPolicyUseLockout: TRUE
    EOF
    

    查看

    ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={2}hdb,cn=config
    

    7.6 添加pwpolicies条目

    cat << EOF | ldapadd -x -D "cn=root,dc=example,dc=com" -w123456
    dn: ou=pwpolicies,dc=example,dc=com
    objectClass: organizationalUnit
    ou: pwpolicies
    EOF
    

    7.7 添加默认密码策略
    添加默认密码策略:(pwdLockoutDuration:密码连续输入错误次数后,账号锁定时间 pwdMaxFailure:密码最大失效次数,超过后账号被锁定)

    cat << EOF | ldapadd -x -D cn=admin,dc=example,dc=com -w123456
    dn: cn=admin,ou=pwpolicies,dc=example,dc=com
    objectClass: pwdPolicy
    objectClass: person
    cn: admin
    pwdMaxAge: 2592000
    pwdAttribute: userPassword
    pwdExpireWarning: 3600
    #pwdInHistory: 0
    #pwdCheckQuality: 0
    pwdMaxFailure: 5
    pwdLockout: TRUE
    #pwdLockoutDuration: 0
    #pwdGraceAuthNLimit: 0
    #pwdFailureCountInterval: 0
    pwdMustChange: TRUE
    pwdMinLength: 6
    #pwdAllowUserChange: TRUE
    pwdSafeModify: FALSE
    pwdCheckQuality: 2
    sn: dummy value
    

    7.8 添加pqchecker密码检查模块
    具有ppolicy覆盖的OpenLDAP目录服务器允许管理功能强大的密码策略。除密码内容质量外,策略覆盖还直接支持此策略的所有方面。密码内容强度管理留给外部插件,该插件必须是本机共享库。pqChecker组件提供了此功能。它允许检查密码的内容,即:
    必需的大写字符数。
    必需的小写字符数。
    所需的特殊字符数(非字母字符)。
    所需的位数(0-9)。
    禁止使用的字符。
    用官网给出的方法安装pqchecker

    rpm -iv http://www.meddeb.net/pub/pqchecker/rhel/7/pqchecker-2.0.0-1.el7.x86_64.rpm
    
    # 找到二进制包安装的位置后续会用到
    ls /usr/lib64/openldap/pqchecker.so*
    # /usr/lib64/openldap/pqchecker.so.2.0.0
    

    配置
    add_pqchecker.ldif

    dn: cn=admin,ou=pwpolicies,dc=example,dc=com
    changetype: modify
    add: objectClass
    objectclass: pwdPolicyChecker
    -
    add: pwdcheckmodule
    pwdCheckModule: pqchecker.so.2.0.0
    

    通过命令将上面的设置,生效

    ldapmodify -a -D "cn=admin,dc=example,dc=com" -w 123456 -f add_pqchecker.ldif
    

    7.8 查看用户的密码策略

    ldapsearch -x -b 'ou=pwpolicies,dc=asiainfo,dc=com'
    

    八、主从

    借鉴:

    https://www.cnblogs.com/lemon-le/p/6266921.html
    https://www.tqwba.com/x_d/jishu/396459.html
    https://blog.csdn.net/u011607971/article/details/86378361
    https://blog.csdn.net/weixin_33758863/article/details/93631997
    http://www.zytrax.com/books/ldap/ch6/ppolicy.html#pwdpolicyattributes
    https://blog.csdn.net/liumiaocn/article/details/83991112

    记录学习和生活的酸甜苦辣.....哈哈哈
  • 相关阅读:
    手机号码正则,座机正则,400正则
    Win10 开始运行不保存历史记录原因和解决方法
    Ubuntu 普通用户无法启动Google chrome
    在win10 64位系统安装 lxml (Python 3.5)
    SecureCRT窗口输出代码关键字高亮设置
    【转】win2008 中iis7设置404页面但返回状态200的问题解决办法
    ionic app开发遇到的问题
    Ubuntu 创建文件夹快捷方式
    Ubuntu配置PATH环境变量
    Ubuntu 升级python到3.7
  • 原文地址:https://www.cnblogs.com/yjt1993/p/14786051.html
Copyright © 2011-2022 走看看