Configurare un file server domestico 

L’utilizzo più comune di un server domestico è quello di salvataggio e condivisione di file, oltre che, eventualmente, utilizzarlo come router nel caso possegga almeno due schede di rete (configurare un server come router). Configurare un pc affinché svolga la funzione di file server all’interno della propria LAN non è un procedimento complicato; è sufficiente scaricare, se non li abbiamo già installati, tre programmi fondamentali: samba, per la condivisione di file e cartelle,vsftpd, per il trasferimento tramite protocollo FTP, e openSSH, per l’amministrazione in remoto del pc-server.

Per l’istallazione dei sopracitati programmi digitare dal terminale:

# apt-get install openssh-server vsftpd samba

Terminata l’installazione, si dovrà procedere alla configurazione degli stessi; in prima istanza, però, sarà necessario installare su ogni client che si collegherà alla rete, e dal quale si intende di poter amministrare il server in remoto,  il programma openssh-client:

# apt-get install openssh-client

Il protocollo ftp e sftp operano di default rispettivamente attraverso la porta 21 e 22, si dovra quindi verificare che tali porte non siano bloccate in ingresso e in uscita dal firewall installato sul proprio sistema. Sui sistemi Ubuntu, per impostazione predefinita, il firewall iptables installato non dispone di regole di limitazione del traffico di rete, le porte sono tutte aperte; ad ogni modo, è possibile verificare lo stato del proprio firewall attraverso il comando iptables -L:

# iptables -L

se si ottiene un output di questo genere, allora iptables è attivo ma non è impostato per bloccare il traffico su nessuna porta:

Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Se ci interfacciamo sulla WAN internet tramite un router che permette di nascondersi dietro un NAT, come accade oramai in tutti i router-modem in commercio, impostare particolari regole sul firewall interno non risulta essere particolarmente necessario, in quanto il mascheramento offerto dal servizio di Nettwork Address Traslation (NAT) è sufficiente a scongiurare attacchi da fonti esterne. Potete quindi lasciare il vostro firewall così com’è e proseguire nella configurazione dei programmi. Naturalmente, quanto descritto in questo articolo è utile a configurare un file server domestico accessibile ai computer di una LAN, non sarà certamente valido per accedervi dall’esterno (configurare un virtual server – port farwording).

Il servizio SSH per amministrare in remoto il file server

OpenSSH è un’applicazione che consente principalmente di controllare in modo sicuro, in remoto, un pc ove vi sia installato un server ssh, tramite un altro computer, ove vi sia installato un client ssh nel sistema. Di per sé, per un’amministrazione di base da remoto, il programma non necessita di particolari configurazioni, una volta installato il lato server e il lato client, openssh è pronto per il suo utilizzo; potete trovare comunque tutti i dettagli per la configurazione di /etc/ssh/ssh_config sulla guida di debian.

In fase di installazione della distribuzione server scelta per il PC che svolgerà tale funzione all’interno della LAN, sarà stata  creata almeno un’ utenza privilegiata, appartenente al gruppo sudo, capace qundi di elevarsi ad amministratore di sistema. Per effettuare l’accesso in remoto dal client prescelto per tale operazione, sarà necessario conoscere lo username e la password di tale utenza. La sintassi da terminale per l’acceso in remoto è la seguente: digitare dal computer-client il seguente comando:

$ ssh username_utente@ip-del_server_remoto

Quindi, se abbiamo un’utenza sul pc-server della LAN la cui useranme corrisponde a user1 e l’ip del server corrisponde a 192.168.0.1 digiteremo quanto segue:

$ ssh [email protected]

Una cosa importante per amministrare correttamente un server da remoto è quella di assegnare un ip interno statico al server stesso, onde evitare che si modifichi periodicamente grazie al servizio DHCP, solitamente abilitato sul router (IP statico, come impostarlo sul iproprio pc).

