I decided to make my own init.d script for my lilDevil app (instead of using a startup cronjob). The “init” in init.d stands for initialization and the “.d” indicates the script is a daemon process. A daemon process is commonly defined as simply something that runs in the background. So an init.d script, is one that is called on startup and runs in the background without any user controls.
Setup
Making an init.d script is simple. First create the script in the init.d directory.
vim /etc/init.d/<NAME OF YOUR STARTUP SERVICE>
Next, add executive privileges to the script.
chmod +x /etc/init.d/<NAME OF YOUR STARTUP SERVICE>
Now it’s time for the inner-workings.
Script Parts
This is ultimately a bash script so it requires this little sh-bang at the top.
#!/bin/bash
Next, a service requires a LSB header. This header is used to configure startup settings and describe the service. This tutorial goes into detail on the different available settings that can be included in the header. Below is a sample of a more basic header that will add a service to the end of the startup boot order sequence.
### BEGIN INIT INFO # Provides: <SERVICE NAME> # Required-Start: $all # Required-Stop: $all # Default-Start: S # Default-Stop: 0 1 6 # Short-Description: <LONG DESCRIPTION OF SERVICE> # Description:
<SHORT DESCRIPTION OF SERVICE>
### END INIT INFO
The following code describes the different service actions. For instance, common actions are “start”, “stop”, “restart”, etc.
case "$1" in <ACTION1>) <COMMANDS/SCRIPTS TO RUN RELATING TO ACTION1> ;; <ACTION2>)
<COMMANDS/SCRIPTS TO RUN RELATING TO ACTION2> ;; <REPEAT AS NECESSARY>
Concluding, we exit and clean everything up.
exit 1 esac exit 0
Putting it All Together
To help you see the big picture, here is a copy of my init.d script.
#!/bin/bash #
### BEGIN INIT INFO # Provides: lilDevil # Required-Start: $all # Required-Stop: $all # Default-Start: S # Default-Stop: 0 1 6 # Short-Description: Unleash the lilDevil # Description: lilDevil is an awesome network enumeration tool ### END INIT INFO #
case "$1" in start) echo "Starting lilDevil " python /root/Projects/dirtBag.py& python /root/Projects/demon/manage.py flush --noinput python /root/Projects/demon/manage.py runserver 192.168.1.6:3707& python /root/Projects/sensor.py& ;; stop) echo "Stopping lilDevil " killall -9 python ;; restart) echo "Restarting lilDevil " killall -9 python python /root/Projects/dirtBag.py& python /root/Projects/demon/manage.py flush --noinput python /root/Projects/demon/manage.py runserver 192.168.1.6:3707& python /root/Projects/sensor.py& ;; *) echo "Service" echo $"Usage: $0 {start|stop|status}" exit 1 esac exit 0
Configuring it to Run
With the script completed, we pass it to insserv to be added to the Linux service boot order.
insserv -d /etc/init.d/lilDevil
Tah Dah! The service is added!
What about apps with GUIs?
Now, if your app has a GUI involved, it needs to be added to the desktop environment initialization. This is different from an init.d script. Init scripts run for the most part before the desktop has been initialized.
In Kali, I simply used their tool to add the service to startup. The tool can be found under Application Menu->Settings->Session and Startup. Under the Application Autostart tab, you can add a new command to run when the desktop loads.
That’s it!