Scenario
Server Web su cui N sviluppatori hanno la necessità di caricare i nuovi contenuti. Poichè tale server risulta già raggiungibile via SSH, si vuole utilizzare il protocollo SFTP per il trasferimento dei file, sostanzialmente per due ragioni:
1) Esporre su Internet il minor numero di porte. Infatti, il protocollo SFTP sfrutta la stessa porta TCP del protocollo SSH (ovvero la 22);
2) SFTP è molto più robusto del File Transfer Protocol (FTP), in quanto garantisce alcuni meccanismi di sicurezza quali confidenzialità e soprattutto autenticazione della fonte.
Inoltre, la directory target di ogni sviluppatore è la medesima ed i file caricati da uno devono essere accessibili in lettura/scrittura da tutti gli altri (tenendo sempre traccia di chi-ha-fatto-cosa, ecco spiegato il perchè della multiutenza).
Preparazione della macchina
La prima cosa da fare è, ovviamente, creare le utenze per ciascun sviluppatore. E' possibile fare ciò semplicemente utilizzando il comando useradd:
[root@serverWeb ~]# useradd devel1
[root@serverWeb ~]# useradd devel2
[root@serverWeb ~]# useradd devel3
A questo punto, è necessario settare la password di default per ciascuna utenza. Essa potrà essere modificata in un secondo momento dallo sviluppatore stesso:
[root@serverWeb ~]# echo 'devel1:passworddevel1'|chpasswd
[root@serverWeb ~]# echo 'devel2:passworddevel2'|chpasswd
[root@serverWeb ~]# echo 'devel3:passworddevel3'|chpasswd
Notate che ho utilizzato tale sintassi anzichè il classico comando interattivo:
[root@serverWeb ~]# passwd <nomeutente>
in quanto risulta più comoda nel caso in cui si dovessero creare molte utenze.
A questo punto creiamo il gruppo di che identificherà gli sviluppatori
[root@serverWeb ~]# groupadd web
e facciamo in modo che essi ne facciano parte (modificando il loro gruppo di default che è semplicemente uguale al nome utente scelto):
[root@serverWeb ~]# usermod -g web devel1
[root@serverWeb ~]# usermod -g web devel2
[root@serverWeb ~]# usermod -g web devel3
Infine, modifichiamo la home directory degli utenti appena creati, mediante il comando usermod (consentendo loro di atterrare direttamente sulla dir in cui dovranno essere caricati i contenuti Web):
[root@serverWeb ~]# usermod -d /var/www/html devel1
[root@serverWeb ~]# usermod -d /var/www/html devel2
[root@serverWeb ~]# usermod -d /var/www/html devel3
Posizioniamoci adesso nella dir /var/www/ e lanciamo i seguenti comandi:
[root@serverWeb ~]# chown root:web -R html
[root@serverWeb ~]# chmod 775 -R html
[root@serverWeb ~]# chmod g+s -R html
Con il primo comando abbiamo semplicemente modificato il gruppo proprietario della directory html; con il secondo comando abbiamo fatto in modo che tutti i file (e le subdirectory) garantiscano tutte le operazioni (read, write, execute) all'owner (root) ed al gruppo proprietario (web).
Infine, con il terzo comando, stiamo facendo in modo che qualunque nuovo file o directory che verrà creato all'interno di html abbia come proprietario il gruppo Web.
Configurazione di sshd
Questa è sicuramente "la parte facile" della guida, in quanto è sufficiente inserire una piccola flag all'interno del file di configurazione del demone SSH, ovvero /etc/ssh/sshd_config. In particolare, la entry:
Subsystem sftp /usr/libexec/openssh/sftp-server
dovrà diventare:
Subsystem sftp /usr/libexec/openssh/sftp-server -u 002
dove -u significa umask e rappresenta i permessi di default dei nuovi file e directory che verranno caricati mediante SFTP.
Riavviamo sshd:
[root@serverWeb ~]# service sshd restart
ed abbiamo finito.
Ora gli sviluppatori ci ringrazieranno.
Alla prossima.