Está en la página 1de 7

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA DE SISTEMAS


INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Laboratorio de: SIC616 – Computación Distribuida


Práctica No.: 3
Tema: Afinamiento de servidores DAEMON
Objetivos:

1. Entender los proceso de afinamiento de daemons en Linux y servicios en Windows.


2. Familiarizarse con los procedimientos de “demonización” utilizados por servicios
conocidos: Apache, syslog, etc.
3. Implementar procedimientos de “demonización” de servidores.

Marco teórico:

DAEMON

Un Daemon (Disk And Execution Monitor) es un proceso que se ejecuta en segundo plano
y no es interactivo (no puede ser controlado por el usuario directamente). Por lo que este
proceso se ejecuta como background. [1] [2]

Estos procesos se ejecutan de forma continua en el sistema por lo que pueden ser
ejecutados varias veces lo cual también permite ser reiniciado si se lo desea matar.

Características

• No tienen una interfaz de comunicación directa con el usuario.


• No utilizan entradas o salidas estándar, sino que hace uso de archivos del sistema
en zonas específicas.

Creación de demonios

Para el sistema de Linux

Creación de proceso hijo

Para crear un Daemon se debe cumplir el primer paso que es crear un proceso hijo y
terminar el proceso padre:

En el momento que termina el proceso padre el hijo es adoptado o acogido por init. El
resultado hace pensar a la Shell que el comando fue terminado con [éxito permitiendo que
el proceso hijo se ejecute de manera independiente y en segundo plano.
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Fig. 1 Daemon creación de proceso hijo.

Init es el primer proceso del sistema, es el que se inicia para que se puedan crear los
Daemons necesarios para el funcionamiento del sistema.

Cambiar umask

Todos los procesos tienen una máscara que indica que permisos tienen estos al crear un
archivo, por lo que si se utilizase open() se comparan los permisos especificados con las
máscaras y se desactivarán efectivamente los que en la máscaras se indiquen.

Umask() se hereda de padre a hijos por lo que su valor por defecto es el de la Shell que
lanzó el Daemon, por lo que este no sabrá que permisos tendrán estos archivos al crear
este proceso y para poder evitar esto se puede autorizar todos los permisos con el
comando umask(0).

Desarrollo

Para el programa daemon.c

Este programa ayuda al servidor con las funciones que necesita para convertirse en un
daemon, dichas funciones son las siguientes:
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Como inicio se deberá importar las librerías necesarias para que dicho programa no lance
ningún tipo de error.

Como se detalla en el marco teórico un daemon corre o funciona en el background para


que los mismos no interactúen con los usuarios por lo que se necesita enviarlo al
background.

En este programa se usa watchdog, por lo que este heredará la tabla de descriptores
abiertos con los canales por defecto iniciales, de igual manera si tuviere algunos sockets
abiertos este también los heredaría, por lo que se debe borrar la tabla de descriptores
abiertos para que pueda empezar desde cero.

Se debe cambiar el directorio para que no se esté trabajando en cualquier lado, sino en un
lugar previamente asignado.
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Se debe utilizar umask para poder cambiar los privilegios, para que el usuario no tenga
ningún tipo de negación de servicios, por lo que se dará permisos de ejecución y lectura a
un grupo y para el resto de usuarios no se dará ningún permiso.

Se debe realizar la apertura de los descriptores estándar, para las secuencias estándar al
archivo /dev/null

Se usará la exclusión mutua, por lo que se tilizará también locks para poder acceder de
manera ordenada a los recursos para que no se destruyan los procesos y poder ponerlos
en cola a la espera de ser atendido.

Luego se puede observar que hay 3 tipos de señales las cuales realizan lo siguiente:
SIGCHLD, detendrá el proceso hijo, esperará, se lo procesará con la función que necesite
SIGHUP, reinicia el proceso
SIGTERM, finaliza el proceso de manera segura
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Programa TCPechoDaemond.c

Al igual que el programa anterior se implementa el watchdog, que vigila al servidor, si este
fallara se mandaría una señal SIGCHLD, por lo que watchdog se dará cuenta que no existe
y creará un hijo automáticamente para reemplazar al proceso que murió.
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Se debe incluir una función de midaemon() y también habrá un socket que acepte a los
clientes entrantes y se les asignará un hijo para que estos sean atendidos.

El servicio que se ofrece “echo” devolverá las cadenas de texto que le envíen.

Resultados
Al correr el programa TCPechoDAEMONd este espera a que los clientes se conecten
Con el comando netstat -an | grep 10007 se puede ver el estado del servidor
ESCUELA POLITÉCNICA NACIONAL
FACULTAD DE INGENIERÍA DE SISTEMAS
INGENIERÍA DE SISTEMAS INFORMÁTICOS Y DE COMPUTACIÓN

Se puede observar que los procesos del servidor están corriendo

Conclusiones

• La disponibilidad de un servicio es primordial al momento de crear un hilo o


proceso por lo que watchdog es esencial para poder mantener esta disponibilidad
ya que reestablece los servicios y siempre está a la espera de cualquier problema
que se suscite en ejecución
• La definición de umask es de suma importancia ya que sin este podría haber
problemas al ejecutar estos procesos ya que pueda que no tenga los permisos
necesarios para la creación de nuevos archivos lo cual generaría problemas,
• Es preferible que se creen Daemons propios ya que a estos se les puede agregar
funcionalidades extra, a diferencia de los daemosn ya definidos lo cual mejoraría
su funcionamiento.
• El uso de las señales SIGCHLD, SIGHUP y SIGTERM es muy importante ya que estas
se encargan de detener, reinicializar y finalizar un proceso dependiendo el caso o
circunstancia que se suscite, por lo que se debe entender bien su funcionamiento.

1. Bibliografía

[1] C. -. V, «CEI - V - Sistemas Operativos,» 01 2015. [En línea]. Available:


https://sites.google.com/site/sistemasoperativosv/home/2015-i/que-son-los-daemon. [Último acceso: 17 01
2021].
[2] J. Torres, «Medium,» 17 05 2013. [En línea]. Available: https://medium.com/jmtorres/servicios-y-demonios-en-
linux-a424366336ac. [Último acceso: 17 01 2021].

También podría gustarte