Una volta esuguito il comando ssh si otterrà un output – solo la prima volta che si effettua la connessione – contenete la chiave pubblica del pc remoto a cui si sta tentando di accedere, con la relativa richiesta di accettazione. Premete invio e vi verrà chiesta la password utente, digitatela, e in pochi secondi, probabilmente anche meno, sarete pronti ad amministrare il vostro server come se foste in locale.

L’amministrazione da remoto tramite ssh è identica all’amministrazione in locale; potrete eseguire tutti i comandi utilizzando l’utente con cui avete effettuato l’accesso al pc remoto: installare e rimuovere i programmi, configurare il sistema, copiare, spostare e rimuovere file e cartelle etc. . È possibile, inoltre, copiare file dal client al server, e dal server al client tramite il comando scp, digitare dal computer client, rispettivamente, i seguenti comandi

$ scp ∼/file.txt  [email protected]:∼/file.txt
$ scp [email protected]:∼/file.txt  . 
[un semplice punto per copiare nella posizione corrente]
$ scp [email protected]:∼/file.txt  /percorso/file.txt 
[per copiare nella posizione indicata]

Se si vuole rinominare il file è sufficiente scrivere:

$ scp ∼/file.txt  [email protected]:∼/nuovo_nome.txt
$ scp [email protected]:∼/file.txt  /percorso/nuovo_nome.txt

Per riavviare o arrestare  il sistema si debbono digitare rispettivamente i seguenti comandi:

$ ssh reboot [email protected]
$ ssh shutdown -h now [email protected]

Configurare vsftpd

Un’altra componente fondamentale per un file server funzionale, consiste nella possibilità di sfruttare il veloce protocollo ftp per il trasferimento di file. Per farlo, sarà necessario installare un server ftp quale vsftpd sul computer che svolgerà tale funzione, e un client ftp come fileZilla su ogni pc-client della LAN. Abbiamo già installato all’inizio l’applicazione vsftpd sul nostro pc-server, non rimane che configurarla.

Il file di configurazione si trova in /etc/vsftpd.conf, come tutti i file di configurazione di Linux interamnete editabile:

Create una copia di sicurezza tramite il comando cp:

# cp /etc/vsftpd.conf    /etc/vsftpd.conf.old

Aprite quindi il file con un editor di testi per la modifica dei parametri di configurazione:

# nano /etc/vsftpd.conf

Il file /etc/vsftpd.conf è interamente commentato, e presenta una certa quantità di parametri impostabili; ne vedremo solamente alcuni, quelli utili a configurare un sicuro e funzionale server ftp.

Complessivamente il file vsftpd.conf dovrà apparire come segue:

#file di configurazione ftp server
listen=YES
#listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Se si utilizza l’editor di testi nano, poiché che non consente una rapida cancellazione del testo, il miglior modo di procedere è quello di creare una copia di sicurezza di vsftpd.conf, come detto sopra, cancellare quindi vsftpd.conf e creare un nuovo file:

# cp /etc/vsftpd.conf  /etc/vsftpd.conf.old
# rm /etc/vsftpd.conf
# nano /etc/vsftpd.conf

Copiate e incollate nel nuovo file i parametri sopra indicati, salvate e chiudete il file, quindi riavviate vsftpd:

# service vsftpd restart

Con questo tipo di file di configurazione di base abbiamo impostato il server ftp affinché non accetti le connessioni anonime, ma solo quelle provenienti dagli utenti di sistema.

Se lo si desidera, è possibile permettere l’accesso ftp ai soli utenti contenuti in una certa lista, da creare con un editor di testi nella posizione/etc/vsftpd.user_list.

Create la lista degli utenti in un file di testo, un utente per ogni riga, denominato /etc/vsftpid.user_list:

# nano /etc/vsftpd.user_list

Inserire gli utenti nel file di testo in questo modo:

utenteftp1
utenteftp2
utenteftp3
[etc...]

Salvate e chiudete il file.

