negative permission scanner for periodic/security

Brooks Davis brooks at freebsd.org
Thu Oct 14 20:38:47 UTC 2010


One of the side effects of increasing NGROUPS_MAX is that it's possible
for a process to be in more groups that can be transmitted over NFS
(<4).  When that happens users are mostly denied access to things they
should have access to.  However, permission evaluation order in unix
means that groups can be denied access to files the world can read using
so called negative permissions.  I've written a scanner (derived from
100.chksetuid) for the periodic security script to flag such files as
they post a security risk (and nearly all the time are errors).  I've
not bothered looking for negative user permissions as that isn't broken
over NFS and assuming the file is not on a read-only FS the user can
just give theselves permissions again.

One minor note: Before enabling this by default, ~6 files in the ports
repo need fixing as they have world execute bits without user or group
execute bits.

Should this be enabled by default?  It think so, but welcome discussion.

-- Brooks

--- /dev/null	2010-10-13 05:11:00.000000000 -0500
+++ etc/periodic/security/110.neggrpperm	2010-10-13 03:00:17.000000000 -0500
@@ -0,0 +1,54 @@
+#!/bin/sh -
+#
+# Copyright (c) 2001  The FreeBSD Project
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# If there is a global system configuration file, suck it in.
+#
+if [ -r /etc/defaults/periodic.conf ]
+then
+    . /etc/defaults/periodic.conf
+    source_periodic_confs
+fi
+
+rc=0
+
+case "$daily_status_security_neggrpperm_enable" in
+    [Yy][Ee][Ss])
+	echo ""
+	echo 'Checking negative group permissions:'
+	MP=`mount -t ufs,zfs | awk '$0 !~ /no(suid|exec)/ { print $3 }'`
+	n=$(find -sx $MP /dev/null -type f \
+	    \( \( ! -perm +010 -and -perm +001 \) -or \
+	    \( ! -perm +020 -and -perm +002 \) -or \
+	    \( ! -perm +040 -and -perm +004 \) \) \
+	    -exec ls -liTd \{\} \+ | tee /dev/stderr | wc -l)
+	[ $n -gt 0 ] && rc=1 || rc=0
+	;;
+esac
+
+exit $rc
Index: etc/defaults/periodic.conf
===================================================================
--- etc/defaults/periodic.conf	(revision 213358)
+++ etc/defaults/periodic.conf	(working copy)
@@ -160,6 +160,9 @@
 # 100.chksetuid
 daily_status_security_chksetuid_enable="YES"
 
+# 110.neggrpperm
+daily_status_security_neggrpperm_enable="YES"
+
 # 200.chkmounts
 daily_status_security_chkmounts_enable="YES"
 #daily_status_security_chkmounts_ignore="^amd:"		# Don't check matching
Index: share/man/man5/periodic.conf.5
===================================================================
--- share/man/man5/periodic.conf.5	(revision 213358)
+++ share/man/man5/periodic.conf.5	(working copy)
@@ -482,6 +482,14 @@
 .Dq Li YES
 to compare the modes and modification times of setuid executables with
 the previous day's values.
+.It Va daily_status_security_neggrpperm_enable
+.Pq Vt bool
+Set to
+.Dq Li YES
+to check for files where the group of a file has less permissions than
+the world at large.
+When users are in more than 14 supplemental groups these negative
+permissions may not be enforced via NFS shares.
 .It Va daily_status_security_chkmounts_enable
 .Pq Vt bool
 Set to
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20101014/f3d090e8/attachment.pgp


More information about the freebsd-hackers mailing list