Indice del forum www.zeroshell.net
Distribuzione Linux ZeroShell
 
 FAQFAQ   CercaCerca  GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo  Log inLog in   Messaggi privatiMessaggi privati 

Script PHP Captive Portal con registrazione utente via SMS
Vai a 1, 2  Successivo
 
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell
Precedente :: Successivo  
Autore Messaggio
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Gio Feb 25, 2016 3:53 pm    Oggetto: Script PHP Captive Portal con registrazione utente via SMS Rispondi citando

Script PHP Captive Portal con registrazione utente via SMS

Post aggiornato il 14/06/2017
Versione software del 18/06/2016
Versione Zeroshell utilizzata: 3.4.0


Ciao a tutti,
condivido in questa discussione gli script PHP che ho scritto per gestire la registrazione automatica degli utenti tramite il loro numero del cellulare.
L'idea e' nata per togliere il lavoro di inserimento all'amministratore di Zeroshell che tramite l'interfaccia web avrebbe dovuto farlo a mano, permettendo agli utenti stessi di registrarsi sul Captive Portal. Per la registrazione gli utenti devono fornire il numero di cellulare e un indirizzo email.

Concordo con voi che ci sono strumenti piu' avanzati e potenti come Zerotruth.
La mia esigenza era quella di lasciare l'interfaccia di Zeroshell, senza grossi cambiamenti.

    ------------------------
    Come funziona
    ------------------------

Gli utenti si collegano alla pagina di autenticazione del Captive Portal dove trovano il link per registrarsi.
La pagina di registrazione, scritta in PHP, richiede: nome, cognome, numero di cellulare ed indirizzo email.
Al secondo step viene inviato, via SMS, un codice di registrazione al numero di cellulare dell'utente che si sta registrando.
Inserito il codice di registrazione ed una password, l'utente e' registrato e puo' iniziare a navigare inserendo, come login, il numero di cellulare seguito dalla password.

Lo script PHP, oltre a permettere la registrazione di un nuovo utente, permette il cambio password di quelli gia' registrati. La procedura di cambio password richiede il numero di cellulare dell'utente e successivamente invia un SMS o un EMAIL all'utente (a seconda di come viene fatta la configurazione) con una stringa random per completare la procedura.

L'amministratore di Zeroshell puo' decidere di bloccare l'accesso di un utente.

I campi 'numero di cellulare' e 'indirizzo email' devono essere unici, il sistema non lascia quindi registrare un nuovo numero di cellulare la cui email e' gia' associata ad un altro numero.


    ----------------
    Premessa
    ----------------

Non essendo un esperto di LDAP e RADIUS, ho richiamato nelle pagine PHP direttamente l'eseguibile 'ldapadd' e 'ldapmodify' prendendo spunto dal contributo di Gianfilippo Balestriero e Giorgio Piangatelli (http://www.zeroshell.net/forum/viewtopic.php?t=2387).


    ------------------------------------------
    File presenti nel pacchetto
    ------------------------------------------

Codice:
- [FILE] zs_class.inc.php: funzioni generali
- [FILE] zs_class_sms.inc.php: funzioni per invio SMS
- [FILE] zs_config.inc.php: file con le variabili da configurare
- [FILE] zs_user.php: script php per registrazione nuovo utente e cambio password
- [DIR] default: contiene i file per il template di default
   - [FILE] zs.css: css per il template di default
   - [FILE] login_template_default.html: pagina login di default
   - [DIR] images: contiene le immagini del template di default
- [DIR] custom: contiene i file per il template personalizzato
   - [FILE] zs.css: css per il template personalizzato
   - [FILE] login_template_custom.html: pagina login personalizzata
   - [DIR] images: contiene le immagini del template personalizzato




    --------------------------
    Spedizione SMS
    --------------------------

Gli SMS vengono spediti utilizzando Skebby, per utilizzare altre modalita', e' sufficiente modificare la classe 'zs_class_sms.inc.php' ricordando che la funzione di invio SMS deve chiamarsi 'Invio' ed essere invocata con il comando:
Codice:
$sms->Invio



    ------------------------
    Schema di rete
    ------------------------

Riporto uno schema di rete, per meglio spiegare i punti sotto.

Codice:
      INTERNET
          +
          |
          |
          |
    +-----+-----+
    |   modem   |
    +-----+-----+
          |
          |
          |  ETH00  192.168.10.10
      +---+---+
      |       |
      |   Z   |
      |   e   |
      |   r   | 
      |   o   |  Captive
      |   s   |  Portal
      |   h   |
      |   e   |
      |   l   |
      |   l   |
      |       |
      +---+---+
          |  ETH01  192.168.20.1
          |
          |
          |
