Tuesday, August 14, 2012

Linux/Unix bash Shell script for user account expiry notification


Shell script to display user account expiry details

Q.Can we write a shell script to send notification to administrator or root about the accounts which are going to expire?
Ans : Here is a small script which will give you mail on the accounts which are expired and which are going to expire in 7 days. You are free to use and modify this script for your work.


#!/bin/bash
#Author:Surendra Kumar Anne
#Created on:09-02-2012
#Purpose:To check the user account expire status in Linux, unix, BSD etc

cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
totalaccounts=`cat /tmp/expirelist.txt | wc -l`
for((i=1; i<=$totalaccounts; i++ ))
       do
       tuserval=`head -n $i /tmp/expirelist.txt | tail -n 1`
       username=`echo $tuserval | cut -f1 -d:`
       userexp=`echo $tuserval | cut -f2 -d:`
       userexpireinseconds=$(( $userexp * 86400 ))
       todaystime=`date +%s`
       #check if the user expired or not?
       if [ $userexpireinseconds -ge $todaystime ] ;
           then
           timeto7days=$(( $todaystime + 604800 ))
                if [ $userexpireinseconds -le $timeto7days ];
                then
                mail -s "The account $username will expire less than 7 days" root
                fi
       else
       mail -s "The user account $username already expired" root
       fi
done

This script will send multiple mails to root about the status of expired and going to expire user accounts.

1 comment:

  1. Hi I'm trying to use your script but when I run first line from the script the expirelist.txt is empty. when I remove this part sed /:$/d then I have list of all users from shadow file with : on the end of each line.
    Is that correct ?


    ReplyDelete