Nel precedente post avevo introdotto (spero) IIS7 e la modalità di autenticazione "embedded", ossia senza far ricorso ad account Windows locali per l'autenticazione.
Ora parlermo di come configurarne uno.

Innanzitutto parliamo del servizio FTP Publishing

Per configurare un FTP occorre avere installato il servizio FTP Publishing.
Se avete IIS 7.5 è già incluso nella pacchetto IIS (incluso, non installato) altrimenti occorre scaricarlo da qui:
 - FTP 7.5 for IIS 7.0 (x64)
 - FTP 7.5 for IIS 7.0 (x86)

Per installarlo (e quindi poi configurarlo dalla console IIS), occorre avviare la console Server Manager (da administrative tools) e aggiungere il servizio FTP al ruolo Web Server IIS.
E' tutto dettagliato qui: http://learn.iis.net/page.aspx/29/installing-iis-70-on-windows-server-2008/

Già che ci siamo, installiamo anche i servizi Url Authorization sotto "Web Server - Security",  e il servizio Management Service sotto "Management". Ci serviranno più avanti.




Se tutto è andato bene, dovremmo avere IIS 7.x configurato e con il servizio FTP pronto all'uso. Ce ne accorgiamo aprendo la console IIS (IIS 7.0 Manager): vedremo due gruppi di nuove icone (FTP e Management).

NB: IIS Manager è alla versione 7.0, ma serve a gestire sia IIS 7.0, sia IIS 7.5. Questo ha generato un po' di confusione, all'inizio... e credo che ancora ne generi, dal momento che molti di noi confondono un servizio (IIS 7.x) con la console di gestione (IIS 7 manager).

A questo punto potremmo andare avanti per delle ore a tradurre praticamente tutto quanto scritto su learn.iis.net, ma ricordiamoci il nostro scopo:
1) creare un sito web
2) garantire l'accesso FTP ad un utente non windows
3) garantire l'accesso in HTTP ad un altro utente (o allo stesso)

Sul primo punto non ci sono problemi, spero. Creiamolo con accesso anonimo, standard. Poi vedremo come customizzarlo.
Partiamo col secondo.

Configurazione di un account IIS

Solo 5 step (http://learn.iis.net/page.aspx/321/configure-ftp-with-iis-70-manager-authentication/):
   
1) fornire le grant all'account Network Service in modo che possa "andare in giro" per la System32 a leggere le configurazioni di IIS; dal prompt, una riga per volta:
  • CACLS "%SystemDrive%\Windows\System32\inetsrv\config" /G "Network Service":R /E
  • CACLS "%SystemDrive%\Windows\System32\inetsrv\config\administration.config" /G "Network Service":R /E
  • CACLS "%SystemDrive%\Windows\System32\inetsrv\config\redirection.config" /G "Network Service":R /E
2) creare una cartella di root dell'FTP (ad esempio c:\ftproot, per essere originali)

3) dare le grant all'account Network Service:
CACLS "c:\ftproot" /G "Network Service":C /T /E

4) abilitare l'autenticazione usando le credenziali di IIS: aprire IIS Manager, click sul nome del server, selezionare Management Service,

e poi Windows Credentials or IIS Manager credentials.

Non dimenticare di cliccare su apply ;)

5) aggiungere il nostro utente: di fianco a Management Service click su IIS Manager Users, e poi add user in alto a destra (http://learn.iis.net/page.aspx/321/configure-ftp-with-iis-70-manager-authentication).

A questo punto il nostro utente può accedere a qualunque applicazione di IIS, FTP o web non importa. vediamo come.

Configurazione di un nuovo sito FTP

Seguiamo il wizard per creare un sito FTP:
1) specifichiamo la root di prima (c:\ftproot)
2) eventuali hostname
3) ignoriamo l'SSL (sì può fare anche quello, ma non occupiamocene adesso)
4) authentication: NON selezioniamo "basic authentication", tanto meno "anonymous"
5) authorization: NON selezioniamo nulla
6) fine.

