#!/bin/ksh
#
# SCRIPT: "Banybody"   boracle - This time
#
# AUTHOR: Randy Michael
# DATE: 05/08/2007
# REV: 1.0.P
# PLATFOEM: Any UNIX
#
# PURPOSE: This shell script is used to capture all "$EFF_USER" access by
#          capturing all of the terminal data in a log file using
#          the script command. This shell script is executed from the
#          command line using sudo (Super User Do). The log file
#          is kept locally and e-mailed to a log file administrative
#          user either locally or on a remote machine. Sudo must be 
#          configured for this shell script. Refer to your sudo notes.
#          The effective user, currently oracle, can be changed by 
#          setting the "EFF_USER" variable to another user, and changing
#          the name of the script. This is why the original name of the
#          script is called "Banybody"
#
# ORIGINAL USAGE:  sudo  Banybody
#
# THIS TIME USAGE ==> USAGE: sudo boracle
#
#
# REV LIST:
#          5/10/2007: Modified the script to replace the hardcoded username
#                     with the variable $EFF_USER. This allows flexibility
#                     to add auditing of more accounts be just changing
#                     the EFF_USER variable and the script name.
#
# set -n # Uncomment to check syntax without any execution 
# set -x # Uncomment to debug this shell script
#
#
################# DEFINE EFFECTIVE USER ##################

# This EFF_USER is the user name you want to be to execute
# a shell in. An su command is used to switch to this user.

EFF_USER=oracle

############# DEFINE AUDIT LOG MANAGER ###################

# This user receives all of the audit logs by e-mail. This
# Log Manager can have a local or remote e-mail address. You
# can add more than one e-mail address if you want by separating
# each address with a space.

LOG_SERVER=yogi
LOG_MANAGER="logman@$LOG_SERVER" # List to email audit log

# Set up the correct echo command usage.  Some Linux machines
# may execute all scripts in Bash shell.

case $(basename $SHELL) in
bash) alias echo="echo -e"
      ;;
esac
##########################################################
################ DEFINE FUNCTIONS HERE ###################
##########################################################

cleanup_exit ()
{
# This function is executed on any type of exit except of course
# a kill -9, which cannot be trapped. The script log file is
# emailed either locally or remotely, and the log file is 
# compressed. The last "exit" is needed so the user does not
# have the ability to get to the command line without logging.

if [[ -s ${LOGDIR}/${LOGFILE} ]] # Is it greater than zero bytes?
then
    mailx -s "$TS - $LOGNAME Audit Report" $LOG_MANAGER < ${LOGDIR}/${LOGFILE}
    nohup compress ${LOGDIR}/${LOGFILE} &
fi
}

# Set a trap

trap 'cleanup_exit' 1 2 3 5 15

##########################################################
################ DEFINE VARIABLES HERE ###################
##########################################################

TS=$(date +%m%d%y%H%M%S)             # File time stamp
THISHOST=$(hostname)                 # Host name of this machine
LOGDIR=/usr/local/logs/script        # Directory to hold the logs
LOGFILE=${THISHOST}.${EFF_USER}.$TS  # Creates the name of the log file
touch $LOGDIR/$LOGFILE             # Creates the actual file
TMOUT=300                          # Set the user's shell timeout!!!
export TMOUT                       # Export the TMOUT variable 
set -o vi 2>/dev/null              # To recall previous commands

# set path to include /usr/local/bin
echo $PATH|grep -q ':/usr/local/bin' || PATH=$PATH:/usr/local/bin

# Set the command prompt to override the /.profile default prompt

PS1="$THISHOST:b${EFF_USER}> "
export PS1

#################### RUN IT HERE ##########################

chmod 666 ${LOGDIR}/${LOGFILE}     # Set permission to read/write for the owner

# To get the script sesssion to work we have to use the switch user (su)
# command with the -c flag, which means execute what follows. Sudo is also 
# used just to ensure that root is executing the su command. We ARE executing
# now as root, because this script was started with sudo. If a non-configured
# sudo user tries to execute this command then it will fail unless sudo was
# used to execute this script as root. Notice we are executing the script
# command as "$EFF_USER". This variable is set at the top of the script. A
# value such as "EFF_USER=oracle" is expected.

sudo su - $EFF_USER -c "script ${LOGDIR}/${LOGFILE}"

chmod 400 ${LOGDIR}/${LOGFILE}     # Set permission to read-only for the owner

cleanup_exit                       # Execute the cleanup and exit function

