curl : utiliser une version plus récente sur macOS

Le système macOS dispose en standard de curl. Mais ce binaire n'est pas forcément dans une version assez récente, ou alors certaines options ne sont pas compilées.

Installation de curl par pkgin

Nous allons, grâce à pkgsrc, installer une autre version, sans toucher à celle installée par défaut. Pour cela, le prérequis est de suivre mon tutoriel pour installer pkgsrc. Une fois que c'est fait, une commande suffit :

sudo pkgin in curl

Comme vu dans les billets précédents, installer un logiciel grâce à pkgin est très simple. En plus, si la variable d'environnement $PATH définit l'emplacement des programmes issus de pkgsrc avant ceux du système, la prochaine invocation de curl dans le terminal sera celle que nous venons d'installer.

Mais il se peut qu'on ait besoin de plus : par exemple, ajouter ou retirer des options de compilation. Passons donc à une autre méthode d'installation, via les sources.

Installation de curl par compilation des sources

Tout d'abord, comparons les versions et les options de compilation :

nils@dalaran-wifi:~$ /usr/bin/curl -V
curl 7.51.0 (x86_64-apple-darwin16.0) libcurl/7.51.0 SecureTransport zlib/1.2.8
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
nils@dalaran-wifi:~$ /opt/pkg/bin/curl -V
curl 7.53.1 (x86_64-apple-darwin13) libcurl/7.53.1 OpenSSL/1.0.2k zlib/1.2.8 libssh2/1.8.0 nghttp2/1.20.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy

Une option dont on a besoin n'est pas présente ? Ce n'est pas grave, car on peut l'ajouter. L'étape suivante consiste à lister les options disponibles :

    nils@dalaran-wifi:/opt/pkgsrc/www/curl$ bmake show-options
    Any of the following general options may be selected:
    gssapi     Enable gssapi (Kerberos V) support.
    http2     Add support for HTTP/2.
    inet6     Enable support for IPv6.
    ldap     Enable LDAP support.
    libidn     Add support for libidn text conversion.
    libssh2     Use libssh2 for SSHv2 protocol support.
    rtmp     Enable rtmp:// support using rtmpdump.

    These options are enabled by default:
    inet6 libidn

    These options are currently enabled:
    inet6 ldap libidn libssh2

    You can select which build options to use by setting PKG_DEFAULT_OPTIONS
    or PKG_OPTIONS.curl.

On peut alors éditer _/opt/pkg/etc/mk.conf.local_ (en tant que root, ou via _sudo_) et ajouter des options, comme par exemple http2 :

PKG_OPTIONS.curl+= http2

Et ensuite, on recompile :

nils@dalaran-wifi:/opt/pkgsrc/www/curl$ bmake package-install

L'étape d'après est de vérifier la présence de l'option http2 :

    nils@dalaran-wifi:/opt/pkgsrc/www/curl$ /opt/pkg/bin/curl -V
    curl 7.53.1 (x86_64-apple-darwin16) libcurl/7.53.1 OpenSSL/1.0.2k zlib/1.2.8 libssh2/1.8.0 nghttp2/1.20.0
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
    Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy

En conclusion, il est très simple, grâce à pkgsrc, de disposer d'une autre version de logiciel que celle installée par défaut, et de la compiler avec les options dont on a besoin.

Si vous aimez cet article, partagez-le sur les réseaux sociaux. Si vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !

Sysupgrade : mise à jour facile d'un système NetBSD

NetBSD 7.1 est disponible. Comme d'habitude, il est recommandé de mettre à jour son système, en particulier car cette version apporte de nombreux correctifs de sécurité.

Historiquement, mettre à jour son système NetBSD se fait via le logiciel d'installation, sysinst. Cependant, cette méthode a le principal désavantage de nécessiter de redémarrer sur l'installeur, et donc de rendre le système indisponible pendant toute la mise à jour.

Une deuxième possibilité consiste à décompresser soi-même les sets du système de base puis de lancer les commandes de post-installation, comme expliqué par exemple sur le wiki de GCU.

Cette deuxième possibilité, certes plus rapide, est automatisable, mais nécessite un peu d'intelligence, comme le fait de n'installer que les sets nécessaires, un noyau différent de GENERIC (surtout dans le cas où on compile soi-même un noyau personnalisé), voire même d'effacer son répertoire de téléchargement après coup. Et cela tombe bien, car c'est ce que fait sysupgrade ! A l'aide d'un simple fichier de configuration, celui-ci est capable de :

  • télécharger les sets d'une version précise de NetBSD ;
  • remplacer votre noyau par le nouveau, automatiquement, ou en spécifiant un nom de configuration ;
  • d'effectuer les tâches de post-installation ;
  • et même de faire le ménage à la fin !

