Back to the main page

Solaris: Script for adding new local user account

Here is the script for adding new local user to the Solaris. I commented it well, but here is again my idea:

#!/bin/sh
#set -x

# ----------------------------------------------------
# CHECKS: is user root, did you type arguments
# -----------------------------------------------------
# Check if user is root
if [ `/usr/bin/id | awk '{print $1}' | cut -d= -f2 | cut -d\( -f1` != 0 ]
then
        echo ; echo Sorry, you have to be root to run this script. ; echo
        exit 1
fi

# Check if 2 arguments are provided, first and last name
if [ $# != 2 ]
then
        echo ; echo Usage: `basename $0` Last_name First_name ; echo
        exit 1
fi

# --variables
SYSADM=sysadmin@domain.com
# for GCOS-FIELD
FNAME=`echo $2`
LNAME=`echo $1`


# ------------------------------------------------------
#       FUNCTIONS
# ------------------------------------------------------

# ----- Function to create 2 digits random number
 rand2dig () {
        # function srand() sets new seed for random numbers
        RN=`nawk ' BEGIN { srand();  print rand() }'`

        # multiple with 100 and use int() to get 2 digit number
        IN=`(expr ${RN}*100) | bc -l | nawk '{print int($0)}'`
} 
# ---- Function to create user, change passwd, add dir
 adding_user() {
        HOMEDIR=/export/home
        PRIGROUP=staff
        USERSHELL=/usr/bin/tcsh

        # add a user
        useradd -c "${FNAME} ${LNAME}" -d ${HOMEDIR}/${USERNAME} -m -g ${PRIGROUP} -s ${USERSHELL} ${USERNAME} > /dev/null \
        || exit 1

        # Generate 8 alphanumeric random password
        #PASSWORD=`cat /dev/random | tr -dc "[a-z][A-Z][0-9]" | fold -w 8 | head -1`
        # You can use mkpasswd utility, check man mkpasswd
        PASSWORD=`mkpasswd -p /usr/bin/passwd -l 8 ${USERNAME}` || exit 2

        # force user to change password during first login
        /usr/bin/passwd -f ${USERNAME} > /dev/null || exit 3

        # send email to sys admin and user
        echo "New Local User added to ${HOST}: ${USERNAME} \nInitial password : ${PASSWORD} \
        \nGCOS : ${FNAME} ${LNAME} \nHome dir : ${HOMEDIR}/${USERNAME} \nLogin shell : ${USERSHELL} \
        \n-=-=-=-=-=-=-=-=-=-=-=-=-=-= \
        \nNote: After entering the initial password, you'll be prompted to change the same." \
        | mailx -s "New user : ${USERNAME}" ${SYSADM} ${USERNAME}

} 

# -----------------------------------------------------
# MAIN
# ----------------------------------------------------

# connect last and first name
# use nawk function tolower() to translate uppercase characters to lowercase
LAST=`echo $1 | nawk '{ print tolower($0) }`
FIRST=`echo $2 | nawk '{ print tolower($0) }`
FULLNAME=${LAST}${FIRST}

# awk function length() determines lenght of string
LENGHTFN=`echo ${FULLNAME} | nawk '{ print length($0) }'`

if [ ${LENGHTFN} -lt 8 ]
then
         # If lenght < 8 then this is username
        USERNAME=${FULLNAME}
        # Check if username already exists in /etc/passwd file
        if [ "${USERNAME}" = "`cat /etc/passwd | nawk -F: '{print $1}' | gegrep -w ${USERNAME}`" ]
        then
                if [ `echo ${USERNAME} | nawk '{ print length($0) }'` -eq 7 ]
                then
                        rand2dig ; USERNAME=`echo ${USERNAME} | nawk '{ print substr($0,1,6) }'`${IN}
                        # check if randomly generated username exist
                        if [ "${USERNAME}" = "`cat /etc/passwd | nawk -F: '{print $1}' | gegrep -w ${USERNAME}`" ]
                        then
                                echo "Randomly generated username exists. Run script again, exit now !!!"
                                exit 1
                        fi
                        echo Adding local account ${USERNAME} to ${HOST} ; adding_user

                elif [ `echo ${USERNAME} | nawk '{ print length($0) }'` -le 6 ]
                then
                        rand2dig ; USERNAME=${USERNAME}${IN}
                        # check if randomly generated username exist
                        if [ "${USERNAME}" = "`cat /etc/passwd | nawk -F: '{print $1}' | gegrep -w ${USERNAME}`" ]
                        then
                                echo "Randomly generated username exists. Run script again, exit now !!!"
                                exit 1
                        fi
                        echo Adding local account ${USERNAME} to ${HOST} ; adding_user
                fi
        else

        # username doesn't exist in /etc/passwd file, so add it without modification
        echo Adding local account ${USERNAME} to ${HOST} ; adding_user

        fi 
else
         # if lenght >= 8 then use (only) first 8 character
        # use awk function substr()
        USERNAME=`echo ${FULLNAME} | nawk '{ print substr($0,1,8) }'`
        # Check if username already exists in /etc/passwd file
        if [ "${USERNAME}" = "`cat /etc/passwd | nawk -F: '{print $1}' | gegrep -w ${USERNAME}`" ]
        then
                # generate 2 digits random number ${IN}
                rand2dig
                USERNAME=`echo ${USERNAME} | nawk '{ print substr($0,1,6) }'`${IN}
                # check if randomly generated username exist
                if [ "${USERNAME}" = "`cat /etc/passwd | nawk -F: '{print $1}' | gegrep -w ${USERNAME}`" ]
                then
                        echo "Randomly generated username exists. Run script again, exit now !!!"
                        exit 1
                fi
                echo Adding local account ${USERNAME} to ${HOST} ; adding_user
        else

        # username doesn't exist in /etc/passwd file, so add it without modification
        echo Adding local account ${USERNAME} to ${HOST} ; adding_user
        
	fi 
fi

exit 0

Back to the main page