From 9fdf1c96e4b6d65a70f52ae4dd9272121aa7f0a4 Mon Sep 17 00:00:00 2001 From: Ilya Mashchenko Date: Thu, 7 Dec 2023 15:25:16 +0200 Subject: [PATCH] set "HOME" after switching to netdata user (#16548) --- daemon/analytics.c | 1 - daemon/main.c | 12 ++++++++++-- system/Makefile.am | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/daemon/analytics.c b/daemon/analytics.c index 9f19e313bbe452..b026e34f8fa6f0 100644 --- a/daemon/analytics.c +++ b/daemon/analytics.c @@ -842,7 +842,6 @@ void set_global_environment() { setenv("NETDATA_LIB_DIR", verify_or_create_required_directory(netdata_configured_varlib_dir), 1); setenv("NETDATA_LOCK_DIR", verify_or_create_required_directory(netdata_configured_lock_dir), 1); setenv("NETDATA_LOG_DIR", verify_or_create_required_directory(netdata_configured_log_dir), 1); - setenv("HOME", verify_or_create_required_directory(netdata_configured_home_dir), 1); setenv("NETDATA_HOST_PREFIX", netdata_configured_host_prefix, 1); { diff --git a/daemon/main.c b/daemon/main.c index a799726b233370..3c8cb679d9e62f 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -1167,8 +1167,6 @@ static void get_netdata_configured_variables() { netdata_configured_web_dir = config_get(CONFIG_SECTION_DIRECTORIES, "web", netdata_configured_web_dir); netdata_configured_cache_dir = config_get(CONFIG_SECTION_DIRECTORIES, "cache", netdata_configured_cache_dir); netdata_configured_varlib_dir = config_get(CONFIG_SECTION_DIRECTORIES, "lib", netdata_configured_varlib_dir); - char *env_home=getenv("HOME"); - netdata_configured_home_dir = config_get(CONFIG_SECTION_DIRECTORIES, "home", env_home?env_home:netdata_configured_home_dir); netdata_configured_lock_dir = initialize_lock_directory_path(netdata_configured_varlib_dir); @@ -2080,6 +2078,16 @@ int main(int argc, char **argv) { if(become_daemon(dont_fork, user) == -1) fatal("Cannot daemonize myself."); + // The "HOME" env var points to the root's home dir because Netdata starts as root. Can't use "HOME". + struct passwd *pw = getpwuid(getuid()); + if (config_exists(CONFIG_SECTION_DIRECTORIES, "home") || !pw || !pw->pw_dir) { + netdata_configured_home_dir = config_get(CONFIG_SECTION_DIRECTORIES, "home", netdata_configured_home_dir); + } else { + netdata_configured_home_dir = config_get(CONFIG_SECTION_DIRECTORIES, "home", pw->pw_dir); + } + + setenv("HOME", netdata_configured_home_dir, 1); + dyn_conf_init(); netdata_log_info("netdata started on pid %d.", getpid()); diff --git a/system/Makefile.am b/system/Makefile.am index 54e9278c843154..1e96f6f4f1f187 100644 --- a/system/Makefile.am +++ b/system/Makefile.am @@ -3,6 +3,7 @@ MAINTAINERCLEANFILES = $(srcdir)/Makefile.in CLEANFILES = \ + install-service.sh \ cron/netdata-updater-daily \ freebsd/rc.d/netdata \ initd/init.d/netdata \