Utiliser curl pour récupérer des logs sur un serveur Microsoft IIS avec l'authentification ntlm


Quand il s'agit de récupérer des fichiers depuis un serveur Web Microsoft IIS, (sisi ça arrive dans la vie d'un sysadmin linux) il ne faut pas hésiter à utiliser curl (en lieu et place de wget)
En effet curl (via libcurl) supporte toute les variantes d'authentification dont certaines spécifiques à Microsoft comme le fameux ntlm.
Pour vérifier si vous avez déjà curl vous pouvez exécuter un simple
dpkg -l |grep curl
Ce qui dans mon cas donne sur une Ubuntu 9.1 :
ii  curl                 7.19.5-1ubuntu2       Get a file from an HTTP, HTTPS or FTP server
ii  libcurl3             7.19.5-1ubuntu2       Multi-protocol file transfer library (OpenSS
ii  libcurl3-gnutls      7.19.5-1ubuntu2       Multi-protocol file transfer library (GnuTLS
ii  libcurl4-gnutls-dev  7.19.5-1ubuntu2       Development files and documentation for libc
ii  php5-curl            5.2.10.dfsg.1-2ubuntu6.3  CURL module for php5
Vous pouvez le cas échéant installer ces paquets avec un gestionnaire de paquets graphique (tel synaptic) ou avec un simple :
sudo apt-get install curl

voici un exemple d'utilisation :
curl --proxy '' --verbose --ntlm --netrc http://myserver.mydomain.ch/iislog/
toutes les nombreuses options sont documentées dans les "man" pages ou en ligne sur le site de curl
Dans cet exemple j'utilise notamment :
  • --proxy '' : pour forcer la non-utilisation du proxy d'entreprise, en effet dans mon cas j'ai une variable d'environnement du style  "http_proxy=http://monproxy.mondomaine.ch:8080/" qui existe et curl et assez futé pour l'utiliser par défaut, sauf que dans mon cas je veux aller sur un serveur en interne d'ou mon besoin de désactivez l'usage du proxy
  • --verbose : pour avoir quelques infos utile en cas de problèmes, pratiquement cette option n'est que rarement utilisée en production
  • --ntlm  : dans ce cas je force l'utilisation de l'autentification ntlm, j'aurais pu utiliser --anyauth et curl aurait essayé différent mode d'authentification jusqu'à trouver le bon (dans ce cas --verbose prend tout son sens) en production il est de bon ton d'utiliser directement le bon mode ( --basic, --digest, --ntlm, and --negotiate.
  • --netrc : cette option demande à curl de scanner le contenu du fichier .netrc (_netrc on Windows) pour connaitre les utilisateurs et les mot de passes pour un serveur donné en gros le format du fichier est le suivant pour chaque ligne on a : machine monserveur.mondomaine.com login monusername password monmotdepassesecret.
     

D'ailleurs il est utile de préciser pour cette dernière option que ce fichier .netrc doit se trouver dans votre répertoire HOME, et que donc curl va voir ou se trouve votre HOME en regardant dans le contenu de la variable d'environnement HOME. (par exemple HOME=/home/cgil) 
si d'aventure vous êtes sur une Ubuntu ou un autre dérivé de Debian, il y a des fortes chances que vous usiez et abusiez du "sudo qqcchose" or dans ce cas il faut juste prendre garde au fait que bien qu'on agisse en tant que USER root il se trouve que dans ces distributions la variable d'environnement HOME reste elle fixée à votre HOME de simple mortel et utilisateur lambda.
Ce qui fait que curl ou un shell script utilisant curl avec l'option --netrc ira chercher le fichier --netrc dans votre HOME en non pas dans le HOME théorique de /root comme on pourrait s'y attendre pour vérifer cela il suffit de :

cgil@neotux:~$ env|grep -E 'USER|HOME'
USER=cgil
USERNAME=cgil
JAVA_HOME=/opt/jdk/
HOME=/home/cgil
cgil@neotux:~$ sudo env|grep -E 'USER|HOME'
HOME=/home/cgil
USER=root
USERNAME=root
SUDO_USER=cgil
ceci a parfois des effets de bords fort génants et je trouve personnellement que le HOME devrait toujours suivre le USER

Commentaires

Posts les plus consultés de ce blog

Comment extraire les fichiers disques en raw d'un backup proxmox vma

Find the lists of disks of your Proxmox VM stored in a ceph cluster