lalahop

Les expressions régulieres

Ceux qui me connaissent savent que je suis assez fan des expressions régulières depuis que je les ai connues.

Je me souviens encore de quelques unes des regex que j'ai écrit, il y a entre 3 et 5 ans et pour cause : elles trainent toujours dans un coin de mon disque dur. Toutes n'étaient pas optimisées, loin s'en faut. Mais, comme on l'entend fréquemment, l'expérience est le nom que nous donnons à nos erreurs 🙂 .

J'ai découverts les regex en PHP et à l'époque ça donnait ça :

*Retour dans le passé*

Pour récupérer la version d'Apache dans un phpinfo() :
#Apache/(.+) \(Fedora\)#

Pour récupérer la version de PHP dans un phpinfo() :
#PHP Version (.+)</h1>#

Pour contrôler un nom de fichier passé en GET afin d'éviter la remontée de répertoires :
'`\.`'

Pour récupérer plusieurs liens sur un site donné (j'ai oublié lequel :/) :
#<p><font face=\"Arial\"><a href="(.+)">(.+)</a>(.+) (.+)</font></p>#isU

La même mais pour des adresses email :
#<A HREF="mailto:(.+)">.+</A>#isU

Et on parle même pas de celles liées au BBCode :
#\[b:[a-z0-9]{8}\](.+)\[/b:[a-z0-9]{8}\]#isU
#\[i:[a-z0-9]{8}\](.+)\[/i:[a-z0-9]{8}\]#isU
#\[u:[a-z0-9]{8}\](.+)\[/u:[a-z0-9]{8}\]#
#\[color=(.+):[a-z0-9]{8}\](.+)\[/color:[a-z0-9]{8}\]#isU

#\[size=(.+):[a-z0-9]{8}\](.+)\[/size:[a-z0-9]{8}\]#isU
#\[quote:[a-z0-9]{8}\](.+)\[/quote:[a-z0-9]{8}\]#isU
#\[quote="(.+)":[a-z0-9]{8}\](.+)\[/quote:[a-z0-9]{8}\]#isU
#\[code:[a-z0-9]{8}\](.+)\[/code:[a-z0-9]{8}\]#isU
#\[list:[a-z0-9]{8}\]#isU
#\[list=[0-9]:[a-z0-9]{8}\]#isU
#\[/list:u:[a-z0-9]{8}\]#isU
#\[/list:o:[a-z0-9]{8}\]#isU

#\[\*:[a-z0-9]{8}\](.+)\[/\*:[a-z0-9]{1}:[a-z0-9]{8}\]#
#(<ul>|<ol>)<br />#
#</li><br />#
#\[img:[a-z0-9]{8}\](.+)\[/img:[a-z0-9]{8}\]#isU

#\[url:[a-z0-9]{8}\](.+)//(.+)\[/url:[a-z0-9]{8}\]#isU
#\[url=(.+)//(.+):[a-z0-9]{8}\](.+)\[/url:[a-z0-9]{8}\]#isU

*Retour dans le présent*

Récemment, j'ai eu à vérifier la validité d'un NIR pour un cas d'école et j'ai de suite pensé aux regex.

Voila les regex que j'ai écrit. Comme pour les autres regex présentées dans cet article, je n'en garantit pas la validité. J'ai testé tous les cas possibles mais une erreur peut toujours arriver (un code sans bugs est un code insuffisamment testé). On peut également les optimiser, ne serai-ce qu'en utilisant les classes de caractères. Ce coup-là, c'est Java qui sera utilisé :

Pour vérifier la validité de la clé :

^[0][1-9]|[1-8][0-9]|9[0-7]$

Pour le reste du NIR :

^[12][0-9][0-9](?:0[1-9]|1[012]|20)(?:(?:2[aA]|2[bB]|[0-8][1-9]|9[0-5])(?:[0-9][0-8][1-9]|[1-9][1-8][0-9]|990)|(?:(?:9[78][0-9](?:0[1-9]|[1-8][0-9]|90)))|99(?:[0-9][0-8][1-9]|[1-9][1-8][0-9]|990))(?:[0-9][0-9][1-9]|[1-9][1-9][0-9])$

L'avantage des regex, c'est qu'on trouve toujours quelqu'un qui en a un jour écrit une plus longue que la nôtre. Mais je pense que la reine des regex, c'est celle qui contrôle la validité d'une adresse email, et pour cause : la RFC 5322 (qui remplace la 2822 qui elle-même remplace la 822) qui définit le format des adresses email est à la fois diabolique et sadique. Quelques liens pour se faire une idée : Mail::RFC822::Address: regexp-based address validation et How to Find or Validate an Email Address.

Kubuntu 10.10

Table des matières

Dès aujourd'hui, j'ai mis à niveau la version de Kubuntu qui était installé sur mon ordinateur portable.

Pour réaliser cette mise à niveau, j'ai choisis la méthode "alternate CD + apt-get" :

  1. Télécharger le CD alternate de Kubuntu.
  2. Monter l'image :
    ~$ sudo mkdir /media/iso
    ~$ sudo mount -o loop -t iso9660 ./kubuntu-10.10-alternate-amd64.iso /media/iso
  3. Lancer l'installation :
    ~$ sudo /media/iso/cdromupgrade
  4. Attendre un peu car l'assistant pose quelques questions (même après avoir validé les logiciels à supprimer).
  5. Laisser l'installation se faire toute seule et redémarrer.
  6. Au redémarrage, on note que, par défaut, si on ne touche rien pendant le timeout de GRUB, on boot sur le noyau 2.6.32-25. Demandons à booter sur le 2.6.35-22.
  7. Après avoir saisi mon login, l'écran devient noir et le reste. Ne paniquons pas, passons en mode console (ctrl+alt+F1), authentifions-nous et tapons :
    ~$ sudo /etc/init.d/kdm restart
  8. Afin de finir de mettre à jour tous les paquets, réactivons les dépôts alternatifs qui ont été désinstallés durant l'installation (j'utilise ubuntu-tweak) et lançons :
    ~$ sudo apt-get update && sudo apt-get dist-upgrade

