Script para arranque automático en inicio del sistema Linux (init.d)
En caso de querer ejecutar un script/programa/servicio al arranque del sistema (Linux), hemos de crear un pequeño script dentro de la carpeta /etc/init.d/ en el cual se especifican los comandos de arranque y parada del mismo.
Normalmente al instalar cualquier cosa desde gestores de paquetes como yum o apt, se crea automáticamente el script en init.d que realiza esta tarea (httpd, exim, mysql, etc) pero si queremos hacerlo con un programa o script propio tendremos que crearlo a mano.
Es muy sencillo, a continuación tenéis un ejemplo de este script, en el cual especificamos el comando a ejecutar cuando se le pasa el parametro start o stop, simplemente hay que añadir el comando correspondiente para arrancar el servicio o pararlo.
#! /bin/sh
# Script ejemplo para arranque de servicios en /etc/init.d/
#
case "$1" in
start)
echo "Iniciando servicio... "
# Aquí comando a ejecutar para arrancar el servicio
;;
stop)
echo "Deteniendo servicio..."
# Aquí comando a ejecutar para detener el servicio
;;
*)
echo "Modo de empleo: /etc/init.d/mi_script {start|stop}"
exit 1
;;
esac
exit 0
Posteriormente, hemos de crear un enlace simbólico en el runlevel correspondiente para que se ejecute cada vez que arranquemos la máquina. En otro artículo ya explique el tema de runlevels y añadir servicios al inicio del sistema en RHEL y CentOS , podéis revisarlo. No obstante si quisieramos ejecutar dicho script en cada arranque crearíamos el enlace simbólico así:
ln -s /etc/init.d/mi_script /etc/rc3.d/S98miscript
Lo que hacemos es crear un enlace simbólico cuya primera letra es la S (de Start, K sería de kill) y el nº98 (define el momento en el que se va a ejecutar, a menor número, antes se ejecuta). Veréis que el enlace simbólico lo creo en el runlevel 3 (Multiusuario con soporte de red), que es en el que arranca esta máquina en concreto. En el fichero /etc/inittab podéis averiguar el vuestro:
# cat /etc/inittab
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
Y esto es todo, de este modo cada vez que arranquéis la máquina debería ejecutarse el script configurado.
ejemplo FIREWALLFC:
nano -w /etc/init.d/firewallFC
#!/bin/bash
#
# chkconfig: 2345 40 60
#
# ----------------------------------------------
# configuracion de Firewall como servicio
# chkconfig --level 3 firewall on
# Configurar por setup y activarlo al inicio
# ----------------------------------------------
#
# script inicial para un firewall con BD Firebird
#
############################################################################
firewall_start() {
############################################################################
echo "Cargando la configuracion del firewall - FC...."
echo "Seguridad en Servidores"
echo "........."
# -
# Establecimiento de parametros en el Kernel
# -
# Flush all current rules from iptables
#
iptables -F
#
# Set default policies for INPUT, FORWARD and OUTPUT chains
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#
# Set access for localhost
#
iptables -A INPUT -i lo -j ACCEPT
#
# Accept packets belonging to established and related connections
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# Accept packets from trusted IP addresses
# Conexiones SSH
iptables -A INPUT -p tcp -s 10.10.0.10 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.11 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.12 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.13 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.14 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 10.10.0.15 --dport 22 -j ACCEPT
# Conexion Puerto 80
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Conexion Puerto Firebird 3050
iptables -A INPUT -p tcp -s 10.10.0.10 --dport 3050 -j ACCEPT # Aplicativo 1
iptables -A INPUT -p tcp -s 10.10.0.11 --dport 3050 -j ACCEPT # Aplicativo 2
iptables -A INPUT -p tcp -s 10.10.0.12 --dport 3050 -j ACCEPT # Aplicativo 3
iptables -A INPUT -p tcp -s 10.10.0.13 --dport 3050 -j ACCEPT # Aplicativo 4
iptables -A INPUT -p tcp -s 10.10.0.14 --dport 3050 -j ACCEPT # Aplicativo 5
iptables -A INPUT -p tcp -s 10.10.0.15 --dport 3050 -j ACCEPT # Aplicativo 6
# Conexion Puerto Rsync
iptables -A INPUT -p tcp -s 10.10.0.10 --dport 873 -j ACCEPT # rsync
iptables -A INPUT -p tcp -s 10.10.0.11 --dport 873 -j ACCEPT # rsync
iptables -A INPUT -p tcp -s 10.10.0.12 --dport 873 -j ACCEPT # rsync
# Save settings
#
/sbin/service iptables save
#
# List rules
#
iptables -L -v
}
############################################################################
firewall_stop() {
############################################################################
echo "Bajando la configuracion del firewall..."
echo ""
echo "ADVERTENCIA: en este momento es permitido cualquier tipo de trafico a traves del"
echo "firewall, lo que pone en grave riesgo la seguridad de este servidor."
# Elimina todas las reglas existentes en las cadenas
iptables -F
iptables -t nat -F
iptables -t mangle -F
# Elimina las cadenas definidas por el usuario
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Establece los contadores de las cadenas en cero
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
# Establece las directivas por defecto para las cadenas de la tabla filter
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo ""
}
############################################################################
case "$1" in
############################################################################
'start')
firewall_start
;;
'stop')
firewall_stop
;;
'restart')
firewall_start
;;
'status')
echo $"Table: filter"
iptables -L
;;
*)
echo "use $0 start|stop|restart|status"
esac
Atentamente:
Franklin Campo
......................fin del scrip