【运维开发】PHP开发的LDAP账号创建工具

AI给我的标题:一键创建LDAP账号,解放IT运维双手 😂

随着公司内部系统越来越多,各系统账号维护繁琐,使用LDAP作为统一账号中心,统一管理各种内部系统账号。
应IT维护人员需求,使用PHP+LAYUI制作了一个可以快速创建LDAP账号的小工具。
开发思路,个人浅见,如有巧合,以你为准

痛点分析

  • IT运维中手动创建LDAP账号的重复性工作现状
  • 传统流程耗时、易出错、难以批量处理的局限性
  • 自动化需求在团队协作、权限管理中的必要性

    一、功能设计

    1、管理员登录功能

  • 需要登录才能使用该创建工具,避免未授权的账号创建;
  • 管理员账号密码使用本地文件管理,无需数据库;

    2、账号创建功能

  • 使用邮箱号通过HR系统接口获取人员基础信息
  • 根据人员信息一键生成LDAP账号

    3、发送邮件功能

  • 账号创建后通过邮件下发给申请人;
  • 使用PHPMailer发送组件,无需额外的邮件服务器;

    4、日志功能

  • 每次创建记录账号、邮件发送信息,管理员、IP地址等信息到本地log文件;

二、 技术实现

环境信息

类型 描述
LDAP服务器 OpenLDAP
服务器运行环境 CentOS7+Apache+PHP7(PHP安装LDAP扩展)
其他 Layui前端样式库

技术架构

LDAP创建工具技术架构图

技术细节

  1. 使用php_ldap扩展,连接ldap查询用户信息;

    LDAP扩展说明:https://www.php.net/manual/zh/book.ldap.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //LDAP配置
    define('LDAP_SERVER', "ldap://localhost:389"); //服务器地址
    define('LDAP_ADMIN_DN', 'cn=admin,dc=example,dc=net'); //管理员DN
    define('LDAP_ADMIN_PASSWORD', 'ldappassword'); //管理员密码
    define('LDAP_BASE_DN', 'ou=demo,dc=example,dc=net'); //搜索DN
    //连接服务器
    $ldapconn = ldap_connect(LDAP_SERVER) or die("Could not connect to LDAP server.");
    //设置版本
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
    //绑定管理员账号
    $ldapbind = ldap_bind($ldapconn, LDAP_ADMIN_DN, LDAP_ADMIN_PASSWORD) or die("Error trying to bind: ".ldap_error($ldapconn));
    $searchFilter = '(sn='.$search_sn.')';//搜索过滤器
    //获取用户信息
    $ldapSearch = ldap_search($ldapconn, $searchBase, $searchFilter, array("cn","uid","mail"));
    //获取所有结果条目
    $ldapEntries = ldap_get_entries($ldapconn, $ldapSearch);
  2. 使用PHPMailer发送邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
include_once 'PHPMailer.php';
//邮箱服务配置
define('MAIL_HOST', 'smtp.exmail.qq.com'); //SMTP服务器
define('MAIL_PORT', 465); //SMTP端口
define('MAIL_USER', 'it@example.com'); //SMTP账号
define('MAIL_PASS', 'emailpassword'); //SMTP密码
define('RESET_LINK', 'http://localhost/');//填写默认服务器地址
function send_mail($address, $name, &$result)
{
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = MAIL_HOST; // SMTP服务器地址
$mail->SMTPAuth = true;
$mail->Username = MAIL_USER; // SMTP 用户名
$mail->Password = MAIL_PASS; // SMTP 密码
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // 加密方式
$mail->Port = MAIL_PORT; // SMTP 端口

//Recipients
$mail->setFrom(MAIL_USER, '发件人名称');
$mail->addAddress($address, $name); // 添加收件人信息
//Content
$mail->isHTML(true);
$mail->Subject = '邮件主题';
$mail_content = '邮件正文内容';
$mail_sign = '邮件签名';
$mail->Body = $mail_content . '<br>' . $mail_sign; // 邮件完整内容

$mail->send();
$result = '邮件发送成功!!';
} catch (Exception $e) {
$result = "邮件发送失败. 原因: {$mail->ErrorInfo}";
}
}
send_mail('demo@example.com', 'demo');//发送邮件

目录结构

项目目录

三、界面展示

登录页面

登录页面

功能页面

工具主页面

邮件模板

邮件内容模板

四、小结

  • 使用工具可以简化账号创建的繁琐操作,如下图所示:
    开通流程优化
  • 程序未过多考虑安全设计,仅建议企业内网系统使用;

    五、优化方向

  • 如果条件允许,可以对接人员信息系统实现入职自动化创建账号等,无需额外操作,进一步释放人力;
  • 自助式账号申请Web界面开发;
  • 提升安全能力;

项目GitHub地址: https://github.com/WannaCryZ/ldap-user-create
注:实际部署需配置 config.php 中的LDAP连接参数和邮件服务器等凭证