Raspberry Pi como webserver

con Raspberry Pi OS Lite (64 bit)


  1. Descargar e instalar Raspberri Pi Imager
  2. ejecutar Imager, clic en Raspberry Pi OS (other):

     

    y clic en Raspberry Pi OS Lite (64-bit):

     

    Luego clic en Advanced Options:

     

    Y dejarlo más o menos así:
    (sustituir carles por el nombre de usuario que quieras)

     

    Guardar, y escribir la imagen en la targeta Micro SD.

  3. Una vez escrita la imagen, extraer la targeta Micro SD, introducirla en la Raspberry Pi, y arrancar
  4. averiguar la IP de tu Raspberry Pi:

    1. Con la app gratuita Fing desde un telf. mobil Android, o desde un telf. mobil Apple:

    2. Desde una terminal en Linux con nmap:
      sudo nmap -sP 192.168.1.*
    3. Desde el entorno gráfico de Windows
    4. Desde una terminal en Mac OS X con nmap:
      sudo nmap -sP 192.168.1.*
  5. desde una terminal, conectar con la rpi por ssh:
    ssh carles@IP
    
    (sustituir carles por tu usuario)
    IP será algo parecido a: 192.168.1.36
  6. actualizar repositorios:
    sudo apt-get update --allow-releaseinfo-change
    
  7. actualizar software:
    sudo apt upgrade
    
  8. apagar:
    sudo shutdown -h now
    
    (pasados 30 segundos, desenchufar la rpi, quitar la targeta micro SD, e introducirla en un PC)
  9. Desde cualquier distro de Linux con el gparted...


    No modificar la partición /boot:

    /boot		 512 MB		vfat
    


    Redimensionar la partición /      (rootfs)

    /		 11 GB		ext4
    


    Crear la partición /home y formatearla en ext4

    /home		18 GB		ext4
    
  10. Desmontar la targeta Micro SD, introducirla en la rpi, arrancar, y desde una terminal volver a hacer login:
    ssh carles@IP
    
    (sustituir carles por tu usuario)
    (sustituir IP por lo que corresponda)
  11. Configurar usuario root:
    sudo passwd root
    
    sudo cp /home/carles/.bashrc /root/.bashrc
    
  12. Instalar mc:
    sudo apt install mc
    
    (el Midnight Commander es un administrador de archivos en modo texto, muy útil para trabajar desde una terminal)
  13. configurar mc:
    sudo mcedit /root/.bashrc
    

    y añadir al final del archivo la linea:
    alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
    
    pegar en Linux es: Mayúsculas Insert
    F2 para guardar, F10 para salir
  14. configurar ssh:
    sudo systemctl enable ssh.service
    
    sudo mcedit /etc/ssh/sshd_config
    
    PermitRootLogin yes
    AllowUsers root
    
  15. reiniciar ssh:
    sudo service ssh restart
    
  16. cerrar la sesión:
    logout
    
  17. entrar en rpi como root:
    ssh root@IP
    
    (sustituir IP por lo que corresponda)
  18. configurar locales:
    raspi-config
    
    5 Localisation Options ➜ L1 Locale ➜ es_ES.UTF-8 UTF-8
    5 Localisation Options ➜ L2 Timezone ➜ Europe ➜ Madrid
    5 Localisation Options ➜ L3 Keyboard
    
  19. instalar quotas de disco:
    apt install quota quotatool
    
  20. Mover /home a /home_OLD
    mv /home /home_OLD
    mkdir /home
    
  21. habilitar /home como partición:
    mcedit /etc/fstab
    
    proc                  /proc           proc    defaults                        0       0
    
    PARTUUID=xxxxxxxx-01  /boot           vfat    defaults                        0       2
    PARTUUID=xxxxxxxx-02  /               ext4    defaults,noatime                0       1
    PARTUUID=xxxxxxxx-03  /home           ext4    defaults,noatime,usrquota,acl   0       3
    
    # a swapfile is not a swap partition, no line here
    #   use  dphys-swapfile swap[on|off]  for that
    
  22. montar /home:
    systemctl daemon-reload
    mount /home
    
  23. copiar usuario a /home y eliminar /home_OLD
    cp -R /home_OLD/* /home
    chown -R carles:carles /home/carles
    rm -R -f /home_OLD
    
    (sustituir carles por tu usuario)
  24. habilitar quotas de disco:
    quotacheck -f -m -u /home
    quotaon /home
    
    (se creara /home/aquota.user)
  25. Instalar apache i php:
    apt install apache2 apache2-utils libapache2-mod-php php php-fpm
    

    También se instala:
    php-common
    php-cli
    php-common
    php-json
    php-opcache
    php-readline
    ssl-cert

  26. Permitir PHP para los usuarios en /home:
    mcedit /etc/apache2/mods-available/php8.2.conf
    

    Y comentar las lineas:
    #<IfModule mod_userdir.c>
    #       <Directory /home/*/public_html>
    #               php_admin_flag engine Off
    #       </Directory>
    #</IfModule>
    
  27. Instalar módulos de php:
    apt install php-zip php-gd php-curl php-readline php-mbstring php-xml
    
  28. Instalar libapache2-mod-ruid2:
    apt install libapache2-mod-ruid2
    

    Los sistemas arm64 basados en Debian Bookworm no lo tienen en los repositorios. Hay que descargarlo a mano desde:
    https://launchpad.net/ubuntu/+source/libapache2-mod-ruid2

    Para descargar e instalar el paquete, ejecuta:

    wget https://launchpad.net/ubuntu/+archive/primary/+files/libapache2-mod-ruid2_0.9.8-3_arm64.deb
    dpkg -i libapache2-mod-ruid2_0.9.8-3_arm64.deb
    apt -f install
    
  29. Instalar otras cosas:
    apt install proftpd-basic
    
    (si quieres tener un servidor FTP)
    apt install samba
    
    (si quieres acceder al nuevo servidor desde el protocolo smb) (en Windows, entorno de red)
    apt install default-mysql-server php-mysql
    
    (si quieres ejecutar un servidor de bases de datos, para correr programas como por ejemplo WordPress)
  30. Crear el espacio web del nuevo usuario (substituir carles y Carles Pladevall por lo que corresponda):
    export usuario="carles"
    export nombreCompleto="Carles Pladevall"
    
    chown ${usuario}:${usuario} /home/${usuario}
    chmod 0711 /home/$usuario
    
    mkdir /home/${usuario}/public_html
    chown ${usuario}:${usuario} /home/${usuario}/public_html
    chmod 0755 /home/${usuario}/public_html
    echo "<h1>Hola ${nombreCompleto}</h1>" > /home/${usuario}/public_html/index.html
    chown ${usuario}:${usuario} /home/${usuario}/public_html/index.html
    chmod 0644 /home/${usuario}/public_html/index.html
    
  31. Asignar 2 GB de quota de disco al nuevo usuario:
    setquota -u $usuario 2097152 2097152 0 0 /home
    
  32. Configurar PHP de modo más seguro:
    mcedit /etc/apache2/mods-available/php8.2.conf
    
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
    

    La primera linea del archivo original:

    <FilesMatch ".+\.ph(ar|p|tml)$">
    

    es un agujero de seguridad importante, pues permite que PHP ejecute cualquier archivo con extensión .phar o con extensión .phtml,
    además de .php, lo cual invalida los filtros de uploadtipo de archivo de multitud de programas.     +INFO

  33. Habilitar mod_ruid2:
    mcedit /etc/apache2/mods-available/php8.2.conf
    

    Y añadir al final:
    <IfModule mod_ruid2.c>
    	RMode stat
    </IfModule>
    
  34. Habilitar módulos de apache:
    a2enmod userdir php8.2 auth_digest ruid2 alias
    
  35. Reiniciar apache:
    service apache2 restart
    
  36. IP fija
    mcedit /etc/network/interfaces
    
    ### loopback network interface
    auto lo
    iface lo inet loopback
    
    ### DINAMIC IP
    #iface eth0 inet dhcp
    #auto eth0
    
    ### STATIC IP
    iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-domain raspberrypi.local
    dns-nameservers 8.8.4.4 8.8.8.8
    auto eth0
    
    ### allow hotplug
    allow-hotplug eth0
    
  37. reiniciar:
    reboot
    
  38. Una vez reiniciada la rpi, desde un navegador ir a:
    http://192.168.1.2/~carles/
    
    (sustituir carles por tu usuario)
  39. Y por último, si quieres instalar un buen gestor de usuarios, puedes instalar usuaris:

    http://cucurella.net/soft/usuaris_linux_socket/