2022-10-26 17:47:14 +00:00
|
|
|
\documentclass[12pt,a4paper,titlepage]{article}
|
|
|
|
\usepackage[spanish]{babel}
|
|
|
|
\usepackage{hyperref}
|
|
|
|
\usepackage{graphicx}
|
|
|
|
\usepackage{subcaption}
|
|
|
|
|
|
|
|
\title{Gestión de un Servidor OpenBSD}
|
|
|
|
\author{Nicolás A. Ortega Froysa}
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
|
|
|
|
\tableofcontents
|
|
|
|
\pagebreak
|
|
|
|
|
|
|
|
\section{Introducción}
|
|
|
|
|
|
|
|
En esta práctica vamos a ver cómo es la administración de sistema de un servidor
|
|
|
|
de {\it OpenBSD}. Los objetivos son los siguientes:
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
\item Aprender los comandos básicos del sistema.
|
|
|
|
\item Ver en qué se diferencia OpenBSD de un sistema Linux.
|
|
|
|
\item Ver cómo cambia la carga del sistema mientras más servicios vayamos
|
|
|
|
proveyendo.
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
La instalación en sí no forma parte de este documento, pero generalmente el
|
|
|
|
instalador guiado es bastante intuitivo.
|
|
|
|
|
|
|
|
Lo que caracteriza a OpenBSD especialmente, respecto a otros sistemas UNIX (y
|
|
|
|
otros sistemas que hemos visto en clase) son dos cosas. Primero, que no es una
|
|
|
|
distribución de Linux, sino de BSD. Son sistemas completamente distintos, aunque
|
|
|
|
siguen (generalmente) una filosofía/arquitectura similar, basándose los dos en
|
|
|
|
UNIX. Segundo, que OpenBSD, entre los otros sistemas BSD, es el más
|
|
|
|
especializado en seguridad, hasta el punto de sacrificar cualquier otro aspecto
|
|
|
|
de la computación a favor siempre de la seguridad. Es por este motivo que
|
|
|
|
deshabilitaron en su momento el {\it hyper-threading} de los procesadores Intel
|
|
|
|
por miedo a {\it Spectre}.\footnotemark
|
|
|
|
|
|
|
|
\footnotetext{\url{https://www.theregister.com/2018/06/20/openbsd\_disables\_intels\_hyperthreading/}}
|
|
|
|
|
|
|
|
\section{Configuración Inicial}
|
|
|
|
|
|
|
|
Generalmente la configuración de OpenBSD ha sido bastante simple, y la mayoría
|
|
|
|
de las opciones están en su valor por defecto. El teclado -- i.e.\ keymap --
|
|
|
|
usado es el estadounidense, simplemente porque para la informática es la más
|
|
|
|
cómoda. La máquina lleva el {\it hostname} de {\tt puffy-nortega}.
|
|
|
|
|
|
|
|
En cuanto a los usuarios, existe un usuario {\it root} con contraseña {\tt
|
|
|
|
toor}, y otro usuario {\it nicolas} con contraseña {\tt nicolas}. Durante la
|
|
|
|
instalación se ha configurado que no sea posible acceder a {\it root} por SSH,
|
|
|
|
ya que esto hace que el sistema sea más vulnerable -- más todavía con este tipo
|
|
|
|
de contraseña.
|
|
|
|
|
|
|
|
El disco se ha particionado con una sola partición para simplificar este proceso
|
|
|
|
de instalación. Se podría instalar con más particiones, repartiendo así los
|
|
|
|
datos y haciendo más fácil el proceso de hacer copias de respaldo (que sean de
|
|
|
|
una sola partición), pero eso no entra dentro de los objetivos de esta práctica.
|
|
|
|
|
|
|
|
Finalmente, en OpenBSD se dividen los archivos de sistema en diferentes {\it
|
|
|
|
sets}. Éstos se pueden usar para instalar diferentes componentes del sistema,
|
|
|
|
desde el {\it kernel} hasta algunos juegos de consola. Éstos están los {\it
|
|
|
|
sets} instalados:
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
\item {\tt bsd}: {\it kernel} de BSD ({\bf obligatorio}).
|
|
|
|
\item {\tt bsd.mp}: {\it kernel} multi-procesador.
|
|
|
|
\item {\tt bsd.rd}: {\it kernel} de uso en memoria.
|
|
|
|
\item {\tt base72.tgz}: sistema base o {\it userland} ({\bf obligatorio}).
|
|
|
|
\item {\tt comp72.tgz}: colección de compiladores.
|
|
|
|
\item {\tt man72.tgz}: páginas de manual.
|
|
|
|
\end{itemize}
|
|
|
|
|
|
|
|
\begin{figure}
|
|
|
|
\center
|
|
|
|
\includegraphics[width=0.75\textwidth]{imgs/00-initial-load.png}
|
|
|
|
\caption{Carga inicial de OpenBSD.}
|
|
|
|
\label{fig:initial-load}
|
|
|
|
\end{figure}
|
|
|
|
|
|
|
|
Al inicializar la máquina lleva una carga de sistema extremadamente baja, ya que
|
|
|
|
está corriendo tan sólo lo mínimo (figura \ref{fig:initial-load}).
|
|
|
|
|
|
|
|
\section{Instalación de Paquetes}
|
|
|
|
|
|
|
|
Para administrar paquetes en OpenBSD se hace uso de las herramientas de paquete
|
|
|
|
de OpenBSD. Los comandos se pueden reconocer porque llevan la patrón {\tt
|
|
|
|
pkg\_*}. En particular, las que nos interesan son tres:
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
\item {\tt pkg\_add}: instalar y actualizar.
|
|
|
|
\item {\tt pkg\_delete}: eliminar/desinstalar.
|
|
|
|
\item {\tt pkg\_info}: buscar información.
|
|
|
|
\end{itemize}
|
|
|
|
|
2022-10-27 16:47:42 +00:00
|
|
|
Para instalar los paquetes que nos interesan vamos a correr el comando siguiente:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
root# pkg_add nginx mariadb-server mariadb-client \
|
|
|
|
rsync
|
|
|
|
\end{verbatim}
|
|
|
|
|
2022-10-26 17:47:14 +00:00
|
|
|
\section{Configuración de Servicios}
|
|
|
|
|
2022-11-02 16:53:50 +00:00
|
|
|
El control de los servicios en OpenBSD se hace con el comando {\tt rcctl}, ya
|
|
|
|
que OpenBSD no usa Systemd. Generalmente se usa de una forma muy similar a
|
|
|
|
Systemd, usando los subcomandos siguientes:
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
\item {\tt start}: iniciar un servicio.
|
|
|
|
\item {\tt stop}: parar un servicio.
|
|
|
|
\item {\tt enable}: habilitar un servicio para iniciarse al arrancar la
|
|
|
|
máquina.
|
|
|
|
\item {\tt disable}: deshabilitar un servicio para que no se inicie cuando
|
|
|
|
arranque la máquina.
|
|
|
|
\item {\tt ls}: mostrar una lista de los servicios.
|
|
|
|
\end{itemize}
|
|
|
|
|
2022-10-26 17:47:14 +00:00
|
|
|
\subsection{Nginx}
|
|
|
|
|
2022-11-02 16:53:50 +00:00
|
|
|
\begin{table}[!ht]
|
|
|
|
\centering
|
|
|
|
\begin{tabular}{|c|c|}
|
|
|
|
\hline
|
|
|
|
{\bf Nombre} & Nginx \\ \hline
|
|
|
|
{\bf Descripción} & Un servidor web moderno. \\ \hline
|
|
|
|
{\bf Dir. Config.} & {\tt /etc/nginx/} \\ \hline
|
|
|
|
{\bf Dir. Logs} & {\tt /etc/nginx/logs/} \\ \hline
|
|
|
|
\end{tabular}
|
|
|
|
\label{tbl:nginx-descriptor}
|
|
|
|
\caption{Datos sobre Nginx.}
|
|
|
|
\end{table}
|
|
|
|
|
|
|
|
En nuestra configuración de Nginx vamos a crear una página simple que se pueda
|
|
|
|
acceder desde fuera en el puerto 80. Por defecto, Nginx en OpenBSD usa el
|
|
|
|
directorio {\tt /var/www/htdocs/} como raíz del servidor. Aquí añadiremos un
|
|
|
|
archivo {\tt index.html} para que responda con un código {\tt 200 OK}. Iniciamos
|
|
|
|
el servicio (y lo habilitamos) con el comando siguiente:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
root# rcctl enable nginx
|
|
|
|
root# rcctl start nginx
|
|
|
|
nginx(ok)
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
\begin{figure}
|
|
|
|
\centering
|
|
|
|
\includegraphics[width=0.75\textwidth]{imgs/01-nginx-test.png}
|
|
|
|
\caption{Prueba de Nginx.}
|
|
|
|
\label{fig:nginx-test}
|
|
|
|
\end{figure}
|
|
|
|
|
|
|
|
Ahora, si probamos acceder a nuestro servidor, veremos el archivo que hemos
|
|
|
|
creado (figura \ref{fig:nginx-test}).
|
|
|
|
|
|
|
|
A este servidor le podemos hacer un {\it stress test} utilizando la herramienta
|
|
|
|
{\it wrk}, que sirve para hacer {\it benchmarking} de servicios HTTP. Desde un
|
|
|
|
cliente corremos el comando siguiente, que nos hará una prueba de 50 conexiones
|
|
|
|
paralelas, sobre 10 hilos, durante 20 segundos. Vemos que el {\it load} aumenta
|
|
|
|
de forma considerable (figura \ref{fig:load-wrk-test}).
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
$ wrk -c 50 -t 10 -d 20 http://172.16.40.3/
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
\begin{figure}
|
|
|
|
\centering
|
|
|
|
\includegraphics[width=0.75\textwidth]{imgs/02-load-wrk-test.png}
|
|
|
|
\caption{{\it Load} resultante de una prueba con {\it wrk}.}
|
|
|
|
\label{fig:load-wrk-test}
|
|
|
|
\end{figure}
|
|
|
|
|
2022-10-26 17:47:14 +00:00
|
|
|
\subsection{MariaDB}
|
|
|
|
|
2022-11-02 16:53:50 +00:00
|
|
|
\begin{table}[!ht]
|
|
|
|
\centering
|
|
|
|
\begin{tabular}{|c|c|}
|
|
|
|
\hline
|
|
|
|
{\bf Nombre} & MariaDB \\ \hline
|
|
|
|
{\bf Descripción} & Sistema de gestión de bases de datos. \\ \hline
|
|
|
|
{\bf Archivo Conf.} & {\tt /etc/my.cnf} \\ \hline
|
|
|
|
\end{tabular}
|
|
|
|
\label{tbl:mariadb-descriptor}
|
|
|
|
\caption{Datos sobre MariaDB.}
|
|
|
|
\end{table}
|
|
|
|
|
|
|
|
MariaDB requiere de una configuración inicial más manual, así que en primer
|
|
|
|
lugar se tendrá que inicializar (y habilitar) el servicio, que se denomina {\tt
|
|
|
|
mysqld} -- esto es porque MariaDB tiene como objetivo ser un reemplazo {\it
|
|
|
|
in-place} de MySQL.
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
root# rcctl enable mysqld
|
|
|
|
root# rcctl start mysqld
|
|
|
|
mysqld(ok)
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
Posteriormente lo configuramos usando el comando {\tt mysql\_secure\_install}.
|
|
|
|
Esto instalará las tablas dentro del directorio {\tt /var/mysql/} y podremos
|
|
|
|
definir la contraseña de {\it root}, que será {\tt Rooty} (y algunas opciones de
|
|
|
|
MariaDB). Podemos acceder a este base de datos usando el comando siguiente desde
|
|
|
|
el usuario {\it root}, e introduciendo la contraseña que hemos asignado:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
puffy-nortega# mysql -u root -p
|
|
|
|
Enter password:
|
|
|
|
Welcome to the MariaDB monitor. Commands end with ; or \g.
|
|
|
|
Your MariaDB connection id is 13
|
|
|
|
Server version: 10.9.3-MariaDB OpenBSD port:
|
|
|
|
mariadb-server-10.9.3v1
|
|
|
|
|
|
|
|
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and
|
|
|
|
others.
|
|
|
|
|
|
|
|
Type 'help;' or '\h' for help. Type '\c' to clear the current
|
|
|
|
input statement.
|
|
|
|
|
|
|
|
MariaDB [(none)]>
|
|
|
|
\end{verbatim}
|
|
|
|
|
2022-10-26 17:47:14 +00:00
|
|
|
\subsection{Servicio RSync}
|
|
|
|
|
|
|
|
\section{Conclusión}
|
|
|
|
|
|
|
|
\pagebreak
|
|
|
|
|
|
|
|
\section{Derechos de Autor y Licencia}
|
|
|
|
|
|
|
|
\noindent
|
|
|
|
Copyright \copyright\ \the\year\ Nicolás A. Ortega Froysa
|
|
|
|
<nicolas@ortegas.org> \\
|
|
|
|
\\
|
|
|
|
Este documento se distribuye bajo los términos y condiciones de la licencia
|
|
|
|
Creative Commons Attribution No Derivatives 4.0 International.
|
|
|
|
|
|
|
|
\end{document}
|