6044 links
  • GuiGui's Show

  • Home
  • Login
  • RSS Feed
  • Tag cloud
  • Picture wall
  • Daily
Links per page: 20 50 100
◄Older
page 220 / 303
Newer►
  • Renforcement des configurations TLS sous Debian GNU/Linux Jessie

    Ce n'est pas le passage à Jessie lui-même qui va durcir vos configs TLS mais le fait que des logiciels serveur y sont présents dans une version qui ouvre de nouveaux horizons. Il s'agit d'Apache httpd, d'ejabberd et de dovecot. Je repars des configurations que j'ai donné dans un autre shaarli (à la fin) : http://shaarli.guiguishow.info/?GPqmpA

    Commençons par Dovecot :
        * La directive de configuration « ssl_prefer_server_ciphers = yes » permet de forcer les clients à respecter l'ordre du serveur dans le choix de la suite cryptographique à utiliser parmi toutes celles supportées des deux côtés. Cette directive évite le choix d'une suite cryptographique sous-optimale (bug ou attaque par repli afin de choisir une suite que l'attaquant sait cassable facilement). Voir https://www.howtoforge.com/tutorial/how-to-protect-your-debian-and-ubuntu-server-against-the-logjam-attack/

        * La génération des paramètres de Diffie-Hellman a complètement changé depuis la branche 2.1 : « When Dovecot starts up for the first time, it generates new 512bit and 1024bit Diffie Hellman parameters and saves them into <prefix>/var/lib/dovecot/ssl-parameters.dat. Dovecot v2.1.x and older regenerated them every week by default, but because the extra security gained by the regeneration is quite small, Dovecot v2.2 disabled the regeneration feature completely. » (source : http://wiki.dovecot.org/SSL/DovecotConfiguration ). Avec ce changement, rien de nous empêche de générer des paramètres de Diffie-Hellman plus robustes, même sur un tout petit serveur genre OlinuXino ou Raspberry Pi avec « ssl_dh_parameters_length = 4096 », par exemple. J'ai mis 4096 bits dans cet exemple car c'est la taille de la clé dans le certificat x509 utilisé par ce serveur. Je rappelle que l'ANSSI recommande 3072 bits et que la NSA dit 3072 bits minimum (voir http://shaarli.guiguishow.info/?r6npkg ). ;) Après l'ajout de cette directive de configuration, Dovecot générera les paramètres de Diffie-Hellman au prochain reload/restart. :)


    Continuons avec Apache httpd :
        * « Beginning with version 2.4.7, mod_ssl makes use of standardized DH parameters with prime lengths of 2048, 3072 and 4096 bits and with additional prime lengths of 6144 and 8192 bits beginning with version 2.4.10 (from RFC 3526), and hands them out to clients based on the length of the certificate's RSA/DSA key. » (source : https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile ). C'est déjà une excellente nouvelle : on gagne en sécurité sans avoir quoi que ce soit à configurer.

        * On voudrait aussi pouvoir utiliser des paramètres de Diffie-Hellman personnalisés afin d'être sûrs de leur unicité (pour éviter les attaques par pré-calcul) et/ou de leur bonne génération (utiliser un bon générateur de nombre pseudo-aléatoires). Pour cela, on peut utiliser la directive de configuration « SSLOpenSSLConfCmd » (voir https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslopensslconfcmd ). Exemple : « SSLOpenSSLConfCmd DHParameters "/etc/apache2/ssl/dh_4096.pem" » (voir http://shaarli.guiguishow.info/?hCgBYQ pour apprendre à générer des dhparam). L'ennui, c'est qu'il faut avoir OpenSSL >= 1.0.2 alors que nous avons uniquement la version 1.0.1 dans Jessie... Une autre idée est de chaîner le fichier contenant les paramètres DH au fichier contenant votre certificat x509 (pour ce faire : cat moncert.pem dh_4096.pem > cert+dh.pem) et de donner ce chaînage à manger à « SSLCertificateFile ». Perso, je ne fais pas ça car je factorise un même fichier certificat entre tous mes logiciels serveur car j'ai la flemme de changer X fichiers à chaque renouvellement de certificat. J'attendrais donc OpenSSL 1.0.2


    Terminons avec ejabberd :
        * Ejabberd permet enfin de définir la liste des suites cryptographiques que l'on souhaite utiliser ! C'est la directive de configuration « ciphers » dans un listener c2s et la directive « s2s_ciphers » pour la liste à utiliser lors des communications s2s (entre deux serveurs XMPP). On peut utiliser une liste plus robuste comme celles que je donne à l'adresse suivante : http://shaarli.guiguishow.info/?YddWtQ . Exemple : « ciphers: "EDH+aRSA EECDH+aRSA aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4 !SEED !CAMELLIA" »

            Attention : il y a un comportement totalement incompréhensible : « ciphers » devrait agir uniquement sur la connexion entre mon client XMPP et mon serveur. Or, si je sélectionne uniquement des suites cryptos supportant la confidentialité persistante (parce que je sais que mon client, Gajim, supporte les algos PFS), booom, la plupart de mes contacts deviennent injoignables (remote-server-not-found). Une capture réseau côté serveur montre que mon serveur initie des connexions mais que les négociations TLS échouent et les connexions sont clôturées. Aucun problème avec les contacts qui utilisent, comme moi, un ejabberd et un gajim venant de Jessie ET (et c'est important), qui ont défini une liste de suites cryptos moins moisie que celle par défaut dans leur config ejabberd. Aucun problème si, dans ma config ejabberd, je mets uniquement des suites cryptos PFS dans s2s_ciphers et des suites PFS mais pas seulement dans ciphers... Oui, ça n'a aucun sens, il y a clairement un os quelque part...


        * On a également à notre disposition la directive de configuration « protocol_options » (et son amie « s2s_protocol_options » ;) ) qui va nous permettre de virer SSLv3 et de forcer les clients à respecter l'ordre du serveur dans le choix de la suite cryptographique à utiliser. Les autres options possibles sont consultables à l'adresse suivante : https://github.com/processone/tls/blob/master/c_src/options.h (oui, code is doc, certainement :S ). Ça donne donc ceci :
          « s2s_protocol_options:
              - "no_sslv2"
              - "no_sslv3"
              - "cipher_server_preference" »

         Et « protocol_options:
                - "no_sslv2"
                - "no_sslv3"
                - "cipher_server_preference" »

        * On n'oublie pas de préciser « starttls_required: true » dans le listener c2s. Ça évite que la communication passe en clair si, pour X raisons (bug, attaque par repli par un Homme du Milieu), la négociation TLS échoue. Je rappelle que sur la connexion c2s, il y a votre roster (liste de contacts) qui passe + l'état de vos contacts (absent puis disponible puis absent puis déconnecté,... ;) ) +  le contenu des communications par la suite. Vous devriez également préciser « s2s_use_starttls: required » mais là, ça dépend des serveurs de vos contacts... Google ne supporte pas TLS par exemple donc si vous faites ça, vous vous privez de parler à ces personnes-là. :(

        * Par défaut, ejabberd génère des paramètres de Diffie-Hellman de 1024 bits ce qui est clairement trop faible de nos jours (logjam tout ça, voir http://shaarli.guiguishow.info/?S2CJMg ). On peut générer des dhparam plus robustes (voir apache httpd ci-dessus) et les utiliser avec les directives de config « dhfile » et « s2s_dhfile» (voir https://blog.process-one.net/securing-ejabberd-against-logjam-attacks-and-future-threats/ ) mais... ces directives de configuration arrivent avec la version 15.06 alors que nous avons la 14.07 dans Debian Jessie. :( Upgrader la lib erlang-p1-tls (qui apporte les fonctionnalités TLS) indépendamment ne sert à rien. On peut utiliser la version (de ejabberd ET de erlang-p1-tls) présente dans les backports mais ça sera sans moi : la team security de Debian ne s'occupe pas des backports donc pas question sur un serveur.

        * Enfin, cette nouvelle version d'ejabberd, de par les options précédentes, re-ouvre les portes de MUC (discussion à plusieurs sur XMPP, voir http://shaarli.guiguishow.info/?fBKCuA) sur des serveurs configurés un peu durement niveau crypto comme jabber.ccc.de. \o/
    03/01/2016 21:35:07 - permalink -
    - http://shaarli.guiguishow.info/?vjODJw
    nomarkdown
  • De Debian GNU/Linux Wheezy à Jessie

    Comme à chaque passage à une nouvelle version de Debian GNU/Linux, voici un résumé de tout ce qui a foiré ou a changé quand je suis passé à Jessie :
        * Apache httpd : NameVirtualHost et DefaultType n'ont plus aucun effet. LockFile est remplacée par Mutex. Le nom des fichiers contenant les VirtualHost doivent désormais terminer par .conf sinon ils sont ignorés. Toutes les Options doivent commencer par un signe + ou - . La syntaxe des mécanismes de contrôles des accès change mais il n'est pas encore impératif de suivre le mouvement puisque la compatibilité est assurée. Voir : http://shaarli.guiguishow.info/?oZiIVw

        * Ejabberd : passage à YAML pour la syntaxe du fichier de configuration. Le convertisseur ne supporte pas inet6. mod_admin_extra est déplacé dans ejabberd-contrib. Voir http://shaarli.guiguishow.info/?xOQeRA

        * LXC : le passage à la version 1 et à systemd complique légèrement les choses. Voir  http://shaarli.guiguishow.info/?82j-Ow . On notera également la disparition de lxc-list que l'on peut remplacer par lxc-ls -f . Voir http://shaarli.guiguishow.info/?5b7WUw

        * Netfilter-persistent : il faut penser à installer le package iptables-persistent aussi sinon netfilter-persistent est inutile. Voir http://shaarli.guiguishow.info/?W6Txug

        * OpenDNSSEC : l'auditor est déprécié, il faut le commenter dans la configuration. La base de données change de format (ajout d'une colonne), il faut utiliser le script de migration. Le fichier de configuration de softHSM contient une typo qu'il faut corriger. Voir http://shaarli.guiguishow.info/?7VlWuw

        * Postfix : le code de relay access denied passe de 554 (refus définitif) à 454 (refus temporaire) car smtpd_relay_restrictions entre en action avec la valeur « defer_unauth_destination » par défaut. Voir http://shaarli.guiguishow.info/?9vmt6A

        * Puppet : le package puppet de Debian, c't'un peu le zouk... Y'a l'initscript et l'unit systemd sans compter le fait que puppet peut rester en démon après un lancement manuel... Autrement dit, c'est le bordel pour avoir un puppet agent qu'on lance uniquement à la demande. Voir http://shaarli.guiguishow.info/?l6JxVg

        * Sympa : affichage du message d'erreur « ERREUR (arc) - arc_not_found » lors de la consultation des archives publiques d'une liste, après avoir confirmé que « je ne suis pas un spammeur ». Je n'ai pas la solution à ce problème...

        * Snmpd : « The init script /etc/init.d/snmpd will kill all processes with the name  snmpd in stead of killing by PID from /var/run/snmpd.pid which has as effect the killing of the daemon on all LXC containers. ». Ce mauvais comportement persiste des précédentes versions mais on peut l'empêcher avec une unit systemd. Voir : http://shaarli.guiguishow.info/?EFTB0Q

        * Systemd + dbus, le duo indispensable mais dbus n'est pas toujours installé par dépendance. Il faut donc penser à l'installer manuellement. Voir http://shaarli.guiguishow.info/?aZk0YQ

        * Systemd-logind se vautre sur le spawn des TTY et spamme les logs dans certains environnements (un conteneur LXC, par exemple). Voir  http://shaarli.guiguishow.info/?qkFhrQ

        * Zabbix : il faut augmenter le nombre de processus autorisé pour l'utilisateur MySQL et, suite à un changement de la hiérarchie des dossiers de configuration de PHP, il faut repositionner les valeurs de post_max_size et max_execution_time selon ce que Zabbix réclame. Voir http://shaarli.guiguishow.info/?K1UiHA
    03/01/2016 18:23:22 - permalink -
    - http://shaarli.guiguishow.info/?fMCWbQ
    nomarkdown
  • Ejabberd - De Wheezy à Jessie

    En mettant à jour de Wheezy à Jessie, quelques problèmes sont apparus avec ejabberd :
        * Le serveur refusait d'être lancé avec un joli message dans les logs :
          « <0.38.0>@gen_mod:start_module:90 Problem starting the module mod_admin_extra for host <<"guigui.example">>
            options: []
            error: undef
           [{mod_admin_extra,start,[<<"guigui.exemple">>,[]],[]},
            {gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,82}]},
            {lists,foreach,2,[{file,"lists.erl"},{line,1336}]},
            {ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,67}]},
            {application_master,start_it_old,4,
                         [{file,"application_master.erl"},{line,272}]}]
            2016-01-03 16:10:49.411 [critical] <0.38.0>@gen_mod:start_module:95 ejabberd initialization was aborted because a module start failed.

         Cela vient du fait que j'ai conservé mon ancienne configuration, qui charge le module « mod_admin_extra » qui a été déplacé dans ejabberd-contrib (https://github.com/processone/ejabberd-contrib), voir https://www.ejabberd.im/node/24787 . Il faut donc installer le package ejabberd-contrib ou virer mod_admin_extra de la configuration ejabberd. Il n'est pas présent dans le fichier de conf' par défaut de Jessie donc on peut vivre sans. :D


        * Par défaut, ejabberd utilise désormais une syntaxe yaml pour son fichier de configuration. C'est toujours mieux que le format erlang. \o/ On peut convertir son ancien fichier de conf' à la nouvelle syntaxe avec « ejabberctl convert_to_yaml /etc/ejabberd/ejabberd.cfg /etc/ejabberd/ejabberd-converted.yml ». J'ai rencontré deux problèmes :
            * « Error: eacces ». Cela signifie que l'utilisateur ejabberd n'a pas le droit d'écrire dans le dossier de destination. Une impossibilité de lire le fichier source se manifeste par « Problem 'exit "Problem loading ejabberd config file /tmp/ejabberd.cfg : permission denied"' occurred executing the command. »

            * « Problem 'error function_clause' occurred executing the command.
                Stacktrace: [{p1_yaml,encode_pair,
                          [inet6,4],
                          [{file,"src/p1_yaml.erl"},{line,117}]},
                 {p1_yaml,'-encode/2-lc$^0/1-1-',2,
                          [{file,"src/p1_yaml.erl"},{line,98}]},
                 {p1_yaml,'-encode/2-lc$^0/1-1-',2,
                          [{file,"src/p1_yaml.erl"},{line,98}]},
                 {p1_yaml,'-encode/2-lc$^1/1-0-',2,
                          [{file,"src/p1_yaml.erl"},{line,100}]},
                 {p1_yaml,encode_pair,2,[{file,"src/p1_yaml.erl"},{line,118}]},
                 {p1_yaml,'-encode/2-lc$^0/1-1-',2,
                          [{file,"src/p1_yaml.erl"},{line,98}]},
                 {p1_yaml,'-encode/2-lc$^0/1-1-',2,
                          [{file,"src/p1_yaml.erl"},{line,98}]},
                 {p1_yaml,encode,1,[{file,"src/p1_yaml.erl"},{line,90}]}] »

             Le parser ne gère pas le mot-clé « inet6 » que l'on utilise dans le fichier de configuration pour faire écouter ejabberd en IPv6 (et aussi en IPv4 en fonction de bindv6only ;) ). C'est un bug connu et corrigé (voir https://github.com/processone/ejabberd/issues/803 ) mais ce n'est pas dans Jessie ni encore dans les backports. IPv6 c'est pour demain qu'ils disent... Deux méthodes :
                * Si votre fichier de configuration n'est pas trop spécifique / poilu, je vous recommande de prendre le modèle yml fourni par défaut et de le re-remplir à votre convenance (genre domain, certificat x509,...). Pas seulement pour éviter ce bug de parse ou le déplacement de mod_admin_extra mais aussi pour conserver les commentaires explicatifs de ce que fait chaque directive de config' et, enfin, pour éviter d'autres galères...

                * Mettre les « inet6 » en commentaire dans les blocs listen de votre ejabberd.cfg puis convertir le fichier puis corriger le fichier généré en ajoutant « ip: "::" » à chaque listener car sinon ejabberd écoute uniquement en IPv4...
    03/01/2016 17:05:29 - permalink -
    - http://shaarli.guiguishow.info/?xOQeRA
    nomarkdown
  • Email Privacy Tester

    « Some email clients perform operations when reading an email which give away information about the reader, to the sender of the message. If you enter your email address below, this application will send you a specially crafted email which uses a variety of techniques, to attempt to send information back to this server when read. It will then display the results for you. »

    L'auteur a réfléchi à la problématique de la vie privée (voir https://emailprivacytester.com/privacy). Rien à signaler au niveau de la réputation du site dans WOT. Rien non plus à ce sujet sur Twitter. C'est pas un petit site nouveau mais un site qui date de 2012 avec une version 2 récente... À l'exception des messages signés avec GPG en utilisant la fonction de condensation SHA-1 qui commence à sentir le moisi, tout ça inspire confiance donc j'ai testé en utilisant un alias (pas folle la guêpe).


    La palette de ce que peuvent utiliser les marketeux et les méchants est impressionnante :O : vidéo ogg, vidéo webm, des tricks CSS (content, image de fond, ), images, objets (genre Flash et co), iframes, balise meta refresh, prefetch DNS et lien, applet, flux (RSS ou Atom),... Bref, toute la complexité d'HTML  et de CSS dans un mail.


    Avec un Thunderbird 38 :
        * Avec un affichage texte des mails (ce qu'il faut faire, il faut toujours proscrire l'affichage HTML) : aucun tracker n'est déclenché ;

        * Avec un affichage HTML simple, aucun tracker n'est déclenché ;

        * Avec un affichage HTML original, aucun tracker n'est déclenché ;

        * L'affichage HTML original fait apparaître un message qui nous demande si l'on veut charger des contenus distants. On accepte (uniquement pour ce mail, attention quand vous cliquez !). La moitié des trackers se déclenchent : vidéo ogg, vidéo webm, css content, css background-image, css attachment, iframe srcdoc attr, audio tag, vidéo tag, vidéo MP4, iframe, objet flash, objet data, image submit button, css import, vidéo poster, picture tag, img srcset attr, image taf, svg inline with remote image, css link tag, background attribute.

        * Pour déclencher les trackers restants, j'imagine qu'il doit falloir autoriser javascript, activer le prefetch dans about:config,...


    Il y'a d'autres moyens de traquer les gens qui ne sont pas explorés par cet outil, j'en suis sûr genre cookie, super cookie, ... C'est plutôt effrayant.

    La bonne nouvelle, à laquelle je ne m'attendais pas, c'est que même avec un affichage HTML, Thunderbird veille sur notre vie privée. Je suis agréablement surpris.

    Mais bien sûr, ce n'est pas une excuse pour activer l'affichage HTML dans les mails ! Un mail HTML ne sert à rien ! Désactiver ça dans le menu Affichage -> Corps du message en... -> Texte seul.


    Via https://twitter.com/aeris22/status/683409290409951233
    03/01/2016 11:02:47 - permalink -
    - https://emailprivacytester.com/
    nomarkdown
  • NET-SNMP et UCD-SNMP, Configuration de l'agent SNMP sous Linux et Unix

    Avec SNMP, il est possible d'exposer tout ou partie de l'arborescence soit selon le modèle "expose uniquement telle partie" soit selon le modèle "expose tout sauf cette partie". C'est le principe des vues.

    Prenons un cas concret : Zabbix ne sait pas interpréter les valeurs qu'il remonte concernant la shared memory dont la taille varie (à la hausse comme à la baisse) en fonction des besoins jusqu'à attendre le maximum défini par kernel.shmall dont on peut positionner la valeur avec sysctl. Cette mal-interprétation génère des fausses alertes qui, en plus d'être pénibles, habituent les techs à ne plus prêter attention aux mails émis par la supervision ce qui représente la pire situation possible.

    Plutôt que de trifouiller SNMP, est-ce qu'on ne pourrait pas demander à Zabbix d'exclure la shared memory ? Zabbix la découvre tout seul, avec un discovery et tout le bazar... Il faudrait créer un filtre et tout et tout, voir https://www.zabbix.com/documentation/2.4/manual/discovery/low_level_discovery point 3.1 . Ce n'est pas fun à mes yeux et pour une fois que j'avais un alibi pour creuser la syntaxe d'un fichier snmpd... Bon ça va, ok, je le reconnais : en vrai, je suis maso. :P

    Cet exemple est bateau mais le masquage d'une partie ou de l'intégralité de l'arborescence SNMP peut servir (exemple parmi d'autres : générer un graphe de débit pour une seule interface réseau pour que seul l'utilisateur branché sur cette interface puisse consulter ce graphe, voir http://net-snmp.sourceforge.net/wiki/index.php/Vacm#VACM_Masks.2C_or_How_to_restrict_access_to_a_particular_index_.28row.29_in_a_Table) donc ce n'est pas inintéressant de se pencher sur ça.

    Dans l'arborescence SNMP, c'est le tableau nommé « hrStorageTable » qui contient, entre autres, la description, la taille d'une allocation, le nombre total d'allocations possibles et le nombre d'allocations réalisées de chaque espace logique de stockage (RAM, shared memory, points de montage,...). Voir http://www.net-snmp.org/docs/mibs/host.html#hrStorageTable . Donc pour récupérer les tailles exprimées sous la forme qu'on leur connaît (Mio, Gio, Tio,...), il faut multiplier le bon nombre d'allocations par la taille d'une allocation. Exemple : espace occupé sur le stockage en octets = taille d'une allocation * nombre d'allocations réalisées. #IZI

    L'OID (l'identifiant unique d'un élément dans l'arborescence SNMP) de ce tableau hrStorageTable est .1.3.6.1.2.1.25.2.3 (ou HOST-RESOURCES-MIB::hrStorageTable en langage presque courant...). Ensuite, on met la colonne à laquelle on souhaite accéder : .1.3.6.1.2.1.25.2.3.1.3 = HOST-RESOURCES-MIB::hrStorageTable.1.3 = description de tous les points de montage, .1.3.6.1.2.1.25.2.3.1.6 = HOST-RESOURCES-MIB::hrStorageTable.1.6 nombre d'allocations utilisées,... Ensuite, on met l'ID du stockage : dans mon cas .1.3.6.1.2.1.25.2.3.1.3.1 = HOST-RESOURCES-MIB::hrStorageTable.1.3.1 = nom donné à ma RAM, .1.3.6.1.2.1.25.2.3.1.3.31 = nom donné à la racine (/),...

    Les ID / descriptions ne se devinent pas, on les remonte avec : snmpwalk -v2c -c <communauté> <IP_agent_SNMP> HOST-RESOURCES-MIB::hrStorageTable.1.3 :)

    La shared memory a l'ID 8. Ce que nous voulons faire c'est donc dégager tout ce qui concerne .1.3.6.1.2.1.25.2.3.1.X.8. Peu importe la valeur de X puisque l'on veut virer la description, l'ID, la taille d'une allocation, les allocations effectuées,... Bref, nous voulons faire disparaître toute information sur l'objet d'ID 8 de la table hrStorageTable.

    On a l'OID : .1.3.6.1.2.1.25.2.3.1.X.8, il reste à calculer le masque. Cet OID nécessite 12 bits pour être représenté (ne faites pas attention aux nombres > 1, c'pas comme ça qu'on compte :D ). Il nous faudra donc deux octets, c'est plié d'avance.

    Mettons un 1 sous chaque élément de l'OID que l'on souhaite invariant. Et mettons 0 sous chaque partie variante. Dit de manière plus simple : on met un 1 en dessus de chaque élément de l'OID que l'on veut matcher dans la requête SNMP qui sera adressée au serveur. Nous voulons matcher tous les bits sauf le 11e, peu importe ce que contient ce dernier.

    OID :        .1.3.6.1.2.1.25.2.3.1.X.8
    Masque :  1 1 1 1 1 1  1  1 1 1 0 1 0 0 0 0
    On regroupe les bits en paquets de 8 (pour faire des octets) et on convertit en hexadécimal : 1 1 1 1 1 1 1 1 = ff ; 1 1 0 1 0 0 0 0 = d0 . Masque final : ff:d0 \o/
    On a donc tout pour créer notre vue : « view    <label>     excluded        .1.3.6.1.2.1.25.2.3.1.3.8       ff:d0 ».

    Ici, on dit donc que l'on exclut la ligne d'ID 8 dans la table hrStorageTable, peu importe la colonne. #IZI

    Si l'on remplaçait le masque par ff:f0, on dirait que seulement l'OID .1.3.6.1.2.1.25.2.3.1.3.8 doit être exclu. On exclurait donc uniquement la description de la shared memory mais on pourrait toujours récupérer la taille d'une allocation en .1.3.6.1.2.1.25.2.3.1.4.8, par exemple. #IZI

    Si l'on remplaçait « excluded » par « included », on dirait bien que seul .1.3.6.1.2.1.25.2.3.1.X.8 peut être lu. On pourrait donc récupérer uniquement les infos sur la shared memory. Et si on remplaçait « excluded » par « included » et le masque par ff:f0, alors on autoriserait uniquement la consultation de la description de la shared memory. #IZI

    Mais avant de dire ce que l'on exclu, il faudrait peut-être dire ce que l'on inclu ? Car exclure quelque chose du néant, ça va pas être possible. Voici donc la vue finale :
    « view    <label>     included        .iso
      view    <label>     excluded        .1.3.6.1.2.1.25.2.3.1.3.8       ff:d0 »
    On inclus tout l'arbre SNMP et on dégage la ligne de la table hrStorageTable qui concerne la shared memory.


    Maintenant, il faut écrire le fichier de configuration de snmpd kiVaBien. La page pointée par ce shaarli n'est plus vraiment appropriée, je lui préfère https://aresu.dsi.cnrs.fr/spip.php?article175 que j'ai shaarlié y'a quelque temps en http://shaarli.guiguishow.info/?t_NB6w.

    Pour simplifier, je vais développer un exemple complet :
    « ## Listen
    agentAddress udp:161,udp6:161


    ## Qui suis-je ?
    # snmpd remplit le sysName tout seul avec le FQDN de la machine
    sysLocation Internet
    sysContact guigui@example.com


    ## Qui voit quoi ?
    # Déclaration des machines autorisées
    # Se lit comme : les machines avec les IP 192.0.2.1 et 127.0.0.1, qui viennent nous causer
    # en positionnant la communauté à la valeur « zabbix » font partie de la comsec nommée « supervision »
    #                   Nom             Source          Communauté
    com2sec supervision     127.0.0.1       zabbix
    com2sec supervision     192.0.2.1       zabbix

    # Déclaration des groupes d'accès
    # Les machines de la comsec supervision font partie du groupe nommé « ReadOnly » (ce n'est qu'un label,
    # pas une permission effective !) qu'ils utilisent SNMP version 1 ou 2c
    #             Nom             Version         Com2sec
    group   ReadOnly        v2c            supervision
    group   ReadOnly        v1              supervision

    # Déclaration des vues
    # La vue NoSharedMem masque HOST-RESOURCES-MIB::hrStorageTable.hrStorageEntry.X.8
    # Donc on vire les infos à propos de la shared memory que Zabbix ne sait pas interpréter
    #                    Nom             Incl/Excl                      Subtree                         Masque (optionnel)
    view    NoSharedMem     included        .iso
    view    NoSharedMem     excluded       .1.3.6.1.2.1.25.2.3.1.3.8           ff:d0

    # Association entre un groupe et une vue
    # Le groupe ReadOnly est associé a la vue NoSharedMem en lecture seule
    #           GroupName       Contexte    Version      SecLevel        Prefix               Read            Write   Notif
    access  ReadOnly               ""              any             noauth          exact       NoSharedMem     none    none


    ##  Params divers
    # To keep "snmpd[3458]: Connection from UDP: [127.0.0.1]:48911" from filling your logs
    dontLogTCPWrappersConnects true »


    Notons que, sans la vue, une configuration snmpd qui autorise les mêmes deux machines à lire toute l'arborescence sans aucun droit d'écriture, ça se dit : « rocommunity zabbix 89.234.141.72/32 ». On voit donc que les vues sont complexes et pas toujours appropriées. :)

    Il ne reste plus qu'à déployer ce fichier de configuration avec Puppet^WAnsible ou autre selon vos goûts. :)
    02/01/2016 19:13:14 - permalink -
    - http://www.loriotpro.com/ServiceAndSupport/How_to/UCD-SNMP_ConfigSNMPv1-v1.2.php#_Toc43798575
    nomarkdown
  • Zabbix - De Wheezy à Jessie

    En mettant à jour de Wheezy à Jessie, deux problèmes sont apparus avec Zabbix (j'utilise php-fpm et nginx) :
        * « SQLSTATE[HY000] [1135] Can't create a new thread (errno 11); ». Voir https://www.percona.com/blog/2013/02/04/cant_create_thread_errno_11/ : « The canonical solution to this issue, if you do a bit of Googling, is to increase the number of processes / threads available to the MySQL user, typically by adding a line like this to /etc/security/limits.conf: « mysql  soft  nproc  4096 »  followed up by a restart of MySQL in a fresh user session. J'ai donc donné la possibilité à l'user MySQL de lancer 50 processus. Problème résolu depuis de nombreux mois.

        * Zabbix se plaint que post_max_size et max_execution_time n'ont pas les valeurs qu'il souhaite. Avant, nous n'avions jamais eu de problème... /etc/php5/fpm/conf.d/30-zabbix.ini (comme demandé par /usr/share/doc/zabbix-frontend-php/README.Debian ) contenait les bonnes valeurs et faisait parfaitement le job. Voir https://wiki.debian.org/PHP/#Configuration_layout . Problème : avec Jessie, les différents dossiers représentant chaque SAPI (apache2, fpm,...) comme /etc/php5/fpm/conf.d ne sont plus des liens symboliques vers /etc/php5/conf.d comme avant donc notre fichier de conf était dans /etc/php5/conf.d/30-zabbix.ini alors qu'il était attendu dans /etc/php5/fpm/conf.d/30-zabbix.ini... Il était donc ignoré. Solutions ?
            * mv /etc/php5/conf.d/30-zabbix.ini /etc/php5/fpm/conf.d/30-zabbix.ini

            * Passer les valeurs des directives de configuration à partir du virtualhost : https://forum.ivorde.com/nginx-php-fpm-increase-upload-max-filesize-and-other-php-values-per-vhost-t1151.html. Dans le virtualhost Zabbix, dans le bloc « location ~ \.php$ » nous ajoutons donc : « fastcgi_param PHP_VALUE "post_max_size=51M \n max_execution_time=300 \n max_input_time=300 \n date.timezone = Europe/Paris"; »

            * Dans le premier cas, il faut restart php5-fpm. Dans le deuxième cas, il faut restart php5-fpm et nginx.
    02/01/2016 17:16:46 - permalink -
    - http://shaarli.guiguishow.info/?K1UiHA
    nomarkdown
  • Chrooter Apache httpd, bonne ou mauvaise idée ?

    Sur mon serveur perso, je chroote Apache httpd depuis 3 ans et demi pour essayer mais ça cause tout un tas de problèmes pour un gain en sécurité pas évident du tout... Tant qu'à faire, voici quelques problèmes dont je me souviens et que je n'ai pas encore documenté :
        * Il fallait quand même créer les dossiers correspondants au DocumentRoot de chaque virtualhosts dans /var/www (ou autre chemin si vous l'avez changé...) sinon erreur au démarrage. Ça ne semble plus être nécessaire de nos jours.

        * Il faut charger explicitement les librairies utilisables. Genre si l'on a besoin d'une résolution de noms, il faut copier /etc/resolv.conf dans le chroot (au même emplacement, ofc) et ajouter ceci à la conf' Apache : « LoadFile /lib/x86_64-linux-gnu/libnss_dns.so.2 » sinon plus de résolution des noms et ces messages dans les logs :
        « PHP Warning:  file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/[...] on line 3
          PHP Warning:  file_get_contents([...]): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/[...] on line 3 »

        * Il faut copier /usr/share/zoneinfo et son contenu dans le chroot sinon PHP se vautrera dès qu'une fonction relative au temps/date sera utilisée. Exemples : « PHP Fatal error:  date_default_timezone_get(): Timezone database is corrupt - this should *never* happen! », «  PHP Fatal error:  strtotime(): Timezone database is corrupt - this should *never* happen! », « PHP Warning:  strtotime(): Invalid date.timezone value 'Europe/Paris', we selected the timezone 'UTC' for now. », « PHP Warning:  date_default_timezone_get(): Invalid date.timezone value 'Europe/Paris', we selected the timezone 'UTC' for now. ».

        * Problème de suppression des fichiers de session (stockés dans session.save_path). PHP n'a pas de mécanisme pour supprimer automagiquement ces fichiers. Sous Debian GNU/Linux, c'est stocké dans /tmp qui est souvent un tmpfs qui se vide donc à chaque extinction du serveur. De plus, un script, /usr/lib/php5/sessionclean est exécuté en cron toutes les 30 minutes. Problème : ce script récupère bien le chemin où sont stockés les fichiers... mais sans tenir compte du chroot. Ainsi « session.save_path = /tmp » dans le php.ini d'un PHP exécuté dans un chroot Apache httpd ne désigne pas /tmp mais $chrootdir/tmp (/var/apache/chroot/tmp dans mon cas puis chrootdir = /var/apache/chroot). Mon workaround :
            * Dupliquer /usr/lib/php5/sessionclean en /usr/local/lib/php5-sessionclean ;

            * Définir moi-même $save_path en commentant save_path=$(echo [...]) et en le remplaçant par « save_path=/var/apache/chroot/tmp »

            * Dupliquer /etc/cron.d/php5 en /etc/cron.d/php5-custom dans lequel j'appelle /usr/local/lib/php5-sessionclean au lieu de /usr/lib/php5/sessionclean

            * systemctl restart cron pour prendre en compte cette modification

        * Problème avec la validation des certificats x509. Voir http://shaarli.guiguishow.info/?lWsIvQ

        * Les sockets UNIX deviennent compliquées à utiliser pour communiquer avec les SGBD. On doit donc utiliser des sockets TCP... C'est déjà le cas par défaut donc ça n'entraîne pas de contraintes supplémentaires.
    02/01/2016 13:54:05 - permalink -
    - http://shaarli.guiguishow.info/?08T1Cw
    nomarkdown
  • error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed · Issue #3346 · composer/composer · GitHub

    J'utilise tt-rss (https://tt-rss.org/gitlab/fox/tt-rss/wikis/home) comme agrégateur de flux RSS et rssbridge (https://github.com/sebsauvage/rss-bridge) pour produire des flux RSS pour des sites web qui n'en fournissent plus par pur choix. Depuis la mise à jour à Jessie, certains flux RSS passant par rssbridge ne sont plus fonctionnels : rssbridge présente une page vide (dans la version récupérable fin décembre 2015 sur github, on aura un message « Requested username can't be found. ». Les flux qui ne sont plus fonctionnels correspondent à des sites auxquels le bridge accède en HTTPS ou les sites web qui redirigent automatiquement sur leur version HTTP (on ne parle pas d'HSTS (voir http://www.bortzmeyer.org/6797.html ) mais juste d'une bête redirection HTTP 301) comme Twitter, par exemple.


    Si l'on n'a pas accès aux logs, on passe rssbridge en mode debug en commentant « error_reporting(0); » et en décommentant « ini_set('display_errors','1'); error_reporting(E_ALL);  // For debugging only. » au début du fichier index.php de rssbridge. On se rend à l'URL défectueuse (ou dans les logs) et on obtient l'erreur complète :
    « Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /var/www/rssbridge/lib/Bridge.php on line 369

    Warning: file_get_contents(): Failed to enable crypto in /var/www/rssbridge/lib/Bridge.php on line 369

    Warning: file_get_contents(http://twitter.com/aeris22): failed to open stream: operation failed in /var/www/rssbridge/lib/Bridge.php on line 369
    Requested username can't be found. »

    OpenSSL n'arrive donc pas à valider le certificat du serveur. NE PAS désactiver la vérification des certificats x509 de file_get_contents() avec une méthode comme celle exposée à l'adresse https://stackoverflow.com/questions/26148701/file-get-contents-ssl-operation-failed-with-code-1-and-more (verify_peer -> false) : c'est une connerie, ça fonctionnait avant, on va réparer ça, c'est tout, pas la peine de créer une absence de sécurité. D'autant plus que ça nécessite de modifier le code de rssbridge, ce qui ne résistera pas aux mises à jour.


    Si l'on écrit un bête fichier de test, comme « <?php echo file_get_contents('https://twitter.com/') ?> » et qu'on l'exécute avec php-cli (php test-x509.php , par exemple), on se rend compte que cela fonctionne. Le même fichier de test accédé via un serveur web comme Apache httpd retourne l'erreur vue ci-dessus. On en déduit que cela vient soit de l'environnement d'exécution, soit d'un changement entre la conf' php-cli et la conf php Apache httpd.

    Pourtant, les contextes TLS (obtenus avec « var_dump(openssl_get_cert_locations()); » sont identiques dans les deux cas :
    « array(8) {
      ["default_cert_file"]=>
      string(21) "/usr/lib/ssl/cert.pem"
      ["default_cert_file_env"]=>
      string(13) "SSL_CERT_FILE"
      ["default_cert_dir"]=>
      string(18) "/usr/lib/ssl/certs"
      ["default_cert_dir_env"]=>
      string(12) "SSL_CERT_DIR"
      ["default_private_dir"]=>
      string(20) "/usr/lib/ssl/private"
      ["default_default_cert_area"]=>
      string(12) "/usr/lib/ssl"
      ["ini_cafile"]=>
      string(0) ""
      ["ini_capath"]=>
      string(0) ""
    } »

    /usr/lib/ssl/cert.pem n'existe pas sous Debian GNU/Linux mais /usr/lib/ssl/certs est un lien symbolique vers /etc/ssl/certs qui, grâce au package ca-certificate, contient bien les certificats d'AC x509 dont l'un d'eux a signé le certificat de Twitter...

    Haaaaaaaaa mais j'y suis : cet Apache httpd tourne dans un chroot, « ChrootDir /var/apache/chroot » dans la conf' ! Or, /var/apache/chroot/usr/lib/ssl/certs n'existe pas !


    De là, on a plusieurs solutions :
        * Copier /etc/ssl/certs et tout son contenu dans /var/apache/chroot/etc/ssl/certs et faire un lien symbolique de /var/apache/chroot/usr/lib/ssl/certs vers /var/apache/chroot/etc/ssl/certs.

        * Récupérer tout un magasin de certificats d'AC x509 et demander à PHP de l'utiliser

    Dans les deux cas, la mise à jour des certificats reste problématique... Dans le deuxième cas, on peut lancer un wget en cron pour s'assurer d'avoir les derniers certificats et de ne plus avoir les certificats révoqués. Ces mises à jour sont plutôt rares (et dépendent de la source de votre magasin de certificats genre Microsoft, Mozilla, Google, Debian,...) mais mieux vaut être prévenu.


    J'ai choisi la deuxième méthode. Pour la mettre en pratique, on :
        * wget https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt (magasin de certificats de Mozilla compacté par les dev de cURL, voir http://curl.haxx.se/docs/caextract.html).

        * En fonction des besoins, on peut aussi ajouter d'autres AC au bundle genre CACert (qui n'est plus dans le magasin de certificats de Mozilla). Il suffit de concaténer les certificats intermédiaires / root de l'AC au reste du bundle : cat ca-bundle.crt root.crt > ca-bundle.crt

        * mkdir /var/apache/chroot/etc/ssl

        * mv ca-bundle.crt /var/apache/chroot/etc/ssl/

        * ajoute « openssl.cafile = /etc/ssl/ca-bundle.crt » dans /etc/php5/apache2/php.ini

        * systemctl restart apache2

    Maintenant, notre contexte TLS est le suivant :
    « array(8) {
      ["default_cert_file"]=>
      string(21) "/usr/lib/ssl/cert.pem"
      ["default_cert_file_env"]=>
      string(13) "SSL_CERT_FILE"
      ["default_cert_dir"]=>
      string(18) "/usr/lib/ssl/certs"
      ["default_cert_dir_env"]=>
      string(12) "SSL_CERT_DIR"
      ["default_private_dir"]=>
      string(20) "/usr/lib/ssl/private"
      ["default_default_cert_area"]=>
      string(12) "/usr/lib/ssl"
      ["ini_cafile"]=>
      string(19) "/etc/ssl/ca-bundle.crt"
      ["ini_capath"]=> string(0) "" } »

    Notons le « ["ini_cafile"]=> string(19) "/etc/ssl/ca-bundle.crt" » ;)

    rssbridge devrait parfaitement fonctionner (et si ce n'est pas le cas, il faut vider le cache avec rm -r <document_root>/cache/* ). \o/ On n'oublie pas de virer le mode debug de rssbridge. ;)


    Pourquoi ça s'est mis à déconner avec le passage à Jessie ? J'avais dû déjà mettre en place un trick que je n'ai pas documenté ici, que j'ai donc dû oublier et j'ai dû accepter le remplacement de php.init durant la mise à jour, quelque chose dans ce goût-là.

    Le mieux étant de ne pas chrooter Apache httpd : ça cause tout un tas de problèmes pour un gain en sécurité pas évident du tout (voir http://shaarli.guiguishow.info/?08T1Cw).
    02/01/2016 13:53:21 - permalink -
    - https://github.com/composer/composer/issues/3346
    nomarkdown
  • #638045 - warning: xsasl_cyrus_server_get_mechanism_list: no mechanism available - Debian Bug report logs - GuiGui's Show - Liens

    « Dec 26 17:54:17 localhost postfix/smtpd[16304]: warning: SASL authentication failure: Internal Error -4 in ../../lib/server.c near line 1757
    Dec 26 17:54:17 localhost postfix/smtpd[16304]: warning: SASL authentication failure: Internal Error -4 in ../../lib/server.c near line 1757
    Dec 26 17:54:17 localhost postfix/smtpd[16304]: warning: SASL authentication failure: Internal Error -4 in ../../lib/server.c near line 1757
    Dec 26 17:54:17 localhost postfix/smtpd[16304]: warning: xsasl_cyrus_server_get_mechanism_list: no mechanism available
    Dec 26 17:54:18 localhost postfix/smtpd[16304]: fatal: no SASL authentication mechanisms
    Dec 26 17:54:18 localhost postfix/master[5159]: warning: process /usr/lib/postfix/smtpd pid 16304 exit status 1
    Dec 26 17:54:18 localhost postfix/master[5159]: warning: /usr/lib/postfix/smtpd: bad command startup -- throttling »

    Et 1 an et demi après, je me réponds à moi-même : il faut installer le package libsasl2-modules...
    01/01/2016 19:46:52 - permalink -
    - http://shaarli.guiguishow.info/?_-omsg
    nomarkdown
  • Configuring Apache, Nginx, and OpenSSL for Forward Secrecy | Qualys Community

    Pour ne plus avoir à chercher les listes de suites cryptographiques qui supportent la confidentialité persistante (Perfect Forward Secrecy, PFS, en anglais, c'est-à-dire que même si la clé privée de votre serveur est dérobée, les échanges passés sont indéchiffrables par l'attaquant, même s'ils ont été capturés et conservées), je me note ça ici :

    On commence par celle donnée dans l'article (moins RC4, que j'ai choisi de dégager) : EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4
    Analyse : que des suites permettant la PFS. Notons que la priorité est donnée aux courbes élliptiques aussi bien pour l'échange de Diffie-Hellman éphémère que pour le chiffrement asymétrique. On a donc 21 suites cryptographiques.

    On voudrait la même chose (PFS uniquement + priorité aux courbes elliptiques) mais sans être aussi précis sur les suites qu'on autorise afin que de nouvelles suites ajoutées dans le futur soient automatiquement activées. Attention : ça permet de prendre en compte automagiquement les nouvelles suites cryptos meilleures... mais aussi des nouvelles suites cryptos moisies... Il y a donc un choix à faire.
    EECDH+ECDSA EECDH+aRSA EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4
    Et pour les personnes qui voudraient donner la priorité à RSA aussi bien pour l'échange de Diffie-Hellman que pour la crypto asymétrique, la liste devient : EDH+aRSA EECDH+aRSA EECDH+ECDSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4

    Pour chacun des exemples précédents, on peut virer SEED et CAMELLIA qui sont des algos de chiffrement symétrique sans faiblesses connues à ce jour mais qui ne sont pas accélérés matériellement comme l'est AES et qui sont largement moins utilisés (et donc moins audités ?) qu'AES : pour cela, il suffit d'ajouter « !SEED !CAMELLIA » à la fin de la liste. Il reste 18 suites cryptos dans la liste.

    Pour ceux et celles qui veulent jouer les nazis : on peut faire la même (PFS uniquement, +/- SEED/CAMELLIA selon vos préférences, priorité aux courbes elliptiques ou pas) mais en virant SHA-1 qui commence à sentir le moisi : il suffit d'ajouter « !SHA » à la fin des listes vues précédemment. À ce stade, il ne reste plus que 12 suites dans la liste. Évidemment, ça ne va pas fonctionner souvent puisqu'il faut un support TLS v1.2 minimum (qui apporte les suites PFS sans SHA-1) qui n'est pas encore du tout la norme mais c'est clairement ce qu'il faut utiliser pour des services non publics et des environnements contrôlés.

    Si l'on veut une liste plus réaliste, qui exclut le moins de logiciels clients sans pour autant être une passoire (car oui, y'a encore *beaucoup* de serveurs et clients qui ne supportent pas la PFS, comme les serveurs XMPP de mes contacts, par exemple...) : EDH+aRSA EECDH+aRSA EECDH+ECDSA ECDH aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4 . On arrive à 42 suites cryptos, le compte est bon \o/ ( ;) ). Comme pour les autres listes, on peut virer SEED et CAMELLIA en fonction du niveau de confiance que l'on accorde à ces algorithmes et/ou en fonction des performances recherchées. On peut aussi donner la priorité aux courbes elliptiques puisqu'ici je la donne à RSA.
    01/01/2016 19:31:39 - permalink -
    - https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
    nomarkdown
  • [ Utilisateurs de Raspbian, vous pouvez supprimer le composant « rpi » de vos sources.list ]

    Voici ce que contient le composant « rpi » des dépôts Debian Raspbian. Soit 3 logiciels : gstreamer1.0-omx, gstreamer1.0-omx-dbg et ssh-regen-startup. Si aucun de ces logiciels est installé sur votre Raspberry Pi, vous pouvez supprimer le composant rpi de votre sources.list.

    Ça signifie aussi que les packages bricolés de partout par les mainteneurs Raspbian sont injectés directement dans le composant « main ».... C'est plutôt contestable. Mais ce n'est pas un scoop, voir http://www.guiguishow.info/2013/09/07/auto-hebergement-sur-olinuxino/#toc-4076-technique . D'où ma préférence pour les OLinuXino : ça utilise les dépôts Debian standard donc on bénéficie du support de la team Debian-Security et de sa réactivité (alors que les màj, même de sécu, sont décalées de plusieurs jours chez Raspbian).
    01/01/2016 18:07:17 - permalink -
    - ftp://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian/dists/jessie/rpi/binary-armhf/Packages
    nomarkdown
  • debian - how to remove a package which post-installation and pre-removal script fails? - Server Fault

    Je découvre (hééééééééé bah comme dirait l'autre) où sont stockés les hooks dpkg (avant installation, après installation, avant suppression, après suppression) : /var/lib/dpkg/info/<package_name>.<type>.

    Exemple pratique : quand un ejabberd provenant des backports (c'était pour un test) refuse d'être supprimé, je modifie /var/lib/dpkg/info/ejabberd.postrm pour faire commencer ce script par exit 0 et je relance apt-get autoremove ejabberd...
    01/01/2016 18:01:08 - permalink -
    - https://serverfault.com/questions/179570/how-to-remove-a-package-which-post-installation-and-pre-removal-script-fails
    nomarkdown
  • Cherche solution à l'erreur « ERREUR (arc) - arc_not_found » de Sympa (gestionnaire de listes de discussion/diffusion)

    L'interface web de Sympa m'affiche cette erreur lorsque je consulte les archives publiques d'une liste, après avoir confirmé que je ne suis pas un spammeur... On ne trouve rien sur un moteur de recherche à part des SYmpa dans le même état que le mien... Si quelqu'un a la solution, qu'il fasse signe.
    01/01/2016 17:53:57 - permalink -
    - http://shaarli.guiguishow.info/?gL5XXA
    nomarkdown
  • New in OpenDNSSEC 1.4 - OpenDNSSEC Documentation - OpenDNSSEC

    En passant de Wheezy à Jessie, on passe d'OpenDNSSEC 1.3.9 à la version 1.4.6. Changement majeur. Pourtant, sur mon infra perso, cette mise à jour s'est mieux déroulée que celle entre Squeeze et Wheezy (http://www.guiguishow.info/2013/05/19/de-debian-gnulinux-squeeze-a-wheezy/#toc-3696-opendnssec), qui était pourtant un changement mineur de version, ce qui illustre, à mon avis, qu'OpenDNSSEC devient un logiciel mature.

    Quelques points auxquels prêter attention tout de même :
        * « Auditor is deprecated The auditor is no longer supported in 1.4. This greatly reduced the dependencies of OpenDNSSEC, namely it no longer depends on Ruby. Alternative validation tools are described here. ». Il faudra donc mettre le bloc Auditor en commentaire (« <!-- [blabla Auditor ici] --> ») dans /etc/opendnssec/conf.xml sinon, l'erreur « Relax-NG validity error : Did not expect element Auditor there » se produira.

        * « Version 1.4  has some kasp database changes compared to 1.3 to allow for an update to the zonelist.xml schema (these changes support flexibility in the input and output adapters). » voir https://wiki.opendnssec.org/display/DOCS/Migrating+from+earlier+versions+of+OpenDNSSEC.  Il faut exécuter le SQL de migration : sqlite3 /var/lib/opendnssec/db/kasp.db < /usr/share/opendnssec/migrate_adapters_1.sqlite3 (merci https://stackoverflow.com/questions/10045035/how-to-execute-an-sql-script-file-against-an-sqlite-3-database-file pour la syntaxe). Si ce n'est pas fait, ods-ksmutil key list retournera l'erreur « ERROR: database version number incompatible with software; require 3, found 2. Please run the migration scripts
    Failed to connect to database ».

        * Lors d'un ods-signer sign <zonename>, je recevais une erreur « connect() failed: No such file or directory » qui indique que le démon ods-signer n'est pas en cours d'exécution (voir http://lists.opendnssec.org/pipermail/opendnssec-user/2012-July/002075.html). En regardant dans les logs, on peut voir :
        « Dec 24 17:11:12 localhost ods-signerd: SoftHSM: init: Could not open the token database. errno=2. Probably wrong privileges: /var/lib/lib/softhsm/slot0.db
           Dec 24 17:11:12 localhost ods-enforcerd: SoftHSM: init: Could not open the token database. errno=2. Probably wrong privileges: /var/lib/lib/softhsm/slot0.db
           Dec 24 17:11:12 localhost ods-enforcerd: hsm_get_slot_id(): No slots found in HSM
           Dec 24 17:11:12 localhost ods-signerd: [hsm] hsm_get_slot_id(): No slots found in HSM
           Dec 24 17:11:12 localhost ods-signerd: [engine] setup failed: HSM error
           Dec 24 17:11:12 localhost ods-signerd: [engine] signer shutdown »
        On remarque le chemin erroné « /var/lib/lib/softhsm/slot0.db » (deux fois « lib/ »). Il s'agit d'une erreur dans le package Debian et dérivés (voir https://bugs.launchpad.net/ubuntu/+source/softhsm/+bug/1451348). Il faut corriger ça dans /etc/softhsm/softhsm.conf et relancer opendnssec : systemctl restart opendnssec-enforcer ; systemctl restart opendnssec-signer
    01/01/2016 17:25:31 - permalink -
    - https://wiki.opendnssec.org/display/DOCS/New+in+OpenDNSSEC+1.4
    nomarkdown
  • Mise à jour de la version 2.2 vers la version 2.4 - Serveur Apache HTTP Version 2.4

    Une liste des changements qui m'ont affecté lors du passage de Wheezy à Jessie et donc d'Apache httpd 2.2 à Apache 2.4 :

        * « NameVirtualHost has no effect and will be removed in the next release » : « La directive NameVirtualHost n'a plus aucun effet, si ce n'est l'émission d'un avertissement. Toute combinaison adresse/port apparaissant dans plusieurs serveurs virtuels est traitée implicitement comme un serveur virtuel basé sur le nom. ». J'ai donc simplement supprimée cette directive de configuration. Ça signifie également que la création de plusieurs VirtualHost TLS (reposant sur SNI) fonctionne désormais out-of-box ce qui représente un beau progrès.

        * « Invalid command 'LockFile', perhaps misspelled or defined by a module not included in the server configuration » : « Les directives AcceptMutex, LockFile, RewriteLock, SSLMutex, SSLStaplingMutex et WatchdogMutexPath ont été remplacées par la directive unique Mutex. ». Voir https://askubuntu.com/questions/368515/upgraded-to-ubuntu-13-10-apache-not-able-to-start pour une directive de configuration de remplacement. Notons que c'est bien la même qui a été retenu dans la conf' par défaut chez Debian.

        * « Ignoring deprecated use of DefaultType in line NN of /path/to/httpd.conf - supprimez la directive DefaultType et remplacez-la par les directives de configuration appropriées. ». Cette ligne a simplement été supprimée de la config' par défaut chez Debian. J'en ai fait autant.

        * Chez Debian et Ubuntu, le nom des fichiers contenant les différents VirtualHosts doit terminer par « .conf » sinon ils sont ignorés, voir https://www.linode.com/docs/security/upgrading/updating-virtual-host-settings-from-apache-2-2-to-apache-2-4 . Il faut donc :
            * rm /etc/apache2/sites-enabled/*
            * cd /etc/apache2/sites-available
            * for vhost in `ls`; do mv $vhost $vhost.conf; sudo a2ensite $vhost; done;
            * systemctl reload apache2

        * « Either all Options must start with + or -, or no Option may. ». En effet, j'avais des « SymLinksIfOwnerMatch » qui n'ont jamais posés de problèmes... Il suffit donc d'ajouter un « + » devant pour confirmer qu'on veut bien activer cette option. Voir https://serverfault.com/questions/647665/either-all-options-must-start-with-or-or-no-option-may

        * Le mécanisme de contrôle d'accès change. Pour l'instant, la compatibilité est assurée mais il vaut bien se préparer en avance :
            * « Order deny,allow Deny from all » devient « Require all denied »

            * « Order allow,deny Allow from all » devient « Require all granted »

            * « Order Deny,Allow Deny from all Allow from <IP> » (très utile pour faire une maintenance peinard ;) ) devient « Require all denied Require ip <IP> »

            * « Order Allow,Deny Deny from <IP> Allow from all » (très utile contre les pénibles ;) ) devient
            « <RequireAll>
                    Require all granted
                    Require not ip <IP>
              </RequireAll>
        Voir https://httpd.apache.org/docs/2.4/fr/howto/access.html
    01/01/2016 16:43:05 - permalink -
    - https://httpd.apache.org/docs/2.4/fr/upgrading.html
    nomarkdown
  • Debian Backports ›› FAQ [ How to get a list of all installed backports? ]

    « Q: How to get a list of all installed backports?

    A: Something like the following solutions should work:

    dpkg -l  |awk '/^ii/ && $3 ~ /bpo[6-8]/ {print $2}'

    or

    aptitude search '?narrow(?version(CURRENT),?origin(Debian Backports))' -F '%100p' »

    Pour ceux et celles qui voudraient récupérer une liste des logiciels installés en fonction de son composant (main, contrib, non-free, rpi,...) : dpkg-query -W -f='${Section}\t${Package}\n' | grep ^non-free
    01/01/2016 16:22:08 - permalink -
    - http://backports.debian.org/FAQ/
    nomarkdown
  • Nagios: CRITICAL - Socket timeout after 10 seconds - Stack Overflow

    Chez ARN, FAI associatif en Alsace, nos machines ont une BMC c'est-à-dire un contrôleur permettant le management à distance (accès console, reboot, monitoring bas niveau,...) de la bécane (voir https://en.wikipedia.org/wiki/Intelligent_Platform_Management_Interface#Baseboard_management_controller).

    La BMC de notre HP, un truc ILO 2 est perfectible : elle peut continuer à ping mais ne plus présenter son interface web... et devenir ainsi inutile. Impossible de reboot uniquement la BMC depuis le serveur lui-même (ipmitool bmc reset cold, voir https://serverfault.com/questions/205658/restarting-an-ibm-bmc-without-restarting-the-server-itself) dans ces moments-là : ça ne juste fonctionne pas. Le seul moyen est de rebooter totalement (éteindre + couper les arrivées électriques) la machine. Pas cool de découvrir ça quand on a besoin de la BMC car on a foiré un truc...

    On a donc mis en place un monitoring HTTP en plus du monitoring ICMP des BMC. Aucun problème sur notre Dell iDRAC... Problème sur notre ILO 2, bien entendu : le check retourne toujours « CRITICAL - Socket timeout after 10 seconds » même si l'on augmente la durée avant timeout. Un navigateur web ne rencontre aucun problème. Problème avec TLS, peut-être ? Non, une capture réseau montre que c'est la même version de TLS et la même suite cryptographique qui sont choisis dans les deux cas (check et navigateur web).

    Ce n'est pas la faute de la BMC mais celle du check de monitoring check_http que l'on trouve dans nagios. En effet, ce dernier exécute une requête HTTP 1.1. La BMC répond avec un Content-Type: chunked. La norme HTTP 1.1 *impose* le support de ce content-type donc la BMC n'est pas fautive : le check demande à causer HTTP 1.1 sans savoir parler la langue... Depuis mi-2014 environ (voir https://github.com/monitoring-plugins/monitoring-plugins/pull/1286), check_http sait causer chunked mais visiblement, c'est sacrément buggué (voir https://github.com/nagios-plugins/nagios-plugins/issues/103 par exemple).

    Conclusion : on utilise l'argument « -N » de check_http pour lui dire de se concentrer sur les entêtes HTTP uniquement, et non pas sur le contenu envoyé par la BMC. Ainsi, on vérifie quand même que la BMC est fonctionnelle (une connexion HTTP est possible) sans se prendre la tête.
    01/01/2016 16:21:03 - permalink -
    - https://stackoverflow.com/questions/7871009/nagios-critical-socket-timeout-after-10-seconds
    nomarkdown
  • Voeux aux Français [ NDLR : 2016] - vidéo Dailymotion

    Ils envoient du rêve les vœux de notre président de la République :

    « Je vous dois la vérité : on n'en a pas fini avec le terrorisme ». Merci Cap'tain Obvious, qui a écrit ce discours nul à chier ?! Mais ça indique néanmoins qu'on est loin d'en finir avec l'état d'urgence.

    « Face à la haine, la France a montré la force de ses valeurs, celles de la République » : oui, aller frapper en Syrie, les lois Renseignement, Surveillance des Communications Internationales et Prorogeant l'état d'urgence, l'exclusion des réfugiés, et les innombrables dérives de l'état d'urgence, c'est sûr que tout ça c'est les valeurs de la France et de la République ! Sale enfoiré, va !

    « Les français ont fait preuve de détermination et de solidarité et de sang froid » : à se faire enfermer, via la peur (doctrine du choc), à l'intérieur d'une cage (voir point précédent pour des exemples) et à rejeter leur prochain ? Oui, en effet, les beaufs (https://fr.wikipedia.org/wiki/Beauf) sont déterminés à faire tout ça et y'a pas de quoi en être fier.

    Des attentats sont régulièrement déjoués donc Flamby doit nous protéger... Oui, tous les États totalitaires ont toujours dit ça pour monter en puissance et assurer leur maintien via une instrumentalisation de leur utilité/légitimé.

    Donc le plan c'est toujours de continuer à alimenter le feu de la haine en Syrie sans résoudre les vraies causes du terrorisme (voir : http://shaarli.guiguishow.info/?BeoNUw) tout en affirmant attaquer le terrorisme à la racine (c'est dans le discours, je n'invente pas).

    Mais, attention, ils vont aussi engager une réforme de la procédure pénale pour lutter contre le crime organisé, son financement et les trafics qui l'alimentent. Trololololo, dois-je déduire que la France va lutter contre la pire mafia c'est-à-dire les politocards ? :D Sérieusement, on m'explique le rapport entre crime organisé et terrorisme ?

    Mais, attention, ils vont aussi engager une révision de la Constitution pour « donner un fondement incontestable à l'état d'urgence ». WTF ?! Donc c'est que l'état d'urgence actuel n'est pas incontestable, c'est bien de le reconnaître. Ça veut aussi dire qu'ils vont nous sucrer la sûreté (c'est-à-dire la protection du Peuple contre les abus des dirigeants, dans le verlan de 1789), je ne vois que ça comme signification cachée à cette déclaration (éliminer l'insécurité juridique me semble un argument faible...).

    « Nous diviser, c'est ce que veulent les extrémistes » : bien vu la pique en direction du FN mais dommage que ça s'applique très bien au PS lui-même. :)

    « Si y'a un état d'urgence sécuritaire, y'a aussi un état d'urgence économique et social », c'est bien de le reconnaître, aussi bien pour l'aspect sécuritaire de l'état d'urgence que sur l'urgence d'agir sur l'aspect social/sociétal. :)

    Le reste n'est que le blabla actuel : tout jeune aura un taff ou une formation, on va lutter contre le chômage donc on promet encore subtilement le plein emploi illusoire, patriotisme, sécuriser les frontières, réussite (trololololololo) de la COP21, sécurité, service civique pour la solidarité (trololololololololo),...

    La conclusion est à mourir de ridicule : « il faut utiliser ce sursaut qui a été salué dans le monde entier pour mener à bien toutes les réformes, pour être plus fort économiquement, plus juste socialement, plus exemplaire démocratiquement. ». J'ai déjà donné des contre-exemples ci-dessus.

    Bref, un président qui joue sur l'émotion et envoie le faux rêve habituel... Toujours aucune perspective, aucune vision d'un monde différent, plus humain. J-O-I-E. :(
    31/12/2015 21:43:47 - permalink -
    - http://www.dailymotion.com/video/x3kb9pv_voeux-aux-francais_news
    nomarkdown
  • Twitter rejoint Facebook et CloudFlare pour continuer à supporter SHA-1, ces entreprises ne vont-elles pas dans le sens contraire de la sécurité ?

    Une histoire de dette technique. Notons que pour l'obsolescence programmée ou pour faire acheter le dernier joujou inutile mais mega cher à la mode, là y'a du monde mais pour la sécurité, y'a plus personne pour faire du gavage d'oies. :))))

    « Mozilla a annoncé qu’elle ne supporterait plus les certificats SHA-1 à partir de 1er juillet 2016. Microsoft a également abondé dans le même sens et a fixé le mois de juin 2016 comme date de fin du support de SHA-1 dans son navigateur. Google qui avait fixé la sienne au 1er janvier 2017 est en cours de réflexion afin de voir s’il ne serait pas judicieux de rapprocher la date de fin du support de SHA-1 au 1er juillet 2016 comme Mozilla.


    [...]

    À l’opposé de ces entreprises qui souhaitent ne plus supporter ce standard le plus tôt possible, nous avons CloudFlare et Facebook qui après avoir évalué l’impact de l’abandon du support de SHA-1, ont les regards tournés dans le sens contraire et encouragent les entreprises à supporter le standard afin de ne pas priver une partie des utilisateurs de la sécurité offerte par cet algorithme de hachage.

    Selon l’enquête menée par Cloudflare, 37 millions d’internautes n’ont pas d’équipements compatibles avec SHA-2 et seraient définitivement coupés des pages chiffrées avec cet algorithme de chiffrement dès l’abandon du support SHA-1.

    Facebook a produit des statistiques similaires après avoir détecté que « 3-7 % des navigateurs actuellement utilisés ne sont pas en mesure d’utiliser la norme SHA-256 plus récente

    [...]

    Twitter qui est également concerné par le problème a effectué des tests qui ont permis de démontrer que 3 à 6 % de ses utilisateurs ne pourront pas accéder à sa plateforme à partir de SHA-2.

    [...]

    Avec cette annonce, les utilisateurs disposant uniquement de support pour SHA-1 peuvent espérer continuer à accéder à ces plateformes après l’abandon du support par certaines entreprises. Toutefois, pour que cette initiative puisse atteindre son objectif, ne serait-il pas intéressant pour d’autres entreprises de suivre le pas ?

    En outre, vu que Twitter annonce que le support pour SHA-1 sera abandonné en mars 2019, ne serait-il pas mieux de le faire maintenant ? Par ailleurs, ces entreprises soulignent que le support pour SHA-1 sera abandonné si une attaque se produisait. Devrait-on attendre qu’une telle occurrence survienne avant d’abandonner ce certificat ? Ne serait-il pas mieux d’obliger ces utilisateurs à acquérir d’autres supports compatibles avec SHA-256, au lieu de vouloir leur offrir une sécurité à risques ? »

    Via https://twitter.com/aeris22/status/682517278504562689
    31/12/2015 12:42:40 - permalink -
    - http://www.developpez.com/actu/94390/Twitter-rejoint-Facebook-et-CloudFlare-pour-continuer-a-supporter-SHA-1-ces-entreprises-ne-vont-elles-pas-dans-le-sens-contraire-de-la-securite/
    nomarkdown
  • La fin du rêve | Blog | Le Club de Mediapart

    « Que n'a-t-on pas lu sur la "crise démocratique", après le 1er tour des élections régionales de 2015.

    [...]

    Pour qu'il y ait crise démocratique, il faut qu'il y ait - sinon démocratie (ne rêvons pas) - au moins l'impression qu'in fine le peuple dispose du pouvoir de plus ou moins choisir le modèle de société dans lequel il souhaite vivre. Dans ce cas, et si l'offre politique ne répond pas à ses attentes, alors, oui, il y aura crise.

    [...]

    On sait depuis Sieyès que la France n'est pas une démocratie, et "ne saurait l'être". Sa vision, qui limitait le pouvoir du peuple au seul choix de ses représentants (et qu'il nommait honnêtement "état représentatif" par opposition à un "état démocratique" qui aurait permis le mandat impératif) est à l'origine de notre république, et de beaucoup d'autres. "Les citoyens qui se nomment des représentants", disait-il, "n'ont pas de volonté particulière à imposer". Ce qu'on pourrait résumer, en français moderne, par "si tu donnes ta voix à quelqu'un, tu n'as plus qu'à fermer ta gueule". Les mots ont un sens. Même s'il est commode de l'oublier, la France n'est pas, et n'a jamais été, une démocratie.

    Et il est d'autant plus facile de l'oublier que ceux qui se présentent au suffrage n'hésitent pas à le faire au nom de la "démocratie", et de "programmes" et de "valeurs" qu'ils peuvent bien promettre d'appliquer quand ils savent mieux que tout autre qu'ils ne les appliqueront pas. C'est là le mensonge fondamental de toutes les élections, la manipulation triviale qu'appliquent tous les pervers narcissiques qui aspirent à nous gouverner.

    Par principe, nous élisons les meilleurs menteurs. Par principe, en tant que peuple, nous nous mentons à nous-mêmes depuis des générations pour éviter de voir que nous incombe la responsabilité de notre déchéance politique. C'est d'ailleurs un déni dans lequel s'enferment d'abord les principales victimes de nos pervers élus: ceux qui adhèrent au parti du chef, et qui restent ensuite "partisans" envers et contre toutes les évidences de ses trahisons. Ça se traite.

    À ceci, il n'est qu'une seule réponse adulte: le boycott des urnes, seul choix permettant de ne plus donner la moindre légitimité "populaire" à ceux qui prennent le pouvoir, jusqu'à ce qu'enfin ceux-ci se révèlent n'être que ce qu'ils sont: des petits despotes capables de tout pour vivre dans les ors de la république.

    Jusqu'à ce qu'enfin disparaîsse une fois pour toutes la fable pour grands enfants de l'existence d'un "peuple souverain". Ce mythe populaire n'a que trop vécu.

    [...]

    Pour autant, aussi nécessaire qu'elle soit, cette prise de conscience ne sert à rien en tant que telle. Accepter de voir notre organisation sociale telle qu'elle est n'est qu'un préalable: ce n'est pas parce qu'un enfant accepte l'inexistence du père noel qu'il devient un citoyen actif.

    Dans ce deuil de la légende démocratique, la phase suivante, après celle du déni, est celle de la colère. De la révolte.

    Mais c'est là que ça devient triste.

    D'abord parce que cette colère, cette révolte, est tout à fait inutile. Ceux qui croient que la révolution (qu'elle se fasse dans la rue ou qu'elle reste "numérique") permettra à la fable de devenir une réalité n'ont pas tout à fait saisi le sens du mot "fable". Au mieux, ce type d'insurrection ne permet que de changer de constitution, le temps pour la génération suivante de dirigeants d'apprendre à utiliser les failles du nouveau texte (qui lui permettront à son tour de se maintenir au pouvoir).

    Au pire, ça ne sert qu'à précipiter la marche inexorable vers l'état policier terminal.

    Ensuite parce que les grands groupes d'influence (qui se satisfont très bien de notre aveuglement) ne sont pas dirigés, eux, par des imbéciles. Suivant l'exemple des peuples qui, croyant encore au père noel, avaient créé vers la fin du 18ème siècle des institutions transnationales capables - croyaient-ils - de protéger leurs droits nouvellement acquis, ils ont su, depuis, établir à leur tour les traités qui font du totalitarisme un fantome du passé.

    [...]

    Mais dans notre monde, dans le monde des grands traités internationaux, c'est l'inverse qui se passe: les États n'ont plus aucune place. Le peuple peut bien se révolter, descendre dans la rue, bouter le tyran hors de ses palais, au final il devra toujours respecter ses engagements internationaux, ceux qui garantissent la rente des oligarques. TTIP, Convention de Berne, Traité de Lisbonne, OMC, FMI et tant d'autres sont là pour y veiller. La Grèce peut bien élire Alexis Tsipras, grand bien lui fasse: du moment qu'elle paye ses dettes et qu'elle s'engage à détruire un système social trop protecteur des plus faibles. Et sinon qu'elle crève de faim: ses banques y veilleront ou, sinon elles, les banques centrales sont là pour s'en assurer.

    Les États ne sont qu'un leurre de plus, et depuis longtemps. L'espace de liberté des peuples s'est peu à peu réduit, jusqu'au point où un Junker peut désormais sans honte se permettre d'affirmer que « Il ne peut y avoir de choix démocratique contre les traités européens ». Et il aura raison de le dire.

    Le droit des peuples a disposer d'eux-mêmes, c'est du passé, camarade. Ce droit a succombé au droit des plus riches à le rester.

    Que la France élise Le Pen si elle est bête à ce point là: ça ne changera strictement rien à ce principe de base.

    [...]

    Les révolutions ayant de tout temps été le fait des bourgeois (les pauvres, eux, n'en ont pas le temps, trop occupés à trouver de quoi manger), rêvons que nos bourgeois modernes se détournent, pour un temps, du choix de leurs nouveaux smartphones, de leur vélos et de leur alimentation bio, pour se préoccuper de renverser un gouvernement devenu trop ostensiblement corrompu.

    Rêvons que cette révolution permette l'avènement d'une Constitution moderne, capable de garantir une séparation des pouvoirs réelle, un revenu universel, la légalisation du canabis, et des macarons dans toutes les cantines du pays.

    Et puis réveillons-nous, sur une planète au bord de l'asphyxie, qui va voir des millions de déplacés climatiques venir finir de consommer le peu d'eau pure qui restera, là où elle sera, pendant que des milliards mourront ailleurs. Sur un monde dévasté par une humanité qui n'a su progresser qu'à coup de guerres, dans une économie mondiale en plein effondrement, avec tout ce que ça comporte de certitude de la fin prochaine de toute civilisation "avancée".

    Réveillons-nous et admettons l'importance toute relative (mais Ô combien essentielle, ne serait-ce que pour la postérité) de nos petits combats politiques.

    Réveillons-nous, et tâchons de préparer l'avenir pour que les rares survivants de l'espèce puissent reconstruire un monde meilleur.

    Ou pas. »
    30/12/2015 23:24:01 - permalink -
    - https://blogs.mediapart.fr/laurent-chemla/blog/281215/la-fin-du-reve
    nomarkdown
Links per page: 20 50 100
◄Older
page 220 / 303
Newer►
Mentions légales identiques à celles de mon blog | CC BY-SA 3.0

Shaarli - The personal, minimalist, super-fast, database free, bookmarking service by the Shaarli community