+---------+---------+
|                   |
|                   |
|     client        |
|                   |
|   via ethernet    |
|                   |
|     o Wi-fi       |
|                   |
|                   |
|                   |
+-------------------+




    ---------------------
    Installazione
    ---------------------

1) Attiva la tua installazione di Zeroshell, richiedendo il 'feature code' come spiegato qui (http://www.zeroshell.org/activation)

2) Installa il pacchetto PHP dalla web-gui di Zeroshell

3) Installa i moduli pear per la Mail con il seguente comando da shell:

Codice:
pear install --alldeps Mail


4) Copia i file (php e css) presenti nel pacchetto (vedi punto sopra 'File presenti nel pacchetto') nella directory /var/www su Zeroshell

5) Per modificare testo e layout delle pagine html che vengono create, per prima cosa edita la variabile di configurazione $TEMPLATE che trovi nel file zs_config.inc.php scegliendo tra (maggiori informazioni si trovano nei commenti del file zs_config.inc.php):

Codice:
default: il template di default di Zeroshell
custom: template personalizzato


6) A seconda del template selezionato edita il file zs_template_default.inc.php (template di default) o il file zs_template_custom.inc.php (template personalizzato): per modificare il template e' necessario editare correttamente i vari campi dell'hash $MYTPL[].


    ------------------------
    Configurazione
    ------------------------

1) Dalla WEB-GUI di Zeroshell --> Users --> Captive Portal --> Authentication:
- modifica la 'Web Login Page Customization' in modo da inserire il link per la registrazione del nuovo utente ed eventuale cambio password:
- URL per registrazione nuovo utente:
Codice:
https://192.168.20.1/add-ons/zs_user.php?action=useradd&ZSCPRedirect=<ZS_TAG _ZSCPRedirect>

- URL per cambio password utente:
Codice:
https://192.168.20.1/add-ons/zs_user.php?action=userpwd&ZSCPRedirect=<ZS_TAG _ZSCPRedirect>

[sostituisci l'IP con quello del tuo Captive Portal, se invece di usare https preferisci http, leggi la sezione sotto denominata 'Usare HTTP']

- un esempio di pagina di autenticazione (che puoi copiare in questa sezione) la puoi trovare in:
- default/login_template_default.html
oppure
- custom/login_template_custom.html
- ricorda di modificare correttamente l'URL http[s]://192.168.20.1 a seconda se utilizzi http o https


2) Dalla WEB-GUI di Zeroshell --> Users --> Captive Portal --> Free Authorized --> abilita l'accesso alle pagine web con indirizzo
Codice:
https://192.168.20.1
e/o indirizzo
Codice:
http://192.168.20.1
Per utilizzare http invece che https, leggi la sezione sotto denominata 'Usare HTTP'
Vedi immagine di esempio Free authorized dove, a prescindere della scelta http/https, vengono fatte entrambe le abilitazioni per accedere alla pagina di registrazione nuovo utente / cambio password


3) Configura il tuo ambiente editando il file (nella directory /var/www):
Codice:
zs_config.inc.php



4) Maggiori informazioni sulla configurazione si trovano nei commenti all'interno del file zs_config.inc.php



    -------------------
    Usare HTTP
    -------------------

Di default gli script PHP vengono richiamati in https (scrivendo l'url in http si viene rediretti in https), portandosi dietro i problemi legati ai certificati auto-signed.
Per poter utilizzare l'http e' sufficiente seguire questi step:

1) Crea la cartella myscript in /Database:

Codice:
mkdir /Database/myscript


2) Copia il file httpd_port80.conf nella cartella /Database/myscript. Clicca qui per scaricare il file httpd_port80.conf

3) Dalla GUI di Zeroshell, seleziona la voce 'Scripts / Cron' dal Menu' System --> Setup

4) Dal menu' a tendina seleziona 'Post boot'

5) Inserisci questi comandi nel campo sottostante:

Codice:
# Startup Script
mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orig
cp /Database/myscript/httpd_port80.conf /etc/httpd/conf/httpd.conf
/etc/init.d/httpd restart

# permetto di accedere alla porta 80
iptables -I SYS_HTTPS 2 -m tcp -p tcp -i ETH01 --dport 80 -j ACCEPT


Vedi immagine di esempio Scripts / Cron

6) Riavvia Zeroshell



    -------------------
    Punti aperti
    -------------------

