In passato ho pubblicato alcune informazioni per migliorare la sicurezza del server ssh, come 3 semplici passi per rinforzare il vostro server ssh o come utilizzare SSH per navigare più sicuri su reti pubbliche, oggi daremo uno sguardo ai moduli PAM di GNU/Linux e in particolare al modulo ssh e ad alcune opzioni che si possono attivare per rafforzare il nostro server ssh.
PAM (Pluggable authentication modules) sono un meccanismo per integrare schemi di autenticazione a più basso livello con una interfaccia ad alto livello di programmazione (API). Permette ai programmi che si basano su una autenticazione di essere scritti indipendente del sistema di autenticazione sottostante.
Se avete il server Openssh installato probabilmente avete già il modulo PAM installato e funzionante, questo è sicuramente vero per Debian/Ubuntu/Mint e Red Hat/Centos, il file di configurazione si trova in /etc/pam.d/sshd
e di solito non c’è bisogno di fare nulla, ma oggi vedremo come raggiungere questo obiettivo:
Abbiamo il nostro server SSH che chiameremo server A
Vogliamo che l’utente tom sia in grado di connettersi solo dalla macchina B al nostro server A
Vogliamo che l’utente mary sia in grado di connettersi solo dalla macchina B e C al nostro server A
Con la configurazione di sshd è possibile abilitare o disabilitare utenti singoli o gruppi per connettersi al server ssh, ma non si ha il controllo del’IP in grado di connettersi.
Con Iptables è possibile aprire la porta ssh (22 per impostazione predefinita) solo da un certo IP, ma non si ha alcun controllo sul nome utente.
La soluzione a questo problema è abilitare un’opzione che di solito è commentata nel file /etc/pam.d/sshd
:
#account required pam_access.so |
Quindi, è sufficiente rimuovere il # per togliere il commento e consentire una matrice di accesso più complesso da configurare nel file /etc/security/access.conf
Questo file contiene una tabella di autorizzazioni.
Quando qualcuno si collega, la tabella viene sottoposta a scansione cecrcando la prima voce che corrisponde alla combinazione (utente, host) o, in caso di login non di rete, la prima voce che corrisponde alla combinazione(utente, tty). Il campo delle autorizzazioni di questa voce di tabella determina se il login deve essere accettato o rifiutato.
Format of the login access control table is three fields separated by a “:” character:
Il formato della tabella di controllo degli accessi è composta di tre campi separati da un carattere “:” :
permessi : utenti : origine
Il primo campo dovrebbe essere un “+” (accesso garantito) o “-” (accesso negato).
The second field should be a list of one or more login names, group names, or ALL (always matches). A pattern of the form user@host is
matched when the login name matches the “user” part, and when the “host” part matches the local machine name.
Il secondo campo deve essere un elenco di uno o più nomi di login, i nomi dei gruppi, o ALL (sempre vero). Un modello nella forma user@host è trovato quando il nome di accesso corrisponda alla parte di “utente”, e quando la parte “host” corrisponde al nome del computer locale.
The third field should be a list of one or more tty names (for non-networked logins), host names, domain names (begin with “.”), host addresses, internet network numbers (end with “.”), ALL (always matches), NONE (matches no tty on non-networked logins) or LOCAL (matches any string that does not contain a “.” character).
Il terzo campo deve essere un elenco di uno o più nomi di TTY (per gli accessi non in rete), i nomi di host, nomi di dominio (iniziano con “.”), Gli indirizzi, i numeri di rete di host internet (terminano con “.”), ALL (sempre vero), NONE (non corrisponde ad alcun tty o accesso via rete) o locale (corrisponde a qualsiasi stringa che non contiene un carattere “.”).
L’operatore EXCEPT (eccetto) rende possibile scrivere regole molto compatte.
Alcuni esempi:
1) Abilitare l’utente root alla connessione solo dalla rete 192.168.201.
+ : root : 192.168.201.0/24 - : root : ALL |
Potreste anche scrivere queste 2 linee come:
- : root : ALL EXCEPT 192.168.201.0/24 |
2) Non consente gli accessi a tutti, tranne per gli username che sono iscritti al gruppo wheel:
-:ALL EXCEPT (wheel) : ALL |
Notare la stringa (wheel) che indica un gruppo, si potrebbe anche scrivere senza la parentesi, ma se avete un nome utente wheel l’utente sarà considerato al posto del gruppo.
3) Alcuni account sono disabilitati al login da qualsiasi provenienza:
-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL |
4) L’utenza “root” deve essere in grado di avere accesso dal dominio .linuxaria.com e non da tutti gli altri:
- : root : ALL EXCEPT .linuxaria.com |
Così ora, torniamo al nostro problema di partenza:
Abbiamo il nostro server SSH che chiameremo server A
Vogliamo che l’utente tom sia in grado di connettersi solo dalla macchina B (10.100.1.1) al nostro server A
Vogliamo che l’utente mary sia in grado di connettersi solo dalla macchina B (10.100.1.1) e C (192.168.0.1) al nostro server A
Quindi sul nostro server A avremo questa configurazione nel file /etc/security/access.conf
+: tom mary : 10.100.1.1 +: mary : 192.168.0.1 - : tom mary : ALL |
Non è così difficile, dopo tutto, ottenere una matrice complessa di sicurezza per il nostro server ssh e raggiungere risultati complessi.
Popular Posts:
- None Found