Sysupgrade fait maintenant partie de la documentation officielle de mise à jour. Pour l'utiliser, idéalement, une commande suffit :

# sysupgrade auto http://cdn.NetBSD.org/pub/NetBSD/NetBSD-7.1/amd64

En ce qui me concerne, j'ai choisi de m'assurer que certaines options sont activées dans _/usr/pkg/etc/sysupgrade.conf_, en particulier car la commande _config_, qui permet de détecter le nom de la configuration du noyau, est disponible dans le set _comp_, que je n'installe pas systématiquement (ce dernier permet de disposer d'outils de développement et de compilation, que j'estime inutiles sur un serveur web par exemple). Mon fichier de configuration ressemble donc à ceci :

RELEASEDIR="http://cdn.netbsd.org/pub/NetBSD/NetBSD-7.1/$(uname -m)"
KERNEL=GENERIC
ETCUPDATE=yes

Ma commande de mise à jour se résume donc à un simple sysupgrade auto. En revanche, la post-installation sera déclenchée et me demandera si je souhaite mettre à jour certains fichiers de configuration. Il convient donc d'être particulièrement attentif lors de cette étape.

Des remarques, des propositions d'améliorations ? Où même des exemples supplémentaires ? Les commentaires sont là pour ça !

Nmap : détection et récupération d'information sur Wordpress

Début mars 2017, le moteur de blog Wordpress a fait l'objet d'une nouvelle mise à jour, la version 4.7.3. Cette mise à jour revêt une certaine importance, puisqu'elle corrige 5 vulnérabilités !

Vérifier sur une installation de Wordpress que la dernière version est installée est assez simple à partir du moment où on peut se connecter à l'interface d'administration. Il se peut toutefois que cela ne soit pas envisageable : nombre d'installations, disponibilité des identifiants de connexion (pour des raisons d'organisation). Du fait de la verbosité par défaut de Wordpress, il est possible d'obtenir des informations sans posséder d'identifiants de connexion.

Pour réaliser cette vérification, faisons de nouveau appel à Nmap ! En effet, grâce à la disponibilité du langage de script NSE, il est possible de chercher plusieurs informations, comme la version. De manière générale, on peut voir la liste des scripts officiellement disponibles sur une page dédiée. Dans le cas qui nous intéresse, on notera la présence d'un dépôt contenant des scripts NSE personnalisés concernant Wordpress.

L'installation de scripts NSE dans Nmap est assez facile, il suffit de localiser les scripts existant et de copier les siens au même endroit. Par exemple, sur une Fedora 25 :

[nils@fedora-workstation ~]$ git clone https://github.com/peter-hackertarget/nmap-nse-scripts.git
Clonage dans 'nmap-nse-scripts'...
remote: Counting objects: 12, done.
remote: Total 12 (delta 0), reused 0 (delta 0), pack-reused 12
Dépaquetage des objets: 100% (12/12), fait.
Vérification de la connectivité... fait.
[nils@fedora-workstation ~]$ cd nmap-nse-scripts/
[nils@fedora-workstation nmap-nse-scripts]$ sudo cp -v wp-themes.lst /usr/share/nmap/nselib/
'wp-themes.lst' -> '/usr/share/nmap/nselib/wp-themes.lst'
[nils@fedora-workstation nmap-nse-scripts]$ sudo cp -v *.nse /usr/share/nmap/scripts/
'hostmap-hackertarget.nse' -> '/usr/share/nmap/scripts/hostmap-hackertarget.nse'
'http-wordpress-info.nse' -> '/usr/share/nmap/scripts/http-wordpress-info.nse'
'http-wordpress-plugins.nse' -> '/usr/share/nmap/scripts/http-wordpress-plugins.nse'
'http-wordpress-themes.nse' -> '/usr/share/nmap/scripts/http-wordpress-themes.nse'

Lançons alors un premier scan :

[nils@fedora-workstation ~]$ sudo nmap -sV -p80,443 --script http-wordpress-info exemple.fr

