1993-06-20 13:41:45 +00:00
|
|
|
#!/bin/sh -
|
|
|
|
#
|
|
|
|
# @(#)security 5.3 (Berkeley) 5/28/91
|
1999-08-25 16:01:45 +00:00
|
|
|
# $Id: security,v 1.30 1999/06/23 14:23:54 sheldonh Exp $
|
1993-06-20 13:41:45 +00:00
|
|
|
#
|
|
|
|
PATH=/sbin:/bin:/usr/bin
|
1996-04-18 10:34:07 +00:00
|
|
|
LC_ALL=C; export LC_ALL
|
1993-06-20 13:41:45 +00:00
|
|
|
|
1996-06-30 19:35:20 +00:00
|
|
|
separator () {
|
|
|
|
echo ""
|
|
|
|
echo ""
|
|
|
|
}
|
|
|
|
|
1999-01-01 17:37:33 +00:00
|
|
|
host=`hostname`
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "Subject: ${host} security check output"
|
1993-06-20 13:41:45 +00:00
|
|
|
|
|
|
|
LOG=/var/log
|
1996-07-31 06:47:05 +00:00
|
|
|
TMP=/var/run/_secure.$$
|
1993-06-20 13:41:45 +00:00
|
|
|
|
1993-09-06 23:12:04 +00:00
|
|
|
umask 027
|
|
|
|
|
1993-06-20 13:41:45 +00:00
|
|
|
echo "checking setuid files and devices:"
|
1993-09-06 23:12:04 +00:00
|
|
|
|
|
|
|
# don't have ncheck, but this does the equivalent of the commented out block.
|
|
|
|
# note that one of the original problem, the possibility of overrunning
|
|
|
|
# the args to ls, is still here...
|
|
|
|
#
|
1996-06-30 13:16:21 +00:00
|
|
|
MP=`mount -t ufs | grep -v " nosuid" | sed 's;/dev/;&r;' | awk '{ print $3 }'`
|
1999-08-25 16:01:45 +00:00
|
|
|
set ${MP}
|
1994-01-22 10:54:13 +00:00
|
|
|
while test $# -ge 1; do
|
1993-10-25 20:13:16 +00:00
|
|
|
mount=$1
|
|
|
|
shift
|
1997-02-23 21:34:34 +00:00
|
|
|
find $mount -xdev -type f \
|
1996-04-18 10:34:07 +00:00
|
|
|
\( -perm -u+x -or -perm -g+x -or -perm -o+x \) \
|
1997-02-23 21:34:34 +00:00
|
|
|
\( -perm -u+s -or -perm -g+s \) -print0
|
1999-08-25 16:01:45 +00:00
|
|
|
done | xargs -0 -n 20 ls -lTd | sort +9 > ${TMP}
|
1993-06-20 13:41:45 +00:00
|
|
|
|
1999-08-25 16:01:45 +00:00
|
|
|
if [ ! -f ${LOG}/setuid.today ] ; then
|
1996-06-30 19:35:20 +00:00
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "no ${LOG}/setuid.today"
|
|
|
|
cp ${TMP} ${LOG}/setuid.today
|
1995-09-15 00:22:31 +00:00
|
|
|
fi
|
1999-08-25 16:01:45 +00:00
|
|
|
if cmp ${LOG}/setuid.today ${TMP} >/dev/null; then :; else
|
1996-06-30 19:35:20 +00:00
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "${host} setuid diffs:"
|
|
|
|
diff -b ${LOG}/setuid.today ${TMP}
|
|
|
|
mv ${LOG}/setuid.today ${LOG}/setuid.yesterday
|
|
|
|
mv ${TMP} ${LOG}/setuid.today
|
1993-06-20 13:41:45 +00:00
|
|
|
fi
|
|
|
|
|
1996-06-30 19:35:20 +00:00
|
|
|
separator
|
1993-06-20 13:41:45 +00:00
|
|
|
echo "checking for uids of 0:"
|
1998-08-11 08:48:54 +00:00
|
|
|
awk -F: '$3==0 {print $1,$3}' /etc/master.passwd
|
|
|
|
|
|
|
|
separator
|
1998-08-16 10:38:02 +00:00
|
|
|
echo "checking for passwordless accounts:"
|
1999-06-23 14:23:54 +00:00
|
|
|
awk -F: '$1 !~ /^\+/ && $2=="" {print $0}' /etc/master.passwd
|
1996-06-30 19:35:20 +00:00
|
|
|
|
|
|
|
# show denied packets
|
1999-08-25 16:01:45 +00:00
|
|
|
if ipfw -a l 2>/dev/null | egrep "deny|reset|unreach" > ${TMP}; then
|
|
|
|
if [ ! -f ${LOG}/ipfw.today ] ; then
|
1996-06-30 19:35:20 +00:00
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "no ${LOG}/ipfw.today"
|
|
|
|
cp ${TMP} ${LOG}/ipfw.today
|
1996-06-30 19:35:20 +00:00
|
|
|
fi
|
1999-08-25 16:01:45 +00:00
|
|
|
if cmp ${LOG}/ipfw.today ${TMP} >/dev/null; then :; else
|
1996-06-30 19:35:20 +00:00
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "${host} denied packets:"
|
|
|
|
diff -b ${LOG}/ipfw.today ${TMP} | egrep "^>"
|
|
|
|
mv ${LOG}/ipfw.today ${LOG}/ipfw.yesterday
|
|
|
|
mv ${TMP} ${LOG}/ipfw.today
|
1996-06-30 19:35:20 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
1998-02-04 01:53:19 +00:00
|
|
|
# show ipfw rules which have reached the log limit
|
|
|
|
IPFW_LOG_LIMIT=`sysctl -n net.inet.ip.fw.verbose_limit 2> /dev/null`
|
1999-08-25 16:01:45 +00:00
|
|
|
if [ $? -eq 0 ] && [ ${IPFW_LOG_LIMIT} -ne 0 ]; then
|
1998-02-04 01:53:19 +00:00
|
|
|
ipfw -a l | grep " log " | perl -n -e \
|
1999-08-25 16:01:45 +00:00
|
|
|
'/^\d+\s+(\d+)/; print if ($1 >= '$IPFW_LOG_LIMIT')' > ${TMP}
|
|
|
|
if [ -s ${TMP} ]; then
|
1998-02-04 01:53:19 +00:00
|
|
|
separator
|
|
|
|
echo "ipfw log limit reached:"
|
1999-08-25 16:01:45 +00:00
|
|
|
cat ${TMP}
|
1998-02-04 01:53:19 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
1996-10-12 04:56:28 +00:00
|
|
|
# show kernel log messages
|
1999-08-25 16:01:45 +00:00
|
|
|
if dmesg 2>/dev/null > ${TMP}; then
|
|
|
|
if [ ! -f ${LOG}/dmesg.today ] ; then
|
1996-10-12 04:51:09 +00:00
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "no ${LOG}/dmesg.today"
|
|
|
|
cp ${TMP} ${LOG}/dmesg.today
|
1996-10-12 04:51:09 +00:00
|
|
|
fi
|
1999-08-25 16:01:45 +00:00
|
|
|
if cmp ${LOG}/dmesg.today ${TMP} >/dev/null 2>&1; then :; else
|
1996-10-12 04:51:09 +00:00
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "${host} kernel log messages:"
|
|
|
|
diff -b ${LOG}/dmesg.today ${TMP} | egrep "^>"
|
|
|
|
mv ${LOG}/dmesg.today ${LOG}/dmesg.yesterday
|
|
|
|
mv ${TMP} ${LOG}/dmesg.today
|
1996-10-12 04:51:09 +00:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
1998-06-27 11:13:59 +00:00
|
|
|
# show login failures
|
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "${host} login failures:"
|
|
|
|
grep -i "login failure" ${LOG}/messages
|
1998-06-27 11:13:59 +00:00
|
|
|
|
|
|
|
# show tcp_wrapper warning messages
|
|
|
|
separator
|
1999-08-25 16:01:45 +00:00
|
|
|
echo "${host} refused connections:"
|
|
|
|
grep -i "refused connect" ${LOG}/messages
|
1998-06-27 11:13:59 +00:00
|
|
|
|
1999-08-25 16:01:45 +00:00
|
|
|
rm -f ${TMP}
|