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" instart)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;;esacexit 0Posteriormente, 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