Comments

March 25, 2025

Cómo agregar espacio de intercambio en Ubuntu 22.04

Introducción

Una forma de evitar errores de memoria insuficiente en las aplicaciones es añadir espacio de intercambio al servidor. En esta guía, explicaremos cómo añadir un archivo de intercambio a un servidor Ubuntu 22.04.

¿Qué es Swap?

El espacio de intercambio (swap) es una porción del almacenamiento del disco duro que el sistema operativo reserva para almacenar temporalmente los datos que ya no puede almacenar en la RAM. Esto permite aumentar la cantidad de información que el servidor puede almacenar en su memoria de trabajo, con algunas salvedades. El espacio de intercambio del disco duro se utiliza principalmente cuando ya no hay suficiente espacio en la RAM para almacenar los datos de las aplicaciones en uso.

La información escrita en el disco será significativamente más lenta que la almacenada en la RAM, pero el sistema operativo preferirá mantener los datos de las aplicaciones en ejecución en memoria y usar la memoria de intercambio (swap) para los datos más antiguos. En general, tener espacio de intercambio como respaldo cuando la RAM del sistema se agote puede ser una buena protección contra excepciones de falta de memoria en sistemas con almacenamiento no SSD disponible.

Paso 1: Verificación del sistema para obtener información de intercambio

Antes de comenzar, podemos comprobar si el sistema ya tiene espacio de intercambio disponible. Es posible tener varios archivos o particiones de intercambio, pero generalmente uno debería ser suficiente.

Podemos ver si el sistema tiene algún swap configurado escribiendo:

sudo swapon --show

Si no obtiene ningún resultado, significa que su sistema no tiene espacio de intercambio disponible actualmente.

Puedes verificar que no haya ningún intercambio activo usando la freeutilidad:

free -h

Output              total        used        free      shared  buff/cache   available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
Swap:            0B          0B          0B

Como puede ver en la fila Swap de la salida, no hay ningún swap activo en el sistema.

Paso 2: Verificar el espacio disponible en la partición del disco duro

Antes de crear nuestro archivo de intercambio, comprobaremos el uso actual del disco para asegurarnos de que tengamos suficiente espacio. Para ello, introduzca:

df -h

OutputFilesystem      Size  Used Avail Use% Mounted on
udev            474M     0  474M   0% /dev
tmpfs            99M  932K   98M   1% /run
/dev/vda1        25G  1.4G   23G   7% /
tmpfs           491M     0  491M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           491M     0  491M   0% /sys/fs/cgroup
/dev/vda15      105M  3.9M  101M   4% /boot/efi
/dev/loop0       55M   55M     0 100% /snap/core18/1705
/dev/loop1       69M   69M     0 100% /snap/lxd/14804
/dev/loop2       28M   28M     0 100% /snap/snapd/7264
tmpfs            99M     0   99M   0% /run/user/1000

En este caso, el dispositivo /en la Mounted oncolumna es nuestro disco. Tenemos mucho espacio disponible (solo se utilizan 1,4 GB). Tu uso probablemente será diferente.

Aunque existen diversas opiniones sobre el tamaño adecuado del espacio de intercambio, en realidad depende de tus preferencias personales y de los requisitos de tu aplicación. Generalmente, un buen punto de partida es una cantidad igual o el doble de la RAM de tu sistema. Otra regla general es que cualquier cantidad superior a 4 GB de espacio de intercambio probablemente sea innecesaria si solo la usas como RAM de reserva.

Paso 3: Creación de un archivo de intercambio

Ahora que conocemos el espacio disponible en el disco duro, podemos crear un archivo de intercambio en nuestro sistema de archivos. Asignaremos un archivo del tamaño que queramos llamar en nuestro directorio swapfileraíz ( )./

La mejor manera de crear un archivo de intercambio es con el fallocateprograma. Este comando crea instantáneamente un archivo del tamaño especificado.

Dado que el servidor de nuestro ejemplo tiene 1 GB de RAM, crearemos un archivo de 1 GB en esta guía. Ajústelo según las necesidades de su servidor:

sudo fallocate -l 1G /swapfile

Podemos verificar que se reservó la cantidad correcta de espacio escribiendo:

ls -lh /swapfile

-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Nuestro archivo ha sido creado con la cantidad correcta de espacio reservado.

Paso 4 – Habilitación del archivo de intercambio

Ahora que tenemos disponible un archivo del tamaño correcto, necesitamos convertirlo en espacio de intercambio.

Primero, necesitamos restringir los permisos del archivo para que solo los usuarios con privilegios de root puedan leer su contenido. Esto impide que los usuarios normales accedan al archivo, lo que tendría importantes consecuencias para la seguridad.

Haga que el archivo sólo sea accesible para root escribiendo:

sudo chmod 600 /swapfile

Verifique el cambio de permisos escribiendo:

ls -lh /swapfile

Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Como puede ver, solo el usuario root tiene habilitadas las funciones de lectura y escritura.

Ahora podemos marcar el archivo como espacio de intercambio escribiendo:

sudo mkswap /swapfile

OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Luego de marcar el archivo, podemos habilitar el archivo de intercambio, permitiendo que nuestro sistema comience a usarlo:

sudo swapon /swapfile

Verifique que el intercambio esté disponible escribiendo:

sudo swapon --show

OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

Podemos verificar freenuevamente la salida de la utilidad para corroborar nuestros hallazgos:

free -h

Output              total        used        free      shared  buff/cache   available
Mem:          981Mi       123Mi       644Mi       0.0Ki       213Mi       714Mi
Swap:         1.0Gi          0B       1.0Gi

Nuestro intercambio se ha configurado correctamente y nuestro sistema operativo comenzará a usarlo según sea necesario.

Paso 5 – Hacer que el archivo de intercambio sea permanente

Nuestros cambios recientes han habilitado el archivo de intercambio para la sesión actual. Sin embargo, si reiniciamos, el servidor no conservará la configuración de intercambio automáticamente. Podemos cambiar esto añadiendo el archivo de intercambio a nuestro /etc/fstabarchivo.

Haga una copia de seguridad del /etc/fstabarchivo en caso de que algo salga mal:

sudo cp /etc/fstab /etc/fstab.bak

Agregue la información del archivo de intercambio al final de su /etc/fstabarchivo escribiendo:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

A continuación revisaremos algunas configuraciones que podemos actualizar para ajustar nuestro espacio de intercambio.

Paso 6 – Ajuste de la configuración de intercambio

Hay algunas opciones que puedes configurar y que tendrán un impacto en el rendimiento de tu sistema al trabajar con intercambio.

Ajuste de la propiedad de swappiness

Este swappinessparámetro configura la frecuencia con la que el sistema intercambia datos de la RAM al espacio de intercambio. Este valor, entre 0 y 100, representa un porcentaje.

Con valores cercanos a cero, el kernel no intercambiará datos con el disco a menos que sea absolutamente necesario. Recuerde que las interacciones con el archivo de intercambio son costosas, ya que tardan mucho más que las interacciones con la RAM y pueden causar una reducción significativa del rendimiento. Indicarle al sistema que no dependa demasiado del archivo de intercambio generalmente lo hará más rápido.

Los valores cercanos a 100 intentarán almacenar más datos en la memoria de intercambio para liberar más espacio de RAM. Dependiendo del perfil de memoria de sus aplicaciones o del uso que le dé al servidor, esto podría ser mejor en algunos casos.

Podemos ver el valor de swappiness actual escribiendo:

cat /proc/sys/vm/swappiness

Output60

Para una computadora de escritorio, un valor de swappiness de 60 no es un mal valor. Para un servidor, conviene acercarlo a 0.

Podemos establecer el swappiness a un valor diferente usando el sysctlcomando.

Por ejemplo, para establecer el swappiness a 10, podríamos escribir:

sudo sysctl vm.swappiness=10

Outputvm.swappiness = 10

Esta configuración se mantendrá hasta el próximo reinicio. Podemos configurar este valor automáticamente al reiniciar añadiendo la siguiente línea a nuestro /etc/sysctl.confarchivo:

sudo nano /etc/sysctl.conf

En la parte inferior puedes agregar: /etc/sysctl.conf

vm.swappiness=10

Guarde y cierre el archivo cuando haya terminado.

Ajuste de la configuración de presión de caché

Otro valor relacionado que podrías querer modificar es el vfs_cache_pressure. Esta configuración configura con qué frecuencia el sistema almacenará en caché la información de inodos y entradas de entrada sobre otros datos.

Básicamente, se trata de datos de acceso al sistema de archivos. Su consulta suele ser muy costosa y se solicita con mucha frecuencia, por lo que es excelente almacenarlos en caché. Puede ver el valor actual consultando procde nuevo el sistema de archivos:

cat /proc/sys/vm/vfs_cache_pressure

Output100

Con la configuración actual, nuestro sistema elimina la información de inodos de la caché demasiado rápido. Podemos configurarlo con un valor más conservador, como 50, escribiendo:

sudo sysctl vm.vfs_cache_pressure=50

Outputvm.vfs_cache_pressure = 50

Nuevamente, esto solo es válido para nuestra sesión actual. Podemos cambiarlo añadiéndolo a nuestro archivo de configuración, como hicimos con la configuración de intercambio:

sudo nano /etc/sysctl.conf

En la parte inferior, agregue la línea que especifica su nuevo valor: /etc/sysctl.conf

vm.vfs_cache_pressure=50

Guarde y cierre el archivo cuando haya terminado.

Conclusión

Seguir los pasos de esta guía le dará un respiro en casos que, de otro modo, provocarían excepciones de memoria insuficiente. El espacio de intercambio puede ser increíblemente útil para evitar algunos de estos problemas comunes.

Si se encuentra con errores OOM (sin memoria) o descubre que su sistema no puede utilizar las aplicaciones que necesita, la mejor solución es optimizar las configuraciones de sus aplicaciones o actualizar su servidor.

Stephen Dove
Comments

March 22, 2025

Cómo instalar una interfaz gráfica de usuario en un servidor Ubuntu: guía paso a paso

Introduccion

Ubuntu Server está diseñado principalmente para funcionar sin interfaz gráfica, lo que lo hace ligero y optimizado para su uso en servidores. Sin embargo, en ciertas situaciones, una GUI puede simplificar la administración del sistema, especialmente para usuarios que no están familiarizados con la línea de comandos. En este tutorial, te guiaré en el proceso de instalación de una GUI en Ubuntu Server .

Prerrequisitos

Antes de continuar con la instalación, asegúrese de tener lo siguiente:

  1. El último servidor Ubuntu instalado .
  2. Una cuenta de usuario con sudo privilegios .
  3. Una conexión a Internet activa.

Instalación de una interfaz gráfica de usuario (GUI) en el servidor Ubuntu

Paso 1: Actualice su sistema

Antes de instalar cualquier software, es fundamental asegurarse de que su sistema esté actualizado. Ejecute los siguientes comandos para actualizar las listas de paquetes y actualizar los paquetes obsoletos:

sudo apt update
sudo apt upgrade -y

Esto garantiza que tenga instalados los últimos parches de seguridad y actualizaciones del sistema.

Paso 2: Elige un entorno de escritorio

Ubuntu ofrece diversos entornos de escritorio que se adaptan a diferentes necesidades y preferencias de rendimiento. Estos son algunos de los más populares:

  • GNOME: el entorno de escritorio predeterminado para Ubuntu Desktop.
  • Xfce (Xubuntu): ligero y eficiente en el uso de recursos.
  • LXDE (Lubuntu): Extremadamente liviano, ideal para hardware de bajas especificaciones.
  • KDE (Kubuntu): un entorno rico en características que podría utilizar más recursos.

En este tutorial, nos centraremos en la instalación de GNOME y Xfce, pero puedes elegir cualquiera de los otros reemplazando el nombre del paquete en los siguientes pasos.

Paso 3: Instalar el entorno de escritorio

Instalación de GNOME

Si prefiere la experiencia completa del escritorio Ubuntu, puede instalar el entorno de escritorio GNOME. Ejecute el siguiente comando:

sudo apt install ubuntu-desktop -y

Esto instalará el escritorio GNOME completo, junto con todas sus aplicaciones asociadas, que pueden consumir muchos recursos.

Instalación de Xfce

Si necesitas una opción más ligera, Xfce es una excelente opción. Para instalarlo, ejecuta:

sudo apt install xubuntu-core -y

Esto instala el entorno de escritorio Xfce sin aplicaciones innecesarias, lo que lo convierte en una opción más minimalista y eficiente para los servidores.

Instalación de otros escritorios

Puede instalar otros entornos de escritorio como LXDE o KDE ejecutando:

# For LXDE
sudo apt install lubuntu-core -y


# For KDE Plasma
sudo apt install kubuntu-desktop -y

Paso 4: Instalar un administrador de pantalla

Un administrador de pantalla se encarga de iniciar el entorno de escritorio. Ubuntu usa GDM (Administrador de Pantalla de GNOME) por defecto, pero puedes instalar otros como LightDM para una opción más ligera, especialmente si usas Xfce o LXDE.

Para instalar LightDM, ejecute:

sudo apt install lightdm -y

Durante la instalación, se le pedirá que seleccione un administrador de pantalla predeterminado. Si no está seguro, LightDM es una buena opción, especialmente para entornos ligeros como Xfce.

Paso 5: Habilite la GUI para que se inicie automáticamente

Una vez completada la instalación, deberá configurar su sistema para que inicie la GUI automáticamente.

Primero, verifique el objetivo predeterminado del sistema, que determina qué servicios se inician cuando se inicia el sistema:

systemctl get-default

Por defecto, debería devolver multi-user.target, que corresponde al modo no gráfico. Para cambiar al modo gráfico, ejecute:

