[BB#115] Drop supplementary groups

Supplementary groups are inherited from the calling process. Drop all
supplementary groups if the "Group" configuration directive is set to
change to a different user. Otherwise the process may have more rights
than expected.

Reviewed-by: Michael Adam <obnox@samba.org>
This commit is contained in:
Gaudenz Steinlin 2013-09-09 08:33:48 +02:00 committed by Michael Adam
parent 3cc59ec3be
commit c8b8247f70
2 changed files with 11 additions and 1 deletions

View File

@ -203,7 +203,7 @@ AC_FUNC_REALLOC
AC_CHECK_FUNCS([gethostname inet_ntoa memchr memset select socket strcasecmp \
strchr strdup strerror strncasecmp strpbrk strstr strtol])
AC_CHECK_FUNCS([isascii memcpy setrlimit ftruncate regcomp regexec])
AC_CHECK_FUNCS([strlcpy strlcat])
AC_CHECK_FUNCS([strlcpy strlcat setgroups])
dnl Enable extra warnings

View File

@ -296,6 +296,16 @@ change_user (const char *program)
exit (EX_NOPERM);
}
#ifdef HAVE_SETGROUPS
/* Drop all supplementary groups, otherwise these are inherited from the calling process */
if (setgroups (0, NULL) < 0) {
fprintf (stderr,
"%s: Unable to drop supplementary groups.\n",
program);
exit (EX_NOPERM);
}
#endif
log_message (LOG_INFO, "Now running as group \"%s\".",
config.group);
}