Come installare un server web su un router


In questa pagina descriverò come installare un server web completo su un router (Asus RT-AC56U) - useremo alcuni pacchetti Entware, pertanto fare riferimento a questa pagina su come installare Entware su un router.
Useremo il server web "Lighttpd", un'alternativa ad Apache ovvero il server web più usato negli ambienti Linux. Logicamente fornirò una breve panoramica delle funzionalità di questo server web, giusto per installarlo e configurarlo. Questo server web è effettivamente un server web completo, pertanto suggerisco di fare riferimento so alla sua pagina wiki per ulteriori dettagli and per le funzionalità aggiuntive. Per una migliore comprensione, dividerò questa pagina in diverse sezioni da leggere passo dopo passo.


Come installare il server web Lighttpd

Allo scopo di installare il server web Lighttpd, dobbiamo eseguire i seguenti passi :

  1. Innanzitutto installiamo il server web usando il comando "opkg install lighttpd";
  2. Creiamo una copia di riserva del file "/opt/etc/lighttpd/lighttpd.conf";
  3. Modifichiamo il file "/opt/etc/lighttpd/lighttpd.conf" cambiando la seguente linea :
    server.document-root = "/opt/share/www/lighttpd"
    E aggiungendo la seguente linea :
    server.port = 8080
    Con la prima linea diciamo al daemon del server web che la cartella radice del server web è "/opt/share/www/lighttpd", mentre l'ultima linea aggiuntiva è richiesta per dire al daemon che la porta del server è la numero 8080. Da notare che dobbiamo modificare la porta del server, poiché la porta predefinita, la numero 80, è già usata dal router per la sua interfaccia di gestione. Logicamente è possibile modificare le due linee per le proprie necessità, ma in questa pagina continuerò ad usare i miei valori.
  4. Creiamo la cartella radice del server web con il seguente comando :
    mkdir /opt/share/www/lighttpd
  5. Copiamo il file di esempio "index.htm" sulla cartella "/opt/share/www/lighttpd";
  6. Avviamo il server web usando il seguente comando :
    /opt/etc/init.d/S80lighttpd start
  7. Apriamo un browser e digitiamo l'indirizzo "http://[indirizzo router]:8080", la pagina web indice dovrebbe essere visualizzata.

Fare riferimento al sito web di Lighttpd per ulteriori dettagli sulle opzioni del file di configurazione.


Come eseguire il server web Lighttpd come utente "nobody"

Normalmente il server web Lighttpd viene eseguito come utente a pieni privilegi ("root" o "admin"). Io sconsiglio vivamente di farlo per ragioni di sicurezza. Nella maggior parte dei router viene incluso un utente a privilegi limitati più sicuro, esso viene chiamato "nobody", appartenente al gruppo "nobody". Questo utente è incluso nel file "/etc/passwd", assieme a tutti gli altri utenti del router.
Allo scopo di eseguire il server web Lighttpd come utente "nobody", dobbiamo eseguire i seguenti passi :

  1. Modifichiamo il file "/opt/etc/lighttpd/lighttpd.conf" aggiungendo le seguenti linee :
    server.username = "nobody"
    server.groupname = "nobody"
  2. Eseguiamo i seguenti comandi :
    chown -R nobody:nobody /opt/share/www/lighttpd/
    chown -R nobody:nobody /opt/var/log/lighttpd/
  3. Riavviamo il server web usando il seguente comando :
    /opt/etc/init.d/S80lighttpd restart

Per verificare che Lighttpd viene eseguito come utente "nobody", usiamo il seguente comando :
ps | grep -i lighttpd
La seconda colonna ("USER") dovrebbe essere "nobody".

NOTA : ricordarsi che, ogni qualvolta aggiungiamo un file all'interno della cartella radice "/opt/share/www/lighttpd/" del server, dobbiamo impostare il proprietario del nuovo file a "nobody:nobody", usando il comando "chown" - si può persino usare il seguente comando :
chown -R nobody:nobody /opt/share/www/lighttpd/


Come attivare l'elenco delle cartelle

Normalmente il server web Lighttpd non permette la visualizzazione delle cartelle per questioni di sicurezza, pertanto abbiamo bisogno di avere almeno un file indice ("index.php", "index.html", "index.htm", "default.htm") in ogni cartella del server web, altrimenti il server web restituisce l'errore "403 - forbidden". Per evitare questo errore, abbiamo bisogno di attivare la visualizzazione delle cartelle, in questo modo il server web mostrerà un elenco di tutti i file inclusi in ogni cartella del server web.
Allo scopo di attivare l'elenco delle cartelle nel server web Lighttpd web server, abbiamo bisogno di eseguire i seguenti passi :

  1. Modifichiamo il file di configurazione "/opt/etc/lighttpd/lighttpd.conf" aggiungendo la seguente linea :
    server.dir-listing = "enable"
  2. Riavviamo il server web usando il seguente comando :
    /opt/etc/init.d/S80lighttpd restart

Per verificare che il server web Lighttpd stia visualizzando un elenco di file inclusi in ogni cartella del server web, rinominiamo tutti i file indice in maniera tale da lasciare la cartella web senza file indice (così da avere la cartella web senza nessuno dei file "index.php", "index.html", "index.htm", "default.htm"). Se apriamo il browser e digitiamo l'indirizzo del server web, il server web ora dovrebbe mostrare un elenco di file inclusi in una cartella web, invece di mostrare l'errore "403 - forbidden".

Fare riferimento al sito web di Lighttpd per ulteriori dettagli sull'elenco delle cartelle.