sudo systemctl set-default graphical.target

Ahora, su servidor se iniciará en la interfaz gráfica automáticamente en el próximo inicio.

Paso 6: Reiniciar el sistema

Una vez que haya instalado el entorno de escritorio y lo haya configurado para que se inicie automáticamente, reinicie su sistema para aplicar los cambios:

sudo reboot

Después de reiniciar, debería aparecer la pantalla de inicio de sesión del entorno de escritorio que instaló (GNOME, Xfce, etc.).

Paso 7: Conectarse a la GUI (opcional)

Si administra su servidor de forma remota, puede usar una conexión de escritorio remoto para acceder a la interfaz gráfica de usuario. Estas son algunas opciones populares:

Consola en la nube : Tu proveedor de nube probablemente ya cuente con una función de consola que te permite conectarte a tu servidor. Si usas servidores Cherry , selecciona tu máquina virtual en el portal del cliente y haz clic en Consolepara acceder a la consola de tu servidor.

Luego puede iniciar sesión a través de la GUI y acceder a su escritorio:

VNC : Una opción popular para conexiones de escritorio remoto. Para instalar un servidor VNC, ejecute:

sudo apt install tightvncserver -y

RDP (Protocolo de Escritorio Remoto) : RDP es un protocolo de Microsoft para conexiones remotas, compatible con Ubuntu. Para instalar un servidor RDP, ejecute:

sudo apt install xrdp -y

Después de instalar su servidor de escritorio remoto preferido, configúrelo según sus necesidades y conéctese usando su máquina local.

Es posible que necesite configurar su firewall para permitir el acceso a su servidor VNC o RDP.

Paso 8: Administrar la GUI

Si alguna vez desea volver a un entorno no gráfico, puede cambiar el objetivo predeterminado a multi-user.target:

sudo systemctl set-default multi-user.target

Esto garantizará que su servidor arranque en la interfaz

de línea de comandos (CLI) de manera predeterminada.

#Conclusión

En este tutorial, explicamos cómo instalar una interfaz gráfica de usuario (GUI) en Ubuntu Server. Esto simplifica las tareas para quienes prefieren una interfaz gráfica. Ya sea que elija GNOME, con sus numerosas funciones, o Xfce, un sistema ligero, ahora sabe cómo instalar, configurar y administrar una GUI en su servidor. Tenga en cuenta que usar una GUI consume más recursos del sistema y puede afectar el rendimiento, especialmente en servidores de producción.

Stephen Dove
Comments

March 21, 2025

Cómo instalar Drupal en un servidor Ubuntu 14.04 con Apache

Introducción

Drupal es un popular sistema de gestión de contenido (CMS) utilizado para gestionar algunos de los blogs y sitios web más grandes de internet. Gracias a la estabilidad de su base, la adaptabilidad de la plataforma y su activa comunidad, Drupal sigue siendo una opción popular tras más de una década en el mercado.

En esta guía, explicaremos cómo instalar Drupal en un servidor Ubuntu 14.04. Usaremos Apache para nuestro sitio, ya que es la configuración recomendada por el equipo de Drupal.

Prerrequisitos

Antes de comenzar con esta guía, necesitará un servidor Ubuntu 14.04 con una configuración básica completa. Siga nuestra guía de configuración inicial del servidor Ubuntu 14.04 para configurar un usuario no root con privilegios de sudo.

También necesitará tener Apache, PHP y MySQL configurados en su servidor. Puede aprender a configurarlos siguiendo nuestra guía sobre cómo instalar LAMP en Ubuntu 14.04 .

Una vez que haya cumplido con los requisitos anteriores, continúe con esta guía.

Antes de obtener los archivos de Drupal e instalarlos en nuestro directorio web, debemos preparar nuestro sistema. Si bien Apache, PHP y MySQL ya están instalados, necesitamos realizar algunos cambios adicionales y ajustes en cada uno para nuestra instalación.

Configurar un usuario y una base de datos MySQL para Drupal

Lo primero que haremos es configurar un usuario y una base de datos MySQL para nuestra instalación de Drupal. Es importante configurar un usuario y una base de datos dedicados por razones de seguridad.

Para comenzar, inicie sesión en MySQL:

mysql -u root -p

Se le solicitará la contraseña del usuario root de MySQL que configuró durante la instalación de ese software.

Una vez autenticado, accederá a un mensaje de MySQL. Primero, cree una base de datos para su instalación de Drupal. drupalPara simplificar, la llamaremos:

CREATE DATABASE drupal;

A continuación, debe crear un usuario que Drupal pueda usar para conectarse a la base de datos. En esta guía, lo llamaremos usuario drupaluser. Seleccione una contraseña segura para reemplazar la del bloque a continuación:

CREATE USER drupaluser@localhost IDENTIFIED BY 'password';

Ahora tenemos una base de datos y un usuario, pero este aún no tiene permiso para realizar ninguna acción en la base de datos. Podemos solucionarlo otorgándole permisos. Drupal necesita diversos permisos para funcionar correctamente. A continuación, se muestra una buena selección que permitirá que el software funcione sin exponer nuestra base de datos innecesariamente:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER,CREATE TEMPORARY TABLES,LOCK TABLES ON drupal.* TO drupaluser@localhost;

Su usuario ya tiene permiso para administrar la base de datos que creamos. Para implementar estos cambios ahora mismo, necesitamos vaciar la información de privilegios al disco:

FLUSH PRIVILEGES;

Ahora, podemos salir de nuestra sesión interactiva MySQL:

exit

Serás redirigido nuevamente a tu bashsesión.

Instalar módulos PHP y ajustar la configuración

A continuación, instalaremos algunos módulos PHP necesarios para la aplicación Drupal. Por suerte, se encuentran en los repositorios predeterminados de Ubuntu.

Actualice su caché de paquetes local e instálelos escribiendo:

sudo apt-get update
sudo apt-get install php5-gd php5-curl libssh2-php

También realizaremos algunos pequeños ajustes en nuestro archivo de configuración de PHP. Estos son recomendados por los desarrolladores de Drupal. Abra el archivo de configuración de Apache PHP con privilegios de sudo en su editor de texto:

sudo nano /etc/php5/apache2/php.ini

Busque la expose_phpdirectiva y la allow_url_fopendirectiva y configúrelas ambas en “Desactivado”:

. . .
expose_php = Off
. . .
allow_url_fopen = Off
. . .

Guarde y cierre el archivo cuando haya terminado.

Habilitar la funcionalidad de reescritura y archivos .htaccess en Apache

A continuación, debemos analizar Apache. Primero, queremos habilitar la función de reescritura. Esto permitirá que nuestro sitio Drupal modifique las URL a cadenas de texto legibles.

Los mod_rewritemódulos de Apache ya están instalados por defecto. Sin embargo, no están habilitados. Podemos activarlos escribiendo:

sudo a2enmod rewrite

Esto habilitará el módulo la próxima vez que se reinicie Apache. Antes de reiniciar Apache, debemos ajustar la configuración de nuestro host virtual para permitir el uso de un .htaccessarchivo. Este archivo contendrá las reglas de reescritura y se incluye por defecto en la instalación de Drupal.

Abra ahora el archivo virtualhost predeterminado:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Dentro del bloque “VirtualHost”, agregue un bloque de directorio que apunte a la raíz de nuestra web. Dentro de este bloque, establezca la AllowOverridedirectiva en “All”. También puede agregar una ServerNamedirectiva que apunte a su nombre de dominio y modificarla ServerAdminpara que refleje una dirección de correo electrónico válida:

<VirtualHost *:80>
    . . .
    ServerName  example.com
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        AllowOverride All
    </Directory>
    . . .
</VirtualHost>

Guarde y cierre el archivo cuando haya terminado.

Ahora solo necesitamos reiniciar el servidor web para implementar nuestros cambios en Apache y PHP:

sudo service apache2 restart

Instalar los archivos de Drupal

Ahora que nuestro sistema está listo, podemos instalar Drupal en nuestra raíz web.

De hecho, primero descomprimiremos los archivos en nuestro directorio personal y luego los copiaremos a la ubicación correspondiente. Esto nos dará acceso inmediato a los archivos originales en caso de que algo salga mal o se eliminen accidentalmente posteriormente.

Vaya a la página de descarga de Drupal y consulte la última versión en la sección “Versiones recomendadas”. Haga clic derecho en el tar.gzenlace de la versión que le interese y seleccione “Copiar dirección del enlace” o cualquier opción similar que ofrezca su navegador.

De vuelta en su servidor, cambie a su directorio de inicio y use wgetel enlace que copió para descargar el archivo del proyecto:

cd ~
wget http://ftp.drupal.org/files/projects/drupal-7.32.tar.gz

Es probable que el enlace tenga un número de versión diferente al final. Una vez descargado el archivo, extraiga el directorio de la aplicación escribiendo:

tar xzvf drupal*

Ahora, acceda a la estructura de directorios recién extraída y use la rsyncutilidad para copiar de forma segura todos los archivos al directorio raíz web de su servidor. En este comando, usamos el punto para especificar el directorio actual. Esto es necesario para copiar algunos archivos ocultos que necesitamos:

cd drupal*
sudo rsync -avz . /var/www/html

Ahora tienes la versión original de los archivos en un directorio dentro de tu carpeta de inicio por si necesitas consultarlos. Nos trasladaremos al directorio raíz web para personalizar nuestra instalación:

cd /var/www/html

Ajuste de los archivos de Drupal para mayor seguridad y facilidad de instalación

El script de instalación web requiere que realicemos algunos cambios en nuestro directorio de Drupal para completar el proceso correctamente. Debemos solucionar esto con antelación para no tener que alternar entre el navegador web y la línea de comandos.

Primero, necesitamos crear un nuevo directorio bajo el subárbol sites/defaultllamado files:

mkdir /var/www/html/sites/default/files

A continuación, debemos copiar el archivo de configuración predeterminada al nombre de archivo que Drupal utiliza para la configuración activa:

cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.php

Este archivo de configuración activo requiere temporalmente permisos adicionales durante la instalación. Necesitamos otorgar permisos de escritura al propietario del grupo por el momento (próximamente asignaremos el propietario del grupo al usuario web). Lo eliminaremos una vez que la instalación se complete correctamente:

chmod 664 /var/www/html/sites/default/settings.php

A continuación, necesitamos asignar la propiedad de grupo de nuestros archivos al usuario web, que en Ubuntu es www-data. Queremos otorgarle a toda la instalación de Drupal estas propiedades de propiedad:

