We are attempting to create systemd files for an ssh port monitoring
process. When we enable and attempt to start the service we get multiple
executions of the daemon and systemctl does not return until we do a
control-c. The init script and our attempt at replacement:
#!/bin/bash
#
# chkconfig: - 56 24
#
# sshdfilter Start up the SSH server daemon filter
#
# description: filter for SSH port connections to give more control
# over who can log in and if probed add firewall rules
# to block probing sites.
#
# processname: sshdfilter
# config: /etc/sshdfilterrc
# pidfile: /var/run/sshdfilter.pid
# pipe: /var/run/sshdfilter.fifo
### BEGIN INIT INFO
# Provides: sshdfilter
# Required-Start: $local_fs $network $rsyslog
# Required-Stop: $local_fs $rsyslog
# Should-Start: $rsyslog
# Should-Stop: $network $rsyslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start up the SSH filter server daemon
# Description: SSH is a protocol for secure remote shell access.
# This service starts up the SSH filter server daemon.
### END INIT INFO
# source function library
. /etc/rc.d/init.d/functions
# pull in sysconfig settings
[ -f /etc/sysconfig/sshdfilter ] && . /etc/sysconfig/sshdfilter
# make fifo if it does not exist
[ -p /var/run/sshdfilter.fifo ] || mkfifo /var/run/sshdfilter.fifo
RETVAL=0
prog="sshdfilter"
lockfile=/var/lock/subsys/$prog
# Some functions to make the below more readable
SSHDF=/usr/sbin/sshdfilter
PID_FILE=/var/run/sshdfilter.SSHD.pid
runlevel=$(set -- $(runlevel); eval "echo \$$#" )
start()
{
[ -x $SSHDF ] || exit 5
[ -f /etc/sshdfilterrc ] || exit 6
echo -n $"Starting $prog: "
$SSHDF $OPTIONS && success || failure
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $lockfile
echo
return $RETVAL
}
stop()
{
echo -n $"Stopping $prog: "
if [ -n "`pidfileofproc $SSHDF`" ] ; then
killproc $SSHDF
else
failure $"Stopping $prog"
fi
RETVAL=$?
# if we are in halt or reboot runlevel kill all running sessions
# so the TCP connections are closed cleanly
if [ "x$runlevel" = x0 -o "x$runlevel" = x6 ] ; then
trap '' TERM
killall $prog 2>/dev/null
trap TERM
fi
[ $RETVAL -eq 0 ] && rm -f $lockfile
echo
}
restart() {
stop
start
}
rh_status() {
status -p $PID_FILE sshdfilter-daemon
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
start
;;
stop)
if ! rh_status_q; then
rm -f $lockfile
exit 0
fi
stop
;;
restart)
restart
;;
status)
rh_status
RETVAL=$?
if [ $RETVAL -eq 3 -a -f $lockfile ] ; then
RETVAL=2
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
RETVAL=2
esac
exit $RETVAL
============ sshdfilter.service ===================
[Unit]
Description=sshdfilter Daemon
Documentation=file://usr/share/doc/sshdfilter-1.5.7/INSTALL.Fedora
DefaultDependencies=no
[Service]
Type=forking
PIDFile=/var/run/sshdfilter.SSHD.pid
ExecStart=/sbin/sshdfilter
NotifyAccess=all
[Install]
WantedBy=multi-user.target
============ sshdfilter.socket ===================
[Unit]
Description=sshdfilter Named Pipe
Documentation=file:///usr/share/doc/sshdfilter-1.5.7/INSTALL.Fedora
DefaultDependencies=no
After=syslog.target
[Socket]
ListenFIFO=/var/run/sshdfilter.fifo
SocketMode=0644