Starting Nmap 7.40 ( https://nmap.org ) at 2017-03-20 09:46 CET
Nmap scan report for exemple.fr (10.172.46.128)
Host is up (0.0056s latency).
rDNS record for 10.172.46.128: www.exemple.fr
PORT    STATE SERVICE VERSION
80/tcp  open  http    Apache httpd
|_http-server-header: Apache
| http-wordpress-info: 
|   version: WordPress 4.7.3
|_  theme: twentyseventeen
443/tcp open  ssl/ssl Apache httpd (SSL-only mode)
|_http-server-header: Apache
| http-wordpress-info: 
|   version: WordPress 4.7.3
|_  theme: twentyseventeen

On dispose donc de la version de Wordpress, et du thème utilisé. Il est possible, grâce au script http-wordpress-themes, de chercher plus en profondeurs d'éventuels thèmes supplémentaires installés. Quant à http-wordpress-plugins, il permet de rechercher des plugins. Le script d'information est néanmoins assez verbeux. Voici son résultat après l'installation de quelques plugins et thèmes autres :

[nils@fedora-workstation ~]$ sudo nmap -sV -p80,443 --script http-wordpress-info exemple.fr

Starting Nmap 7.40 ( https://nmap.org ) at 2017-03-20 09:53 CET
Nmap scan report for exemple.fr (10.172.46.128)
Host is up (0.0058s latency).
rDNS record for 10.172.46.128: www.exemple.fr
PORT    STATE SERVICE VERSION
80/tcp  open  http    Apache httpd
|_http-server-header: Apache
| http-wordpress-info: 
|   version: WordPress 4.7.3
|   theme: fooding
|   plugins: 
|_    jetpack
443/tcp open  ssl/ssl Apache httpd (SSL-only mode)
|_http-server-header: Apache
| http-wordpress-info: 
|   version: WordPress 4.7.3
|   theme: fooding
|   plugins: 
|_    jetpack

On remarquera ici la présence du plugin bien connu Jetpack, ainsi que du thème fooding.

Jusqu'à maintenant, on a testé un script est assez gentil, mais d'autres sont plus brutaux, comme http-wordpress-brute qui cherche à obtenir un accès via bruteforce de l'interface d'administration. Il convient donc de faire très attention lors de l'utilisation de ces outils.

Des remarques, des propositions d'améliorations ? Où même des exemples intéressants sur certaines configurations de Wordpress ? Les commentaires sont là pour ça !

dmidecode : pour en savoir un peu plus sur son matériel

De nombreux outils libres de détection et d'information sur le matériel de son ordinateur existent. En vrac, lspci, lshw, et dmidecode. J'ai un peu mis le nez dans ce dernier récemment, et j'ai remarqué quelques options intéressantes, que je partage ici.

Habituellement, dmidecode est lancé, sans argument, en tant que root. En effet, celui-ci a besoin d'accéder au matériel via le SMBIOS. Je ne copierai pas ici un exemple de sortie, car c'est assez long. On peut commencer par limiter un peu cette longueur, en utilisant l'option -q, pour quiet. La différence est assez notable, voici une comparaison (sous NetBSD, bien entendu) :

root@shell2:~# dmidecode | wc -l
     544
root@shell2:~# dmidecode -q| wc -l
     443

Près de 100 lignes de différence, concernant principalement des entrées inactives et des méta-données. Cela devrait déjà aider en lisibilité.

Ensuite, il se peut qu'on cherche une information précise sur son système. Par exemple, le nombre de modules de mémoire vive, ainsi que le nombre total de modules présents :

root@shell2:~# dmidecode -q -t memory | grep Size
        Size: 4096 MB
        Size: No Module Installed
        Size: No Module Installed
        Size: No Module Installed

J'ai donc un module de 4 Go de mémoire vive, et la machine peut en accueillir trois autres. L'option -t peut prendre d'autres valeurs, il suffit de ne pas en indiquer pour avoir la liste.

Une autre option utile est -s, par exemple si on recherche des informations sur son processeur :

root@shell2:~# dmidecode -s processor-family
Atom
root@shell2:~# dmidecode -s processor-manufacturer
Intel(R) Corporation
root@shell2:~# dmidecode -s processor-version
Intel(R) Atom(TM) CPU  C2350  @ 1.74GHz
root@shell2:~# dmidecode -s processor-frequency
1743 MHz

Cette option peut aussi prendre d'autres valeurs, et comme pour la précédente, il suffit de ne pas en indiquer pour avoir la liste.

Là où j'ai beaucoup ri, c'est quand je suis allé chercher des informations sur le système et le baseboard :

root@shell2:~# dmidecode -s system-manufacturer
Online Labs
root@shell2:~# dmidecode -s system-product-name
SR
root@shell2:~# dmidecode -s system-version
(^_^)
root@shell2:~# dmidecode -s system-serial-number
42
root@shell2:~# dmidecode -s baseboard-manufacturer
Online Labs
root@shell2:~# dmidecode -s baseboard-product-name
SR
root@shell2:~# dmidecode -s baseboard-version
42
root@shell2:~# dmidecode -s baseboard-serial-number
42
root@shell2:~# dmidecode -s baseboard-asset-tag
42

On remarque donc que le constructeur de la machine peut y mettre un peu ce qu'il veut. On reconnaît ici clairement un serveur Dédibox.

Pour plus de détails, la page de manuel reste incontournable.

Des remarques, des propositions d'améliorations ? Où même des exemples amusants sur certains systèmes particuliers ? Les commentaires sont là pour ça !

Bilan de début d'année du blog

Cette semaine, une petite pause avec un contenu moins technique. J'ai repris depuis le début de cette année 2017 un certain rythme d'écriture sur ce blog, via la parution chaque lundi matin d'un nouveau billet. Je me demandais combien de temps j'allais pouvoir tenir cette cadence, et au bout de combien de temps j'allais m'essouffler, non seulement en terme de motivation, mais aussi en terme d'idées de contenu.

Côté motivation, pour le moment ça passe encore. Ces deux dernières semaines ont été assez remplies et ne m'ont laissé que peu de temps pour écrire. J'avais déjà fait ce constat il y a quelques temps, mais il a été encore plus flagrant en ce début d'année : je n'arrive pas à écrire en continu (comprendre : un peu chaque jour), mais par vague (par exemple, deux soirs toutes les deux ou trois semaines). En partant de ce constat, j'essaie de profiter au maximum de ces moments disponibles, et cela donne donc 10 billets depuis le début de l'année : la cadence est donc tenue !

Côté contenu, là aussi pour le moment j'ai encore quelques idées. Je ne les révèlerai pas pour éviter de gâcher la surprise, mais aussi pour changer de sujet si jamais je change d'avis ;) Là où je suis agréablement surpris, c'est qu'il m'arrive encore de réaliser des choses techniquement intéressantes ce qui nourrit cette sorte d'inspiration, comme le récent billet sur Nmap. Pourvu que ça dure !

Par contre, je ressens encore quelques difficultés pour déterminer là où publier mes différents contenus. J'ai laissé ce blog en jachère pendant plusieurs mois en me disant que je serais sans doute plus lu sur LinuxFr.org, et que j'y aurais certainement plus de retours. Il y a 3 ans, j'ai aussi écrit un article pour GNU/Linux Magazine France. Cela fut une expérience très enrichissante car j'ai pu échanger avec quelqu'un pendant la rédaction, mais c'est bien là où j'ai eu le moins de retour (en dehors d'un collègue qui a acheté le numéro exprès). J'en suis venu à la réflexion suivante :

  • l'actualité, c'est pour LinuxFr.org ;
  • les contenus techniques, qui ne relèvent pas d'une actualité, de taille faible à moyenne (encore qu'avec le billet sur pbulk on peut se poser la question) sont pour le blog ;
  • je voudrais faire publier dans un magazine les contenus techniques, qui ne relèvent pas d'une actualité, de taille moyenne à importante.

Pour ce qui est de la dernière catégorie de contenu, c'est sans doute celle où j'ai le moins d'idées (mais j'en ai), mais c'est aussi pour le moment celle pour laquelle je n'ai pas vraiment pris le temps de m'y mettre sérieusement. C'est peut-être le cœur de cette difficulté, je me demande si je ne devrais pas écrire d'abord, et réflechir après afin de déterminer où publier le contenu ?

Je reste malgré tout sur une note positive : j'ai plus que jamais, en ce début d'année, envie d'expérimenter, de bidouiller, de mettre en place des trucs, et d'écrire sur tout ça !

J'en profite pour terminer sur des questions pour les courageuses et courageux qui oseront écrire dans les commentaires : avez-vous un billet préféré dans ceux de ce début d'année ? Lequel ? Est-ce que vous souhaitez que certains domaines soient approfondis, ou bien un peu de diversité serait appréciée ?

Propulsé par Dotclear