From: Jason Ish Date: Thu, 20 Jan 2022 17:40:24 +0000 (-0600) Subject: startup: initialize run as user info sooner X-Git-Tag: suricata-6.0.5~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38db09bbb5a401a40554a2c24c998e2d41cf1cb3;p=thirdparty%2Fsuricata.git startup: initialize run as user info sooner Initialize the run-as user info after loading the config, but before setting up logging (previously it was done while initializing signal handlers). This will allow the log file to be given the correct permissions if Suricata is configured to run as a non-root user. (cherry picked from commit 08518df373625eed25d03108bd24b9e389295c81) --- diff --git a/src/suricata.c b/src/suricata.c index 3fcbd0da5a..e85e1c9184 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -1958,18 +1958,10 @@ static int MayDaemonize(SCInstance *suri) return TM_ECODE_OK; } -static int InitSignalHandler(SCInstance *suri) +/* Initialize the user and group Suricata is to run as. */ +static int InitRunAs(SCInstance *suri) { - /* registering signals we use */ -#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION - UtilSignalHandlerSetup(SIGINT, SignalHandlerSigint); - UtilSignalHandlerSetup(SIGTERM, SignalHandlerSigterm); -#endif #ifndef OS_WIN32 - UtilSignalHandlerSetup(SIGHUP, SignalHandlerSigHup); - UtilSignalHandlerSetup(SIGPIPE, SIG_IGN); - UtilSignalHandlerSetup(SIGSYS, SIG_IGN); - /* Try to get user/group to run suricata as if command line as not decide of that */ if (suri->do_setuid == FALSE && suri->do_setgid == FALSE) { @@ -2001,6 +1993,37 @@ static int InitSignalHandler(SCInstance *suri) sc_set_caps = TRUE; } +#endif + return TM_ECODE_OK; +} + +static int InitSignalHandler(SCInstance *suri) +{ + /* registering signals we use */ +#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + UtilSignalHandlerSetup(SIGINT, SignalHandlerSigint); + UtilSignalHandlerSetup(SIGTERM, SignalHandlerSigterm); +#if HAVE_LIBUNWIND + int enabled; + if (ConfGetBool("logging.stacktrace-on-signal", &enabled) == 0) { + enabled = 1; + } + + if (enabled) { + SCLogInfo("Preparing unexpected signal handling"); + struct sigaction stacktrace_action; + memset(&stacktrace_action, 0, sizeof(stacktrace_action)); + stacktrace_action.sa_sigaction = SignalHandlerUnexpected; + stacktrace_action.sa_flags = SA_SIGINFO; + sigaction(SIGSEGV, &stacktrace_action, NULL); + sigaction(SIGABRT, &stacktrace_action, NULL); + } +#endif /* HAVE_LIBUNWIND */ +#endif +#ifndef OS_WIN32 + UtilSignalHandlerSetup(SIGHUP, SignalHandlerSigHup); + UtilSignalHandlerSetup(SIGPIPE, SIG_IGN); + UtilSignalHandlerSetup(SIGSYS, SIG_IGN); #endif /* OS_WIN32 */ return TM_ECODE_OK; @@ -2777,6 +2800,7 @@ int SuricataMain(int argc, char **argv) SCLogDebug("vlan tracking is %s", vlan_tracking == 1 ? "enabled" : "disabled"); SetupUserMode(&suricata); + InitRunAs(&suricata); /* Since our config is now loaded we can finish configurating the * logging module. */