Di seguito vi riporto alcuni punti ancora aperti, ringrazio fin da ora chi vuole darmi una mano o dei suggerimenti:
- possibilita' di configurare da data di scadenza per ogni singolo utente (esempio 3 mesi), durante la registrazione LDAP/RADIUS
- scrivere in PHP la parte di inserimento utente e cambio password che adesso richiamano, tramite 'exec', i comandi shell
- aggiungere supporto per la lingua inglese
- integrare gli script direttamente sul servizio di login e non su un istanza di apache a parte
- testare gli script con la versione 3.7.1


    --------------------------------
    Scarica il pacchetto
    --------------------------------

versione del 14/06/2017 ZsUser.2017.06.14.tar.gz:
- scelta tra layout di default e layout personalizzato (come esempio viene riportato un layout adattativo a seconda del dispositivo usato dall'utente)
- possibilita' di bloccare l'accesso ad un utente

versione del 14/03/2016:
- uniformato layout con quello di default di Zeroshell
- possibilita' di attivare / disattivare la procedura di registrazione di un nuovo utente tramite la variabile '$USERregister' presente nel file 'zs_config.inc.php'

versione del 25/02/2016:
- versione iniziale

Se apportero' modifiche agli script PHP, sara' mia cura renderli disponibili in questa discussione (ad inizio post ho evidenziato la data di ultimo aggiornamento e la versione software).
Buona giornata.


L'ultima modifica di dadolo il Mer Giu 14, 2017 1:50 pm, modificato 2 volte
Top
Profilo Invia messaggio privato
truthahn



Registrato: 12/06/12 11:46
Messaggi: 2225

MessaggioInviato: Gio Feb 25, 2016 9:50 pm    Oggetto: Rispondi citando

Buonasera e benvenuto con questa bella novitą.
Ottimo!!! Questo porterą sicuramente ad ampliare ancor pił la possibilitą di scelta degli utilizzatori di Zeroshell e probabilmente sarą
facilitato l'aiuto e lo sviluppo da parte di altri. Buon lavoro e buona sperimentazione.
Grazie per averlo condiviso.
Top
Profilo Invia messaggio privato
fulvio
Site Admin


Registrato: 01/11/06 17:45
Messaggi: 1558

MessaggioInviato: Ven Feb 26, 2016 7:50 pm    Oggetto: Rispondi citando

Grazie anche da parte mia per questo
contributo.
Saluti
Fulvio
Top
Profilo Invia messaggio privato
tiger



Registrato: 02/02/16 10:34
Messaggi: 349

MessaggioInviato: Ven Mar 04, 2016 12:14 pm    Oggetto: Rispondi citando

e se volessi abilitare tale funzione al momento?
tipo in una scuola vengono in visita persone per cui richiedere a loro iscrizione con questo metodo, e poi stopparlo?
dovrei riconfigurare nuovamente il cp prima?
c'é un modo per renderlo operativo al momento?

Cmq complimenti Dadolo
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Ven Mar 04, 2016 1:39 pm    Oggetto: Rispondi citando

tiger ha scritto:
e se volessi abilitare tale funzione al momento?
tipo in una scuola vengono in visita persone per cui richiedere a loro iscrizione con questo metodo, e poi stopparlo?
dovrei riconfigurare nuovamente il cp prima?
c'e' un modo per renderlo operativo al momento?

Cmq complimenti Dadolo


Ciao Tiger, potresti crearti 2 template per il Captive portal, uno con le url per la registrazione e il cambio password e cambiarle a seconda delle esigenze.
Sicuro e' che le pagine rimangono quindi se qualcuno conoscesse l'url, le raggiungerebbe ugualmente.

Visto che, conto la prossima settimana, mettero' il nuovo codice con il layout uguale alla pagina di login, aggiungo questa funzionalita'... non mi costa molto lavoro.

Buona giornata
Top
Profilo Invia messaggio privato
tiger



Registrato: 02/02/16 10:34
Messaggi: 349

MessaggioInviato: Ven Mar 04, 2016 1:46 pm    Oggetto: Rispondi citando

Grazie mille.!!!
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Lun Mar 14, 2016 7:54 pm    Oggetto: Versione 14/03/2016 Rispondi citando

Ho messo online la versione 14/03/2016 con l'utilizzo del layout di default di Zeroshell per le pagine di registrazione nuovo utente e cambio password.
Su suggerimento di @tiger ho aggiunto la possibilita' di abilitare/disabilitare la procedura di registrazione di un nuovo utente.

Buona serata.
Top
Profilo Invia messaggio privato
tiger



Registrato: 02/02/16 10:34
Messaggi: 349

MessaggioInviato: Mar Mar 15, 2016 12:59 pm    Oggetto: Rispondi citando

Grazie Mille dadolo sempre al top....
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Mar Mar 15, 2016 8:13 pm    Oggetto: Rispondi citando

tiger ha scritto:
Grazie Mille dadolo sempre al top....


Fammi sapere se funziona tutto.
Se posso chiedere, usi Skebby per inviare gli SMS?
Top
Profilo Invia messaggio privato
tiger



Registrato: 02/02/16 10:34
Messaggi: 349

MessaggioInviato: Mar Mar 15, 2016 8:41 pm    Oggetto: Rispondi citando

Conto di testate il tuo script domani su una macchina zs di test. Si credo che useró skebby
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Mer Mar 16, 2016 8:21 am    Oggetto: Rispondi citando

tiger ha scritto:
Conto di testate il tuo script domani su una macchina zs di test. Si credo che useró skebby


Se hai occasione di provare con un numero di cellulare non italiano, fammi sapere se funziona correttamente: non ho avuto possibilitą di testarlo.

Grazie e buona giornata.
Top
Profilo Invia messaggio privato
tiger



Registrato: 02/02/16 10:34
Messaggi: 349

MessaggioInviato: Mer Mar 16, 2016 11:03 am    Oggetto: Rispondi citando

dadolo come accedi alla cartella /var/www?

per caricarci i file?


singolarmente tramite wget? con telnet? fammi sapere
Top
Profilo Invia messaggio privato
tiger



Registrato: 02/02/16 10:34
Messaggi: 349

MessaggioInviato: Mer Mar 16, 2016 11:45 am    Oggetto: Rispondi citando

ho risolto dando da shell il comando "chsh" nella shell zeroshell

dare /bin/bash come directory default

eppoi accedere alle acrtelle usando winscp dando ip ZS
porta 22

e credenziali di accesso.

in questo modo ho avuto accesso alle cartelle come fossi in ftp

see you
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Mer Mar 16, 2016 12:04 pm    Oggetto: Rispondi citando

tiger ha scritto:
ho risolto dando da shell il comando "chsh" nella shell zeroshell

dare /bin/bash come directory default

eppoi accedere alle acrtelle usando winscp dando ip ZS
porta 22

e credenziali di accesso.

in questo modo ho avuto accesso alle cartelle come fossi in ftp

see you


Ciao,
esatto, per copiare i file occorre utilizzare 'scp', 'winscp' o simili.
Scrivo di seguito i singoli passi che potrebbero interessare anche altre persone:

1) collegarsi via SSH al server Zeroshell, come utente 'admin':
Codice:
ssh admin@192.168.10.10

