In questo articolo illustrerò come configurare il servizio FTP di un server Microsoft per ospitare un hosting di siti. Il problema principale è quello che riguarda i permessi sulle cartelle e l'accesso esclusivo degli utenti FTP nel proprio sito senza poter visualizzare, o alla peggio, modificare file di altri utenti/siti. Il servizio da solo non è in grado di gestire al meglio questo tipo di controlli e quindi dobbiamo fare largo uso della protezione a livello di directory che il FileSystem NTFS ci offre.
Nelle istruzioni che seguono ipotizzerò di avere a disposizione un server Microsoft Windows 2000/2003 fresco fresco di installazione ;-)
Per prima cosa stabiliamo in quale percorso andremo a collocare i nostri siti. Ovviamente la prima cosa da fare sarebbe evitare di utilizzare la directory "C:Inetpubwwwroot" facile preda da parte di chi vuol rovinare il nostro sudato lavoro di configurazione. Ipotizziamo quindi di avere a disposizione un secondo disco D e creiamo la cartella
"Web" in root. All'interno di "Web" creiamo queste sottocartelle:
- wwwroot
- ftproot
All'interno di wwwroot collocheremo i siti da ospitare suddivisi in cartelle (un sito, una cartella) mentre la ftproot la utilizzeremo come Home Directory FTP (che analizzeremo in seguito).
Come già detto per configurare al meglio il servizio FTP è necessario utilizzare sapientemente i permessi NTFS sulle precedenti cartelle in modo da costruire un solido e sicuro strumento per i nostri utenti. Iniziamo ad indicare i permessi dalla cartella "Web": clicchiamoci sopra con il destro del mouse e selezioniamo la scheda Security
Da qui in poi tutti i file/cartelle presenti in "Web" dovranno ereditare i permessi che imposteremo: Administrators (il gruppo) e SYSTEM in FULL CONTROL. Eliminiamo quindi ogni altro utente presente (soprattutto EVERYONE). Attenzione: vi consiglio di effettuare queste modifiche solo su un server non ancora in produzione altrimenti rischiate di rendere inaccessibile il vostro server.
Poi, siccome la cartella wwwroot contiene i siti dei clienti e quindi vengono visitati da utenti anonimi, è necessario impostare i permessi in lettura per questi utenti:
Il gruppo Administrators e l'utente SYSTEM vengono ereditati direttamente dalla cartella "Web", mentre dobbiamo aggiungere l'utente IUSR_<nomemacchina> con permessi in sola lettura (gli utenti guest di Internet vengono identificati con questo utente).
Così facendo, tutti i siti presenti in wwwroot sono ad accesso in lettura per gli utenti anonimi.
Lanciamo quindi IIS e andiamo nelle proprietà del server FTP (che ovviamente dovrà essere stato installato). Come prima cosa entriamo nella scheda Security Accounts e disabilitiamo l'accesso anonimo al server in modo che gli utenti FTP dovranno indicare le proprie informazioni di accesso per accedere:
Bene, spostiamoci sulla scheda Home Directory. Qui dovremo indicare la directory di default del servizio FTP. Viene subito da pensare alla directory "D:Webwwwroot" perché è li che si trovano tutti i siti presenti sul server, ma purtroppo alla fine questa strada risulterà sbagliata. Facciamo comunque una prova: inseriamo per ora come Home Directory la cartella "D:Webwwwroot" ma senza dare i permessi in scrittura perché non serviranno. Infatti la gestione dei permessi verrà effettuata via NTFS.
Cominciamo con un esempio: ipotizziamo che il sito www.adhoc.net presente sul nostro server dovrà essere amministrato da un nostro cliente. La prima cosa da fare è creare un utente di Windows ed assegnargli una password:
Subito dopo eliminate l'assegnazione del gruppo Users per questo utente (di default Windows assegna i nuovi utenti al gruppo Users). In pratica l'utente in questione non deve essere assegnato ad alcun gruppo. Bene, ora assegniamo i permessi in lettura/scrittura per questo utente nella cartella www.adhoc.net:
Per i permessi di cancellazione è necessario entrare nella sezione Advanced ed indicare che l'utente può anche cancellare:
Ora l'utente ftp_adhoc potrà leggere, modificare e cancellare i file presenti nel suo sito. Questo utente però ha solo i permessi per lavorare all'interno del proprio sito, non può quindi ne leggere ne scrivere su altre cartelle del server. Tutto ciò è molto interessante perché se anche in qualche modo si trovasse (per caso...) in una cartella non di sua proprietà, non potrebbe leggere e tanto meno accedervi. È quindi estremamente importante capire come assegnare i permessi alle directory per evitare futuri problemi di sicurezza.
Benissimo, ora ritorniamo sull'IIS nel servizio FTP e creiamo una directory virtuale con lo stesso nome dell'account creato precedentemente. Solo così il servizio FTP saprà che quel utente va rediretto alla cartella, nel ns. esempio, www.adhoc.net:
Per quanto riguarda i permessi da assegnare a questa directory, indichiamo sia lettura che scrittura. Questo perché il servizio FTP verifica tali permessi prima di farlo a livello di FileSystem. Mi spiego meglio: ipotizziamo di impostare i permessi in lettura/scrittura per questa cartella ma nella scheda Security della cartella www.adhoc.net non abbiamo indicato quelli in scrittura:
- Permessi servizio FTP per directory virtuale ftp_adhoc
- lettura
- scrittura
- Permessi NTFS sulla cartella D:Webwwwrootwww.adhoc.net
- lettura
Il servizio FTP permette di scrivere in quella cartella ma
appena il FileSystem NTFS viene richiamato mediante accesso I/O questo nega la
scrittura su disco. Se avessimo impostato:
-
Permessi servizio FTP per directory virtuale ftp_adhoc
- lettura
-
Permessi NTFS sulla cartella D:Webwwwrootwww.adhoc.net
- lettura
- scrittura
non potevamo comunque scrivere nella cartella ma in questo caso sarebbe stato il servizio FTP a negarcelo. Capite ora l'importanza dei permessi NTFS, se il servizio FTP è di più facile attacco da parte di estranei, il FileSystem di Windows sempre più ostico da "bypassare".
Dopo aver creato la directory virtuale ftp_adhoc possiamo subito fare un test di collegamento al server FTP. Utilizzando un client FTP (o da shell di DOS) connettetevi indicando l'ip del server FTP, username e password. Se tutto stato fatto come ho illustrato, riceverete un bel messaggio di errore:
530 User ftp_adhoc cannot log in, home directory inaccessible
Leggendo il messaggio di errore si capisce subito il motivo: quel "home directory inaccessibile" ci fa capire che l'utente ftp_adhoc non ha i permessi in lettura alla directory "D:Webwwwroot". Ed infatti è proprio così, visto che su wwwroot ci sono Administrators, System e IUSR_<nomemacchina>!
Senza saltare a conclusioni affrettate pensiamo un attimo alla soluzione del problema. Cosa facciamo in questo caso? Diamo accesso in lettura a tutta la directory wwwroot? In questo modo però se l'utente ftp_adhoc entra via ftp al proprio sito e dalla root di esso "torna su" di directory che succederebbe? Eh si, avrebbe la possibilità di vedere tutte le cartelle presenti in wwwroot ed entrarci a suo piacere (ma senza effettuare modifiche perché solo in www.adhoc.net ha i permessi in scrittura). Questa però non è una soluzione molto elegante quindi adottiamo un piccolo stratagemma...
Vi ricordate dell'ormai dimenticata ftproot? Bene, proviamo a fare così: impostiamo questa directory come Home Directory del servizio FTP. In questo modo, quando un utente accede via FTP, il server redirige l'utente prima sulla Home Directory (ecco il perché dell'errore di prima) poi, se presente una directory virtuale con il suo stesso nome, all'interno della sua cartella. Quindi è necessario impostare i permessi in lettura alla cartella Home Directory (bastano in lettura, no?) e lettura/scrittura per quella del sito da gestire (cosa che abbiamo già fatto).
Prima di assegnare la lettura sulla ftproot però pensiamo anche ad un'altra cosa: per ogni utente ftp dovremmo aggiungere i permessi lettura/modifica alla sua cartella e lettura per la ftproot. Perché andare ad aggiungere n utenti in lettura sulla cartella ftproot quando possiamo benissimo creare un gruppo FTP Users (ad es.) che li raccolga tutti? Perfetto: creiamo quindi il gruppo FTP Users ed assegniamo l'utente ftp_adhoc a questo gruppo:
Ora impostiamo nella cartella ftproot i permessi in lettura per questo gruppo:
Ed ora che succede? Succede che l'utente ftp_adhoc, loggandosi via ftp, viene prima rediretto alla Home Directory dove ha i permessi in lettura (perché fa parte del gruppo FTP Users e questo gruppo può leggere in questa directory) e successivamente alla sua cartella personale www.adhoc.net (dove ha i permessi in lettura/scrittura). Proprio quello che volevamo! E se l'utente provasse a "tornar su" di directory? Beh, tornare su torna, ma viene rediretto alla Home Directory perché quella è la directory di default del servizio FTP. Ecco come abbiamo impostato il servizio:
Directory FTP | Directory fisica |
Home Directory | D:Webftproot |
ftp_adhoc | D:Webwwwrootwww.adhoc.net |
Come potete notare la directory wwwroot è ben protetta da questo piccolo trucco. Nella cartella ftproot ovviamente l'utente potrà solo leggere e null'altro. Possiamo pensare di inserire un qualche file di informazione per tutti gli utenti ad esempio.
Detto questo penso di aver concluso con le spiegazioni. Ora faccio un altro esempio: poniamo di aggiungere un nuovo sito sul server (ad es. www.html.it). I passi da seguire sono:
- creare la cartella www.html.it sotto "D:Webwwwroot"
- create l'utente ftp_html (ovviamente è solo un esempio voi potete nominarlo come più vi aggrada)
- assegnate all'utente ftp_html il gruppo FTP Users e togliete il gruppo Users
- impostate i permessi in lettura/scrittura/cancellazione alla cartella www.html.it per l'utente ftp_html
- create una directory virtuale nel servizio FTP di IIS con lo stesso nome dell'utente (nel nostro caso ftp_html), assegnate i permessi FTP in lettura/scrittura e fatela puntare alla cartella "D:Webwwwrootwww.html.it"
- effettuate un collegamento FTP di prova per testare il tutto
- ... ovviamente non dimenticatevi di creare il sito web sotto IIS ;-)
Volendo è possibile anche attivare la Quota su disco in modo da dare un massimo di spazio per ogni utente che possiede un sito.