Mes: octubre 2022

  • Cómo instalar Linux, Nginx, MySQL, PHP (pila LEMP) en Ubuntu 22.04

    Les comparto la actualización del artículo Cómo instalar en Ubuntu Linux Nginx, MySQL, PHP (LEMP), ya que ha sufrido algunos cambios respecto a PHP y en las versiones nuevas de Ubuntu algunos lectores he han reportado que no pueden ejecutarlo por cambios en los nuevas versiones de Ubuntu.

    Introducción

    La pila de software LEMP es un grupo de software que se puede utilizar para servir páginas web dinámicas y aplicaciones web escritas en PHP.

    Este es un acrónimo que describe un sistema operativo L inux, con un servidor web Nginx (pronunciado como “ E ngine-X”). Los datos de back-end se almacenan en la base de datos MySQL y PHP se encarga del procesamiento dinámico .

    Este articulo muestra cómo instalar una pila LEMP en un servidor Ubuntu 22.04. El sistema operativo Ubuntu se ocupa de la parte de Linux de la pila. Describiré cómo poner en funcionamiento el resto de los componentes.

    Requisitos previos

    Para completar este tutorial, necesitará acceso a un servidor Ubuntu 22.04 como usuario normal, no root sudo , y un firewall habilitado en su servidor. Para configurar esto debe instalar la versión Ubuntu Server 22.04.

    También es aplicable a la última versión 22.10 de Ubuntu.

    Instalación del servidor web Nginx

    Para mostrar páginas web a los visitantes del sitio, utilizará Nginx, un servidor web de alto rendimiento. Utilizará el administrador de paquetes APT para obtener este software.

    Dado que es la primera vez que se usa apt en una sesión, comience actualizando el índice de paquetes de su servidor:

    sudo apt update

    A continuación, ejecute apt install para instalar Nginx:

    sudo apt install nginx

    Cuando se le solicite, presione Y y ENTER para confirmar que desea instalar Nginx. Una vez finalizada la instalación, el servidor web Nginx estará activo y ejecutándose en su servidor Ubuntu 22.04.

    Si instaló el servidor con el idioma españos, pues responda con S. Yo aconsejo instalar los servidores en idioma nativo, agregarle los los diccionarios de español luego.

    Esto pues, sirve para buscar rápidamente los errores o compartirlos en los grupos de discusión como listas o foros con el mensaje exacto.

    Si tiene el firewall ufw habilitado, como se recomienda, deberá permitir las conexiones a Nginx.

    Nginx registra algunos perfiles de aplicación UFW diferentes durante la instalación. Para verificar qué perfiles UFW están disponibles, ejecute:

    sudo ufw app list
    Available applications:
      Nginx Full
      Nginx HTTP
      Nginx HTTPS
      OpenSSH

    Se recomienda que habilite el perfil más restrictivo que aún permitirá el tráfico que necesita. Dado que no ha configurado SSL para su servidor en esta guía, solo necesitará permitir el tráfico HTTP normal en el puerto 80.

    Habilite esto ejecutando lo siguiente:

    sudo ufw allow 'Nginx HTTP'

    Puede verificar el cambio comprobando el estado:

    sudo ufw status

    Esta salida muestra que ahora se permite el tráfico HTTP:

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

    Con la nueva regla de firewall agregada, puede probar si el servidor está en funcionamiento accediendo al nombre de dominio o la dirección IP pública de su servidor en su navegador web.

    Si no tiene un nombre de dominio apuntado a su servidor y no conoce la dirección IP pública de su servidor, puede encontrarlo ejecutando cualquiera de los siguientes comandos:

    ip addr show
    hostname -I

    Esto imprimirá algunas direcciones IP. Puede probar cada uno de ellos en su navegador web.

    Como alternativa, puede verificar qué dirección IP es accesible, tal como se ve desde otras ubicaciones en Internet:

    curl -4 dagorret.com.ar
    
             
    

    Escriba la dirección que recibe en su navegador web y lo llevará a la página de destino predeterminada de Nginx:

    http://server_domain_or_IP

    Si recibe esta página, significa que instaló correctamente Nginx y habilitó el tráfico HTTP para su servidor web.

    Nota: Sino no tiene ufw habilitado, antes de ejecutar las reglas habilite ufw. Es tan simple como ejecturar

    sudo ufw enable

    Instalar MySQL

    Ahora que tiene un servidor web en funcionamiento, necesita instalar el sistema de base de datos para almacenar y administrar los datos de su sitio. MySQL es un popular sistema de gestión de bases de datos utilizado en entornos PHP.

    Nuevamente, use apt para adquirir e instalar este software:

    sudo apt install mysql-server

    Cuando se le solicite, confirme la instalación presionando Y y luego ENTER.

    Cuando finalice la instalación, se recomienda que ejecute un script de seguridad que viene preinstalado con MySQL.

    Este script eliminará algunas configuraciones predeterminadas inseguras y bloqueará el acceso a su sistema de base de datos. Inicie el script interactivo ejecutando el siguiente comando:

    sudo mysql_secure_installation

    Se le preguntará si desea configurar el VALIDATE PASSWORD PLUGIN.

    Nota: Habilitar esta función es algo así como una cuestión de criterio. Si está habilitado, MySQL rechazará las contraseñas que no coincidan con los criterios especificados con un error. Es seguro dejar la validación deshabilitada, pero siempre debe usar contraseñas seguras y únicas para las credenciales de la base de datos.

    Responda Y sí, o cualquier otra cosa para continuar sin habilitar:

    VALIDATE PASSWORD COMPONENT can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD component?
    
    Press y|Y for Yes, any other key for No: 

    Si responde “sí”, se le pedirá que seleccione un nivel de validación de contraseña. Tenga en cuenta que si ingresa 2 para el nivel más fuerte, recibirá errores al intentar establecer cualquier contraseña que no contenga números, letras mayúsculas y minúsculas y caracteres especiales:

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

    Independientemente de si eligió configurar el VALIDATE PASSWORD PLUGIN, su servidor le pedirá que seleccione y confirme una contraseña para el usuario root de MySQL.

    Esto no debe confundirse con la raíz del sistema . El usuario raíz de la base de datos es un usuario administrativo con privilegios completos sobre el sistema de la base de datos. Aunque el método de autenticación predeterminado para el usuario root de MySQL prescinde del uso de una contraseña, incluso cuando se establece una , debe definir una contraseña segura aquí como medida de seguridad adicional. Hablare de esto en un momento.

    Si habilitó la validación de contraseña, se le mostrará la seguridad de la contraseña raíz que ingresó y su servidor le preguntará si desea continuar con esa contraseña. Si está satisfecho con su contraseña actual, presione Y “sí” en el mensaje:

    Estimated strength of the password: 100 
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

    Para el resto de las preguntas, presione Y y presione la ENTER en cada indicación.

    Esto eliminará algunos usuarios anónimos y la base de datos de prueba, deshabilitará los inicios de sesión raíz remotos y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que ha realizado.

    Cuando haya terminado, pruebe si puede iniciar sesión en la consola de MySQL:

    sudo mysql

    Esto se conectará al servidor MySQL como el usuario root de la base de datos administrativa , que se deduce del uso de sudoc uando se ejecuta este comando. Debería recibir el siguiente resultado:

    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 10
    Server version: 8.0.28-0ubuntu4 (Ubuntu)
    
    Copyright (c) 2000, 2022, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>

    Para salir de la consola de MySQL, escriba lo siguiente:

    exit

    Tenga en cuenta que no necesitaba proporcionar una contraseña para conectarse como usuario raíz , aunque haya definido una al ejecutar el mysql_secure_installationscript.

    Esto se debe a que, cuando se instala en Ubuntu, el método de autenticación predeterminado para el usuario administrativo de MySQL es auth_socket, en lugar de un método que usa una contraseña.

    Esto puede parecer un problema de seguridad al principio, pero hace que el servidor de la base de datos sea más seguro, ya que los únicos usuarios que pueden iniciar sesión como usuario raíz de MySQL son los usuarios del sistema con privilegios sudo que se conectan desde la consola o a través de una aplicación que se ejecuta con los mismos privilegios.

    En términos prácticos, eso significa que no podrá usar el usuario raíz de la base de datos administrativa para conectarse desde su aplicación PHP.

    Para una mayor seguridad, es mejor tener cuentas de usuario dedicadas con privilegios menos expansivos configurados para cada base de datos, especialmente si planea tener varias bases de datos alojadas en su servidor.

    Nota: Ciertas versiones anteriores de la biblioteca PHP nativa de MySQL mysqlnd no admiten caching_sha2_authentication , el método de autenticación predeterminado para usuarios creados en MySQL 8. Por ese motivo, al crear usuarios de base de datos para aplicaciones PHP en MySQL 8, es posible que deba asegurarse de que estén configurado para usar en su mysql_native_password en su lugar.

    Su servidor MySQL ya está instalado y protegido. A continuación, instalará PHP, el componente final de la pila LEMP.

    instalación de PHP

    Tiene Nginx instalado para servir su contenido y MySQL instalado para almacenar y administrar sus datos. Ahora puede instalar PHP para procesar código y generar contenido dinámico para el servidor web.

    Mientras que Apache incorpora el intérprete de PHP en cada solicitud, Nginx requiere un programa externo para manejar el procesamiento de PHP y actuar como un puente entre el intérprete de PHP y el servidor web.

    Esto permite un mejor rendimiento general en la mayoría de los sitios web basados ​​en PHP, pero requiere una configuración adicional. Deberá instalar php8.1-fpm, que significa “administrador de procesos PHP fastCGI” y usa la versión actual de PHP, para decirle a Nginx que pase las solicitudes de PHP a este software para su procesamiento. Además, necesitará php-mysql un módulo PHP que permita que PHP se comunique con bases de datos basadas en MySQL. Los paquetes principales de PHP se instalarán automáticamente como dependencias.

    Para instalar los paquetes php8.1-fpm y , ejecute:php-mysql

    sudo apt install php8.1-fpm php-mysql

    Cuando se le solicite, presione Y y ENTER para confirmar la instalación.

    Ahora tiene sus componentes PHP instalados. A continuación, configurará Nginx para usarlos.

    Configurar Nginx para usar el procesador PHP

    Cuando usamos el servidor web Nginx, podemos crear bloques de servidor (similares a los hosts virtuales en Apache) para encapsular los detalles de configuración y alojar más de un dominio en un solo servidor. En esta guía, usaremos su_dominio como nombre de dominio de ejemplo.

    En Ubuntu 22.04, Nginx tiene un bloque de servidor habilitado de forma predeterminada y está configurado para entregar documentos desde un directorio en /var/www/html.

    Si bien esto funciona bien para un solo sitio, puede volverse difícil de administrar si aloja varios sitios. En lugar de modificar /var/www/html, crearemos una estructura de directorio dentro /var/www para su sitio web su_dominio.

    Dejaremos /var/www/html como el directorio predeterminado que se atenderá si la solicitud de un cliente no coincide con ningún otro sitio.

    Cree el directorio web raíz para su_dominio de la siguiente manera:

    sudo mkdir /var/www/su_dominio

    A continuación, asigne la propiedad del directorio con la variable de entorno $USER, que hará referencia a su usuario actual del sistema:

    sudo chown -R $USER:$USER /var/www/su_dominio

    Luego, abra un nuevo archivo de configuración en el directorio sites-available de Nginx usando su editor de línea de comandos preferido. Aquí, usaremos nano:

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

    Esto creará un nuevo archivo en blanco. Inserte la siguiente configuración básica: /etc/nginx/sitios-disponibles/su_dominio

    server {
        listen 80;
        server_name su_dominio www.su_dominio;
        root /var/www/su_dominio;
    
        index index.html index.htm index.php;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
         }
    
        location ~ /\.ht {
            deny all;
        }
    
    }

    Esto es lo que hace cada una de estas directivas y bloques de ubicación:

    • listen— Define en qué puerto escuchará Nginx. En este caso, escuchará en el puerto 80, el puerto predeterminado para HTTP.
    • root— Define la raíz del documento donde se almacenan los archivos servidos por este sitio web.
    • index— Define en qué orden Nginx priorizará los archivos de índice para este sitio web. Es una práctica común enumerar index.html con mayor prioridad que index.phpl para permitir la configuración rápida de una página de inicio de mantenimiento en las aplicaciones PHP. Puede ajustar esta configuración para que se adapte mejor a las necesidades de su aplicación.
    • server_name— Define qué nombres de dominio y/o direcciones IP debe responder este bloque de servidor. Apunte esta directiva al nombre de dominio de su servidor o dirección IP pública.
    • location /— El primer bloque de ubicación incluye una try_filesdirectiva que verifica la existencia de archivos o directorios que coincidan con una solicitud de URL. Si Nginx no puede encontrar el recurso adecuado, devolverá un error 404.
    • location ~ \.php$— Este bloque de ubicación maneja el procesamiento de PHP real al señalar a Nginx en el archivo de configuración fastcgi-php.conf y el archivo php8.1-fpm.sock, que declara con qué socket está asociado php8.1-fpm.
    • location ~ /\.ht— El último bloque de ubicación se ocupa de los archivos.htaccess, que en Nginx no procesa. Al agregar la directiva deny all, si algún archivo .htaccess a la raíz del documento, no se entregará a los visitantes.

    Cuando haya terminado de editar, guarde y cierre el archivo. Si está usando nano, puede hacerlo presionando CTRL+X y luego Y y ENTER para confirmar.

    Active su configuración vinculando el archivo de configuración desde el directorio sites-enabled de Nginx:

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

    Luego, desvincule el archivo de configuración predeterminado del directorio/sites-enabled/directorio:

    sudo unlink /etc/nginx/sites-enabled/default

    Nota : si alguna vez necesita restaurar la configuración predeterminada, puede hacerlo recreando el enlace simbólico, como el siguiente:

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

    Esto le indicará a Nginx que use la configuración la próxima vez que se vuelva a cargar. Puede probar su configuración en busca de errores de sintaxis ejecutando lo siguiente:

    sudo nginx -t

    Si se informa algún error, vuelva a su archivo de configuración para revisar su contenido antes de continuar.

    Cuando esté listo, vuelva a cargar Nginx para aplicar los cambios:

    sudo systemctl reload nginx

    Su nuevo sitio web ahora está activo, pero la raíz web aún está vacía. Cree un archivo en esa ubicación para que pueda probar que su nuevo bloque de servidor funciona como se esperaba:/var/www/su_dominio/index.html

    nano /var/www/su_dominio/index.html

    Incluya el siguiente contenido en este archivo: /var/www/su_dominio/index.html

    <html>
      <head>
        <title>su_dominio Sitio Web</title>
      </head>
      <body>
        <h1>Hola Mundo!</h1>
    
        <p>Esta es una página de aterrizaje para <strong>su_dominio</strong>.</p>
      </body>
    </html>

    Ahora vaya a su navegador y acceda al nombre de dominio o dirección IP de su servidor, como se indica en la directiva server_name en el archivo de configuración de bloqueo de su servidor:

    http://server_domain_or_IP

    Recibirá una página que escribió arriba:

    Si recibe esta página, significa que su bloque de servidor Nginx funciona como se esperaba.

    Puede dejar este archivo como una página de destino temporal para su aplicación hasta que configure un archivo index.php para reemplazarlo. Una vez que haga eso, recuerde eliminar o cambiar el nombre del index.html desde la raíz de su documento, ya que tendría prioridad sobre un archivo index.php de forma predeterminada.

    Su pila LEMP ahora está completamente configurada.

    Prueba de PHP con Nginx

    Su pila LEMP ahora debería estar completamente configurada. Puede probarlo para validar que Nginx puede transferir correctamente archivos.php archivos a su procesador PHP.

    Puede hacer esto creando un archivo PHP de prueba en la raíz de su documento. Abra un nuevo archivo llamado info.php dentro de la raíz de su documento en su editor de texto preferido:

    nano /var/www/su_dominio/info.php

    Agregue las siguientes líneas en el nuevo archivo. Este es un código PHP válido que devolverá información sobre su servidor: /var/www/su_dominio/info.php

    <?php
    phpinfo();

    Cuando haya terminado, guarde y cierre el archivo.

    Ahora puede acceder a esta página en su navegador web visitando el nombre de dominio o la dirección IP pública que configuró en su archivo de configuración de Nginx, seguido de /info.php:

    http://server_domain_or_IP/info.php

    Recibirá una página web con información detallada sobre su servidor:

    Después de verificar la información relevante sobre su servidor PHP a través de esa página, es mejor eliminar el archivo que creó, ya que contiene información confidencial sobre su entorno PHP y su servidor Ubuntu. Puede usar rmpara eliminar ese archivo:

    sudo rm /var/www/su_dominio/info.php

    Conclusión

    En esta guía, construyó una base flexible para ofrecer sitios web y aplicaciones PHP a sus visitantes, utilizando Nginx como servidor web y MySQL como sistema de base de datos.

  • Cómo restablecer la contraseña root en Ubuntu

    Cómo restablecer la contraseña root en Ubuntu

    El usuario root es el superusuario responsable de toda la configuración. También es responsable de los principales cambios realizados en una distribución de Linux. 

    Por defecto, tiene acceso a todos los comandos y archivos en un sistema operativo Linux u otro tipo Unix. 

    Pero a veces hay una situación en la que los administradores del sistema o los ingenieros del sistema olvidan o pierden su contraseña de root. Esta es una situación un poco agitada. Para superar esta situación tenemos que restablecer la contraseña de root.

    En este tutorial, lo guiaré a través de todos los pasos para obtener su ‘Acceso raíz’ nuevamente en ubuntu 21.04.

    PASO (1) Ingresar a la línea de comandos del cargador de arranque GRUB2

    En primer lugar, reinicie su sistema para ingresa al GRUB2 Bootloader. Navegue hasta la opción Ubuntu del cargador y presione “e” para editar.

    Pantalla del Grub2 de Ubuntu

    PASO (2) Modificación de la opción de arranque

    Encuentra la línea que comienza con “linux”. Ahora agregue lo siguiente al final de la línea:

    init=/bin/bash
    Modificar comando de arranque del Grub2 para restear password de root

    PASO (3) Arrancar el sistema

    Ahora, después de agregar eso, presione Ctrl + x o F10 para indicarle a su sistema que arranque. Después de un inicio limpio, se le proporcionará una línea de comando.

    PASO (4) Restablezca su contraseña de raíz

    Cuando obtenga la línea de comando después del arranque, ingrese lo siguiente para restablecer su contraseña de root:

    # mount -o remount,rw /
    # passwd

    Este comando simplemente vuelve a montar la partición raíz en modo de lectura y escritura para que pueda persistir cualquier cambio en el disco.

    Y luego, con el segundo comando, podrá ingresar el password que usted desee.

    PASO(5) Iniciar sesión en el sistema

    Ahora es el momento de iniciar sesión en su sistema como usuario raíz.

    Conclusión

    En este tutorial, lo guié a través de todos los pasos para restablecer su contraseña de root en su sistema Ubuntu. 
    Espero que este tutorial lo haya ayudado a salir de una situación atascada y obtener acceso raíz a su sistema nuevamente. 

  • Debian y su postura con el firmware no libre

    Debian y su postura con el firmware no libre

    Los desarrolladores de Debian han estado pensando en una postura actualizada para adoptar firmware que no sea libre considerando el creciente número de dispositivos que ahora tienen controladores Linux de código abierto pero que requieren firmware de código cerrado para cualquier nivel de funcionalidad. 

    La votación sobre el asunto del firmware no libre ahora ha concluido y los votos se han contado…

    Debian vota la opción 5 como ganadora: ” Cambiar SC por firmware no libre en el instalador, un instalador “

    Según Debian Wiki , esa opción equivale a :

    El contrato social de Debian se reemplaza con una nueva versión que es idéntica a la versión actual en todos los aspectos, excepto que agrega la siguiente oración al final del punto 5:”Los medios oficiales de Debian pueden incluir firmware que de otro modo no formaría parte de Debian” para habilitar el uso de Debian con hardware que requiere dicho firmware”. El Proyecto Debian también hace la siguiente declaración sobre un tema del día:Incluiremos paquetes de firmware no libres de la sección “firmware no libre” del archivo de Debian en nuestros medios oficiales (imágenes de instalación e imágenes en vivo). Los binarios del firmware incluidos normalmente estarán habilitados de forma predeterminada cuando el sistema determine que son necesarios, pero cuando sea posible, incluiremos formas para que los usuarios deshabiliten esto en el arranque (opción del menú de arranque, línea de comando del kernel, etc.).

    Cuando el instalador/sistema en vivo se esté ejecutando, proporcionaremos información al usuario sobre qué firmware se ha cargado (tanto gratuito como no gratuito), y también almacenaremos esa información en el sistema de destino para que los usuarios puedan encontrarla. Cuando se determine que es necesario un firmware no libre, el sistema de destino también se configurará para usar el componente de firmware no libre de manera predeterminada en el archivo apt sources.list. Nuestros usuarios deberían recibir actualizaciones de seguridad y correcciones importantes para los binarios de firmware como cualquier otro software instalado.Publicaremos estas imágenes como medios oficiales de Debian, reemplazando los conjuntos de medios actuales que no incluyen paquetes de firmware no libres.


    Básicamente, los medios del instalador de Debian ahora podrán incluir firmware no libre y cargarlo/usarlo automáticamente donde sea necesario mientras se informa al usuario.

    Teniendo en cuenta el estado del ecosistema de hardware en estos días, es razonable y de sentido común ya que menos usuarios podrán hacer uso fácilmente de sus tarjetas gráficas, adaptadores de red y más. 

    Además de una serie de mitigaciones de seguridad de la CPU moderna que también requieren el microcódigo de código cerrado actualizado. 

    Así que, en general, estoy personalmente contento con esta decisión, ya que permitirá una experiencia más agradable para Debian en los sistemas modernos y una similar a la que se encuentra con otras distribuciones de Linux.