Et voila : la mise à niveau est finie. On n'oubliera pas de désactiver les effets visuels depuis "Configuration du sytème" parce que là c'est un peu "too much" quand même.

Le cas Wireshark

J'ai cependant remarqué que Wireshark avait été désinstallé. Voici, vite fait, comment le réinstaller même si il n'y a rien de compliqué :

~$ sudo apt-get install wireshark

Il faut rajouter manuellement (via l'éditeur de menu) le raccourci dans le menu K. Je n'ai pas compris pourquoi Wireshark (et c'est le seul logiciel concerné par ce "problème") n'a pas été automatiquement ajouté cette fois-ci.

Pour pouvoir voir les interfaces réseau et capturer le trafic sans utiliser le compte root sur Wireshark (ce qui reviendrait à donner des droits supplémentaires à un programme qui n'en a pas directement besoin), il suffit d'activer le setuid bit sur le programme qui est chargé de la capture :

~$ chmod u+s /usr/bin/dumpcap

Désinstaller l'ancien noyau

~$ sudo apt-get remove linux-image-2.6.32-25-generic

Vous pouvez aussi désinstaller les "vieux" headers 2.6.32-25.

Créer un compte utilisateur sans droits sur OpenWRT

À quoi peut bien servir la création d'un compte utilisateur sans droits mais avec un mot de passe sur OpenWRT ? Imaginons par exemple que vous utilisez votre routeur afin de réaliser des tunnels SSH ou plus si affinités : vous restez longtemps connecté à votre routeur, tout en étant authentifié avec le compte root, sans avoir besoin des droits que vous octroie ce compte. Côté sécurité, même Microsoft fais mieux. 😉

Cela peut aussi servir pour distribuer quelques comptes à des amis afin qu'ils puissent profiter des joies du port forwarding et du contournement d'un pare-feu sans tout casser.

Maintenant que je vous ai convaincus avec ces arguments subtils et percutants 😉 , voici la marche à suivre pour un compte nommé "guest" :

Créons un "home directory" pour ce compte (ça fais moins porchou que de lui donner /var) :

~# mkdir -p /home/guest

Éditons le fichier qui contient les utilisateurs autorisés à ce connecter au système :

vi /etc/passwd

A la fin du fichier, rajoutez une ligne comme celle-ci :

guest:*:65533:65533:guest:/home/guest:/bin/ash

Vérifiez que l'UID n'existe pas déjà. Changez le shell d'arrivé si besoin.

Créons un groupe pour cet utilisateur. Oui, on pourrait utiliser le group "nogroup/daemon" mais il vaut mieux créer un nouveau groupe afin de bien séparés les privilèges (droits d'accès à certains fichiers, etc.).

vi /etc/group

A la fin du fichier, rajoutez une ligne comme celle-ci :

guestg:x:65533:

Le g à la fin de guest signifie "group", ce n'est pas une coquille, c'est pour différencier le groupe du login. Vérifiez que le GID n'existe pas déjà et qu'il correspond au GID que vous avez donné au compte utilisateur.

Maintenant donnons un mot de passe à ce compte :

~# passwd guest

Donnons l'autorisation au compte guest d'écrire dans son home directory :

~# chown -R guest:guestg /home/guest

C'est terminé.

Pour vous connecter à votre routeur via SSH :

  • Si vous voulu effectuer une tâche de maintenance :
    ssh root@ip-du-routeur
  • Si vous n'avez pas besoin d'effectuer une tâche de maintenance (exemple du tunnel SSH) :
    ssh guest@ip-du-routeur

Si vous voulez utiliser l'authentification par clé publique avec ce compte utilisateur, sa clé publique ne devra pas être mise dans /etc/dropbear/authorized_keys mais dans /home/guest/.ssh/authorized_keys .

4 astuces pour Windows

Table des matières

Dans ce billet, nous allons revenir sur 4 astuces bien connues concernant Windows.

  • La première vous permettra de faire un sorte qu'un compte utilisateur n'ai plus les droits d'administration alors que le panneau de configuration vous refuse cette modification.
  • La deuxième astuce vous permettra de cacher un compte utilisateur sur l'écran de connexion.
  • La troisième astuce vous permettra de désactiver certains partages administratifs de Windows.
  • Enfin, la dernière astuce vous permettra de faire en sorte que votre PC ne s'annonce plus sur le réseau via les protocoles Netbios/SMB.

Note : j'ai testé ces astuces uniquement sur Windows 7. Mais elles doivent fonctionner à coup sûr sous Vista et certainement sous XP.

Enlever les droits "administrateur" à un compte utilisateur

Parfois, vous voulez qu'un compte utilisateur n'ait plus les droits d'administration. Par exemple : si vous utilisez le compte Administrateur pour la maintenance, vous n'avez pas besoin que votre autre compte ait les droits d'administration. Pourtant Windows vous refuse cette suppression de droits sous prétexte qu'il faut au moins un compte avec les droits administrateur ... Ce qui est déjà le cas. Pour outrepasser ceci, il suffit d'utiliser la commande "net" et son argument "localgroup". Ouvrez une invite de commande et tapez :

net localgroup Administrateurs GuiGui /delete

En replaçant GuiGui par le nom du compte à destituer. Puis tapez :

net localgroup Utilisateurs GuiGui /add

Note : si vous utilisez un domaine, utilisez la commande "net group".

Cacher un compte utilisateur sur l'écran de connexion

Puisque je n'ai pas trouvé cette astuce tout seul ou via le bouche-à-oreille, contrairement à la première astuce, et plutôt que de répéter ce qui a déjà été dit, je préfère vous donner le lien qui m'a aidé quand j'ai moi-même voulu réaliser cette opération : Masquer un compte utilisateur dans Windows 7 ou Vista.

Désactiver les partages administratifs de Windows

Là aussi, tout ce résume en un lien : Partage administratif.

Note : contrairement à ce qui se dit parfois sur la toile, les partages administratifs n'ont pas disparus ou n'ont pas été désactivés par défaut dans Windows 7. En tout cas pas chez moi ...

Empêcher Windows de s'annoncer sur le réseau via les protocoles Netbios et SMB

Qui n'a jamais vu, lors d'une capture des flux réseau, les nombreux messages de diffusion (broadcast) envoyés par une machine Windows pour s'enregistrer sur d'autres machines Windows via les protocoles Netbios et SMB ?

Pourquoi vouloir empêcher cela ? Pour avoir moins de trafic réseau, pour ne pas encombrer le réseau sur lequel on vous invite (cas d'un ordinateur portable) et car cela n'empêche pas le transfert de fichier via le protocole SMB de fonctionner : il suffit de connaitre le nom de la machine et tout fonctionne comme d'habitude.

Pour faire cela, il suffit d'aller dans le registre, de naviguer jusqu'à HKEY_LOCAL_MACHINE\system\currentcontrolset\services\lanmanserver\parameters puis de créer ou modifier les valeurs dword "hidden" et "Lmannounce" et de leur donner respectivement la valeur 1 et 0.

Note : tout comme la désactivation des partages administratifs, cette manipulation nécessite un redémarrage du système pour prendre effet.

Le .reg de la fin

Pour la désactivation des partages administratifs et de l'annonce sur le réseau, je m'étais fait un fichier .reg que je pouvais facilement intégrer à mes installations allégées et automatisées de Windows 7 grâce au logiciel RT Se7en Lite. Cela permet de désactiver ces deux "features" dès l'installation et ainsi de ne pas oublier de le faire. Le voici pour ceux que ça peut intéresser :

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters] 
"Lmannounce" = dword:00000000
"Hidden" = dword:00000001
"AutoShareWks" = dword:00000000

J’adore Windows Live Hotmail !

Plutôt que d'aller sur chacun des webmails que j'ai l'habitude d'utiliser pour vérifier l'arrivée (ou non) de nouveaux messages, j'ai (enfin !) décidé de confier ce travail à mon client mail favori (Thunderbird pour ne rien vous cacher) et de regrouper toutes mes adresses dans le même logiciel. Par chance, tous les fournisseurs que j'utilise proposent un serveur POP3S voir IMAPS et un serveur SMTP.

La configuration n'a rien de sorcier ... sauf quand on arrive à l'utilisation d'une adresse Windows Live Hotmail. Et encore, ça a bien changé depuis l'époque où je m'étais renseigné et durant laquelle il faillait utiliser des plug-in pour utiliser Windows Live Hotmail avec Thunderbird !

Enfin bref ! Je créer donc mon compte dans Thunderbird puis je lui demande de vérifier la présence de nouveaux mails. Le serveur POPS de Microsoft m'envoie un joli message d'erreur : "authentication failed". Pourtant je me suis pas planté dans mon mot de passe. Au bénéfice du doute, je le retape : rien à faire, je suis exclu.

Je commence à chercher sur Internet et je tombe sur un sujet dans un forum sur lequel on parle de réduire la longueur du mot de passe.

N'y croyant qu'à moitié, je m'exécute et là, c'est le drame : ça fonctionne.

D'ailleurs, comme le site de Microsoft est d'une ergonomie sans failles (:/), je me permet de vous donner le lien direct pour changer votre mot de passe : https://account.live.com/ChangePassword.aspx

J'adore Windows Live Hotmail ! Quelques sites m'ont un jour dit d'augmenter la longueur de mon mot de passe mais c'est la première fois qu'un site me demande de réduire le nombre de caractères présents dans mon mot de passe ! Faut bien être premier dans un domaine. Je dis un gros "bien joué" à Microsoft. Ça me désole ...

Après plusieurs essais : dès que le mot de passe excède 15 caractères, il est refusé par le serveur POPS de Microsoft.

Plus dingue encore : pour Microsoft monmotdepassetropcoool = monmotdepassetropcooo = monmotdepassetropcoo = monmotdepassetropco, etc. jusqu'à ce que votre mot de passe fasse 15 caractères ou moins. Vous pouvez tester sur la page de Windows Live qui permet de changer votre mot de passe : vous aurez un message qui vous dis que l'ancien et le nouveau mot de passe ne doivent pas être identiques.