3. Linux desde cero
Gestión de permisos (chmod)
chmod es un comando que ofrece la posibilidad de modificar el los permisos de un archivo o carpeta en el sistema de archivos.
Parámetros de CHMOD
-
-c,–changes: Como–verbose, pero da salida detallada solo cuando se realiza un cambio. -
-f,–silent,–quiet: Modo silencioso; se usa para suprimir la mayoría de los mensajes de error. -
-v,–verbose: Modo detallado; muestra un mensaje de diagnóstico por cada archivo procesado. -
–no-preserve-root: Se usa para definir que no trate/(el directorio raíz ) de ninguna manera especial, que es la configuración predeterminada. -
–preserve-root: Se usa para indicar que no opere recursivamente en/. -
-R,–recursivo: Cambia archivos y directorios recursivamente. -
–version: Da información referente a la versión que se está usando.
Tipos de Permisos
-
Lectura: Esta opción permite que el usuario vea el archivo pero no le da la potestad de realizar cambios en el mismo lo cual nos da un alto nivel de seguridad ya que no podrán editarlo, copiarlo o borrarlo.
-
Escritura: Al otorgar este permiso permitimos que los usuarios que acceden al archivo carpeta puedan realizar sobre el mismo cualquier tipo de edición, Copiar, cortar, borrar) lo cual pone en riesgo la integridad del mismo.
-
Ejecutar: Al activar esta opción, la cual viene por defecto deshabilitada, podemos ejecutar archivos.
Tipos de clases
- Propietario: Es la persona que ha creado el archivo o la carpeta
- Grupo: Dentro de este parámetro definiremos el grupo de usuarios que tendrán acceso al archivo o carpeta
- Otros: Dentro de este parámetro están incluidos los usuarios particulares
Tablas de valores permiso Linux
- 0: Sin permisos
- 1: Ejecución
- 2: Escritura
- 3: Lectura y escritura
- 4: Lectura
- 5: Lectura y ejecución
- 6: Lectura y escritura
- 7: Lectura. escritura y ejecución
777 ( RWX / RWX /RWX): Esta opción permite que todos los usuarios puedan leer, escribir y ejecutar en el archivo o carpeta
755 (RWX / RW / RW): Con este permiso el propietario del archivo puede leer, escribir y ejecutar en el archivo mientras que los demás leer y escribir en el archivo mas no ejecutar.
0 = — = sin acceso
1 = –x = ejecución
2 = -w- = escritura
3 = -wx = escritura y ejecución
4 = r– = lectura
5 = r-x = lectura y ejecución
6 = rw- = lectura y escritura
7 = rwx = lectura, escritura y ejecución
Ejemplos de comandos CHMOD
- chmod 755
- chmod 666
- chmod 777
sudo chmod –R 777 /var/www/nombre_del_directorio
¿Qué es LAMP?
LAMP es un acrónimo que representa un conjunto de tecnologías fundamentales para el desarrollo y la implementación de aplicaciones web.
Este stack está compuesto por:
-
Linux: Un sistema operativo de código abierto que actúa como la base sobre la cual se ejecutan las otras tecnologías.
-
Apache: Un servidor web que gestiona las solicitudes de los usuarios y sirve contenido a través de Internet.
-
MySQL: Un sistema de gestión de bases de datos relacional que permite almacenar y recuperar datos para las aplicaciones.
-
PHP: Un lenguaje de programación del lado del servidor que se utiliza para crear contenido dinámico en las páginas web.
Comandos para instalar servicio SSH
sudo apt-get update
sudo apt-get install openssh-server
Comandos para visualizar estado del servicio
sudo systemctl start sshd.service
sudo systemctl status sshd.service
nano /etc/ssh/sshd_config
¿Cómo instalar un Servidor LAMP?
Paso 1: Actualizar S.O y optimizarlo
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoclean
sudo apt-get autoremove
-
Update: Verifica comunicación con los servidores listados en sources.list
/etc/apt/ -
Upgrade: Aplica las actualizaciones.
-
Autoclean: Elimina Caché
-
Autoremove: Elimina archivos y directorios innecesarios
Repositorios de actualizaciones sources.list
El archivo sources.list (ubicado en /etc/apt/sources.list) es un archivo de configuración en sistemas Linux basados en Debian (como Ubuntu) que contiene una lista de repositorios desde donde el sistema puede descargar e instalar paquetes de software.
¿Para qué sirve?
Es como una "lista de direcciones" que le dice al gestor de paquetes APT dónde buscar cuando quieres instalar, actualizar o eliminar programas. Cuando ejecutas comandos como apt update o apt install, el sistema consulta esta lista para saber de qué servidores debe obtener el software.
Estructura básica
Cada línea del archivo tiene esta estructura:
deb http://direccion-del-repositorio distribución componentes
Por ejemplo:
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe
Donde:
- deb: indica que son paquetes binarios
- URL: dirección del servidor
- distribución: versión de tu sistema (jammy, focal, etc.)
- componentes: categorías de software (main, universe, restricted, multiverse)
Paso 2 : Instalación de Servidor Apache 2
Comando para instalar Apache2
sudo apt-get install apache2
Comando para visualizar el estado del servidor web
sudo systemctl status apache2
Para cancelar el servicio: control + z
Paso 3: Verificar estado servidor web
Una vez instalado Apache2, es importante verificar que el servidor web esté funcionando correctamente. Para esto, debemos probar el acceso al servidor desde un navegador web.
¿Cómo verificarlo?
-
Abre tu navegador web preferido (Chrome, Firefox, Edge, etc.)
-
En la barra de direcciones, escribe la dirección IP de tu servidor Linux
-
Si Apache está funcionando correctamente, deberías ver la página de bienvenida predeterminada de Apache2
Paso 4: Instalar lenguaje PHP 7.4
Comando para instalar PHP y sus extensiones principales:
sudo apt-get install php7.4 php7.4-mysql php-common php7.4-cli php7.4-json php7.4-common php7.4-opcache libapache2-mod-php7.4
Comando para visualizar la versión instalada
php --version
Extensiones PHP recomendadas
Para un entorno completo de desarrollo/producción, necesitas estas extensiones:
| Extensión | Función |
|---|---|
| cli | Interfaz de línea de comandos |
| common | Funciones comunes de PHP |
| curl | Peticiones HTTP |
| gd | Manipulación de imágenes |
| intl | Internacionalización |
| mysql/mysqli | Conexión a bases de datos MySQL |
| opcache | Caché de código para mejor rendimiento |
| pdo | Abstracción de bases de datos |
| soap | Servicios web SOAP |
| xml | Procesamiento de XML |
| zip | Compresión de archivos |
Comando para instalar extensiones adicionales:
sudo apt-get install php7.4-curl php7.4-gd php7.4-intl php7.4-soap php7.4-xml php7.4-zip
Ubicación de archivos de configuración
- Apache:
/etc/php/7.4/apache2/php.ini - CLI:
/etc/php/7.4/cli/php.ini - FPM:
/etc/php/7.4/fpm/php.ini - Pools FPM:
/etc/php/7.4/fpm/pool.d/
¿Qué es PHP-FPM?
PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP que ofrece ventajas sobre el módulo tradicional de Apache (libapache2-mod-php):
Características principales:
-
Múltiples versiones simultáneas: Permite ejecutar diferentes versiones de PHP (7.4, 8.0, 8.1, etc.) en el mismo servidor
-
Mejor rendimiento: Maneja las solicitudes PHP de forma más eficiente que el módulo tradicional
-
Pools independientes: Cada sitio web puede tener su propia configuración PHP aislada
¿Qué son los PHP-FPM Pools?
Un pool es una configuración independiente de PHP-FPM que permite:
- Asignar diferentes versiones de PHP a diferentes sitios web
- Configurar recursos específicos (memoria, usuarios, procesos) por sitio
- Aislar aplicaciones para mayor seguridad
Ejemplo práctico:
- Sitio A → usa PHP 7.4 (pool1)
- Sitio B → usa PHP 8.1 (pool2)
Instalación de PHP-FPM
# Instalar PHP-FPM para la versión 7.4
sudo apt-get install php7.4-fpm
# Instalar PHP-FPM para la versión 8.1
sudo apt-get install php8.1-fpm
Paso 5: Reiniciar servicio apache2
sudo systemctl restart apache2
Paso 6: Visualización de extensiones de php7.4
sudo apt-get install php7.4 + TAB
Paso 7: Instalación de Servidor MySQL
sudo apt-get install mysql-server
Paso 8: Crear base de datos en MySQL
sudo mysql
CREATE DATABASE nombredelabasededatos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Exit;
Paso 9: Crear usuario MySQL
sudo mysql
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'contraseña’;
Paso 10: Asignar todos los permisos a ese usuario sobre todas las bases de datos
GRANT ALL PRIVILEGES ON _._ TO 'usuario'@'localhost';
GRANT ALL PRIVILEGES ON _._ TO 'usuario'@'localhost' with grant option;
Paso 11: Recargar bases de datos (Siempre correr antes de salir)
FLUSH PRIVILEGES;
Ejemplo:
CREATE DATABASE curso CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'curso'@'localhost' IDENTIFIED BY 'Cursolinux.123';
GRANT ALL PRIVILEGES ON _._ TO 'curso'@'localhost';
GRANT ALL PRIVILEGES ON _._ TO 'curso'@'localhost' with grant option;
FLUSH PRIVILEGES;
EXIT;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Magento123';
Otros comandos de MySQL
Asignar permisos a usuario sobre una BD específica
GRANT ALL PRIVILEGES ON Base de datos TO 'usuario'@'localhost’;
Visualizar todas las bases de datos
SHOW DATABASES;
Visualizar todos los usuarios registrados en MySQL
SELECT User FROM mysql.user;
Cambiar contraseña de usuario
ALTER USER ‘usuario’@’localhost’ IDENTIFIED BY ‘contraseña’;
Paso 12: Instalación de PHPMyAdmin
sudo apt install phpmyadmin php-mbstring php-zip php-gd phpjson php-curl
Proceso de configuración durante la instalación:
1. Selección del servidor web: Durante la instalación, aparecerá una pantalla preguntando qué servidor web deseas configurar automáticamente. Debes seleccionar apache2 usando la barra espaciadora y presionar Enter para continuar.
2. Configuración de la base de datos: A continuación, se te preguntará si deseas configurar la base de datos para PHPMyAdmin con dbconfig-common. Selecciona "Sí" (Yes) para que se configure automáticamente.
3. Establecer contraseña: El sistema te solicitará que ingreses una contraseña para el usuario administrativo de PHPMyAdmin. Escribe una contraseña segura y confírmala en la siguiente pantalla.
Importante: Esta contraseña será utilizada para acceder a la interfaz web de PHPMyAdmin, así que asegúrate de recordarla o guardarla en un lugar seguro.
Una vez completada la instalación, PHPMyAdmin quedará configurado y listo para ser habilitado en Apache2.
Paso 13: Habilitar módulo php mbstring
sudo phpenmod mbstring
¿Qué es mbstring? - Módulo diseñado para manejar codificaciones basadas en Unicode, tales como UTF-8 y UCS-2
Paso 14: Reiniciar servicio apache2
sudo systemctl restart apache2
Paso 15: Crear enlace phpmyadmin.conf
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/confavailable/phpmyadmin.conf
- Comando
ln: Crea un enlace o un “Acceso directo”
Paso 16: Habilitar archivo de configuración PHPMyAdmin en Apache2
sudo a2enconf phpmyadmin
Paso 17: Reiniciar servicio apache2
sudo systemctl reload apache2
Paso 18: Ingresar a PHPMyAdmin
- Abrir el navegador web e ingresar a: http://ip_del_servidor/phpmyadmin
- Iniciar sesión con el usuario creado en la base de datos
Paso 19: Configuración de Firewall
sudo ufw app list # Visualizar los perfiles en el Firewall
sudo ufw status # Visualizar el estado del Firewall
sudo ufw allow 'Apache Full' # Habilitar Puerto 80 y 443
sudo ufw allow 'OpenSSH' # Habilitar puerto 22
sudo ufw enable # Encender Firewall
¿Cómo instalar un CMS o cualquier programa diseñado para Hosting?
Paso 1: Descargar el programa
- Ingresar al sitio web oficial del desarrollador y descargar el programa en formato .tar o .zip
Paso 2: Cambiar permisos al directorio del programa
sudo chmod –R 777 /var/www/nombre_del_directorio
Paso 3: Cargar el archivo al servidor
- Utilizando filezilla, cargar el archivo en la ruta /var/www/html
Paso 4: Descomprimir el archivo
Comandos según el formato de archivo:
sudo unzip nombre_del_archivo.zip
sudo tar -xvf nombre_del_archivo.tar
Paso 5: Ingresar al Navegador y finalizar la configuración
Modificar límite de subida de archivos
- Modificar el archivo php.ini en la ruta
/etc/php/7.4/apache2/php.ini - Cambiar la cantidad de megas en
upload_max_filesize
Paso 6: Creación de Virtualhost
Este paso se realiza cuando se tiene un dominio adquirido para redireccionar al sitio web
Copiar el archivo 000-default.conf de apache2
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/cursolinux.conf
Cambiar cursolinux por el nombre del sitio web
Paso 6.1: Modificar archivo del virtualhost
sudo nano cursolinux.conf
Paso 7: Habilitar Virtualhost
sudo a2ensite cursolinux.conf # Habilitar sitio
sudo a2dissite 000-default.conf # Deshabilitar sitio default
sudo systemctl restart apache2 # Reiniciar servicio apache2