[modificare l'indirizzo IP con il proprio]

2) inserire la password con cui ci si collega a Zeroshell via web

3) selezionare:
Codice:
<S> Shell Prompt

4) editare il file delle password:
Codice:
vi /etc/passwd

5) modificare la riga:
Codice:
admin:x:0:0:root:/root:/root/kerbynet.cgi/scripts/localman

in
Codice:
admin:x:0:0:root:/root:/bin/bash

6) salvare

7) copiare i file con 'scp', 'winscp'....

N.B: al riavvio del server Zeroshell il file /etc/passwd ritorna quello originale
Top
Profilo Invia messaggio privato
emilio



Registrato: 27/11/15 21:56
Messaggi: 6

MessaggioInviato: Ven Apr 01, 2016 10:01 pm    Oggetto: ZS 3.5.0 update Rispondi citando

Ciao, bel lavoro.
Utilizzo i vecchi script per altri motivi e nell'ultima versione di ZS ho dovuto apportare qualche modifica. Probabilmente ne consegue, ma non ho potuto verificarlo, che il file zs_user.php andrebbe aggiornato:
linea 229 e 603 da
Codice:
objectClass: radiusprofile
cn: $_SESSION[cellulare]

a
Codice:
objectClass: radiusprofile
objectClass: radiusExtension
cn: $_SESSION[cellulare]

linea 609 da
Codice:
exec("$CMD[ldapmod] -D \"cn=Manager,$dn\" -x -w \"$ldap[password]\" <<EOF\n$useradd\nEOF\n", $output, $return);

a
Codice:
exec("$CMD[ldapmodify] -D \"cn=Manager,$dn\" -x -w \"$ldap[password]\" <<EOF\n$useradd\nEOF\n", $output, $return);


Grazie per aver condiviso il tuo lavoro.
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Ven Apr 08, 2016 10:10 pm    Oggetto: Re: ZS 3.5.0 update Rispondi citando

