SAMBA - Liste des derniers mot de passe changés
Utilisation d'un script python pour afficher les personnes qui ont changé leur mot de passe depuis une certaine date.
C'est fortement utile suite à la faille de sécurité CVE-2018-1057 publiée le 13 mars.
- Créer le fichier /root/last_changed_password.py
#!/usr/bin/python2 import samba import sys, ldb, os from datetime import datetime from samba import dsdb from samba.samdb import SamDB from samba.param import LoadParm from samba.auth import system_session from samba.credentials import Credentials from datetime import datetime,timedelta import time lp = LoadParm() creds = Credentials() creds.guess(lp) sam_ldb_file = "/var/lib/samba/private/sam.ldb" samdb = SamDB(url=sam_ldb_file, session_info=system_session(), lp=lp) if len(sys.argv) > 1: date_limit = time.mktime(datetime.strptime(sys.argv[1], '%Y%m%d').timetuple()) else: print "%s 20161230" % sys.argv[0] print "These users have changed their password since 20161230" sys.exit(1) domain_dn = samdb.domain_dn() domain = samdb.domain_dns_name() def ADToUnix ( WinTimestamp, accExp = 0 ): MagicNumber = 11644473600 if accExp: MagicNumber += 86400 return ( (WinTimestamp /10000000) - MagicNumber ) def UnixToAD ( UnixTimesTamp, accExp = 0 ): MagicNumber = 116444736000000000 if not accExp: MagicNumber += 86400 return ( (UnixTimesTamp *10000000) + MagicNumber ) res = samdb.search(domain_dn,scope=ldb.SCOPE_SUBTREE, attrs=["dn","pwdLastSet","samaccountname"],expression='(&(lastlogon=*)(objectClass=user)(!(objectClass=computer)))') for msg in res: dn = msg.get("dn", idx=0) samaccountname = msg.get("samaccountname", idx=0) pwdLastSet = int(msg.get("pwdLastSet", idx=0)) if pwdLastSet > UnixToAD(date_limit): print samaccountname, datetime.fromtimestamp(ADToUnix(pwdLastSet))
- On met les droits d’exécution
chmod 775 /root/last_changed_password.py
- On liste les utilisateurs qui ont changé leur mot de passe depuis 10 Mars 2018
[root@dc1 ~]# /root/last_changed_password.py 20180310 toto096 2018-03-15 17:18:10