zoukankan      html  css  js  c++  java
  • Centos7 yum安装OpenLDAP(普通用户可以更改密码)

    环境

    系统版本:centos7.4

    openldap版本2.4

    安装和配置

    安装并启动服务

    安装:

    yum install openldap openldap-servers openldap-clients

    拷贝数据库配置文件

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

     DB_CONIFG中主要是关于Berkeley DB的相关的一些配置

     启动OpenLDAP Server:

    systemctl start slapd 
    systemctl enable slapd
    systemctl status slapd

    slapd即standard alone ldap daemon,该进程默认监听389端口

    设置root用户密码

    先用一个命令生成一个LDAP管理用户root密码:

    slappasswd -s 123456
    New password:
    Re-enter new password:
    {SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od  #记住这个,下面会用到

    新建一个rootpwd.ldif(名称是自定义的)的文件:/opt/ldif

    vi rootpwd.ldif
    
    dn: olcDatabase={0}config,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od
    • ldif即LDAP Data Interchange Format,是LDAP中数据交换的一种文件格式。文件内容采用的是key-value形式,注意value后面不能有空格。
    • 上面内容中dn即distingush name
    • olc即Online Configuration,表示写入LDAP后不需要重启即可生效
    • changetype: modify表示修改一个entry,changetype的值可以是add,delete, modify等。
    • add: olcRootPW表示对这个entry新增了一个olcRootPW的属性
    • olcRootPW: {SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od指定了属性值

    下面使用ldapadd命令将上面的rootpwd.ldif文件写入LDAP:

    ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry "olcDatabase={0}config,cn=config"

    导入schema

    导入schema,schema包含为了支持特殊场景相关的属性,可根据选择导入,这里先全部导入:

    ls /etc/openldap/schema/*.ldif | while read f; do ldapadd -Y EXTERNAL -H ldapi:/// -f $f; done

    设定默认域

    先使用slappasswd生成一个密码:

    slappasswd -s 123456
    New password:
    Re-enter new password:
    {SSHA}eNZrBtwRRsUg03i5cmGATh3ZnDNfm3Od

    新建一个domain.ldif的文件:

    复制代码
    vi domain.ldif

    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=ceshi,dc=com" read by * none

    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcSuffix
    olcSuffix: dc=ceshi,dc=com

    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootDN
    olcRootDN: cn=admin,dc=ceshi,dc=com

    #这个是admin的密码设置/如果要修改密码把这段拿出来 add改成replace,然后执行 ldapadd -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif


    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcRootPW
    olcRootPW: {SSHA}AtEg7bsctKkWCpeeSdazKcrFCASuU8fP


    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    olcAccess: {0}to attrs=userPassword,shadowLastChange by
    dn="cn=admin,dc=ceshi,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=ceshi,dc=com" write by * read

    复制代码
    • olcAccess即access,该key用于指定目录的ACL即谁有什么权限可以存取什么
    • olcRootDN设定管理员root用户的distingush name
    • 注意替换上面文件内容中cn为具体的域信息
    • olcRootPW用上面新生成的密码替换

    写入:

    复制代码
    ldapmodify -Y EXTERNAL -H ldapi:/// -f domain.ldif
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    modifying entry "olcDatabase={1}monitor,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    
    modifying entry "olcDatabase={2}hdb,cn=config"
    复制代码

    添加基本目录

    新建一个basedomain.ldif的文件:

    复制代码
     
    ------原

    dn: dc=ceshi,dc=com
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    o: ceshi com
    dc: ceshi

    dn: cn=admin,dc=ceshi,dc=com
    objectClass: organizationalRole
    cn: admin
    description: Directory admin

    dn: ou=People,dc=ceshi,dc=com
    objectClass: organizationalUnit
    ou: People

    dn: ou=Group,dc=ceshi,dc=com
    objectClass: organizationalUnit
    ou: Group

    ------

    dn: dc=ceshi,dc=com
    objectclass: dcObject
    objectclass: organization
    o: Ceshi.Inc
    dc: ceshi

    dn: cn=admin,dc=ceshi,dc=com
    objectClass: organizationalRole
    cn: admin
    description: Directory admin

    dn: ou=it,dc=ceshi,dc=com
    ou: it
    objectClass: organizationalUnit

    dn: cn=hanxiaohui,ou=it,dc=ceshi,dc=com
    ou: it
    cn: hanxiaohui
    sn: hui
    userPassword: 123456
    objectClass: inetOrgPerson
    objectClass: organizationalPerson

    复制代码
    • 注意替换上面文件内容中dn为具体的域信息
    • 理解dn,cn,dc
      • DC即Domain Component,LDAP目录类似文件系统目录dc=zhidaoauto,dc=com相当于/com/zhidaoauto
      • CN即Common Name,CN有可能代表一个用户名,例如cn=Manager,dc=zhidaoauto,dc=com表示在/com/zhidaoauto域下的管理员用户Manager
      • OU即Organizational Unit,例如ou=People,dc=zhidaoauto,dc=com表示在/com/zhidaoauto域下的一个组织单元People

     写入:

    复制代码
    ldapadd -x -D cn=admin,dc=ceshi,dc=com -W -f basedomain.ldif
    Enter LDAP Password:
    adding new entry "dc=zhidaoauto,dc=com"
    
    adding new entry "cn=Manager,dc=zhidaoauto,dc=com"
    
    adding new entry "ou=People,dc=zhidaoauto,dc=com"
    
    adding new entry "ou=Group,dc=zhidaoauto,dc=com"
    复制代码

    测试:

    复制代码
    ldapsearch -LLL -W -x -D "cn=admin,dc=ceshi,dc=com" -H ldap:/// -b "dc=admin,dc=com"
    Enter LDAP Password:
    dn: dc=zhidaoauto,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: zhidaoauto com
    dc: zhidaoauto
    
    dn: cn=Manager,dc=zhidaoauto,dc=com
    objectClass: organizationalRole
    cn: Manager
    description: Directory Manager
    
    dn: ou=People,dc=zhidaoauto,dc=com
    objectClass: organizationalUnit
    ou: People
    
    dn: ou=Group,dc=zhidaoauto,dc=com
    objectClass: organizationalUnit
    ou: Group
    复制代码

    管理工具

    可以在局域网内的windows电脑上下载ldapadmin作为管理工具 下载地址: http://www.ldapadmin.org/download/ldapadmin.html

    知识点:

    登录账号为:

    登录ldap的用户dn为:cn=Manager,dc=zhidaoauto,dc=com

    ou=Group和ou=People的区别:

    从ou=Group里创建的是组,从ou=People创建的是用户

    ou=People里的用户怎么加入到ou=Group下边的组呢:

    右键"yunwei"组-->properties

    这样就把ou=People里"zhaijunming"用户添加到ou=Group里的"yunwei"组了

    添加用户:

     修改admin密码

    1)
    [root@localhost /opt/ldif 17:55:41&&31]#slappasswd -s 1q2w3e4r
    {SSHA}dYGee/j6y0qOeHqCTgp3vkIGETMOZYkQ
    
    2)
    vim changeAdminPwd.ldif (用上面的密码)
    -------------------------------------------------------------
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcRootPW
    olcRootPW: {SSHA}AtEg7bsctKkWCpeeSdazKcrFCASuU8fP
    --------------------------------------------------------------
    
    3)
    ldapadd -Y EXTERNAL -H ldapi:/// -f changeAdminPwd.ldif
    

      

    参考文章

    https://blog.frognew.com/2017/05/openldap-install-notes.html#ldapadmin

    https://www.cnblogs.com/zhaijunming5/p/9522756.html

  • 相关阅读:
    【刷题】面筋-mysql-如何对数据库进行备份
    【刷题】面筋-数据库-mysql的优化
    【刷题】面筋-MySQL中char、varchar和text三者的区别
    【刷题】面筋-sql-学生成绩单里两门成绩>80的学生名字
    【刷题】面筋-网络-无效链接,死链接,错误链接
    【刷题】面筋-算法-在海量IP中找出访问次数最多的100个IP
    【刷题】面筋-shell:统计一个文件中重复的行和重复次数
    【刷题】面筋-linux-如何查找出现频率最高的100个ip地址
    【刷题】面筋-linux 如何将文件从一台服务器转移到另一台服务器
    【刷题】面筋-Linux-vi显示或关闭行号:set number
  • 原文地址:https://www.cnblogs.com/hanxiaohui/p/10436924.html
Copyright © 2011-2022 走看看