Ciao Emilio,
ti ringrazio per le osservazioni, per quanto riguarda la nuova versione di ZS non l'ho ancora provata e quindi non posso confermarti la prima modifica da te suggerita. Quando lo faro' rispondero' direttamente in questa discussione.

Non e' invece corretta la seconda modifica che suggerisci alla linea 609 del file zs_user.php, come puoi vedere in zs_config.inc.php, l'array associativo $CMD e' cosi' definito:
Codice:

$CMD = array(
   'ldapadd'   =>   '/usr/local/bin/ldapadd',
   'ldapmod'   =>   '/usr/local/bin/ldapmodify',
);
Top
Profilo Invia messaggio privato
emilio



Registrato: 27/11/15 21:56
Messaggi: 6

MessaggioInviato: Ven Apr 08, 2016 11:18 pm    Oggetto: Rispondi citando

Perdono, perdono, perdono... perdonato, vero?
La riga 609 č una mia svista!
Ho invece provato a verificare le prime due sulla 3.5:

root@zs ~> /usr/local/bin/ldapsearch -LLL -x
...
dn: cn=emilio,ou=Radius,dc=xxx,dc=xxx,dc=it
objectClass: organizationalPerson
objectClass: top
objectClass: radiusprofile
objectClass: radiusExtension
cn: emilio
sn: 23afe39f
dialupAccess: yes
...

Come vedi il comando restituisce il nuovo objectClass radiusExtention.
Questo potrą essere utile se qualcuno volesse utilizzare il tuo lavoro sulla 3.5 e forse anche per le tue future verifiche e aggiornamenti.
Ciao.
Top
Profilo Invia messaggio privato
xavier



Registrato: 23/02/14 22:19
Messaggi: 101

MessaggioInviato: Lun Mag 02, 2016 3:57 pm    Oggetto: Re: Script PHP Captive Portal con registrazione utente via S Rispondi citando

dadolo ha scritto:
1) Dalla WEB-GUI di Zeroshell --> Users --> Captive Portal --> Authentication:
- modifica la 'Web Login Page Customization' in modo da inserire il link per la registrazione del nuovo utente ed eventuale cambio password


Probabilmente sarą un stupidaggine, sto girando attorno alla schermata "Authentication" da un bel po', ma non riesco a vedere l'opzione per "inserire il link per la registrazione".

Chi mi aiuta a trovarla ?
Top
Profilo Invia messaggio privato
dadolo



Registrato: 09/02/16 23:39
Messaggi: 14

MessaggioInviato: Mar Mag 03, 2016 9:05 am    Oggetto: Re: Script PHP Captive Portal con registrazione utente via S Rispondi citando

xavier ha scritto:
dadolo ha scritto:
1) Dalla WEB-GUI di Zeroshell --> Users --> Captive Portal --> Authentication:
- modifica la 'Web Login Page Customization' in modo da inserire il link per la registrazione del nuovo utente ed eventuale cambio password


Probabilmente sara' un stupidaggine, sto girando attorno alla schermata "Authentication" da un bel po', ma non riesco a vedere l'opzione per "inserire il link per la registrazione".

Chi mi aiuta a trovarla ?


Ciao xavier,
guarda questo screenshot, sono indicati i passi per trovare la pagina 'incriminata'. Una volta premuto su 'Template', seleziona 'Use customized template' e, dal menu' a tendina affianco, 'View source': ti comparira' il codice della pagina a cui dovrai inserire quello riportato nel punto 1) Dalla WEB-GUI di Zeroshell --> Users --> Captive Portal --> Authentication

Facci sapere com'e' andata.
Top
Profilo Invia messaggio privato
xavier



Registrato: 23/02/14 22:19
Messaggi: 101

MessaggioInviato: Sab Mag 07, 2016 9:56 pm    Oggetto: Re: Script PHP Captive Portal con registrazione utente via S Rispondi citando

Provato tutto come da tue indicazioni fino al punto in cui dici

dadolo ha scritto:
ti comparira' il codice della pagina a cui dovrai inserire quello riportato nel punto 1) Dalla WEB-GUI di Zeroshell --> Users --> Captive Portal --> Authentication


Qua mi perdo completamente.

Non riesco a vedere un URL esistente nel codice del "customized template" da sostituire con il tuo.

Potresti postare uno spezzone di codice di quella pagina nel punto in cui hai inserito i tuoi due URL ?

Basterebbe una riga prima ed una dopo, giusto per capire in che tratto fare la modifica.
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> ZeroShell Tutti i fusi orari sono GMT + 1 ora
Vai a 1, 2  Successivo
Pagina 1 di 2

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it