crowd密码过期通知
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

crowd密码过期通知

yuc
yuc
2024-09-10 / 最后修改: 2024-09-10 02:29 / 0 评论 / 3 阅读 / 正在检测是否收录...
背景

公司使用的 crowd 一直没有升级,版本是 2.11.1 ,一直以来用户密码过期时间是一年,但是都没有通知功能,很多用户登录很多次不行,又来咨询,互相都浪费了不少时间,所以这次决定想一个办法解决密码过期通知的

办法

通过查询资料,找到了两个办法:

  1. 升级到新版本,已经测试新版本在邮件配置的后台有了密码过期通知的模板,说明后来是新增了这个功能的
  2. 使用自定义的脚本,需要在数据库中检索密码将要过期的用户,拿到用户邮箱发送通知
选择

两个办法优劣如下:

  1. 升级到版本是优先考虑的选项,但是存在几个问题 a. 一是公司还使用了同时期的 confluence、jira b. 其他第三方的服务也跟 crowd 做了对接 c. 最后 OA 还使用了 crowd 的 api 接口做用户管理 d. 没有最新license,可能还需要破解,存在安全以及稳定性的问题 e. 最后还需要从 2.11.1 版本恢复数据到 6.0.2 功能和稳定性也未知 f. 综合考虑目前升级版本风险无法控制,可能需要暂缓
  2. 使用自定义脚本的方式来通知,优劣如下: a. 可以自己检索任意时间、用户进行通知都可以 b. 是否准确、以及通知的稳定性未知,主要是功能方面 c. 综上,目前来看的话,使用这种方法在安全性上可以得到保证
脚本

脚本如下:

#!/bin/bash
host="192.168.xx.xx"
port=3336
user="crowd"
pass="crowd"
db='crowd'
sql="select * from (select  concat(u.first_name,u.last_name) as full_name, 
        u.email_address,
        DATE(FROM_UNIXTIME(ua.attribute_value/1000)) pwd_last_changed,
        DATEDIFF(DATE_ADD(FROM_UNIXTIME(ua.attribute_value/1000), INTERVAL da.attribute_value DAY), NOW()) days_before_expire
    from crowd.cwd_user u
        inner join cwd_user_attribute ua on
                ua.user_id=u.id
                and u.active='T' 
                and ua.attribute_name='passwordLastChanged'
        inner join cwd_directory_attribute da on
                u.directory_id=da.directory_id
                and da.attribute_name='password_max_change_time'
        order by days_before_expire) t 
        where t.days_before_expire in (0,1,7)"
#sql="select * from (select  concat(u.first_name,u.last_name) as full_name, 
#        u.email_address,
#        DATE(FROM_UNIXTIME(ua.attribute_value/1000)) pwd_last_changed,
#        DATEDIFF(DATE_ADD(FROM_UNIXTIME(ua.attribute_value/1000), INTERVAL da.attribute_value DAY), NOW()) days_before_expire
#    from crowd.cwd_user u
#        inner join cwd_user_attribute ua on
#                ua.user_id=u.id
#                and ua.attribute_name='passwordLastChanged'
#        inner join cwd_directory_attribute da on
#                u.directory_id=da.directory_id
#                and da.attribute_name='password_max_change_time'
#        order by days_before_expire) t 
#        where email_address='yuc@succez.com'"
text=$(mysql -u${user} -h${host} -p${pass} -P${port} -D${db} -N -e "${sql}")
dddte=`date +%F_%T`
echo "===================== ${dddte} Execute ======================"
echo "$text" | while read line;do
    read name mail days <<< $(echo $line | awk '{print $1,$2,$4}')
    ddate=`date +%F_%T`
    #echo $name
    #echo $mail
    #echo $days
    # send mail to user mail
    echo "----------------- ${ddate} ------------------" >> ~/crowdmail.log
    echo -e "
        ${name} 你好,
            你的 Crowd 密码即将过期,剩余天数为: ${days} ,请在过期之前登录 openvpn 到站点: https://crowd.xx.com/crowd 修改新密码
    " | mailx -v -s "Crowd密码过期提醒" $mail &>> ~/crowdmail.log
    # 记录
    echo $ddate  $line >> ~/crowd.pass
done

SQL 参考 官方 JIRA 中问答(在历史版本中没有此功能的解决方案)

然后 mailx 需要配置下邮箱,这里使用的是阿里云的邮件服务

0

评论

博主关闭了当前页面的评论