鑑於互聯網公司越來越多的需求,各種自建以及第三方服務不斷的被加入到公司的系統裏。同時互聯網公司的人員更替也是流水一般時刻不停,這時候對於員工的賬戶管理也就變成了一個非常有挑戰的任務。這時候開源的賬戶統一管理產品就必須被用起來了。Openldap作爲開源目錄服務,也是大家首選的產品。優點很多,開源(免費用),用戶量大(遇坑可以找出坑方法),功能強大,衆多第三方的軟件都加入了對openladp的支持。缺點呢,也不少,特別是數據結構難理解。
目前公司已經用上了openladp,搭建環境網上各種教程所以就不多說。目前有一個需求就是對員工的的賬戶生命週期進行控制,對員工的祕密複雜度進行加強。
- 目標
- 用戶自助修改密碼,密碼包含3種不同字符,最低8位。
- 密碼修改後,重新獲得60天的生命週期,到期前15天通過mail&sms提醒修改。
- 到期了後不修改,直接系統替你重置一個隨機密碼。然後你就只能通過sms的形式來重置密碼後登陸賬戶
實現方式
- 使用開源的第三方self-service-passwd來做密碼重置,密碼強度檢測
- 使用mysql存儲用戶的信息,包括用戶的密碼生命週期
- 修改self-service-passwd 源代碼,修改密碼後執行sql,重置mysql的用戶生命週期
- 服務器每天凌晨1點執行ldap新用戶掃描,新用戶加入錄入mysql,給予60天密碼生命,同時對於老用戶密碼生命減一。 對於用戶生命週期15天用戶發送sms&mail,對於生命爲0用戶,重置隨機密碼。
- 實現邏輯
1.目前openldap密碼定時修改的任務是基於開源工具self-service-password,mysql存儲用戶密碼lifetime,定時任務每天遞減lifetime,定時獲取openldap新加用戶到mysql表中同時賦予60天的密碼lifetime
2.當遇到用戶密碼剩餘15天的lifetime時,發送郵件與sms短信提醒相應用戶更改密碼。用戶可以在短信與郵件中點擊鏈接自助修改密碼
3.當用戶修改密碼後,會重置用戶密碼的lifetime(default=60)
4.密碼lifetime 15天以內的用戶會持續多天收到郵件短信提醒,系統在lifetime=0時 重置用戶密碼,用戶此時只能在鏈接通過sms短信修改密碼
5.mysql表中存在一個old_password 字段,用戶存儲用戶上一次的密碼,可以用來校驗新老密碼是否一致(未實現內容)
- mysql 表結構
id | increase | |
name | openldap提取用戶名 | |
count_time | lifetime | 密碼生命,每天減一 |
not_change | 不需要修改密碼用戶 | 離職用戶,系統用戶無需提醒改密 |
old_password | 用戶上一次密碼 | 校驗用戶新老密碼的重複 |
- 功能腳本
- 密碼lifetime重置腳本:/opt/reset_day.sh
#! /bin/bash
# This Script is used updating count_time in mysql_db
#數據庫地址
host=127.0.0.1
#數據庫用戶
user=root
#數據庫密碼
passwd=110110
#更新用戶天數
reset="use ldap;update ldap set count_time = $lifetime where name = '$1';" #此處的lifetime就是密碼重置後的默認lifetime週期
mysql -u$user -p$passwd -N -e"${reset}"
- /opt/reset_day.sh 腳本觸發在 /usr/share/self-service-password/lib/functions.inc.php的410行
2. 阿里雲sms腳本 /usr/share/self-service-password/lib/sms.py
需要傳人三個參數:
argv1:用戶手機號
argv2:短信驗證碼
argv3:短信模版
3. 短信發送模塊 /usr/share/self-service-password/lib/smsapi.inc.php
三個傳入參數
$mobile:從openldap的信息中提取到的mobile號碼,需提取錄入到openladp裏面
$message:系統隨機生成的6位驗證碼
SMS_175538413 這個參數爲阿里雲短信模版
編寫評論...