sudo chown -R :www-data /var/www/html/*

Su servidor ahora está configurado adecuadamente para ejecutar el script de instalación basado en web.

Complete el procedimiento de instalación basado en la web

El resto de la instalación se realizará en su navegador web. Abra el navegador y navegue hasta el nombre de dominio o la dirección IP de su servidor:

http://server_domain_or_IP

Verá la página inicial del procedimiento de instalación de Drupal:

Drupal elige perfil

A menos que tenga alguna razón para no hacerlo, seleccione la instalación “Estándar” y haga clic en “Guardar y continuar”. Haga clic en los siguientes botones de continuar hasta llegar a la página de configuración de la base de datos. Complete los datos que utilizó al configurar la base de datos y el usuario.

Para esta guía, utilizamos una base de datos llamada drupal, un usuario de base de datos llamado drupalusery una contraseña de password. Debería haber seleccionado una contraseña diferente durante la creación del usuario. Haga clic en “Guardar y continuar” de nuevo cuando haya completado los datos de su base de datos:

Configuración de la base de datos de Drupal

Nota : Al hacer clic en “Guardar y continuar”, es posible que se le redirija a la misma página de configuración de la base de datos. Si esto ocurre, simplemente actualice la página. La base de datos se configurará y el perfil se instalará.

Verá un cuadro de información en la parte superior de la página que le indica que ahora puede cambiar los permisos del archivo de configuración. Lo haremos en breve. Por ahora, necesita configurar información básica sobre su sitio. Complete los campos con los valores adecuados para su sitio:

Sitio de configuración de Drupal

Haga clic en el botón “Guardar y continuar” por última vez para completar la instalación. Ahora puede visitar su sitio web accediendo a su nombre de dominio:

Instalación completa de Drupal

Ha completado exitosamente la instalación de Drupal.

Sin embargo, aún necesitamos revertir los permisos de nuestro archivo de configuración para que usuarios no autorizados no puedan realizar cambios. En su servidor, restrinja el acceso de escritura al archivo escribiendo:

chmod 644 /var/www/html/sites/default/settings.php

Esto debería bloquear futuros cambios en el archivo de configuración.

Solución de problemas

Si la etapa final de la instalación de Drupal no se completa, revise sus registros de errores:

sudo tail /var/log/apache2/error.log

Si ves un error como este:

[Wed Nov 12 13:40:10.566144 2014] [:error] [pid 7178] [client 108.29.37.206:55238] PHP Fatal error:  Call to undefined function field_attach_load() in /var/www/html/includes/entity.inc on line 316, referer: http://12.34.56.78/install.php?profile=standard&locale=en
sh: 1: /usr/sbin/sendmail: not found

Esto indica que la instalación no se completó correctamente. Existen varias causas y soluciones para este error, documentadas por Drupal:

https://www.drupal.org/node/481758

Algunas de las soluciones más probables incluyen editar el /etc/php5/apache2/php.iniarchivo para generar el max_execution_time:

sudo nano /etc/php5/apache2/php.ini

Archivo:

max_execution_time = 300

También puedes probar la instalación en un navegador distinto a Chrome, como Safari. La configuración de cookies del navegador puede interferir con la instalación.

De todas formas, una vez que implementes la solución, tendrás que eliminar la base de datos y /var/www/html/sites/default/settings.phpel archivo de Drupal existentes, reemplazarlos con copias predeterminadas y reiniciar la instalación. Si tienes datos o configuraciones que deban conservarse, haz copias de seguridad.

Para hacer esto, puede iniciar sesión en MySQL y DROP DATABASE drupal;luego seguir nuevamente la sección de base de datos anterior para crear la base de datos y otorgarle los privilegios.

También puedes ejecutarlo cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.phpde nuevo para reemplazar el archivo de configuración. Asegúrate de ejecutar el chmod 664 /var/www/html/sites/default/settings.phpcomando para restablecer los permisos correctos.

Luego visite su dirección IP nuevamente, posiblemente en un navegador diferente, e intente la instalación final nuevamente.

Conclusión

Ahora tienes una base sólida para crear tu sitio Drupal. Drupal es increíblemente flexible, lo que te permite personalizar la apariencia y la funcionalidad del sitio según tus necesidades y las de tus usuarios.

Para obtener ideas sobre cómo seguir, visita nuestra página de etiquetas de Drupal , donde encontrarás tutoriales que te ayudarán en tu proceso. También encontrarás una sección de preguntas y respuestas para obtener ayuda o contribuir a la comunidad.

Stephen Dove
Comments

March 21, 2025

Cómo instalar WordPress en Ubuntu

Cómo instalar WordPress en Ubuntu

En este artículo, nos centraremos en cómo instalar WordPress en Ubuntu 18.04. WordPress es una plataforma de gestión de contenido gratuita y de código abierto basada en PHP y MySQL. Es el sistema de gestión de blogs y contenido líder a nivel mundial, con una cuota de mercado superior al 60%, eclipsando a competidores como Joomla y Drupal. WordPress se lanzó por primera vez el 27 de mayo de 2003 y, hasta la fecha, ¡funciona con más de 60 millones de sitios web! Su potencia y popularidad han alcanzado tal nivel que algunas grandes marcas y empresas han alojado sus sitios en la plataforma. Entre ellas se encuentran Sony Music, Katy Perry, New York Post y TED.

¿Por qué es tan popular WordPress? Analicemos brevemente algunos de los factores que han contribuido al enorme éxito de la plataforma.

Facilidad de uso

WordPress incluye un panel de control sencillo, intuitivo y fácil de usar. No requiere conocimientos de lenguajes de programación web como PHP, HTML5 y CSS3, y puedes crear un sitio web con solo unos clics. Además, la plataforma incluye plantillas, widgets y plugins gratuitos para ayudarte a empezar con tu blog o sitio web.

Rentabilidad

WordPress te ahorra muchísimo dinero a los desarrolladores para desarrollar tu sitio web. Solo tienes que obtener un tema gratuito de WordPress o comprar uno e instalarlo. Una vez instalado, tienes la libertad de implementar las funciones que prefieras y personalizar una gran variedad sin necesidad de programar mucho. Además, diseñar tu sitio web lleva mucho menos tiempo que programar desde cero.

Los sitios de WordPress son responsivos

La plataforma WordPress es intrínsecamente responsiva, por lo que no tendrás que preocuparte por si tus sitios se adaptan a múltiples dispositivos. ¡Esta ventaja también contribuye a que tu sitio tenga un mejor posicionamiento SEO en Google!

WordPress está preparado para SEO

WordPress está desarrollado con un código bien estructurado, limpio y consistente. Esto facilita la indexación de tu blog o sitio web por parte de Google y otros motores de búsqueda, lo que mejora tu posicionamiento. Además, puedes decidir qué páginas tienen mejor posicionamiento o usar plugins de SEO como el popular plugin de Yoast, que mejora el posicionamiento de tu sitio web en Google.

Fácil de instalar y actualizar.

Instalar WordPress en Ubuntu o cualquier otro sistema operativo es muy fácil. Existen numerosos scripts de código abierto que incluso automatizan este proceso. Muchas empresas de hosting ofrecen una función de instalación de WordPress con un solo clic para que puedas empezar a usarlo enseguida.

Instalar WordPress en Ubuntu

Antes de comenzar, actualicemos el sistema. Inicie sesión como usuario root y actualice el sistema para actualizar los repositorios.

apt update && apt upgrade

Salida Actualizar y mejorar el sistema Ubuntu

A continuación, instalaremos la pila LAMP para que WordPress funcione. LAMP es la abreviatura de Linux, Apache, MySQL y PHP.

Paso 1: Instalar Apache

Comencemos por instalar Apache. Para ello, ejecute el siguiente comando.

apt install apache2

Salida Instalar Apache2

Para confirmar que Apache está instalado en su sistema, ejecute el siguiente comando.

systemctl status apache2

Salida Cómo comprobar el estado de Apache2

Para verificar más, abra su navegador y vaya a la dirección IP de su servidor.

https://ip-address

Producción Página predeterminada del servidor web Apache

Paso 2: Instalar MySQL

A continuación, instalaremos el motor de base de datos MariaDB para alojar nuestros archivos de WordPress. MariaDB es una bifurcación de código abierto de MySQL y la mayoría de las empresas de hosting lo utilizan en lugar de MySQL.

apt install mariadb-server mariadb-client

Salida Instalar MySQL Mariadb Server Mariadb Client Ahora aseguremos nuestro motor de base de datos MariaDB y prohibamos el inicio de sesión root remoto.

$ mysql_secure_installation

El primer paso le pedirá que cambie la contraseña de root para iniciar sesión en la base de datos. Puede cambiarla u omitirla si está seguro de que su contraseña es segura. Para omitir el cambio, escriba n. Cambiar la contraseña rootPor seguridad, se le pedirá que elimine los usuarios anónimos. Escriba Y. Eliminar usuarios anónimosA continuación, desactive el inicio de sesión remoto de root para evitar que los hackers accedan a su base de datos. Sin embargo, para realizar pruebas, puede permitir el inicio de sesión remoto si está configurando un servidor virtual. Prohibir el inicio de sesión root de forma remota

A continuación, elimine la base de datos de prueba. Eliminar la base de datos de pruebaFinalmente, vuelva a cargar la base de datos para que los cambios surtan efecto.Recargar tabla de privilegios

Paso 3: Instalar PHP

Por último, instalaremos PHP como el último componente de la pila LAMP.

apt install php php-mysql

Salida Instalar PHP Para confirmar que PHP está instalado, se creó un info.phparchivo en /var/www/html/la ruta

vim /var/www/html/info.php

Añade las siguientes líneas:

<?php
phpinfo();
?>

Guardar y salir. Abra su navegador y añada /info.phpla URL del servidor.

https://ip-address/info.php

Producción Página web de información de PHP

Paso 4: Crear una base de datos de WordPress

Ahora es el momento de iniciar sesión en nuestra base de datos MariaDB como root y crear una base de datos para alojar nuestros datos de WordPress.

$ mysql -u root -p

Salida Inicio de sesión raíz de MySQL

Cree una base de datos para nuestra instalación de WordPress.

CREATE DATABASE wordpress_db;

Salida Crear una base de datos de WordPress

A continuación, crea un usuario de base de datos para nuestra configuración de WordPress.

CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'password';

Salida Crear un usuario para la base de datos de WordPress

Otorgar privilegios al usuario A continuación, otorgue al usuario permisos para acceder a la base de datos

GRANT ALL ON wordpress_db.* TO 'wp_user'@'localhost' IDENTIFIED BY 'password';

Salida Otorgar privilegios a usuarios de WordPress en bases de datos de WordPress Genial, ahora puedes salir de la base de datos.

FLUSH PRIVILEGES;

Exit;

Paso 5: Instalar WordPress CMS

Vaya a su directorio temporal y descargue el último archivo de WordPress

cd /tmp && wget https://wordpress.org/latest.tar.gz

Salida Descargar WordPress A continuación, descomprima el archivo tar, lo que generará una carpeta llamada “wordpress”.

tar -xvf latest.tar.gz

Salida Descomprimir el archivo tar de WordPress Copiar la carpeta de wordpress a /var/www/html/la ruta.

cp -R wordpress /var/www/html/

Ejecute el siguiente comando para cambiar la propiedad del directorio ‘wordpress’.

chown -R www-data:www-data /var/www/html/wordpress/

Cambiar los permisos de archivo de la carpeta de WordPress.

chmod -R 755 /var/www/html/wordpress/

Crear directorio ‘cargas’.

$ mkdir /var/www/html/wordpress/wp-content/uploads

Por último, cambie los permisos del directorio ‘uploads’.

chown -R www-data:www-data /var/www/html/wordpress/wp-content/uploads/

Abre tu navegador y ve a la URL del servidor. En mi caso es…

https://server-ip/wordpress

Se le presentará un asistente de WordPress y una lista de credenciales necesarias para configurarlo correctamente. instalar wordpress en ubuntuComplete el formulario como se muestra con las credenciales especificadas al crear la base de datos de WordPress en MariaDB. Omita el host de la base de datos y el prefijo de la tabla y haga clic en el botón “Enviar”. instalar wordpress en ubuntuSi todos los datos son correctos, podrá continuar. Ejecute la instalación. Muy bien Sparky, ejecuta la instalaciónComplete los datos adicionales necesarios, como el título del sitio, el nombre de usuario y la contraseña, y guárdelos en un lugar seguro para que no los olvide. Asegúrese de usar una contraseña segura. Bienvenidos Se necesita más informaciónDesplácese hacia abajo y haga clic en “Instalar WordPress”. Si todo ha ido bien, recibirá una notificación de “Instalación correcta”, como se muestra.

Instalación exitosa de WordPress
Éxito

Haz clic en el botón “Iniciar sesión” para acceder a la página de inicio de sesión de tu nueva instalación de WordPress. Iniciar sesión en WordPressIntroduce tus credenciales de inicio de sesión y pulsa “Iniciar sesión”. panel de control de WordPress¡Listo! Ya está el panel de control de WordPress, donde puedes crear tu primer blog o sitio web. ¡Enhorabuena por haber llegado hasta aquí! Ahora puedes descubrir las distintas funciones, plugins y temas, y empezar a configurar tu primer blog o sitio web.

Stephen Dove
Comments

March 20, 2025

Cómo instalar Nginx en Ubuntu 22.04

Introducción

Nginx es uno de los servidores web más populares del mundo y aloja algunos de los sitios web más grandes y con mayor tráfico de internet. Es una opción ligera que puede usarse como servidor web o como proxy inverso.

En esta guía, analizaremos cómo instalar Nginx en su servidor Ubuntu 22.04, ajustar el firewall, administrar el proceso Nginx y configurar bloques de servidor para alojar más de un dominio desde un solo servidor.

Prerrequisitos

Antes de comenzar esta guía, debe tener configurado en su servidor un usuario normal (no root) con privilegios de sudo. Puede aprender a configurar una cuenta de usuario normal siguiendo nuestra Guía de configuración inicial del servidor para Ubuntu 22.04 .

Cuando tenga una cuenta disponible, inicie sesión como usuario no root para comenzar.

Paso 1: Instalación de Nginx

Como Nginx está disponible en los repositorios predeterminados de Ubuntu, es posible instalarlo desde estos repositorios utilizando el aptsistema de empaquetado.

Dado que esta es nuestra primera interacción con el aptsistema de empaquetado en esta sesión, actualizaremos nuestro índice de paquetes local para tener acceso a los listados de paquetes más recientes. Después, podremos instalar nginx:

sudo apt update
sudo apt install nginx

Pulse  Y cuando se le solicite para confirmar la instalación. Si se le solicita reiniciar algún servicio, pulse  ENTER para aceptar los valores predeterminados y continuar. aptSe instalará Nginx y las dependencias necesarias en su servidor.

Paso 2 – Ajuste del firewall

Antes de probar Nginx, es necesario configurar el firewall para permitir el acceso al servicio. Nginx se registra como servicio al ufwinstalarse, lo que facilita su acceso.

Enumere las configuraciones de la aplicación ufwcon la que sabe trabajar escribiendo:

sudo ufw app list

Debería obtener una lista de los perfiles de la aplicación:

OutputAvailable applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Como lo demuestra el resultado, hay tres perfiles disponibles para Nginx:

  • Nginx Full : este perfil abre tanto el puerto 80 (tráfico web normal, sin cifrar) como el puerto 443 (tráfico cifrado TLS/SSL)
  • Nginx HTTP : este perfil solo abre el puerto 80 (tráfico web normal, sin cifrar)
  • Nginx HTTPS : este perfil solo abre el puerto 443 (tráfico cifrado TLS/SSL)

Se recomienda habilitar el perfil más restrictivo que permita el tráfico configurado. Por ahora, solo necesitamos permitir el tráfico en el puerto 80.

Puedes habilitar esto escribiendo:

sudo ufw allow 'Nginx HTTP'

Puedes verificar el cambio escribiendo:

sudo ufw status

La salida indicará qué tráfico HTTP está permitido:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Paso 3 – Comprobación de su servidor web

Al finalizar la instalación, Ubuntu 22.04 inicia Nginx. El servidor web ya debería estar en funcionamiento.

Podemos verificar con el systemdsistema de inicio para asegurarnos de que el servicio se esté ejecutando escribiendo:

systemctl status nginx

Output● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2022-03-01 16:08:19 UTC; 3 days ago
     Docs: man:nginx(8)
 Main PID: 2369 (nginx)
    Tasks: 2 (limit: 1153)
   Memory: 3.5M
   CGroup: /system.slice/nginx.service
           ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─2380 nginx: worker process

Como se confirma en este punto, el servicio se ha iniciado correctamente. Sin embargo, la mejor manera de comprobarlo es solicitar una página a Nginx.

Puede acceder a la página de inicio predeterminada de Nginx para confirmar que el software funciona correctamente navegando a la dirección IP de su servidor. Si desconoce la dirección IP de su servidor, puede encontrarla con la herramienta icanhazip.com , que le proporcionará su dirección IP pública, tal como la recibió de otra ubicación en internet:

curl -4 icanhazip.com

Cuando tenga la dirección IP de su servidor, ingrésela en la barra de direcciones de su navegador:

http://your_server_ip

Debería recibir la página de destino predeterminada de Nginx:

Página predeterminada de Nginx

Si está en esta página, su servidor está funcionando correctamente y está listo para ser administrado.

Paso 4: Gestión del proceso Nginx

Ahora que tiene su servidor web en funcionamiento, repasemos algunos comandos de administración básicos.

Para detener su servidor web, escriba:

sudo systemctl stop nginx

Para iniciar el servidor web cuando esté detenido, escriba:

sudo systemctl start nginx

Para detener y luego iniciar nuevamente el servicio, escriba:

sudo systemctl restart nginx

Si solo realiza cambios de configuración, Nginx suele poder recargarse sin perder conexiones. Para ello, escriba:

sudo systemctl reload nginx

De forma predeterminada, Nginx está configurado para iniciarse automáticamente al arrancar el servidor. Si no desea que esto sea así, puede desactivar este comportamiento escribiendo:

sudo systemctl disable nginx

Para volver a habilitar el servicio para que se inicie durante el arranque, puede escribir:

sudo systemctl enable nginx

Ahora ha aprendido los comandos de administración básicos y debería estar listo para configurar el sitio para alojar más de un dominio.

Al usar el servidor web Nginx, se pueden usar bloques de servidor (similares a los hosts virtuales de Apache) para encapsular los detalles de configuración y alojar más de un dominio desde un solo servidor. Configuraremos un dominio llamado “your_domain” , pero deberá reemplazarlo por su propio nombre de dominio .

Nginx en Ubuntu 22.04 tiene un bloque de servidor habilitado por defecto, configurado para servir documentos desde un directorio en /var/www/html. Si bien esto funciona bien para un solo sitio, puede resultar complicado si se alojan varios. En lugar de modificar /var/www/html, crearemos una estructura de directorios dentro /var/wwwde nuestro sitio your_domain/var/www/html , dejando este como directorio predeterminado para servir si una solicitud de cliente no coincide con ningún otro sitio.

Cree el directorio para su_dominio de la siguiente manera, utilizando la -pbandera para crear cualquier directorio padre necesario:

sudo mkdir -p /var/www/your_domain/html

A continuación, asigne la propiedad del directorio con la $USERvariable de entorno:

sudo chown -R $USER:$USER /var/www/your_domain/html

Los permisos de sus raíces web deberían ser correctos si no ha modificado el umaskvalor que establece los permisos de archivo predeterminados. Para garantizar que sus permisos sean correctos y permitir al propietario leer, escribir y ejecutar los archivos, mientras que solo otorga permisos de lectura y ejecución a grupos y otros, puede introducir el siguiente comando:

sudo chmod -R 755 /var/www/your_domain

A continuación, crea una index.htmlpágina de muestra utilizando nanotu editor favorito:

nano /var/www/your_domain/html/index.html

Dentro, agregue el siguiente HTML de muestra: /var/www/tu_dominio/html/index.html

<html>
    <head>
        <title>Welcome to your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

Guarde y cierre el archivo presionando Ctrl+Xpara salir, luego cuando se le solicite guardar Yy luego Enter.

Para que Nginx muestre este contenido, es necesario crear un bloque de servidor con las directivas correctas. En lugar de modificar directamente el archivo de configuración predeterminado, crearemos uno nuevo en :/etc/nginx/sites-available/your_domain

sudo nano /etc/nginx/sites-available/your_domain

Pegue el siguiente bloque de configuración, que es similar al predeterminado, pero actualizado para nuestro nuevo directorio y nombre de dominio: /etc/nginx/sites-available/su_dominio

server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

        location / {
                try_files $uri $uri/ =404;
        }
}

Tenga en cuenta que hemos actualizado la rootconfiguración de nuestro nuevo directorio y server_namede nuestro nombre de dominio.

A continuación, habilitemos el archivo creando un enlace desde él al sites-enableddirectorio que Nginx lee durante el inicio:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Nota: Nginx utiliza una práctica común llamada enlaces simbólicos (symlinks) para rastrear cuáles de tus bloques de servidor están habilitados. Crear un enlace simbólico es como crear un acceso directo en el disco, de modo que puedas eliminarlo posteriormente del sites-enableddirectorio, conservando el bloque de servidor sites-availablesi deseas habilitarlo.

Ahora hay dos bloques de servidor habilitados y configurados para responder a solicitudes según sus directivas listeny server_name(puede leer más sobre cómo Nginx procesa estas directivas aquí ):

  • your_domain:Responderá a las solicitudes de your_domainy www.your_domain.
  • default:Responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.

Para evitar un posible problema de memoria en el contenedor hash que puede surgir al añadir nombres de servidor adicionales, es necesario ajustar un único valor en el /etc/nginx/nginx.confarchivo. Abra el archivo:

sudo nano /etc/nginx/nginx.conf

Busca la server_names_hash_bucket_sizedirectiva y elimina el #símbolo para descomentar la línea. Si usas nano, puedes buscar rápidamente palabras en el archivo presionando CTRLy w.

Nota: Comentar líneas de código, generalmente colocándolas #al principio, es otra forma de deshabilitarlas sin necesidad de eliminarlas. Muchos archivos de configuración incluyen varias opciones comentadas para que puedan habilitarse o deshabilitarse alternando entre el código activo y la documentación. /etc/nginx/nginx.conf

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Guarde y cierre el archivo cuando haya terminado.

A continuación, realice una prueba para asegurarse de que no haya errores de sintaxis en ninguno de sus archivos Nginx:

sudo nginx -t

Si no hay ningún problema, reinicie Nginx para habilitar los cambios:

sudo systemctl restart nginx

Nginx ya debería servir tu nombre de dominio. Puedes comprobarlo navegando a [nombre del dominio] , donde deberías ver algo como esto:http://your_domain

Primer bloque de servidor de Nginx

Paso 6: Familiarizarse con los archivos y directorios importantes de Nginx

Ahora que sabe cómo administrar el servicio Nginx, debería tomarse unos minutos para familiarizarse con algunos directorios y archivos importantes.

Contenido

  • /var/www/htmlEl contenido web, que por defecto solo consiste en la página predeterminada de Nginx que vio anteriormente, se sirve desde el /var/www/htmldirectorio. Esto se puede cambiar modificando los archivos de configuración de Nginx.

Configuración del servidor

  • /etc/nginxEl directorio de configuración de Nginx. Todos los archivos de configuración de Nginx se encuentran aquí.
  • /etc/nginx/nginx.confEl archivo de configuración principal de Nginx. Se puede modificar para realizar cambios en la configuración global de Nginx.
  • /etc/nginx/sites-available/El directorio donde se almacenan los bloques de servidor por sitio. Nginx no usará los archivos de configuración que se encuentran en este directorio a menos que estén vinculados a él sites-enabled. Normalmente, toda la configuración de los bloques de servidor se realiza en este directorio y luego se habilita mediante la vinculación al otro directorio.
  • /etc/nginx/sites-enabled/El directorio donde se almacenan los bloques de servidor habilitados por sitio. Normalmente, se crean mediante enlaces a los archivos de configuración que se encuentran en el sites-availabledirectorio.
  • /etc/nginx/snippetsEste directorio contiene fragmentos de configuración que pueden incluirse en otras partes de la configuración de Nginx. Los segmentos de configuración potencialmente repetibles son ideales para refactorizarlos en fragmentos.

Registros del servidor

  • /var/log/nginx/access.log:Cada solicitud a su servidor web se registra en este archivo de registro a menos que Nginx esté configurado para hacer lo contrario.
  • /var/log/nginx/error.log:Cualquier error de Nginx se registrará en este registro.

Conclusión

Ahora que tiene su servidor web instalado, tiene muchas opciones para el tipo de contenido que desea servir y las tecnologías que desea utilizar para crear una experiencia más rica.

Si desea desarrollar una pila de aplicaciones más completa, consulte el artículo Cómo instalar Linux, Nginx, MySQL, PHP (pila LEMP) en Ubuntu 22.04 .

Para configurar HTTPS para su nombre de dominio con un certificado SSL gratuito usando Let’s Encrypt , debe continuar con Cómo proteger Nginx con Let’s Encrypt en Ubuntu 22.04 .

Stephen Dove
Comments

March 17, 2025

Cómo usar SSH para conectarse a un servidor remoto

Introducción

Una herramienta esencial que debe dominar un administrador de sistemas es SSH.

SSH, o Secure Shell , es un protocolo utilizado para acceder de forma segura a sistemas remotos. Es la forma más común de acceder a servidores Linux remotos.

En esta guía, analizaremos cómo usar SSH para conectarse a un sistema remoto.

Sintaxis básica

Para conectarnos a un sistema remoto usando SSH, usaremos el sshcomando.

Si usa Windows, necesitará instalar una versión de OpenSSH para poder acceder sshdesde una terminal. Si prefiere trabajar con PowerShell, puede consultar la documentación de Microsoft para añadir OpenSSH a PowerShell. Si prefiere disponer de un entorno Linux completo, puede configurar WSL (el Subsistema de Windows para Linux), que se incluirá sshpor defecto. Finalmente, como tercera opción ligera, puede instalar Git para Windows , que proporciona un entorno de terminal bash nativo de Windows que incluye el sshcomando. Todas estas opciones son compatibles, y la que elija dependerá de sus preferencias.

Si estás usando Mac o Linux, ya tendrás el sshcomando disponible en tu terminal.

La forma más directa del comando es:

ssh remote_host

En este ejemplo se utiliza la remote_hostdirección IP o el nombre de dominio al que intenta conectarse.

Este comando asume que su nombre de usuario en el sistema remoto es el mismo que su nombre de usuario en su sistema local.

Si su nombre de usuario es diferente en el sistema remoto, puede especificarlo utilizando esta sintaxis:

ssh remote_username@remote_host

Una vez conectado al servidor, es posible que se le solicite verificar su identidad mediante una contraseña. Más adelante, explicaremos cómo generar claves para usarlas en lugar de contraseñas.

Para salir de la sesión ssh y regresar a su sesión de shell local, escriba:

exit

¿Cómo funciona SSH?

SSH funciona conectando un programa cliente a un servidor ssh , llamado sshd.

En la sección anterior, sshse encontraba el programa cliente. El servidor SSH ya se estaba ejecutando en el remote_hostservidor que especificamos.

En casi todos los entornos Linux, el sshdservidor debería iniciarse automáticamente. Si no se ejecuta por algún motivo, es posible que necesite acceder temporalmente a su servidor mediante una consola web o una consola serie local.

El proceso necesario para iniciar un servidor ssh depende de la distribución de Linux que esté utilizando.

En Ubuntu, puedes iniciar el servidor ssh escribiendo:

sudo systemctl start ssh

Esto debería iniciar el servidor sshd y luego podrás iniciar sesión de forma remota.

Cómo configurar SSH

Cuando cambia la configuración de SSH, está cambiando la configuración del sshdservidor.

En Ubuntu, el sshdarchivo de configuración principal se encuentra en /etc/ssh/sshd_config.

Haga una copia de seguridad de la versión actual de este archivo antes de editarlo:

sudo cp /etc/ssh/sshd_config{,.bak}

Ábrelo usando nanotu editor de texto favorito:

sudo nano /etc/ssh/sshd_config

Le recomendamos no modificar la mayoría de las opciones de este archivo. Sin embargo, hay algunas que podría considerar: /etc/ssh/sshd_config

Port 22

La declaración del puerto especifica en qué puerto el sshdservidor escuchará las conexiones. Por defecto, es 22. Probablemente debería dejar esta configuración sin modificar a menos que tenga razones específicas para hacerlo. Si cambia de puerto, le mostraremos cómo conectarse al nuevo puerto más adelante. /etc/ssh/sshd_config

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

Las declaraciones de clave de host especifican dónde buscar las claves de host globales. Más adelante explicaremos qué es una clave de host. /etc/ssh/sshd_config

SyslogFacility AUTH
LogLevel INFO

Estos dos elementos indican el nivel de registro que debe realizarse.

Si tiene dificultades con SSH, aumentar la cantidad de registros puede ser una buena manera de descubrir cuál es el problema. /etc/ssh/sshd_config

LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

Estos parámetros especifican parte de la información de inicio de sesión.

LoginGraceTimeEspecifica cuántos segundos se debe mantener activa la conexión sin iniciar sesión correctamente.

Puede ser una buena idea establecer este tiempo apenas un poco más alto que el tiempo que le toma iniciar sesión normalmente.

PermitRootLoginSelecciona si el usuario root puede iniciar sesión.

En la mayoría de los casos, esto se debe cambiar nocuando haya creado una cuenta de usuario que tenga acceso a privilegios elevados (a través de suo sudo) y pueda iniciar sesión a través de SSH para minimizar el riesgo de que alguien obtenga acceso root a su servidor.

strictModeses una protección de seguridad que rechazará un intento de inicio de sesión si los archivos de autenticación son legibles por todos.

Esto evita intentos de inicio de sesión cuando los archivos de configuración no son seguros. /etc/ssh/sshd_config

X11Forwarding yes
X11DisplayOffset 10

Estos parámetros configuran una función llamada Reenvío X11 . Esto permite ver la interfaz gráfica de usuario (GUI) de un sistema remoto en el sistema local.

Esta opción debe estar habilitada en el servidor y entregada al cliente SSH durante la conexión con la -Xopción.

Después de realizar los cambios, guarde y cierre el archivo. Si usa nano, presione Ctrl+X, luego, cuando se le solicite, Yy luego Enter.

Si cambió alguna configuración en /etc/ssh/sshd_config, asegúrese de volver a cargar su sshdservidor para implementar las modificaciones:

sudo systemctl reload ssh

Debes probar exhaustivamente tus cambios para asegurarte de que funcionen como esperas.

Sería buena idea tener abiertas varias sesiones de terminal mientras se realizan cambios. Esto le permitirá revertir la configuración si es necesario sin bloquearse.

Cómo iniciar sesión en SSH con claves

Si bien es útil poder iniciar sesión en un sistema remoto usando contraseñas, es más rápido y seguro configurar la autenticación basada en claves .

¿Cómo funciona la autenticación basada en clave?

La autenticación basada en clave funciona mediante la creación de un par de claves: una clave privada y una clave pública .

La clave privada se encuentra en la máquina del cliente y está protegida y se mantiene en secreto.

La clave pública se puede entregar a cualquier persona o colocar en cualquier servidor al que desee acceder.

Cuando intenta conectarse utilizando un par de claves, el servidor utilizará la clave pública para crear un mensaje para la computadora cliente que sólo se puede leer con la clave privada.

Luego, la computadora cliente envía la respuesta apropiada al servidor, que le indicará que el cliente es legítimo.

Este proceso se realiza automáticamente después de configurar sus claves.

Cómo crear claves SSH

Las claves SSH deben generarse en el ordenador desde el que desea iniciar sesión . Normalmente, este es su equipo local.

Introduzca lo siguiente en la línea de comando:

ssh-keygen -t rsa

Es posible que se le solicite que establezca una contraseña para los archivos de claves, pero esto es poco común, y debe presionar Enter durante las indicaciones para aceptar los valores predeterminados. Sus claves se crearán en ~/.ssh/id_rsa.pub y ~/.ssh/id_rsa .

Cambie al .sshdirectorio escribiendo:

cd ~/.ssh

Mira los permisos de los archivos:

ls -l
Output-rw-r--r-- 1 demo demo  807 Sep  9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep  9 23:13 id_rsa
-rw-r--r-- 1 demo demo  396 Sep  9 23:13 id_rsa.pub

Como puede ver, el id_rsaarchivo solo es legible y escribible para el propietario. Esto ayuda a mantenerlo en secreto.

id_rsa.pubSin embargo, el archivo se puede compartir y tiene los permisos adecuados para esta actividad.

Cómo transferir su clave pública al servidor

Si actualmente tiene acceso a un servidor mediante contraseña, puede copiar su clave pública emitiendo este comando:

ssh-copy-id remote_host

Esto iniciará una sesión SSH. Tras introducir su contraseña, se copiará su clave pública al archivo de claves autorizadas del servidor, lo que le permitirá iniciar sesión sin contraseña la próxima vez.

Opciones del lado del cliente

Hay una serie de indicadores opcionales que puedes proporcionar al conectarte a través de SSH.

Algunos de estos pueden ser necesarios para que coincidan con la sshdconfiguración del host remoto.

Por ejemplo, si cambió el número de puerto en su sshdconfiguración, deberá hacer coincidir ese puerto en el lado del cliente escribiendo:

ssh -p port_number remote_host

Nota: Cambiar el puerto SSH es una forma razonable de proporcionar seguridad mediante la opacidad . Si permite conexiones SSH a una implementación de servidor ampliamente conocida en el puerto 22de forma normal y tiene habilitada la autenticación con contraseña, es probable que sufra numerosos intentos de inicio de sesión automatizados. Usar exclusivamente la autenticación basada en clave y ejecutar SSH en un puerto no estándar no es la solución de seguridad más compleja, pero debería minimizarlos.

Si solo desea ejecutar un único comando en un sistema remoto, puede especificarlo después del host de la siguiente manera:

ssh remote_host command_to_run

Se conectará a la máquina remota, se autenticará y se ejecutará el comando.

Como dijimos antes, si el reenvío X11 está habilitado en ambas computadoras, puedes acceder a esa funcionalidad escribiendo:

ssh -X remote_host

Si tiene las herramientas adecuadas en su computadora, los programas GUI que use en el sistema remoto ahora abrirán su ventana en su sistema local.

Deshabilitar la autenticación de contraseña

Si ha creado claves SSH, puede mejorar la seguridad de su servidor desactivando la autenticación solo con contraseña. Además de la consola, la única forma de iniciar sesión en su servidor será mediante la clave privada que coincide con la clave pública que haya instalado.

Advertencia: Antes de continuar con este paso, asegúrese de haber instalado una clave pública en su servidor. De lo contrario, se bloqueará su acceso.

Como root o usuario con privilegios sudo, abra el sshdarchivo de configuración:

sudo nano /etc/ssh/sshd_config

Localice la línea que dice Password Authenticationy descomentela eliminando el #. Luego puede cambiar su valor a no: /etc/ssh/sshd_config

PasswordAuthentication no

Dos configuraciones más que no deberían necesitar modificarse (siempre que no haya modificado este archivo previamente) son PubkeyAuthenticationy ChallengeResponseAuthentication. Están configuradas por defecto y deberían tener el siguiente formato: /etc/ssh/sshd_config

PubkeyAuthentication yes
ChallengeResponseAuthentication no

Después de realizar los cambios, guarde y cierre el archivo.

Ahora puedes recargar el demonio SSH:

sudo systemctl reload ssh

La autenticación de contraseña ahora debe estar deshabilitada y su servidor debe ser accesible solo a través de la autenticación de clave SSH.

Conclusión

Aprender a usar SSH te beneficiará enormemente en tus futuras iniciativas de computación en la nube. A medida que uses las distintas opciones, descubrirás funciones más avanzadas que te facilitarán la vida. SSH se ha mantenido popular gracias a su seguridad, ligereza y utilidad en diversas situaciones.

A continuación, es posible que desee obtener información sobre cómo trabajar con SFTP para realizar transferencias de archivos mediante la línea de comandos.

Stephen Dove
Comments

March 17, 2025

Cómo instalar y proteger phpMyAdmin en Ubuntu

Introducción

Si bien muchos usuarios necesitan la funcionalidad de un sistema de administración de bases de datos como MySQL, es posible que no se sientan cómodos interactuando con el sistema únicamente desde el indicador de MySQL.

phpMyAdmin se creó para que los usuarios puedan interactuar con MySQL a través de una interfaz web. En esta guía, explicaremos cómo instalar y proteger phpMyAdmin para que pueda usarlo de forma segura para administrar sus bases de datos en un sistema Ubuntu.

Cómo instalar y proteger phpMyAdmin en Ubuntu

  1. Instalación de phpMyAdmin
  2. Ajuste de la autenticación y los privilegios del usuario
  3. Cómo proteger su instancia de phpMyAdmin

Prerrequisitos

Para completar esta guía, necesitarás:

  • Un servidor Ubuntu. Este servidor debe tener un usuario no root con privilegios administrativos y un firewall configurado con [nombre del servidor] ufw. Para configurarlo, siga nuestra guía de configuración inicial de servidores para Ubuntu .
  • Una pila LAMP (Linux, Apache, MySQL y PHP) instalada en su servidor Ubuntu. Si aún no lo ha hecho, puede seguir esta guía sobre cómo instalar una pila LAMP en Ubuntu .

Además, hay consideraciones de seguridad importantes al utilizar software como phpMyAdmin, ya que:

  • Se comunica directamente con su instalación de MySQL
  • Maneja la autenticación usando credenciales MySQL
  • Ejecuta y devuelve resultados para consultas SQL arbitrarias

Por estos motivos, y debido a que es una aplicación PHP ampliamente utilizada que frecuentemente es blanco de ataques, nunca debe ejecutar phpMyAdmin en sistemas remotos a través de una conexión HTTP simple.

Si no tiene un dominio configurado con un certificado SSL/TLS, puede seguir esta guía sobre cómo proteger Apache con Let’s Encrypt en Ubuntu . Para ello, deberá registrar un nombre de dominio , crear registros DNS para su servidor y configurar un host virtual Apache .

Paso 1 — Instalación de phpMyAdmin

Puede utilizar APT para instalar phpMyAdmin desde los repositorios predeterminados de Ubuntu.

Como usuario sudo no root, actualice el índice de paquetes de su servidor si no lo ha hecho recientemente:

sudo apt update

A continuación, puede instalar el phpmyadminpaquete. Además, la documentación oficial recomienda instalar algunas extensiones PHP en su servidor para habilitar ciertas funcionalidades y mejorar el rendimiento.

Si siguió el tutorial de la pila LAMP ( requisitos) , varios de estos módulos se habrán instalado junto con el phppaquete. Sin embargo, se recomienda instalar también estos paquetes:

  • php-mbstring:Un módulo para gestionar cadenas que no sean ASCII y convertir cadenas a diferentes codificaciones
  • php-zip:Esta extensión admite la carga de .ziparchivos a phpMyAdmin
  • php-gd:Habilita la compatibilidad con la biblioteca de gráficos GD
  • php-json:Proporciona a PHP soporte para la serialización JSON
  • php-curl: Permite que PHP interactúe con diferentes tipos de servidores utilizando diferentes protocolos

Ejecute el siguiente comando para instalar estos paquetes en su sistema. Tenga en cuenta que el proceso de instalación requiere que realice algunas acciones para configurar phpMyAdmin correctamente. A continuación, explicaremos estas opciones:

sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Estas son las opciones que debes elegir cuando se te solicite para configurar tu instalación correctamente:

  • Para la selección del servidor, elijaapache2

Advertencia: Cuando aparece el mensaje, “apache2” aparece resaltado, pero no seleccionado. Si no pulsa SPACEpara seleccionar Apache, el instalador no moverá los archivos necesarios durante la instalación. Pulse SPACE, TABy luego ENTERpara seleccionar Apache.

  • Seleccione Yescuando se le pregunte si desea utilizar dbconfig-commonpara configurar la base de datos
  • Luego se le pedirá que elija y confirme una contraseña de aplicación MySQL para phpMyAdmin.

Nota : Si instaló MySQL siguiendo el paso 2 del tutorial de la pila LAMP , es posible que haya decidido habilitar el complemento Validar contraseña. Al momento de escribir este artículo, habilitar este componente generará un error al intentar establecer una contraseña para el usuario phpmyadmin :

Error de validación de contraseña de phpMyAdmin

Para solucionar esto, seleccione la opción de cancelar para detener el proceso de instalación. A continuación, abra el símbolo del sistema de MySQL:

sudo mysql

O bien, si habilitó la autenticación de contraseña para el usuario root de MySQL, ejecute este comando y luego ingrese su contraseña cuando se le solicite:

mysql -u root -p

Desde el símbolo del sistema, ejecute el siguiente comando para deshabilitar el componente Validar contraseña. Tenga en cuenta que esto no lo desinstalará, sino que simplemente impedirá que se cargue en su servidor MySQL:

UNINSTALL COMPONENT "file://component_validate_password";

A continuación, puedes cerrar el cliente MySQL:

exit

Luego intenta instalar el phpmyadminpaquete nuevamente y funcionará como se espera:

sudo apt install phpmyadmin

Una vez instalado phpMyAdmin, puede abrir el indicador de MySQL nuevamente con sudo mysqlo mysql -u root -py luego ejecutar el siguiente comando para volver a habilitar el componente Validar contraseña:

INSTALL COMPONENT "file://component_validate_password";

El proceso de instalación agrega el archivo de configuración de Apache de phpMyAdmin al /etc/apache2/conf-enabled/directorio, donde se lee automáticamente. Para finalizar la configuración de Apache y PHP para que funcionen con phpMyAdmin, la única tarea pendiente en esta sección del tutorial es habilitar explícitamente la mbstringextensión de PHP, lo cual puede hacer escribiendo:

sudo phpenmod mbstring

Luego reinicie Apache para que sus cambios sean reconocidos:

sudo systemctl restart apache2

phpMyAdmin ya está instalado y configurado para funcionar con Apache. Sin embargo, antes de iniciar sesión y empezar a interactuar con sus bases de datos MySQL, deberá asegurarse de que sus usuarios MySQL tengan los privilegios necesarios para interactuar con el programa.

Paso 2: Ajuste de la autenticación y los privilegios del usuario

Al instalar phpMyAdmin en su servidor, se crea automáticamente un usuario de base de datos llamado phpmyadmin , que realiza ciertas tareas básicas del programa. En lugar de iniciar sesión con este usuario y la contraseña administrativa que configuró durante la instalación, se recomienda iniciar sesión como usuario root de MySQL o como un usuario dedicado a administrar bases de datos a través de la interfaz de phpMyAdmin.

Configuración del acceso con contraseña para la cuenta raíz de MySQL

En sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se autentica mediante el auth_socketcomplemento por defecto, en lugar de una contraseña. Esto ofrece mayor seguridad y usabilidad en muchos casos, pero también puede complicar las cosas cuando se necesita permitir que un programa externo, como phpMyAdmin, acceda al usuario.

Para iniciar sesión en phpMyAdmin como usuario root de MySQL, deberá cambiar su método de autenticación auth_socketa uno con contraseña, si aún no lo ha hecho. Para ello, abra el prompt de MySQL desde su terminal:

sudo mysql

A continuación, verifique qué método de autenticación utiliza cada una de sus cuentas de usuario de MySQL con el siguiente comando:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Este ejemplo de salida indica que el usuario root se autentica mediante el auth_socketcomplemento. Para configurar la cuenta root para que se autentique con una contraseña, ejecute el siguiente ALTER USERcomando. Asegúrese de usar passworduna contraseña segura de su elección:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

NotaALTER USER : La declaración anterior establece que el usuario root de MySQL se autentique con el caching_sha2_passwordcomplemento. Según la documentación oficial de MySQL , caching_sha2_passwordes el complemento de autenticación preferido de MySQL, ya que proporciona un cifrado de contraseñas más seguro que el anterior, pero aún ampliamente utilizado, mysql_native_password.

Sin embargo, algunas versiones de PHP no funcionan correctamente con [ nombre de usuario caching_sha2_password]. PHP ha informado que este problema se solucionó a partir de PHP 7.4 , pero si encuentra un error al intentar iniciar sesión en phpMyAdmin más adelante, le recomendamos configurar root para que se autentique con mysql_native_password[nombre de usuario].

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Luego, verifique nuevamente los métodos de autenticación empleados por cada uno de sus usuarios para confirmar que root ya no se autentica usando el auth_socketcomplemento:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Output+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Este resultado muestra que el usuario root se autenticará con una contraseña. Ahora puede iniciar sesión en la interfaz de phpMyAdmin como usuario root con la contraseña que haya configurado aquí.

Configuración del acceso con contraseña para un usuario dedicado de MySQL

Como alternativa, algunos usuarios podrían encontrar más conveniente conectarse a phpMyAdmin con un usuario dedicado. Para ello, abra de nuevo la consola MySQL:

sudo mysql

Si tiene habilitada la autenticación de contraseña para su usuario root , como se describe en la sección anterior, deberá ejecutar el siguiente comando e ingresar su contraseña cuando se le solicite para poder conectarse:

mysql -u root -p

Desde allí, crea un nuevo usuario y asígnale una contraseña segura:

CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Nota : Nuevamente, dependiendo de qué versión de PHP tenga instalada, es posible que desee configurar su nuevo usuario para que se autentique con mysql_native_passworden lugar de caching_sha2_password:

ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Luego, otorgue al nuevo usuario los privilegios correspondientes. Por ejemplo, podría otorgarle privilegios para todas las tablas de la base de datos, así como la posibilidad de agregar, modificar y eliminar privilegios de usuario, con este comando:

GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

A continuación, salga del shell MySQL:

exit

Ahora puede acceder a la interfaz web visitando el nombre de dominio o la dirección IP pública de su servidor seguido de /phpmyadmin:

https://your_domain_or_IP/phpmyadmin
Pantalla de inicio de sesión de phpMyAdmin

Inicie sesión en la interfaz, ya sea como root o con el nuevo nombre de usuario y contraseña que acaba de configurar.

Cuando inicie sesión, será llevado a la interfaz de usuario de phpMyAdmin:

Interfaz de usuario de phpMyAdmin

Ahora que puede conectarse e interactuar con phpMyAdmin, todo lo que queda por hacer es reforzar la seguridad de su sistema para protegerlo de los atacantes.

Paso 3: Protección de su instancia phpMyAdmin

Debido a su ubicuidad, phpMyAdmin es un objetivo común para los atacantes, por lo que se recomienda extremar las precauciones para evitar el acceso no autorizado. Una forma de lograrlo es colocar una puerta de enlace frente a toda la aplicación mediante las funcionalidades integradas de .htaccessautenticación y autorización de Apache.

Para ello, primero debe habilitar el uso de .htaccessanulaciones de archivos editando el archivo de configuración de Apache de su instalación de phpMyAdmin.

Utilice su editor de texto preferido para editar el phpmyadmin.confarchivo ubicado en el directorio de configuración de Apache. Aquí usaremos nano:

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Agregue una AllowOverride Alldirectiva dentro de la <Directory /usr/share/phpmyadmin>sección del archivo de configuración, como esta: /etc/apache2/conf-available/phpmyadmin.conf

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

Una vez agregada esta línea, guarde y cierre el archivo. Si solía nanoeditarlo, hágalo presionando CTRL + X, Yy luego ENTER.

Para implementar los cambios realizados, reinicie Apache:

sudo systemctl restart apache2

Ahora que ha habilitado el uso de .htaccessarchivos para su aplicación, necesita crear uno para implementar cierta seguridad.

Para que esto funcione correctamente, el archivo debe crearse en el directorio de la aplicación. Puede crear el archivo necesario y abrirlo en su editor de texto con privilegios de root escribiendo:

sudo nano /usr/share/phpmyadmin/.htaccess

Dentro de este archivo, ingrese la siguiente información: /usr/share/phpmyadmin/.htaccess

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Esto es lo que significa cada una de estas líneas:

  • AuthType BasicEsta línea especifica el tipo de autenticación que se está implementando. Este tipo implementará la autenticación por contraseña mediante un archivo de contraseñas.
  • AuthName: Esto configura el mensaje del cuadro de diálogo de autenticación. Debe ser genérico para que usuarios no autorizados no obtengan información sobre lo que se está protegiendo.
  • AuthUserFile: Esto establece la ubicación del archivo de contraseñas que se usará para la autenticación. Debe estar fuera de los directorios que se sirven. Lo crearemos en breve.
  • Require valid-userEsto especifica que solo los usuarios autenticados deben tener acceso a este recurso. Esto es lo que impide el acceso de usuarios no autorizados.

Cuando haya terminado, guarde y cierre el archivo.

La ubicación que seleccionó para su archivo de contraseñas era [nombre del archivo] /etc/phpmyadmin/.htpasswd. Ahora puede crear este archivo y asignarle un usuario inicial con la htpasswdutilidad:

sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

Se le pedirá que seleccione y confirme una contraseña para el usuario que está creando. Después, se creará el archivo con la contraseña cifrada que ingresó.

Si deseas ingresar un usuario adicional, debes hacerlo sin la -cbandera, de la siguiente manera:

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Luego reinicie Apache para que .htaccessla autenticación surta efecto:

sudo systemctl restart apache2

Ahora, cuando acceda a su subdirectorio phpMyAdmin, se le solicitará el nombre de cuenta y la contraseña adicionales que acaba de configurar:

https://domain_name_or_IP/phpmyadmin
Contraseña de Apache en phpMyAdmin

Tras introducir la autenticación de Apache, accederá a la página de autenticación habitual de phpMyAdmin para introducir sus credenciales de MySQL. Al añadir un conjunto adicional de credenciales que no sean de MySQL, proporciona a su base de datos una capa adicional de seguridad. Esto es conveniente, ya que phpMyAdmin ha sido vulnerable a amenazas de seguridad en el pasado.

Conclusión

Ya debería tener phpMyAdmin configurado y listo para usar en su servidor Ubuntu. Con esta interfaz, puede crear bases de datos, usuarios y tablas, así como realizar operaciones habituales como eliminar y modificar estructuras y datos.

Stephen Dove
Comments

March 17, 2025

Cómo proteger Apache con Let’s Encrypt en Ubuntu

Introducción

Let’s Encrypt es una autoridad de certificación (CA) que facilita la obtención e instalación de certificados TLS/SSL gratuitos , lo que permite el cifrado HTTPS en servidores web. Agiliza el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (si no todos) de los pasos necesarios. Actualmente, todo el proceso de obtención e instalación de un certificado está completamente automatizado tanto en Apache como en Nginx.

En esta guía, utilizará Certbot para obtener un certificado SSL gratuito para Apache en Ubuntu y se asegurará de que este certificado esté configurado para renovarse automáticamente.

Este tutorial utiliza un archivo de host virtual independiente en lugar del archivo de configuración predeterminado de Apache para configurar el sitio web que se protegerá con Let’s Encrypt. Recomendamos crear nuevos archivos de host virtual de Apache para cada dominio alojado en un servidor, ya que esto ayuda a evitar errores comunes y mantiene los archivos de configuración predeterminados como respaldo.

Cómo proteger Apache con Let’s Encrypt en Ubuntu

  1. Instalación de Certbot
  2. Comprobación de la configuración del host virtual Apache
  3. Permitir HTTPS a través del firewall
  4. Obtener un certificado SSL
  5. Verificación de la renovación automática de Certbot

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • Un servidor Ubuntu configurado con un usuario no root con sudoprivilegios administrativos y el firewall habilitado. Puede configurarlo siguiendo nuestro tutorial de configuración inicial de servidores para Ubuntu .
  • Un nombre de dominio completamente registrado. Este tutorial usará “your_domain” como ejemplo. Puedes comprar un nombre de dominio en Namecheap , obtener uno gratis en Freenom o usar el registrador de dominios que prefieras.
  • Los dos siguientes registros DNS están configurados para su servidor. Puede consultar esta introducción al DNS de IsnHosting para obtener más información sobre cómo agregarlos.
    • Un registro A que your_domainapunta a la dirección IP pública de su servidor.
    • Un registro A que apunta a la dirección IP pública de su servidor.www.your_domain
  • Apache se instaló siguiendo el procedimiento “Cómo instalar Apache en Ubuntu” . Asegúrate de tener un archivo de host virtual para tu dominio. Este tutorial se usará como ejemplo./etc/apache2/sites-available/your_domain.conf

Paso 1: Instalación de Certbot

Para obtener un certificado SSL con Let’s Encrypt, debe instalar el software Certbot en su servidor. Para ello, usará los repositorios de paquetes predeterminados de Ubuntu.

Primero, actualice el índice del paquete local:

sudo apt update

Necesita dos paquetes: certboty python3-certbot-apache. Este último es un complemento que integra Certbot con Apache, lo que permite automatizar la obtención de un certificado y la configuración de HTTPS en su servidor web con un solo comando:

sudo apt install certbot python3-certbot-apache

Se le pedirá que confirme la instalación presionando Yy luego ENTER.

Certbot ya está instalado en su servidor. En el siguiente paso, verificará la configuración de Apache para asegurarse de que su host virtual esté configurado correctamente. Esto garantizará que el certbotscript del cliente pueda detectar sus dominios y reconfigurar su servidor web para usar automáticamente el certificado SSL recién generado.

Paso 2: Comprobación de la configuración del host virtual Apache

Para obtener y configurar automáticamente el SSL para su servidor web, Certbot necesita encontrar el host virtual correcto en sus archivos de configuración de Apache. Los nombres de dominio de su servidor se obtendrán de las ServerNamedirectivas ServerAliasy definidas en su VirtualHostbloque de configuración.

Si siguió el paso de configuración del host virtual en el tutorial de instalación de Apache , debería tener un bloque VirtualHost configurado para su dominio con las directivas y también las directivas ya configuradas adecuadamente./etc/apache2/sites-available/your_domain.confServerNameServerAlias

Para confirmar que esto está configurado, abra el archivo de host virtual de su dominio usando nanosu editor de texto preferido:

sudo nano /etc/apache2/sites-available/your_domain.conf

Encuentre las líneas ServerNamey existentes ServerAlias. Deben estar listadas de la siguiente manera: /etc/apache2/sitios-disponibles/su_dominio.conf

...
ServerName your_domain
ServerAlias www.your_domain
...

Si ya tiene su ServerNamey ServerAliasconfigurado así, puede salir del editor de texto y continuar con el siguiente paso. Si la configuración actual de su host virtual no coincide con el ejemplo, actualícela. Si usa nano, puede salir pulsando CTRL+X, y luego Yy ENTERpara confirmar los cambios, si los hay. A continuación, ejecute el siguiente comando para validar los cambios:

sudo apache2ctl configtest

Debería recibir Syntax OKuna respuesta. Si recibe un error, vuelva a abrir el archivo del host virtual y compruebe si hay errores tipográficos o caracteres faltantes. Una vez que la sintaxis del archivo de configuración sea correcta, reinicie Apache para que los cambios surtan efecto:

sudo systemctl reload apache2

Con estos cambios, Certbot podrá encontrar el bloque VirtualHost correcto y actualizarlo.

A continuación, actualizará el firewall para permitir el tráfico HTTPS.

Paso 3: Permitir HTTPS a través del firewall

Si tiene habilitado el firewall UFW, como se recomienda en las guías de prerrequisitos, deberá ajustar la configuración para permitir el tráfico HTTPS. Tras la instalación, Apache registra diferentes perfiles de aplicación UFW. Puede usar el perfil completo de Apache para permitir el tráfico HTTP y HTTPS en su servidor.

Para verificar qué tipo de tráfico está permitido actualmente en su servidor, verifique el estado:

sudo ufw status

Si siguió una de nuestras guías de instalación de Apache, obtendrá un resultado similar al siguiente, lo que significa que 80actualmente solo se permite el tráfico HTTP en el puerto:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache                     ALLOW       Anywhere             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache (v6)                ALLOW       Anywhere (v6)

Para permitir el tráfico HTTPS, habilite el perfil “Apache Full”:

sudo ufw allow 'Apache Full'

A continuación elimine el perfil redundante “Apache”:

sudo ufw delete allow 'Apache'

Su estado se mostrará de la siguiente manera:

sudo ufw status

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)        

Ahora está listo para ejecutar Certbot y obtener sus certificados.

Paso 4: Obtener un certificado SSL

Certbot ofrece diversas maneras de obtener certificados SSL mediante complementos. El complemento de Apache se encargará de reconfigurar Apache y recargar la configuración cuando sea necesario. Para usar este complemento, ejecute lo siguiente:

sudo certbot --apache

Este script le solicitará que responda a una serie de preguntas para configurar su certificado SSL. Primero, le solicitará una dirección de correo electrónico válida. Esta dirección se utilizará para notificaciones de renovación y avisos de seguridad.

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): you@your_domain

Tras proporcionar una dirección de correo electrónico válida, pulse ENTERpara continuar. Se le pedirá que confirme si acepta los términos de servicio de Let’s Encrypt. Puede confirmar pulsando Yy luego ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

A continuación, se le preguntará si desea compartir su correo electrónico con la Electronic Frontier Foundation para recibir noticias e información. Si no desea suscribirse a su contenido, escriba N. De lo contrario, escriba Yy luego presione ENTERpara continuar.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

El siguiente paso le solicitará que informe a Certbot sobre los dominios para los que desea activar HTTPS. Los nombres de dominio se obtienen automáticamente de la configuración de su host virtual Apache, por lo que es importante asegurarse de tener la configuración correcta ServerNameen ServerAliassu host virtual. Si desea habilitar HTTPS para todos los nombres de dominio (recomendado), puede dejar el mensaje en blanco y presionar ENTERpara continuar. De lo contrario, seleccione los dominios para los que desea habilitar HTTPS indicando cada número correspondiente, separado por comas o espacios, y luego presione ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

Después de este paso, la configuración de Certbot habrá finalizado y se le presentarán las observaciones finales sobre su nuevo certificado y dónde ubicar los archivos generados:

OutputSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Su certificado ya está instalado y cargado en la configuración de Apache. Intente recargar su sitio web https://y observe el indicador de seguridad de su navegador. Debería indicar que su sitio está correctamente protegido, generalmente con un icono de candado en la barra de direcciones.

Puedes utilizar el Test de Servidor SSL Labs para verificar la calificación de tu certificado y obtener información detallada sobre el mismo, desde la perspectiva de un servicio externo.

En el siguiente y último paso, probará la función de renovación automática de Certbot, que garantiza que su certificado se renovará automáticamente antes de la fecha de vencimiento.

Paso 5: Verificación de la renovación automática de Certbot

Los certificados de Let’s Encrypt solo tienen una validez de noventa días. Esto anima a los usuarios a automatizar el proceso de renovación de sus certificados y a garantizar que los certificados mal utilizados o las claves robadas caduquen lo antes posible.

El certbotpaquete que instaló gestiona las renovaciones mediante un script de renovación /etc/cron.d, administrado por un systemctlservicio llamado certbot.timer. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado con un vencimiento dentro de los treinta días.

Para comprobar el estado de este servicio y asegurarse de que esté activo, ejecute lo siguiente:

sudo systemctl status certbot.timer

El resultado será similar al siguiente:

Output● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
     Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
    Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
   Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

Para probar el proceso de renovación, puede realizar un ensayo con certbot:

sudo certbot renew --dry-run

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for your_domain and www.your_domain.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/your_domain/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Si no recibe ningún error, ya está todo listo. Cuando sea necesario, Certbot renovará sus certificados y reiniciará Apache para que se apliquen los cambios. Si el proceso de renovación automática falla, Let’s Encrypt le enviará un mensaje al correo electrónico que especificó para avisarle cuando su certificado esté a punto de caducar.

Conclusión

En este tutorial, instaló el cliente Let’s Encrypt certbot, configuró e instaló un certificado SSL para su dominio y confirmó que el servicio de renovación automática de Certbot está activo en [nombre del dominio] systemctl. Si tiene más preguntas sobre el uso de Certbot, su documentación es un buen punto de partida.

Stephen Dove
Comments

March 17, 2025

Cómo ejecutar un script de Python en Ubuntu

Introducción

A medida que el desarrollo de herramientas basadas en IA se vuelve cada vez más popular entre los desarrolladores, Python se ha consolidado como uno de los mejores lenguajes de programación para IA gracias a su simplicidad, legibilidad y amplias bibliotecas como TensorFlow, PyTorch y scikit-learn. Estas bibliotecas proporcionan potentes herramientas para el aprendizaje automático, el análisis de datos y las redes neuronales, lo que convierte a Python en una excelente opción para proyectos de IA y aprendizaje automático.

Considerando el papel central de Python en la IA, es importante aprender a ejecutar scripts de Python eficazmente. Este tutorial está diseñado para ayudarte a empezar a ejecutar scripts sencillos de Python en una máquina Ubuntu, sentando las bases para scripts de IA más avanzados.

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • Un servidor con Ubuntu, un usuario no root con privilegios de sudo y un firewall activo. Para obtener instrucciones sobre cómo configurarlo, seleccione su distribución de esta lista y siga nuestra guía de configuración inicial del servidor. Asegúrese de trabajar con una versión compatible de Ubuntu.
  • Familiarización con la línea de comandos de Linux. Para una introducción o un repaso de la línea de comandos, puede consultar esta guía sobre la línea de comandos de Linux .
  • Antes de comenzar, ejecute sudo apt-get updatela terminal de Ubuntu para asegurarse de que su sistema tenga las últimas versiones y actualizaciones de seguridad para el software disponible en los repositorios configurados en su sistema.

Estas instrucciones son válidas para las versiones más recientes de Ubuntu: Ubuntu 24.04, Ubuntu 22.04 y Ubuntu 20.04. Si usa una versión de Ubuntu anterior a la 18.04, le recomendamos actualizar a una versión más reciente, ya que Ubuntu ya no ofrece soporte para estas versiones. Esta colección de guías le ayudará a actualizar su versión de Ubuntu.

Ejecutar un script de Python en Ubuntu

  • Configurar el entorno de Python
  • Crear un script de Python
  • Instalar los paquetes necesarios
  • Ejecutar scripts de Python
  • Hacer que el script sea ejecutable

Paso 1: Configuración del entorno de Python

Ubuntu 24.04 incluye Python 3 por defecto. Abra la terminal y ejecute el siguiente comando para comprobar la instalación de Python 3:

python3 --version

Si Python 3 ya está instalado en su equipo, este comando devolverá la versión actual de la instalación de Python 3. Si no está instalado, puede ejecutar el siguiente comando para obtener la instalación de Python 3:

sudo apt install python3

A continuación, debe instalar el pipinstalador de paquetes en su sistema:

sudo apt install python3-pip

Paso 2: Crear un script de Python

El siguiente paso es escribir el código Python que quieres ejecutar. Para crear un nuevo script, navega al directorio que prefieras:

cd ~/path-to-your-script-directory

Una vez dentro del directorio, necesitas crear un nuevo archivo. En la terminal, ejecuta el siguiente comando:

nano demo_ai.py

Se abrirá un editor de texto en blanco. Escribe tu lógica aquí o copia el siguiente código:

from sklearn.tree import DecisionTreeClassifier
import numpy as np
import random

# Generate sample data
x = np.array([[i] for i in range(1, 21)])  # Numbers 1 to 20
y = np.array([i % 2 for i in range(1, 21)])  # 0 for even, 1 for odd

# Create and train the model
model = DecisionTreeClassifier()
model.fit(x, y)

# Function to predict if a number is odd or even
def predict_odd_even(number):
    prediction = model.predict([[number]])
    return "Odd" if prediction[0] == 1 else "Even"

if __name__ == "__main__":
    num = random.randint(0, 20)
    result = predict_odd_even(num)
    print(f"The number {num} is an {result} number.")

Este script crea un clasificador de árbol de decisión simple usando la scikit-learnbiblioteca. Entrena el modelo para reconocer números pares e impares basándose en los datos de muestra generados aleatoriamente. A continuación, realiza una predicción basada en su aprendizaje para el número dado.

Guardar y salir del editor de texto.

Paso 3: Instalar los paquetes necesarios

En este paso, instalará los paquetes que utilizó en el script anterior.

El primer paquete que necesitas instalar es NumPy . Usaste esta biblioteca para crear un conjunto de datos para entrenar el modelo de aprendizaje automático.

A partir de Python 3.11 y pip 22.3, existe un nuevo PEP 668 que indica que los entornos base de Python deben marcarse como “administrados externamente”. Por eso, la simple ejecución pip3 scikit-learn numpyde comandos de instalación de numpy o similares generará un error error: externally-managed-environment.

Para instalar y usar numpycorrectamente, necesita crear un entorno virtual que aísle sus paquetes de Python del entorno del sistema. Esto es importante porque mantiene separadas las dependencias requeridas por los diferentes proyectos y evita posibles conflictos entre las versiones de los paquetes.

Primero, instale virtualenvejecutando:

sudo apt install python3-venv

Ahora, utiliza esta herramienta para crear un entorno virtual dentro de tu directorio de trabajo.

python3 -m venv python-env

El siguiente paso es activar este entorno virtual ejecutando el script de activación.

source python-env/bin/activate

Durante la ejecución, verá el indicador de terminal precedido con el nombre de su entorno virtual de la siguiente manera:

Output(python-env) ubuntu@user:

Ahora, instale los paquetes necesarios ejecutando:

pip install scikit-learn numpy

El randommódulo forma parte de la biblioteca estándar de Python, por lo que no necesita instalarse por separado. Está incluido en Python y puede usarse directamente sin necesidad de instalaciones adicionales.

Paso 4: Ejecutar el script de Python

Ahora que tiene todos los paquetes necesarios en su lugar, puede ejecutar su script de Python ejecutando el siguiente comando dentro de su directorio de trabajo:

python3 demo_ai.py

Tras la ejecución exitosa, verá el resultado deseado.

Output(python-env) ubuntu@user:~/scripts/python demo_ai.py
The number 5 is an Odd number.
(python-env) ubuntu@user:~/scripts/python demo_ai.py
The number 17 is an Odd number.

Paso 5 [OPCIONAL] – Hacer que el script sea ejecutable

Al hacer que el script sea ejecutable, se puede ejecutar directamente sin necesidad de llamar explícitamente a Python escribiendo python3. Esto agiliza y facilita la ejecución del script.

Abra su script de Python usando un editor de texto.

nano demo_ai.py

En la parte superior del archivo, agregue una #!línea shebang ie que indique al sistema qué intérprete usar al ejecutar el script. Añada la siguiente línea antes del código:

#!/usr/bin/env python3

Guarde y cierre el archivo.

Ahora, haga que este script sea ejecutable para permitir que se ejecute como cualquier otro programa o comando en su terminal.

chmod +x demo_ai.py

Tras una ejecución exitosa, recibirá el control inmediatamente. A partir de ahora, puede ejecutar su script de la siguiente manera:

./demo_ai.py

Conclusión

Ejecutar scripts de Python en una máquina Ubuntu es un proceso sencillo. Al comprender cómo ejecutar scripts de Python, podrá comenzar a explorar las potentes herramientas que ofrece Python, incluidas aquellas esenciales para el desarrollo de IA.

Stephen Dove
Comments

March 17, 2025

Conceptos básicos de UFW: reglas y comandos comunes de firewall

Introducción

UFW ( cortafuegos sencillo ) es una herramienta de configuración de cortafuegos que se ejecuta sobre [nombre del archivo] , incluida por iptablesdefecto en las distribuciones de Ubuntu. Proporciona una interfaz optimizada para configurar casos de uso comunes de cortafuegos mediante la línea de comandos.

Esta guía en formato de hoja de trucos proporciona una referencia rápida a los casos de uso y comandos comunes de UFW, incluidos ejemplos de cómo permitir y bloquear servicios por puerto, interfaz de red y dirección IP de origen.

Cómo utilizar esta guía

  • Esta guía tiene formato de hoja de trucos con fragmentos de línea de comandos independientes.
  • Salte a cualquier sección que sea relevante para la tarea que está intentando completar.
  • Cuando vea texto resaltado en los comandos de esta guía, tenga en cuenta que este texto debe referirse a las direcciones IP de su propia red.

Recuerda que puedes consultar tu conjunto de reglas UFW actual con sudo ufw statuso sudo ufw status verbose.

Implementa tus aplicaciones frontend desde GitHub con la plataforma de aplicaciones DigitalOcean . Deja que DigitalOcean se encargue de escalar tu aplicación.

Verificar el estado de UFW

Para comprobar si ufwestá habilitado, ejecute:

sudo ufw status

OutputStatus: inactive

La salida indicará si su firewall está activo o no.

Habilitar UFW

Si recibiste un Status: inactivemensaje al ejecutar [Nombre del programa] ufw status, significa que el firewall aún no está habilitado en el sistema. Deberás ejecutar un comando para habilitarlo.

De forma predeterminada, al habilitar UFW, se bloqueará el acceso externo a todos los puertos del servidor. En la práctica, esto significa que si está conectado a un servidor por SSH y lo habilita ufwantes de permitir el acceso por el puerto SSH, se desconectará. Asegúrese de seguir la sección sobre cómo habilitar el acceso por SSH de esta guía antes de habilitar el firewall si ese es su caso.

Para habilitar UFW en su sistema, ejecute:

sudo ufw enable

Verás un resultado como este:

OutputFirewall is active and enabled on system startup

Para ver qué está bloqueado o permitido actualmente, puede utilizar el verboseparámetro al ejecutar ufw status, de la siguiente manera:

sudo ufw status

OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

Desactivar UFW

Si por alguna razón necesita deshabilitar UFW, puede hacerlo con el siguiente comando:

sudo ufw disable

Tenga en cuenta que este comando deshabilitará completamente el servicio de firewall en su sistema.

Bloquear una dirección IP

Para bloquear todas las conexiones de red que se originan desde una dirección IP específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea bloquear:

sudo ufw deny from 203.0.113.100

OutputRule added

En este ejemplo, from 203.0.113.100se especifica una dirección IP de origen de “203.0.113.100”.

Si lo ejecuta sudo ufw statusahora, verá la dirección IP especificada como denegada:

OutputStatus: active

To                         Action      From
--                         ------      ----
Anywhere                   DENY        203.0.113.100         

Todas las conexiones, entrantes o salientes, están bloqueadas para la dirección IP especificada.

Bloquear una subred

Si necesita bloquear una subred completa, puede usar la dirección de subred como fromparámetro en el ufw denycomando. Esto bloquearía todas las direcciones IP de la subred de ejemplo 203.0.113.0/24:

sudo ufw deny from 203.0.113.0/24

OutputRule added

Bloquear conexiones entrantes a una interfaz de red

Para bloquear conexiones entrantes desde una dirección IP específica a una interfaz de red específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea bloquear:

sudo ufw deny in on eth0 from 203.0.113.100

OutputRule added

El inparámetro indica ufwque la regla se aplique solo a las conexiones entrantes y on eth0especifica que se aplica solo a la eth0interfaz. Esto puede ser útil si tiene un sistema con varias interfaces de red (incluidas las virtuales) y necesita bloquear el acceso externo a algunas de ellas, pero no a todas.

Permitir una dirección IP

Para permitir todas las conexiones de red que se originan desde una dirección IP específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP a la que desea permitir el acceso:

sudo ufw allow from 203.0.113.101

OutputRule added

Si lo ejecuta sudo ufw statusahora, verá un resultado similar a este, mostrando la palabra ALLOWjunto a la dirección IP que acaba de agregar.

OutputStatus: active

To                         Action      From
--                         ------      ----
...          
Anywhere                   ALLOW       203.0.113.101 

También puede permitir conexiones desde una subred completa proporcionando la máscara de subred correspondiente para un host, como 203.0.113.0/24.

Permitir conexiones entrantes a una interfaz de red

Para permitir conexiones entrantes desde una dirección IP específica a una interfaz de red específica, ejecute el siguiente comando, reemplazando la dirección IP resaltada con la dirección IP que desea permitir:

sudo ufw allow in on eth0 from 203.0.113.102

OutputRule added

El inparámetro indica ufwque se debe aplicar la regla solo a las conexiones entrantes y el on eth0parámetro especifica que la regla se aplica solo a la eth0interfaz.

Si lo ejecuta sudo ufw statusahora, verá un resultado similar a este:

OutputStatus: active

To                         Action      From
--                         ------      ----
...         
Anywhere on eth0           ALLOW       203.0.113.102            

Eliminar la regla de la UFW

Para eliminar una regla configurada previamente en UFW, utilice ufw deleteseguido de la regla ( allowo deny) y la especificación del objetivo. El siguiente ejemplo eliminaría una regla configurada previamente para permitir todas las conexiones desde una dirección IP de 203.0.113.101:

sudo ufw delete allow from 203.0.113.101

OutputRule deleted

Otra forma de especificar la regla que desea eliminar es proporcionar su ID. Esta información se puede obtener con el siguiente comando:

sudo ufw status numbered

OutputStatus: active

     To                         Action      From
     --                         ------      ----
[ 1] Anywhere                   DENY IN     203.0.113.100             
[ 2] Anywhere on eth0           ALLOW IN    203.0.113.102             

En el resultado, se puede ver que hay dos reglas activas. La primera, con valores resaltados, deniega todas las conexiones provenientes de la dirección IP 203.0.113.100. La segunda, permite las conexiones en la eth0interfaz provenientes de la dirección IP 203.0.113.102.

Dado que, por defecto, UFW bloquea todo acceso externo a menos que se permita explícitamente, la primera regla es redundante, por lo que puede eliminarla. Para eliminar una regla por su ID, ejecute:

sudo ufw delete 1

Se le pedirá que confirme la operación y se asegure de que la ID que proporciona se refiere a la regla correcta que desea eliminar.

OutputDeleting:
 deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted

Si vuelves a enumerar tus reglas con sudo ufw status, verás que la regla fue eliminada.

Lista de perfiles de aplicaciones disponibles

Tras la instalación, las aplicaciones que dependen de las comunicaciones de red suelen configurar un perfil UFW que permite la conexión desde direcciones externas. Esto suele ser equivalente a ejecutar ufw allow from, con la ventaja de proporcionar un acceso directo que abstrae los números de puerto específicos que utiliza un servicio y proporciona una nomenclatura intuitiva para los servicios referenciados.

Para enumerar los perfiles que están disponibles actualmente, ejecute lo siguiente:

sudo ufw app list

Si instaló un servicio, como un servidor web u otro software dependiente de la red, y no se creó un perfil en UFW, primero asegúrese de que el servicio esté habilitado. Para servidores remotos, normalmente tendrá OpenSSH disponible:

OutputAvailable applications:
  OpenSSH

Habilitar perfil de aplicación

Para habilitar un perfil de aplicación UFW, ejecute “ ufw allowseguido del nombre del perfil que desea habilitar, que puede obtener con un sudo ufw app listcomando. En el siguiente ejemplo, habilitamos el perfil OpenSSH, que permitirá todas las conexiones SSH entrantes en el puerto SSH predeterminado.

sudo ufw allow “OpenSSH”

OutputRule added
Rule added (v6)

Recuerde citar los nombres de perfil que constan de varias palabras, como Nginx HTTPS.

Deshabilitar el perfil de la aplicación

Para deshabilitar un perfil de aplicación previamente configurado en UFW, deberá eliminar la regla correspondiente. Por ejemplo, considere el siguiente resultado de sudo ufw status:

sudo ufw status

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                               
Nginx Full                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)                   
Nginx Full (v6)            ALLOW       Anywhere (v6)        

Este resultado indica que el Nginx Fullperfil de la aplicación está habilitado, lo que permite todas las conexiones al servidor web, tanto vía HTTP como HTTPS. Si solo desea permitir solicitudes HTTPS desde y hacia su servidor web, primero deberá habilitar la regla más restrictiva (en este caso Nginx HTTPS, ), y luego deshabilitar la regla activa Nginx Full:

sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"

Recuerde que puede enumerar todos los perfiles de aplicaciones disponibles con sudo ufw app list.

Permitir SSH

Al trabajar con servidores remotos, deberá asegurarse de que el puerto SSH esté abierto a las conexiones para que pueda iniciar sesión en su servidor de forma remota.

El siguiente comando habilitará el perfil de aplicación OpenSSH UFW y permitirá todas las conexiones al puerto SSH predeterminado en el servidor:

sudo ufw allow OpenSSH

OutputRule added
Rule added (v6)

Aunque es menos fácil de usar, una sintaxis alternativa es especificar el número de puerto exacto del servicio SSH, que normalmente está configurado 22de manera predeterminada:

sudo ufw allow 22

OutputRule added
Rule added (v6)

Permitir SSH entrante desde una dirección IP o subred específica

Para permitir conexiones entrantes desde una dirección IP o subred específica, deberá incluir una fromdirectiva que defina el origen de la conexión. Esto requerirá que también especifique la dirección de destino con un toparámetro. Para restringir esta regla solo a SSH, deberá limitar el protoprotocolo a tcpy luego usar el portparámetro y establecerlo en 22, el puerto predeterminado de SSH.

El siguiente comando solo permitirá conexiones SSH provenientes de la dirección IP 203.0.113.103:

sudo ufw allow from 203.0.113.103 proto tcp to any port 22

OutputRule added

También puede utilizar una dirección de subred como fromparámetro para permitir conexiones SSH entrantes desde una red completa:

sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22

OutputRule added

Permitir Rsync entrante desde una dirección IP o subred específica

El programa Rsync873 , que se ejecuta en el puerto , se puede utilizar para transferir archivos de una computadora a otra.

Para permitir rsyncconexiones entrantes desde una dirección IP o subred específica, utilice el fromparámetro para especificar la dirección IP de origen y el portparámetro para configurar el puerto de destino 873. El siguiente comando solo permitirá conexiones Rsync provenientes de la dirección IP 203.0.113.103:

sudo ufw allow from 203.0.113.103 to any port 873

OutputRule added

Para permitir que toda la 203.0.113.0/24subred pueda acceder rsynca su servidor, ejecute:

sudo ufw allow from 203.0.113.0/24 to any port 873

OutputRule added

Permitir Nginx HTTP / HTTPS

Tras la instalación, el servidor web Nginx configura diferentes perfiles UFW. Una vez que Nginx esté instalado y habilitado como servicio, ejecute el siguiente comando para identificar los perfiles disponibles:

sudo ufw app list | grep Nginx

Output  Nginx Full
  Nginx HTTP
  Nginx HTTPS

Para habilitar el tráfico HTTP y HTTPS, seleccione Nginx Full. De lo contrario, seleccione Nginx HTTPpermitir solo HTTP o Nginx HTTPSHTTPS.

El siguiente comando permitirá el tráfico HTTP y HTTPS en el servidor (puertos 80y 443):

sudo ufw allow "Nginx Full"

OutputRule added
Rule added (v6)

Permitir Apache HTTP / HTTPS

Tras la instalación, el servidor web Apache configura diferentes perfiles UFW. Una vez instalado y habilitado Apache como servicio, ejecute el siguiente comando para identificar los perfiles disponibles:

sudo ufw app list | grep Apache

Output  Apache
  Apache Full
  Apache Secure

Para habilitar el tráfico HTTP y HTTPS, seleccione Apache Full. De lo contrario, seleccione ApacheHTTP o Apache SecureHTTPS.

El siguiente comando permitirá el tráfico HTTP y HTTPS en el servidor (puertos 80y 443):

sudo ufw allow "Apache Full"

OutputRule added
Rule added (v6)

Permitir todos los HTTP entrantes (puerto 80)

Los servidores web, como Apache y Nginx, suelen recibir solicitudes HTTP en el puerto 80. Si su política predeterminada para el tráfico entrante es descartar o denegar, deberá crear una regla UFW para permitir el acceso externo en el puerto 80. Puede usar el número de puerto o el nombre del servicio ( http) como parámetro para este comando.

Para permitir todas las conexiones HTTP (puerto) entrantes 80, ejecute:

sudo ufw allow http

OutputRule added
Rule added (v6)

Una sintaxis alternativa es especificar el número de puerto del servicio HTTP:

sudo ufw allow 80

OutputRule added
Rule added (v6)

Permitir todos los HTTPS entrantes (puerto 443)

HTTPS normalmente se ejecuta en el puerto 443. Si su política predeterminada para el tráfico entrante es descartar o denegar, deberá crear una regla UFW para permitir el acceso externo en el puerto 443. Puede usar el número de puerto o el nombre del servicio ( https) como parámetro para este comando.

Para permitir todas 443las conexiones entrantes HTTPS (puerto), ejecute:

sudo ufw allow https

OutputRule added
Rule added (v6)

Una sintaxis alternativa es especificar el número de puerto del servicio HTTPS:

sudo ufw allow 443

OutputRule added
Rule added (v6)

Permitir todos los HTTP y HTTPS entrantes

Si desea permitir el tráfico HTTP y HTTPS, puede crear una única regla que permita ambos puertos. Para ello, también debe definir el protocolo con el protoparámetro , que en este caso debe establecerse en tcp.

Para permitir todas las conexiones entrantes HTTP y HTTPS (puertos 80y 443), ejecute:

sudo ufw allow proto tcp from any to any port 80,443

OutputRule added
Rule added (v6)

Permitir la conexión MySQL desde una dirección IP o subred específica

MySQL escucha las conexiones de cliente en el puerto 3306. Si un cliente en un servidor remoto utiliza su servidor de base de datos MySQL, deberá crear una regla UFW para permitir dicho acceso.

Para permitir conexiones MySQL entrantes desde una dirección IP o subred específica, utilice el fromparámetro para especificar la dirección IP de origen y el portparámetro para establecer el puerto de destino 3306.

El siguiente comando permitirá que la dirección IP 203.0.113.103se conecte al puerto MySQL del servidor:

sudo ufw allow from 203.0.113.103 to any port 3306

OutputRule added

Para permitir que toda la 203.0.113.0/24subred pueda conectarse a su servidor MySQL, ejecute:

sudo ufw allow from 203.0.113.0/24 to any port 3306

OutputRule added

Permitir la conexión PostgreSQL desde una dirección IP o subred específica

PostgreSQL escucha las conexiones de cliente en el puerto 5432. Si un cliente en un servidor remoto utiliza su servidor de base de datos PostgreSQL, asegúrese de permitir ese tráfico.

Para permitir conexiones entrantes de PostgreSQL desde una dirección IP o subred específica, especifique la fuente con el fromparámetro y configure el puerto en 5432:

sudo ufw allow from 203.0.113.103 to any port 5432

OutputRule added

Para permitir que toda la 203.0.113.0/24subred pueda conectarse a su servidor PostgreSQL, ejecute:

sudo ufw allow from 203.0.113.0/24 to any port 5432

OutputRule added

Bloquear correo SMTP saliente

Los servidores de correo, como Sendmail y Postfix, suelen usar el puerto 25para el tráfico SMTP. Si su servidor no debería enviar correo saliente, le recomendamos bloquear ese tipo de tráfico. Para bloquear las conexiones SMTP salientes, ejecute:

sudo ufw deny out 25

OutputRule added
Rule added (v6)

Esto configura su firewall para bloquear todo el tráfico saliente en el puerto 25. Si necesita rechazar las conexiones salientes en un puerto diferente, puede repetir este comando y reemplazarlo 25con el puerto que desea bloquear.

Conclusión

UFW es una herramienta potente que, si se configura correctamente, puede mejorar considerablemente la seguridad de sus servidores. Esta guía de referencia abarca algunas reglas comunes de UFW que se utilizan a menudo para configurar un firewall en Ubuntu.

La mayoría de los comandos de esta guía se pueden adaptar a diferentes casos de uso y escenarios modificando parámetros como la dirección IP de origen o el puerto de destino. Para obtener información más detallada sobre cada parámetro de comando y los modificadores disponibles, puede usar la manutilidad para consultar el manual de UFW:

man ufw

La página oficial de UFW sobre la documentación de Ubuntu es otro recurso que puedes usar como referencia para casos de uso y ejemplos más avanzados.

Stephen Dove