Aggiungete quindi le seguenti righe al file di testo /etc/vsftpd.conf:

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list

Se si opta per una configurazione di questo genere, sarà utile modificare i permessi delle cartelle degli utenti di sistema, in lettura, scrittura ed esecuzione, al fine di non consentire agli utenti stessi di accedere alle cartelle altrui:

# chmod og-rwx /home/cartella_utente

È inoltre possibile eliminare i privilegi di amministrazione degli utenti impedendogli di autenticarsi tramite sudo, al fine di non consentire agli stessi di amministrare il server da remoto tramite il protocollo ssh:

# delgroup <nomeutente> sudo

Configurare Samba

Fino a questo punto abbiamo configurato il servizio ssh e vsftpd sia per amministrare da remoto il nostro server, sia per sfruttare il trasferimento dati tramite protocollo FTP. Adesso dobbiamo configurare il server Samba al fine di esplorare in locale dai client della rete le cartelle condivise del computer-server.

Per utilizzare correttamente Samba sarà necessario controllare che le porte 137, 138 e 139 siano aperte tramite il comando $sudo iptaples -L e, nel caso vi fosse una regola restrittiva impostata su quelle porte, sarà necessario aprirle.

Per la cofigurazione di Samba, invece, vi rimando all’articolo configurare samba e eseguire il mount delle risorse condivise Samba .

Terminata la configurazione di Samba il file server sarà interamente configurato per poter essere utilizzato in tutti i suoi aspetti fondamentali.

Gestione degli utenti

nell’articolo precedente (configurare un file server dmestico – parte 2)  si è visto come impedire a degli utenti di sistema di amministrare il server remoto tramite il server ssh e come modificare i permessi delle cartelle utente affinché gli stessi possano accedere soltanto alla propria home directory.

Esiste però un altro sistema, forse più lineare, per bloccare gli utenti nella propria cartella e per impedire ad essi di autenticarsi in remoto tramite il serviziossh, ed è quello di non fornire loro una shell di lavoro valida. Per creare questo tipo di utenti è necessario utilizzare il comando useradd.

# useradd  -c "nome completo utente"  -g <nome_gruppo>  -m  -s /bin/false  -d /percorso/cartella_utente  <username>

Così, se dovessimo aggiungere un utente con nome Mario Rossi, dorevmmo creare anzitutto il gruppo di lavoro ftp, quindi, creare l’utente con il comando sopra indicato; il tutto nel seguente modo:

# addgroup gruppo-ftp
# useradd  -c "Mario Rossi"  -g gruppo-ftp  -m  -s /bin/false  -d /home/mario  mario

A questo punto, senza entrare in dettagli tecnici riguardo l’autenticazione, modifichiamo il file /etc/shells aggiungendo allo stesso la riga /bin/false:

# nano /etc/shells

Il file editato apparira simile al seguente:

# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

Aggiungiamo in fondo la riga /bin/false:

# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/false

salviamo e chiudiamo il file.

Ora potrete accedere al server ftp tramite l’utente mario, ma non lo potrete utilizzare per autenticarvi per l’amministrazione da remoto ssh.

Per far si che gli utenti del gruppo  gruppo-ftp  siano bloccati all’interno della propria home directory sarà necessario, invece, modificare ancora il file di configurazione di vsftpd decommentando (togliendo il simbolo #) la seguente riga:

chroot_local_user=YES

se invece vogliamo limitare solo un gruppo di utenti al solo utilizzo della propria home dirctory, dobbiamo creare un file di testo contenente la lista degli utenti interessati, uno per ogni riga, e salvarlo in /etc/vsftpd.chroot_list, quindi decommentare le seguenti righe al file di configurazione di vsftpd:

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Naturalmente, ricordo che ogni volta che si modifica il file di configurazione è necessario riavviare il servizio di vsftpd con uno dei seguenti comandi:

# service vsftpd restart
# /etc/init.d/vsftpd restart
# systemctl restart vsftpd