Date: Sat, 22 Feb 1997 22:36:27 -0800 (PST) From: Don Lewis <Don.Lewis@tsc.tdk.com> To: freebsd-isp@freebsd.org, freebsd-security@freebsd.org Subject: improved setuid and device file checker for /etc/security Message-ID: <199702230636.WAA22830@salsa.gv.tsc.tdk.com>
next in thread | raw e-mail | index | archive | help
A few weeks ago I solicited input on how to prevent locate.updatedb and /etc/security wasting a lot of time digging around the article spool on our news server. I got a lot of suggestions on different ways to tweak these scripts to prevent this, but the suggestions mostly involved making custom changes to these scripts that would be somewhat of a hassle to maintain. At least in the case of /etc/security, I came up with a scheme that should be a lot more automatic. It's more complete in that it checks filesystems other than UFS, such as NFS, since someone could sneak a setuid executable onto one of these other filesystems. It doesn't check filesystems that are mounted nosuid or noexec, since any setuid executables present on these filesystems aren't a security threat. These two features give you more incentive to mount filesystems nosuid or noexec unless you have a good reason to do otherwise ;-) I also added device file checking (other than their timestamps which tend do get updated). I also supress the checking of the ownerships and permissions on the tty devices, since these devices get chowned and chmoded. --------------------------------- Cut Here --------------------------- echo "checking setuid files:" # 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... # MP=`mount | awk '!/\([^(]*(noexec|nosuid)[^(]*\)$/{ print $3 }'` set $MP while test $# -ge 1; do mount=$1 shift find -X $mount -xdev -type f \ \( -perm -u+x -or -perm -g+x -or -perm -o+x \) \ \( -perm -u+s -or -perm -g+s \) | sort done | xargs -n 20 ls -lgTd > $TMP if [ ! -f $LOG/setuid.today ] ; then echo "no $LOG/setuid.today" cp $TMP $LOG/setuid.today fi if cmp $LOG/setuid.today $TMP >/dev/null; then :; else echo "$host setuid diffs:" diff -b $LOG/setuid.today $TMP mv $LOG/setuid.today $LOG/setuid.yesterday mv $TMP $LOG/setuid.today fi rm -f $TMP echo "" echo "" echo "checking device files:" MP=`mount | awk '!/\([^(]*nodev[^(]*\)$/{ print $3 }'` set $MP while test $# -ge 1; do mount=$1 shift find -X $mount -xdev \( -type b -o -type c \) | sort done | xargs -n 20 ls -lgTd | awk '{mode = $1; user = $3; group = $4; if ($11 ~ /\/tty/) { mode = substr(mode, 1, 1) "........."; user = ""; group = ""} printf "%7s %-2s %-8s %-8s %4s %9s %s\n", mode, $2, user, group, $5, $6, $11}' >> $TMP if [ ! -f $LOG/device.today ] ; then echo "no $LOG/device.today" cp $TMP $LOG/device.today fi if cmp $LOG/device.today $TMP >/dev/null; then :; else echo "$host device diffs:" diff -b $LOG/device.today $TMP mv $LOG/device.today $LOG/device.yesterday mv $TMP $LOG/device.today fi rm -f $TMP --------------------------------- Cut Here --------------------------- --- Truck
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702230636.WAA22830>