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 ftproot Home Directory

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
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 wwwroot
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 ftp_adhoc wwwroot www.adhoc.net
Vi ricordate dell'ormai dimenticata ftproot Home Directory Home Directory Home Directory
Prima di assegnare la lettura sulla ftproot ftproot ftproot FTP Users FTP Users ftp_adhoc

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
- create l'utente ftp_html
- assegnate all'utente ftp_html FTP Users Users
- impostate i permessi in lettura/scrittura/cancellazione alla cartella www.html.it ftp_html
- create una directory virtuale nel servizio FTP di IIS con lo stesso nome dell'utente (nel nostro caso ftp_html
- 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.