diff --git a/src/Makefile b/src/Makefile index 20a3a4186..f806cd09e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -371,6 +371,10 @@ install-agent: install-common install -d -m 0750 -o ${OSSEC_USER} -g ${OSSEC_GROUP} ${PREFIX}/queue/rids +ifeq (${uname_S},Linux) + if [ -d /etc/systemd/system ]; then install -m 0444 systemd/agent/ossec-agentd.service systemd/agent/ossec-agent.target systemd/agent/ossec-execd.service systemd/agent/ossec-logcollector.service systemd/agent/ossec-syscheckd.service /etc/systemd/system/; fi +endif + install-local: install-server-generic install-hybrid: install-server-generic @@ -501,6 +505,10 @@ endif install -m 0640 -o root -g ${OSSEC_GROUP} ../etc/decoder.xml ${PREFIX}/etc/ +ifeq (${uname_S},Linux) + if [ -d /etc/systemd/system ]; then install -m 0444 -o root -g root systemd/server/ossec-agentsless.service systemd/server/ossec-analysisd.service systemd/server/ossec-csyslog.service systemd/server/ossec-dbd.service systemd/server/ossec-execd.service systemd/server/ossec-logcollector.service systemd/server/ossec-maild.service systemd/server/ossec-monitord.service systemd/server/ossec-remoted.service systemd/server/ossec-server.target systemd/server/ossec-syscheckd.service /etc/systemd/system/; fi +endif + rm -f ${PREFIX}/etc/shared/merged.mg diff --git a/src/init/ossec-client.sh b/src/init/ossec-client.sh index 7bd89fdfc..d7612e9a1 100755 --- a/src/init/ossec-client.sh +++ b/src/init/ossec-client.sh @@ -9,6 +9,10 @@ PWD=`pwd` DIR=`dirname $PWD`; +if [ X`uname` = "XLinux" ]; then + SYSTEMCTL=`which systemctl` +fi + ### Do not modify bellow here ### NAME="OSSEC HIDS" VERSION="v3.0.0" @@ -124,6 +128,13 @@ start() lock; checkpid; + if [ X`uname` = "XLinux" ]; then + if [ -x ${SYSTEMCTL} ]; then + ${SYSTEMCTL} start ossec-agent.target + fi + exit 0 + fi + # We actually start them now. for i in ${SDAEMONS}; do pstatus ${i}; @@ -180,6 +191,14 @@ pstatus() stopa() { lock; + + if [ X`uname` = "XLinux" ]; then + if [ -x ${SYSTEMCTL} ]; then + ${SYSTEMCTL} stop ossec-agent.target + fi + exit 0 + fi + checkpid; for i in ${DAEMONS}; do pstatus ${i}; diff --git a/src/init/ossec-server.sh b/src/init/ossec-server.sh index a6da95c29..b8ce0ede6 100755 --- a/src/init/ossec-server.sh +++ b/src/init/ossec-server.sh @@ -10,6 +10,12 @@ PWD=`pwd` DIR=`dirname $PWD`; PLIST=${DIR}/bin/.process_list; + +if [ X`uname` = "XLinux" ]; then + SYSTEMCTL=`which systemctl` +fi + + ### Do not modify bellow here ### # Getting additional processes @@ -109,10 +115,13 @@ enable() if [ "X$2" = "Xdatabase" ]; then echo "DB_DAEMON=ossec-dbd" >> ${PLIST}; + touch ${DIR}/etc/.dbd elif [ "X$2" = "Xclient-syslog" ]; then echo "CSYSLOG_DAEMON=ossec-csyslogd" >> ${PLIST}; + touch ${DIR}/etc/.csyslogd elif [ "X$2" = "Xagentless" ]; then echo "AGENTLESS_DAEMON=ossec-agentlessd" >> ${PLIST}; + touch ${DIR}/etc/.agentlessd elif [ "X$2" = "Xdebug" ]; then echo "DEBUG_CLI=\"-d\"" >> ${PLIST}; else @@ -137,10 +146,13 @@ disable() if [ "X$2" = "Xdatabase" ]; then echo "DB_DAEMON=\"\"" >> ${PLIST}; + rm /var/ossec/etc/.dbd elif [ "X$2" = "Xclient-syslog" ]; then echo "CSYSLOG_DAEMON=\"\"" >> ${PLIST}; + rm /var/ossec/etc/.csyslogd elif [ "X$2" = "Xagentless" ]; then echo "AGENTLESS_DAEMON=\"\"" >> ${PLIST}; + rm /var/ossec/etc/.agentlessd elif [ "X$2" = "Xdebug" ]; then echo "DEBUG_CLI=\"\"" >> ${PLIST}; else @@ -192,6 +204,7 @@ testconfig() # Start function start() { + SDAEMONS="${DB_DAEMON} ${CSYSLOG_DAEMON} ${AGENTLESS_DAEMON} ossec-maild ossec-execd ossec-analysisd ossec-logcollector ossec-remoted ossec-syscheckd ossec-monitord" echo "Starting $NAME $VERSION (by $AUTHOR)..." @@ -200,6 +213,16 @@ start() echo "OSSEC analysisd: Testing rules failed. Configuration error. Exiting." exit 1; fi + + ## If the system is Linux, look for systemctl. If that file exists, use it. + ## XXX - system paths and exact execution are probably wrong. + if [ X`uname` = "XLinux" ]; then + if [ -x ${SYSTEMCTL} ]; then + ${SYSTEMCTL} start ossec-server.target + fi + exit 0 + fi + lock; checkpid; @@ -268,6 +291,14 @@ pstatus() stopa() { lock; + + if [ X`uname` = "XLinux" ]; then + if [ -x ${SYSTEMCTL} ]; then + ${SYSTEMCTL} stop ossec-server.target + fi + exit 0 + fi + checkpid; for i in ${DAEMONS}; do pstatus ${i}; diff --git a/src/systemd/agent/ossec-agentd.service b/src/systemd/agent/ossec-agentd.service index dd8bef8ee..f2c93c833 100644 --- a/src/systemd/agent/ossec-agentd.service +++ b/src/systemd/agent/ossec-agentd.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC Agent PartOf=ossec-agent.target +After=ossec-execd.service +Before=ossec-syscheckd.service ossec-logcollector.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/agent/ossec-execd.service b/src/systemd/agent/ossec-execd.service index d0389bd02..dbc841e90 100644 --- a/src/systemd/agent/ossec-execd.service +++ b/src/systemd/agent/ossec-execd.service @@ -1,6 +1,7 @@ [Unit] Description=OSSEC Execd PartOf=ossec-agent.target +Before=ossec-syscheckd.service ossec-agentd.service ossec-logcollector.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/agent/ossec-logcollector.service b/src/systemd/agent/ossec-logcollector.service index fd669a805..761929a37 100644 --- a/src/systemd/agent/ossec-logcollector.service +++ b/src/systemd/agent/ossec-logcollector.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC Logcollector PartOf=ossec-agent.target +After=ossec-execd.service ossec-agentd.service +Before=ossec-syscheckd.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/agent/ossec-syscheckd.service b/src/systemd/agent/ossec-syscheckd.service index 7519dfe3c..057f78d0b 100644 --- a/src/systemd/agent/ossec-syscheckd.service +++ b/src/systemd/agent/ossec-syscheckd.service @@ -1,6 +1,7 @@ [Unit] Description=OSSEC syscheckd PartOf=ossec-agent.target +After=ossec-execd.service ossec-agentd.service ossec-logcollector.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-agentless.service b/src/systemd/server/ossec-agentless.service index db6f193ce..f4b74388a 100644 --- a/src/systemd/server/ossec-agentless.service +++ b/src/systemd/server/ossec-agentless.service @@ -1,10 +1,12 @@ [Unit] Description=OSSEC Agentless PartOf=ossec-server.target +After=ossec-analysisd.service ossec-execd.service ossec-logcollector.service ossec-maild.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service +ConditionPathExists=/var/ossec/etc/.agentlessd [Service] EnvironmentFile=/etc/ossec-init.conf Environment=DIRECTORY=/var/ossec ExecStartPre=/usr/bin/env ${DIRECTORY}/bin/ossec-agentlessd -t -ExecStart=/usr/bin/env ${DIRECTORY}/bin/ossec-agentlessd -f \ No newline at end of file +ExecStart=/usr/bin/env ${DIRECTORY}/bin/ossec-agentlessd -f diff --git a/src/systemd/server/ossec-analysisd.service b/src/systemd/server/ossec-analysisd.service index 9c9613d12..99aac591b 100644 --- a/src/systemd/server/ossec-analysisd.service +++ b/src/systemd/server/ossec-analysisd.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC Analysisd PartOf=ossec-server.target +After=ossec-maild.service ossec-execd.service +Before=ossec-agentless.service ossec-csyslog.service ossec-dbd.service ossec-logcollector.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-csyslog.service b/src/systemd/server/ossec-csyslog.service index cadb4bdb5..b31be89e9 100644 --- a/src/systemd/server/ossec-csyslog.service +++ b/src/systemd/server/ossec-csyslog.service @@ -1,10 +1,12 @@ [Unit] Description=OSSEC Syslog client PartOf=ossec-server.target +After=ossec-analysisd.service ossec-dbd.service ossec-execd.service ossec-logcollector.service ossec-maild.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service +ConditionPathExists=/var/ossec/etc/.csyslogd [Service] EnvironmentFile=/etc/ossec-init.conf Environment=DIRECTORY=/var/ossec ExecStartPre=/usr/bin/env ${DIRECTORY}/bin/ossec-csyslogd -t -ExecStart=/usr/bin/env ${DIRECTORY}/bin/ossec-csyslogd -f \ No newline at end of file +ExecStart=/usr/bin/env ${DIRECTORY}/bin/ossec-csyslogd -f diff --git a/src/systemd/server/ossec-dbd.service b/src/systemd/server/ossec-dbd.service index e06b8ae12..21ceb01da 100644 --- a/src/systemd/server/ossec-dbd.service +++ b/src/systemd/server/ossec-dbd.service @@ -1,6 +1,8 @@ [Unit] Description=The OSSEC DBD PartOf=ossec-server.target +After=ossec-analysisd.service ossec-execd.service ossec-logcollector.service ossec-maild.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service +ConditionPathExists=/var/ossec/etc/.dbd [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-execd.service b/src/systemd/server/ossec-execd.service index b90b82f1f..a75bfec5e 100644 --- a/src/systemd/server/ossec-execd.service +++ b/src/systemd/server/ossec-execd.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC Execd PartOf=ossec-server.target +After=ossec-maild.service +Before=ossec-agentless.service ossec-analysisd.service ossec-csyslog.service ossec-dbd.service ossec-logcollector.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-logcollector.service b/src/systemd/server/ossec-logcollector.service index 2b12828c0..8e8d64fc5 100644 --- a/src/systemd/server/ossec-logcollector.service +++ b/src/systemd/server/ossec-logcollector.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC Logcollector PartOf=ossec-server.target +After=ossec-maild.service ossec-execd.service ossec-analysisd.service +Before=ossec-agentless.service ossec-csyslog.service ossec-dbd.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-maild.service b/src/systemd/server/ossec-maild.service index 7932a83a4..58e0b3307 100644 --- a/src/systemd/server/ossec-maild.service +++ b/src/systemd/server/ossec-maild.service @@ -1,6 +1,7 @@ [Unit] Description=OSSEC Maild PartOf=ossec-server.target +Before=ossec-agentless.service ossec-analysisd.service ossec-csyslog.service ossec-dbd.service ossec-execd.service ossec-logcollector.service ossec-monitord.service ossec-remoted.service ossec-syscheckd.service [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-monitord.service b/src/systemd/server/ossec-monitord.service index 6950bc4b3..22b132d50 100644 --- a/src/systemd/server/ossec-monitord.service +++ b/src/systemd/server/ossec-monitord.service @@ -1,6 +1,9 @@ [Unit] Description=OSSEC monitord PartOf=ossec-server.target +After=ossec-maild.service ossec-execd.service ossec-analysisd.service ossec-logcollector.service ossec-remoted.service ossec-syscehckd.service +Before=ossec-agentless.service ossec-csyslog.service ossec-dbd.service + [Service] EnvironmentFile=/etc/ossec-init.conf diff --git a/src/systemd/server/ossec-remoted.service b/src/systemd/server/ossec-remoted.service index b252bfc53..062e33a97 100644 --- a/src/systemd/server/ossec-remoted.service +++ b/src/systemd/server/ossec-remoted.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC remoted PartOf=ossec-server.target +After=ossec-maild.service ossec-execd.service ossec-analysisd.service ossec-logcollector +Before=ossec-agentless.service ossec-csyslog.service ossec-dbd.service ossec-monitord.service ossec-syscheckd.service [Service] Type=forking diff --git a/src/systemd/server/ossec-syscheckd.service b/src/systemd/server/ossec-syscheckd.service index 014404261..67014b785 100644 --- a/src/systemd/server/ossec-syscheckd.service +++ b/src/systemd/server/ossec-syscheckd.service @@ -1,6 +1,8 @@ [Unit] Description=OSSEC syscheckd PartOf=ossec-server.target +After=ossec-maild.service ossec-execd.service ossec-analysisd.service ossec-remoted.service +Before=ossec-agentless.service ossec-csyslog.service ossec-dbd.service ossec-monitord.service ossec-remoted.service [Service] EnvironmentFile=/etc/ossec-init.conf