Se abbiamo fatto le cose per bene avremo il ns FTP configurato.
Perché tutto funzioni, dobbiamo fare le seguenti verifiche:

1) click su FTP authentication: deve essere abilitata la voce IisManagerAuth
 1.1) click su Custom Providers in alto a destra


 1.2) click su IisManagerAuth

 1.3) ok
 1.4) le altre modalità possiamo anche disabilitarle

2) click su FTP Authorization Rule: dobbiamo aggiungere il nostro utente
 2.1) click su Add allow rule

 2.2) specificare l'utente e assegnargli i permessi r/w

 2.3 ok

3) dobbiamo aggiungere il nostro utente anche in IIS Manager Permission

 3.1) allow user

 3.2) flag su IIS Manager

 3.3) digitare il nome dell'utente o selezionarlo mediante il tasto select di fianco
 3.4) ok

4) Fine. Il ns utente accede al ns FTP site con le credenziali fornite.

Luuunga, ma ce l'abbiamo fatta. E' più difficile a scrivere che a farsi.

Configurazione delle restrizioni di accesso sul website

Il sito creato al punto 1 è ora pubblico, accessibile a chiunque, e il ns utente può accedere in FTP. Solo lui.
Per fare in modo che anche il sito non sia fruibile in modalita anonima, occorre crearsi un altro account IIS come visto sopra e seguire i senguenti passi:
1) se abbiamo installato il servizio Url authorization, nel gruppo IIS del nostro website (o di qualunque cartella o risorsa del sito), vedremo l'icona Authorization Rules
2) click, rimuoviamo l'accesso di utenti anonimi
3) specifichiamo un utente preciso (il nostro) con Add allow rule



3) eventualmente restringiamo il "verb" get/post se vogliamo essere pignoli
4) ok

Digitiamo l'url del ns sito: se tutto funziona, ci si presenta presenta una form per l'autenticazione. In caso contrario dobbiamo eseguire un ultimo step: aprire il web.config nella root del sito e modificarlo come segue (grassetto):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
  <modules>
   <add name='WebManagementBasicAuthentication' type='Microsoft.Web.Management.Server.WebManagementBasicAuthenticationModule, Microsoft.Web.Management, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' />
  </modules>
  <security>
   <authorization>
    <remove users="*" roles="" verbs="" />
    <add accessType="Allow" users="mio_user" />
   </authorization>
  </security>
 </system.webServer>
</configuration>

Non ho capito il motivo di questo passaggio, in quanto davo per scontata l'esistenza di questo modulo nel machine.config, ma è stata l'unica cosa che mi ha consentito di far funzionare il tutto.

Si noti la sezione <authorization />: è stata creata da direttamente da IIS. Noi non abbiamo fatto nulla.

Digitiamo l'url del ns sito: ora tutto funziona. Se così non fosse... ho cannato il post :)

Le immagini del post sono "rubate" dal sito learn-iis. Mi scuso per eventuali incoerenza fra nomi utente e figure.

Tutto quanto è stato fatto da console IIS (IIS 7.0 Manager) è possibile farla da file di configurazione (web.config) o da console. Mi (e vi) risparmio i dettagli, grazie :)

Where do you go from here? IIS 7.x offre tanto. E' stato un po' articolato configurare un FTP in SSL, ma per problemi di firewall e di filezilla (client). Ho usato un certificato autogenerato, tra l'altro.
E' possibile creare un FTP di default per ciascun sito web presente (tasto dx -> add ftp site): più facile di così si muore! :)
E' possibile anche creare un FTP con accesso anonymous e cartelle virtuali con accesso esclusivo. Questa è stata la chicca: ne parlerò nel prossimo post.

Vorrei provare a smanettare con webdav, ma devo trovare il tempo. Intanto mi segno il link.

, , , ,

hth,
a.