Come attivare l'autenticazione utente sul server web

Normalmente il server web Lighttpd permette l'accesso al server web a tutti gli utenti senza alcun tipo di autenticazione. Per ragioni di sicurezza, in questa sezione proviamo ad attivare l'autenticazione utente su questo server web.
Allo scopo di attivare l'autenticazione utente nel server web Lighttpd, dobbiamo eseguire i seguenti passi :

  1. Dobbiamo creare un file con i valori id utente e password. Per fare questo, useremo lo stesso programma "mini_httpd-htpasswd" usato nella pagina "How to install a mini web server on a router", sezione "Come impostare un id utente ed una password sul server web". Seguiremo le stesse istruzioni della suddetta pagina, ma il file generato ".htpasswd" deve essere salvato nella cartella "/opt/etc/lighttpd/". Dalla suddetta pagina dobbiamo anche scaricare il file .zip allo scopo di estrarre il programma "mini_httpd-htpasswd".
  2. Installiamo due moduli aggiuntivi del server web usando il comando :
    opkg install lighttpd-mod-auth lighttpd-mod-authn_file
  3. Modifichiamo il file "/opt/etc/lighttpd/conf.d/20-auth.conf" aggiungendo tutte le seguenti linee :

    auth.backend = "htpasswd"
    auth.backend.htpasswd.userfile = "/opt/share/www/lighttpd/.htpasswd"
    auth.require = ( "/" =>
        (
        "method"  => "basic",
        "realm"   => "Please enter your Password.",
        "require" => "valid-user"
        ),
    )
  4. Modifichiamo il file "/opt/etc/lighttpd/conf.d/20-authn_file.conf" inserendo un carattere "#" prima della linea :
    server.modules += ( "mod_authn_file" )
  5. Modifichiamo il file "/opt/etc/lighttpd/lighttpd.conf" aggiungendo la seguente linea:
    server.modules += ( "mod_auth" )
  6. Riavviamo il server web usando il seguente comando :
    /opt/etc/init.d/S80lighttpd restart

Adesso il server web Lighttpd, se apriamo il browser e digitiamo l'indirizzo web del server web, dovrebbe visualizzare una finestra che richiede il nome utente e la password per accedere al server web.

Fare riferimento al sito web di Lighttpd per ulteriori dettagli sull'autenticazione.


Come attivare l'interprete PHP sul server web

Questa è una sezione opzionale riservata agli utenti che vogliono attivare l'interprete PHP sul web server Lighttpd. Questa sezione usa i più recenti pacchetti PHP7 di Entware invece dei più vecchi pacchetti PHP5. A causa dell'enorme quantitativo delle peculiarità e delle funzioni dell'interprete PHP, fare riferimento al manuale PHP.
Per attivare l'interprete PHP nel server web Lighttpd, dobbiamo eseguire i seguenti passi :

  1. Installiamo i pacchetti di base dell'interprete PHP usando il comando :
    opkg install php7 php7-cgi php7-cli php7-fastcgi
  2. Installiamo due moduli aggiuntivi del server web usando il comando :
    opkg install lighttpd-mod-cgi lighttpd-mod-fastcgi
  3. Facciamo una copia di riserva del file "/opt/etc/php.ini";
  4. Creiamo un nuovo file vuoto "/opt/etc/php.ini" aggiungendo tutte le seguenti linee :

    post_max_size = 500M
    display_errors = Off
    error_log = /opt/var/log/php_errors.log
    output_buffering = Off
    
    ; Resource Limits
    
    max_execution_time = 30 ; Maximum execution time of each script, in seconds.
    max_input_time = 60 ; Maximum amount of time each script may spend parsing request data.
    ;max_input_nesting_level = 64
    memory_limit = 32M ; Maximum amount of memory a script may consume.
    
    ; Paths and Directories
    
    ;doc_root = "/opt/share/www/lighttpd"
    ;user_dir =
    extension_dir = "/opt/lib/php"
    enable_dl = On
    ;cgi.force_redirect = 1
    ;cgi.nph = 1
    ;cgi.redirect_status_env = ;
    cgi.fix_pathinfo=1
    
    ; File Uploads
    
    file_uploads = On
    upload_tmp_dir = "/opt/tmp"
    upload_max_filesize = 500M
    max_file_uploads = 50
    
  5. Modifichiamo il file "/opt/etc/lighttpd/conf.d/30-fastcgi.conf" aggiungendo tutte le seguenti linee :

    fastcgi.server = ( ".php" =>
                       ( "localhost" =>
                         (
                           "socket" => "/tmp/php-fcgi.sock",
                           "bin-path" => "/opt/bin/php-cgi",
                           "max-procs" => 1,
                           "broken-scriptfilename" => "enable",
                           "bin-environment" =>
                             ( "PHP_FCGI_CHILDREN" => "1",
                               "PHP_FCGI_MAX_REQUESTS" => "1000" )
                         )
                       )
                     )
  6. Creiamo un file vuoto PHP di prova, chiamato "test.php", nella cartella radice del server web "/opt/share/www/lighttpd/", inserendo tutte le seguenti linee :

    <?php
    phpinfo();
    ?>
  7. Riavviamo il server web usando il seguente comando :
    /opt/etc/init.d/S80lighttpd restart

Ricordarsi di installare i pacchetti "php7-mod-*" di Entware come da proprie necessità, si può ottenere un elenco dei pacchetti disponibili con il seguente comando :
opkg list | grep -i php7-mod

Fare riferimento al sito web di Lighttpd per ulteriori dettagli su FastCGI.