Personalizzare e rendere informativo il logon di un Ubuntu Server
Prendiamo per esempio una situazione, avete creato una macchina virtuale che ospita un determinato servizio di rete, per renderla disponibile anche ad altri terminali è stata impostata come rete bridged in maniera che abbia una classe IP uguale a tutti, un IP statico in questo caso è sconsigliato in quanto potrebbe essere accesa in diversi uffici quindi con classi IP quasi sicuramente diverse.
Appoggiandosi però ad un server DHCP diverso di volta in volta per sapere che indirizzo IP viene assegnato dobbiamo eseguire il login.
Esiste la possibilità invece di personalizzare la schermata di login, per intenderci quella che si presenta alla richiesta dell’utente/password, inserendo determinate informazioni, ad esempio l’indirizzo IP ottenuto.
Per fare questo occorre modificare due file distinti, /etc/issue per gli accessi da terminale locale e /etc/issue.net per gli accessi remoti.
Nel nostro caso ci concentriamo solo su quello per gli accessi locali.
Creiamo ad esempio uno script che si occupi di ottenere l’indirizzo IP e scriverlo nel file /etc /issue:
1 |
sudo nano /root/customize-issue |
E inseriamo queste righe:
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash # otteniamo l'IP locale ip_lan=`ifconfig eth0 2> /dev/null | grep "inet addr" | awk '{ print $2 }' | awk -F: '{ print $2 }'` # puliamo il file echo "" > /etc/issue # Aggiungiamo le nostre informazioni echo "L'indirizzo IP è: $ip_lan" >> /etc/issue |
Aggiungiamo l’esecuzione del nostro script nel file /etc/rc.local e riavviamo, vedremo alla richiesta di login l’informativa dell’indirizzo IP locale assegnato dal server DHCP.
Nel caso che questa macchina virtuale abbia un altra funzione che non sempre possa risultare attiva possiamo rendere lo schermo di login dinamico in maniera che venga aggiornato di volta in volta quando una determinata condizione si presenta.
Mettiamo il caso che questa macchina virtuale debba collegarsi ad una VPN esterna e vogliamo indicare lo stato di connessione e magari anche il suo indirizzo IP quando collegato, quindi modifichiamo lo script di aggiornamento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash # otteniamo l'IP locale ip_lan=`ifconfig eth0 2> /dev/null | grep "inet addr" | awk '{ print $2 }' | awk -F: '{ print $2 }'` # otteniamo l'IP della VPN ip_vpn=`ifconfig tun0 2> /dev/null | grep "inet addr" | awk '{ print $2 }' | awk -F: '{ print $2 }'` # puliamo il file echo "" > /etc/issue # Aggiungiamo le nostre informazioni echo "L'indirizzo IP è: $ip_lan" >> /etc/issue # Aggiungiamo l'informativa che varia in base allo stato della VPN if [ "$ip_vpn" ]; then echo "+++++ VPN attiva +++++: IP $ip_vpn" >> /etc/issue else echo "----- VPN inattiva -----" >> /etc/issue fi |
A questo punto il primo problema che serve affrontare è che la schermata di login è basata su un file di testo e quindi è statica, di conseguenza anche cambiando il file /etc/issue l’informativa non viene aggiornata fino a che l’utente non aggiorna il terminale.
Per ovviare a questo problema ed essendo la macchina virtuale un servizio a cui appoggiarsi e che quindi non richiede un login da terminale di un utente è possibile dopo aver modificato il file richiedere un caricamento della schermata uccidendo il processo che tiene attivo il terminale locale in maniera che venga forzato ad essere riaperto, creiamo quindi un altro script che venga eseguito al boot e resti in esecuzione controllando sempre lo stato della connessione e nel caso ci sia una variazione aggiorni la nostra schermata di login:
1 |
sudo nano /root/check-vpn-state |
E scriviamo una cosa del genere:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#!/bin/bash ip_vpn="" ip_vpn_last="" while [ true ] do # Ottiene l'IP assegnato dalla VPN se presente ip_vpn=`ifconfig tun0 2> /dev/null | grep "inet addr" | awk '{ print $2 }' | awk -F: '{ print $2 }'` # Controlla lo stato della connessione if [ "$ip_vpn" != "$ip_vpn_last" ] then # Memorizza lo stato attuale ip_vpn_last="$ip_vpn" # Aggiorna l'informativa /root/customize-issue # Forza il riavvio del terminale locale kill $(ps aux | grep tty1 | awk '{ print $2 }' | head -1) fi # Aspetta 5 secondi prima di controllare nuovamente lo stato della connessione sleep 5 done |
Si edita quindi il file /etc/rc.local e si aggiunge l’avvio anche di questo script in maniera che venga eseguito in background:
1 2 3 4 5 |
# Aggiorna la prima schermata /root/customize-issue # Resta in attesa e aggiorna di volta al cambio dello stato della connessione VPN /root/check-vpn-state & |
Si riavvia e si controlla il risultato, subito si avrà il messaggio che la VPN è inattiva, poi dopo le inizializzazioni del servizio e quando si sarà stabilità la connessione vedremo l’informativa cambiare.