Existe la posibilidad de crear aplicaciones sencillas "tipo servidor" con scripts de shell. Vamos a ver un ejemplo en el que se configurará el daemon xinetd para abrir un socket y poner un programa a la escucha. En nuestro caso el programa en cuestión será un script, aunque podría utilizarse cualquier otro lenguaje de programación.
Configurando Xinetd:
Generalmente disponcremos de un archivo de configuración de xinetd similar al siguiente:
Configurando Xinetd:
Generalmente disponcremos de un archivo de configuración de xinetd similar al siguiente:
$ cat /etc/xinetd.conf # # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 }includedir /etc/xinetd.d |
Este indica la inclusión de los scripts situados en /etc/xinet.d/.
ls -lh /etc/xinetd.d/ total 100K -rw-r--r-- 1 root root 563 nov 19 17:53 chargen -rw-r--r-- 1 root root 580 nov 19 17:53 chargen-udp -rw-r--r-- 1 root root 419 nov 19 17:53 daytime -rw-r--r-- 1 root root 438 nov 19 17:53 daytime-udp -rw-r--r-- 1 root root 341 nov 19 17:53 echo -rw-r--r-- 1 root root 360 nov 19 17:53 echo-udp -rw-r--r-- 1 root root 318 jun 23 2002 finger -rw-r--r-- 1 root root 370 sep 1 2002 imap -rw-r--r-- 1 root root 365 sep 1 2002 imaps -rw-r--r-- 1 root root 453 sep 1 2002 ipop2 -rw-r--r-- 1 root root 359 sep 1 2002 ipop3 -rw-r--r-- 1 root root 275 jul 5 2002 ntalk -rw-r--r-- 1 root root 335 sep 1 2002 pop3s -rw-r--r-- 1 root root 361 jun 24 2002 rexec -rw-r--r-- 1 root root 378 jun 24 2002 rlogin -rw-r--r-- 1 root root 431 jun 24 2002 rsh -rw-r--r-- 1 root root 317 jun 25 2002 rsync -rw-r--r-- 1 root root 312 nov 19 17:53 servers -rw-r--r-- 1 root root 314 nov 19 17:53 services -rw-r--r-- 1 root root 392 ago 11 2002 sgi_fam -rw-r--r-- 1 root root 263 jul 5 2002 talk -rw-r--r-- 1 root root 305 jul 23 2002 telnet -rw-r--r-- 1 root root 497 nov 19 17:53 time -rw-r--r-- 1 root root 518 nov 19 17:53 time-udp -rw-r--r-- 1 root root 276 ago 16 2002 vsftpd |
Editando cualquiera de estos archivos puede verse la estructura que siguen los scripts. Para nuestro propósito debemos crear uno de estos scritps, por ejemplo el siguiente:
service nuevoservicio { port = 6666 socket_type = stream wait = no user = nobody server = /usr/local/bin/NuestroServidor.sh log_on_success += USERID log_on_failure += USERID disable = no } |
El puerto escogido para la escucha debe estar especificado en el archivo /etc/services, en nuestro caso, el puerto 6666, no está especificado, por lo tanto añadimos la siguiente línea a /etc/services:
nuevoservicio 6666/tcp # Nuestro servicio de prueba |
Sencillo, ¿no?.
Ahora solo necesitamos crear el script "NuestroServidor.sh" y colocarlo en /usr/local/bin.
Podemos probar con el clásico:
Ahora solo necesitamos crear el script "NuestroServidor.sh" y colocarlo en /usr/local/bin.
Podemos probar con el clásico:
#!/bin/bash echo "Hello World!" |
Para que el servidor funcione correctamente debemos asegurarnos de que dispone de permisos de ejecución para todos los usuarios.
finalmente reiniciamos xinetd:
finalmente reiniciamos xinetd:
$ /etc/rc.d/init.d/xinetd restart Parando xinetd: [ OK ] Iniciando xinetd: [ OK ] |
Podemos probar con:
$ telnet localhost 6666 Trying 127.0.0.1... Connected to hackerbox (127.0.0.1). Escape character is '^]'. Hello World! Connection closed by foreign host. |
El programa llamado por xinetd podría haberse desarrollado en cualquier otro lenguaje de programación: C, Perl ... Lo interesante de esta forma de hacerlo es que permite la creación de servicios simples en un tiempo récord. Aunque no se debe olvidar que en estos sistemas la seguridad no es uno de sus fuertes. Con cuidado!