J'ai trouvé deux solutions pour ne plus avoir à investir mon temps pour défaire les saloperies que mozilla fourre à tour de bras dans firefox.
La première option c'est le user.js de arkenfox: https://github.com/arkenfox/user.js […]
la seconde option c'est de remplacer firefox par librewolf: https://librewolf.net/ […]
J'ai déjà lu Antichesse évoquer plusieurs fois Librewolf, mais ça ne me convient pas : il n'est pas empaqueté dans Debian. Pour un logiciel en contact avec le monde extérieur, sur lequel plusieurs vulnérabilités sont corrigées chaque mois (quasiment), ce n'est pas acceptable. Oui, Librewolf propose un dépôt maison, mais c'est aussi bien géré que tous les autres dépôts de ce style (en moyenne), donc il n'y a pas de différenciation entre màj de sécurité et màj fonctionnelle, donc on change de versions tous les deux jours. Sans moi. J'aime Debian justement parce que tout ne change pas tous les quatre matins.
Concernant le user.js d'Arkenfox :
Il reste deux modes : soit j'utilise le user.js, soit, à chaque mise à jour de Firefox, je lis les changements détectés par Arkenfox et je les applique. Au final, si l'on réfléchit, je ne peux pas échapper à une étude de user.js avant de le mettre en prod' (sinon je ne peux pas définir les paramètres que je veux forcer contre l'avis d'Arkenfox). Idem à chaque mise à jour de Firefox, pour la même raison (peut-être voudrais-je conserver un paramètre pas top). Du coup, qu'apporte la machinerie proposée par Arkenfox ? La suppression des vieux paramètres via un script dédié ? Oui, mais, dans mon about:config, j'ai des paramètres qui ne sont plus fonctionnels depuis plusieurs versions et mon Firefox fonctionne, donc bon, ce n'est pas ma priorité.
Au final, j'ai décidé d'aller lire, lors d'une mise à jour de Firefox, les changelogs d'Arkenfox entre mon ancienne version et la nouvelle. Et pour chaque paramètre, décider ce qui me convient puis répercuter ou non le changement dans about:config.
Pour l'instant, j'ai rattrapé mon retard entre le user.js qui correspond à ma version et mes paramètres. J'ai mis à jour mon antique shaarli dédié à ma configuration Firefox.
Le plus intéressant est l'activation de resistFingerprinting
(RPF) qui a déjà été évoqué dans la rivière shaarli. Attention toutefois : ça désactive, entre autres, les thèmes sombres des sites web, notamment ceux sur lesquels je n'ai pas de compte pour changer ça (YouTube, GitHub, etc.).
À noter également : la First Party Isolation (privacy.firstparty.isolate
) n'est plus maintenue. Elle est remplacée par le Network Partitioning et la Total Cookie Protection (nom vendeur de la Dynamic First Party Isolation) qui est activée uniquement quand la FPI est désactivée et que l'on active la Enhanced Tracking Protection (« Protection renforcée contre le pistage » dans l'onglet « Vie privée et sécurité » des préférences) en mode strict (le mode personnalisé n'active pas TCP).
Je retiens également qu'Ublock Origin peut désormais supprimer les paramètres traçants des URLs quand on lui ajoute les listes adéquates (voir). Pour ce faire, j'utilisais l'extension Pure URL mais très peu de paramètres sont pris en charge (utm, fb, et quelques autres).
Enfin, je retiens que l'extension HTTPS-Everywhere de l'EFF est en fin de vie, remplacée par le mode « HTTPS uniquement » de Firefox.
Ironiquement, tu réponds à mon shaarli qui évoque le paramètre « dom.block_download_insecure » de Firefox… alors qu'Arkenfox ne prévoit rien pour ce paramètre. :D
Merci pour la trouvaille. :)
La CJUE a rendu son jugement (contre Meta) :
Toute personne peut demander à une administration de lui communiquer la correspondance que celle-ci a entretenu avec d'autres entités. Exemple : les observations qu'une administration a produites dans le cadre d'une saisine de la CADA (voir). Évidemment, il y a des exceptions : vie privée, secret des affaires, la décision doit être intervenue, etc.
Pour vérifier les actions de la CNIL dans le cadre de mes réclamations, je lui ai demandé de me communiquer sa correspondance avec les responsables de traitement (RT) mis en cause.
J'ai mis à jour mes shaarlis sur Silkhom, Danitis, et Cogent avec les courriers de la CNIL.
Au final, dans 2/3 des cas, la CNIL a appuyé l'ensemble de mes griefs énoncés explicitement dans ma réclamation (un grief énoncé dans mes échanges avec un RT, joins à ma réclamation, mais non repris dans celle-ci n'est pas appuyé). Dans le dernier cas, la CNIL s'est contentée d'appuyer ma demande d'effacement sans rien dire de la base légale inapplicable ni de la durée de conservation excessive, pourtant évoquées dans ma réclamation. Dans 3/3 des cas, pas de contrôle ni de sanction, juste une invitation à vérifier sa conformité dans l'un des cas.
J'étais en train de mettre un serveur distant à la casse en révoquant toutes les clés d'un conteneur chiffré (cryptsetup luksErase <dev>
) puis en écrasant la table des partitions au format GPT avec dd
quand Johndescs me demande si j'ai supprimé « la table GPT de backup en fin de disque ».
Ha oui, tiens, plusieurs sources web disent qu'il y a une sauvegarde de la table GPT dans les 33 derniers secteurs d'un disque au max, soit 16,5 octets au max ((33 * 512 octets) / 1024).
Pour le fun, je veux constater ça par moi-même.
fdisk -lu
me dit : « Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors ».
Regardons les 1000 derniers secteurs. 3907029168 - 1000 = 3907028168.
dd if=/dev/sda skip=3907028167 | hexdump -vC
[…]
00078e00 48 61 68 21 49 64 6f 6e 74 4e 65 65 64 45 46 49 |Hah!IdontNeedEFI|
00078e10 90 ca 57 b3 c7 18 fa 48 97 a9 9e ae 35 69 6c e0 |..W....H....5il.|
00078e20 28 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 |(...............|
00078e30 00 00 00 00 00 00 00 00 62 00 69 00 6f 00 73 00 |........b.i.o.s.|
00078e40 5f 00 67 00 72 00 75 00 62 00 2d 00 73 00 64 00 |_.g.r.u.b.-.s.d.|
00078e50 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |a...............|
00078e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078e70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078e80 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00078e90 34 ea 7a 69 e4 99 67 40 b9 df c0 40 3e 12 a8 4c |4.zi..g@...@>..L|
00078ea0 00 10 00 00 00 00 00 00 ff 07 80 3e 00 00 00 00 |...........>....|
00078eb0 00 00 00 00 00 00 00 00 70 00 72 00 69 00 6d 00 |........p.r.i.m.|
00078ec0 61 00 72 00 79 00 00 00 00 00 00 00 00 00 00 00 |a.r.y...........|
00078ed0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078ef0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078f00 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00078f10 2d 41 c0 3f a0 c1 12 49 bf 5c cf ee 89 d0 6e 77 |-A.?...I.\....nw|
00078f20 00 08 80 3e 00 00 00 00 ff 6f d0 e8 00 00 00 00 |...>.....o......|
00078f30 00 00 00 00 00 00 00 00 70 00 72 00 69 00 6d 00 |........p.r.i.m.|
00078f40 61 00 72 00 79 00 00 00 00 00 00 00 00 00 00 00 |a.r.y...........|
00078f50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078f70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00078f80 6d fd 57 06 ab a4 c4 43 84 e5 09 33 c8 4b 4f 4f |m.W....C...3.KOO|
00078f90 3e d2 b7 22 c5 0e 82 44 80 e4 62 e0 85 fb 59 fc |>.."...D..b...Y.|
00078fa0 00 70 d0 e8 00 00 00 00 ff 67 e0 e8 00 00 00 00 |.p.......g......|
00078fb0 00 00 00 00 00 00 00 00 70 00 72 00 69 00 6d 00 |........p.r.i.m.|
00078fc0 61 00 72 00 79 00 00 00 00 00 00 00 00 00 00 00 |a.r.y...........|
0007ce00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...|
0007ce10 29 6e 0e d5 00 00 00 00 af 88 e0 e8 00 00 00 00 |)n..............|
0007ce20 01 00 00 00 00 00 00 00 22 00 00 00 00 00 00 00 |........".......|
0007ce30 8e 88 e0 e8 00 00 00 00 d0 d2 1f c2 dc 91 bb 4f |...............O|
0007ce40 9f e7 c8 a4 04 7b 91 bc 8f 88 e0 e8 00 00 00 00 |.....{..........|
0007ce50 80 00 00 00 80 00 00 00 90 23 af 95 00 00 00 00 |.........#......|
Utilisons Wikipedia pour déchiffrer ça.
L'entête secondaire est sur le dernier secteur du disque. On la reconnaît grâce à sa signature, « 45 46 49 20 50 41 52 54 » (« EFI PART » en ASCII ).
Ensuite, on a la table des partitions. Habituellement, une entrée de la table occupe 128 octets soit 8 lignes de hexdump
. On y voit quatre partitions (la distinction primaire / logique n'existe plus) :
La première depuis l'entête (et donc la dernière sur le disque) est une partition swap de Linux. Je le sais grâce à l'identifiant unique de son type : « 6d fd 57 06 ab a4 c4 43 84 e5 09 33 c8 4b 4f 4f ». Attention, comme l'explique la note de Wikipedia, une partie des octets est inversée à cause du little-endian.
fdisk
le dit) donc la taille de la partition est : 1046527 * 512 = 535821824 octets soit 512 Mo environ ;Aucune de ces partitions n'a un quelconque attribut (drapeau). Ils sont situés dans les 8 octets qui précédent le nom de la partition.
Un drapeau = 1 bit. Une partition cachée = bit 62 = 63e bit. Pas de montage auto = bit 63 = 64e bit.
Les logiciels n'ont pas l'air d'accord sur le rôle de chaque bit de drapeau. sgdisk
considère que le 1er bit (bit 0) signifie partition système là où parted
considère qu'il signifie partition cachée. Inversement, gparted
ne reconnaît pas ce que sgdisk
considère être une partition cachée (63e bit). Les deux outils sont d'accord sur le 3e bit (amorçable par d'anciens BIOS). gparted
reconnaît aucun des autres drapeaux.
Sur ce coup, gparted
est mal fichu, notamment parce qu'il présente comme drapeau ce qui n'en est pas, comme « bios_grub » (qui désigne une partition de boot BIOS, qui est un type de partition).
Évidemment, y'a encore cette histoire de little-endian, donc (binaire avec xxd
, hexa avec hexdump
, format gdisk
, format sgdisk
, sens pour parted
) :
Du coup, j'ai également effacé cette table GPT secondaire avec dd if=/dev/urandom seek=3907028167 of=/dev/sda
.
Ça me rappelle l'un de mes articles vieux de 13 ans dans lequel je décortique un MBR. :D
Cela fait environ dix ans que j'ai fait des choix de rangement de mes journaux informatiques (logs) sur mes serveurs personnels. Il est grand temps de faire un bilan et d'améliorer ce qui doit l'être.
Sur un système GNU/Linux, les journaux sont éclatés en fichiers par catégorie (facility) et par priorité. Un même message peut être consigné dans plusieurs fichiers.
Je pense que cette organisation en gros pâtés n'est pas intuitive ni optimale.
Ce que je fais :
Ça se fait facilement en rajoutant des fragments de configuration dans /etc/rsyslog.d
. Ainsi, pour CRON, je crée un fichier /etc/rsyslog.d/cron.conf
contenant cron.* -/var/log/cron.log
.
De base, les journaux archivés (« .log.1 », « .log.2.gz », etc.) sont stockés à côté du journal courant. Du coup, /var/log
devient rapidement un fouillis dans lequel je peine à m'y retrouver. C'est encore plus prononcé quand on a des obligations de conservation sur un temps long.
Ce que je fais : une arborescence séparée /var/log/archives/<nom_logiciel_ou_service>
.
Cela suppose de surcharger tous les fragments de configuration déposés dans /etc/logrotate.d/
par des paquets logiciels. Pour éviter d'incessantes questions lors des mises à jour desdits paquets, j'utilise dpkg-divert
. Exemple : dpkg-divert --add --rename --divert /etc/logrotate.d/apache2.dpkg-dist /etc/logrotate.d/apache2
qui ordonne de ranger le fichier /etc/logrotate.d/apache2 livré par un paquet dans /etc/logrotate.d/apache2.dpkg-dist. logrotate ignore les fichiers dont le nom termine par « .dpkg-dist ».
Tantôt des fichiers de configurations dans /etc/logrotate.d
commençaient par la périodicité, tantôt par la durée de conservation, tantôt par… De plus, je n'utilisais pas les mêmes directives partout sans justification (ifempty
, par ex.).
C'est galère pour chercher visuellement ou automatiquement des informations.
J'ai tout harmonisé au format : paramètres généraux puis paramètres du journal courant puis paramètres des archives puis scripts. Donc : périodicité, rotate, missingok, ifempty, create, olddir, compress, delaycompress, sharedcripts, postrotate.
Il y avait des divergences mineures entre mes serveurs persos pour un même journal. C'est corrigé.
Debian est passé de mysql
à mariadb
, donc les noms des journaux n'étaient plus parlants (ceci dit, la configuration demeure toujours dans /etc/mysql
donc bon…), des directives rsyslog étaient devenues inutiles (elles ne capturaient et donc ne redirigeaient plus rien) et, c'est désormais rsyslog qui journalise tout (cf. /etc/mysql/mariadb.conf.d/50-server.cnf
), donc le script postrotate dans la configuration de logrotate semble insuffisant, j'y ai rajouté /usr/lib/rsyslog/rsyslog-rotate
.
Lors de l'activation de HTTP/2 sur ce site, je suis passé de php sous forme de module pour Apache httpd à php-fpm
. Désormais, il y a un journal pour le gestionnaire (php-fpm) qui était pris en charge par logrotate via une configuration livrée avec le paquet, mais qui, du coup, n'archivait pas dans mon arborescence séparée ni pour une durée pour laquelle j'avais consentie.
L'ennui, c'est que le nom du journal, « php7.4-fpm.log », changera à la prochaine mise à jour majeure de Debian, car la version de php changera (7.3 -> 7.4 -> 8.2). Le fragment de configuration pour logrotate sera livré dans le paquet, mais ne contiendra pas mes directives. Configurer PHP-FPM pour envoyer son journal à rsyslog ne résout pas ce problème : l'arborescence de configuration dépend aussi de la version de PHP (/etc/php/<VERSION>/fpm/php-fpm.conf
), donc elle sera effacée par la mise à jour. Vu le cycle de vie très rapide de php-fpm, l'objectif de ce nommage dépendant de la version est de pouvoir installer simultanément plusieurs versions de PHP sur un même système.
J'ai créé un fichier /etc/logrotate.d/php
:
/var/log/php*-fpm.log {
[…]
postrotate
# Demander à la "bonne" version des php-fpm de réouvrir son journal
binname=$(find /usr/lib/php/ -iname 'php*-fpm-reopenlogs')
if test -x "$binname"
then
$binname;
fi
endscript
}
Hé oui, là encore, le binaire qui permet de dire à php-fpm de changer de journal dépend du numéro de version…
Mais, ça ne suffit pas : logrotate.conf inclut les fragments de conf' présents dans /etc/logrotate.d, dont php et php-X.Y-fpm. Logrotate consignera que deux fragments de conf' portent sur un même journal et terminera en erreur, pour ces deux fragments, donc le journal de php ne sera pas archivé et le script pas exécuté. Je crée donc un fichier /etc/cron.daily/php
:
#!/bin/bash
# dpkg-divert une éventuelle nouvelle config suite màj majeure Debian
if test -f /etc/logrotate.d/php*-fpm
then
confpath=$(find /etc/logrotate.d/ -type f -name 'php*-fpm')
dpkg-divert --quiet --add --rename --divert "${confpath}.dpkg-dist" "$confpath"
fi
J'ai déjà expliqué ce point : je créais un journal par hôte virtuel, donc deux journaux par site web, un pour HTTP, l'autre pour HTTPS.
Ce distinguo ne m'a rien apporté en dix ans. Notamment car, par défaut, Apache httpd ne journalise pas les erreurs TLS. Je ne vais pas activer cela vu que j'en n'ai pas eu besoin et que ça risque de souvent biper à tort vu mon certificat x509 signé par une autorité de certification maison.
Shaarli consigne une erreur à chaque robot qui accède, sans définir le referer (la case n'existe alors pas dans le tableau $_SERVER), aux liens qui permettent de changer le nombre de liens par page. Et comme shaarli redéfinit error_reporting… Bref, dans index.php
de shaarli, remplacer le error_reporting existant par : error_reporting(E_ALL^E_WARNING^E_NOTICE);
.
La bibliothèque de fonctions de RSS-Bridge qui fait l'interface avec l'API de Twitter, TwitterClient, consigne des événements en mode debug ("je réutilise le token mise en cache", "je demande un nouveau token", etc.) qui atterrissent dans le journal des erreurs de l'hôte virtuel. Aucune condition autour de ces directives, donc pas d'autre moyen de les faire taire que de les commenter…
Un plugin de mon Wordpress, mon thème perso Wordpress et Shaarli généraient des erreurs pour des fonctions dépréciées, pour une syntaxe erronée (function_exists()
attend le nom d'une fonction avec ses parenthèses ou entourée de guillements), etc. J'ai corrigé tout ça.
ejabberd consignait en permanence des erreurs TLS liées à mon certificat x509 autosigné. C'est inutile et ça conservait des données personnelles (l'essentiel de mes contacts ont un serveur Jabber perso donc le nom de domaine est une donnée personnelle). J'ai réduit la verbosité d'ejabberd (loglevel: 2
dans /etc/ejabberd/ejabberd.yml
). Le reste était des messages au démarrage "tu charges tel module sans charger tel autre, c'est inhabituel". J'ai corrigé ça.
Lors de la définition de ma politique de journalisation, je me suis fait embarquer par la légende urbaine qui voudrait qu'on doit conserver le journal des accès à un serveur web pendant un an, idem pour un serveur emails ou de messagerie. La réalité est plus nuancée et dépend de l'usage et du contexte. J'ai tout détaillé dans un autre article. Au final, je ne suis pas concerné par les obligations légales de conservation de données de connexion.
De plus, par paresse intellectuelle et par peur du manque, je consignais des journaux techniques sur la même durée (un an) alors que ça n'a aucun intérêt. Consigner les journaux d'OpenDNSSEC durant un an quand la durée de vie de mes signatures est d'une semaine, ça n'a aucun intérêt (s'il y a une erreur, mes services seront inaccessibles dans la semaine). Consigner les transferts de zones DNS sur la même durée est tout aussi inutile, là encore en relation avec la durée d'expiration de mes zones sur mes serveurs DNS secondaires. Idem le journal de ntpd qui consigne rien après son démarrage… Etc.
Je me rassurais : la plupart de ces journaux ne comportent aucune donnée personnelle. Pour ceux qui en comportent, comme celui de mon serveur emails, ce n'était pas bien grave car, à part les spammeurs et les scanneurs de ports / TLS / etc., ça consignait ma correspondance… que je conserve de toute façon dans mon logiciel de messagerie.
Parfois, cette durée de conservation m'a été utile. Exemple ? Vérifier les paramètres pris en charge par les gros fournisseurs emails avant de renforcer mes configurations TLS. L'ennui, c'est que tout peut toujours être utile. Avoir un micro en permanence sur toi quand t'es chez ton employeur permettra de prouver ta bonne foi lors d'un contentieux… ou que t'es en tort. Surveiller ton/ta partenaire de cul permettra de détecter sa tromperie… ou la tienne. Fliquer toute la population augmente la probabilité de retrouver l'auteur d'une infraction… ou un dissident politique. C'est précisément le sens des arrêts de la CJUE sur la rétention des données de connexion : l'équilibre entre la préservation de la vie privée et les autres intérêts. Dans le cas d'usage que je cite, je pouvais très bien faire mon étude au fil de l'eau, avant de modifier mes paramètres TLS, en conservant uniquement mes résultats (tel fournisseur emails prend en charge uniquement TLS 1.0, par ex.). C'est un boulot régulier (avant chaque effacement du journal), c'est la seule contrainte.
Désormais, j'ai défini deux catégories de journaux :
weekly
+ rotate 1
) ;weekly
+ rotate 5
) afin d'être sûr qu'ils englobent un mois entier, de son 1er jour à son dernier (explication) ;weekly
+ rotate 4
), soit un mois glissant ;monthly
+ rotate 5
).Quand on veut réduire la durée de conservation de ses journaux, il faut penser à systemd-journald.
Sur un système Debian, journald s'interpose entre les logiciels et rsyslog, même quand c'est rsyslog qui ouvre la socket UNIX pour un logiciel (postifx, par ex.). Il reçoit donc tous les messages syslog. Or, par défaut, il implémente une politique basée sur l'occupation de l'espace disque (détails).
On peut réduire l'occupation disque maximale des journaux, mais je ne suis pas fan : en cas de pic d'activité (ou d'attaque), les journaux pertinents peuvent être écrasés par ceux du pic…
On peut désactiver partiellement journald (détails, dernière ligne), mais ce n'est pas à l'épreuve du temps vu que journald a des usages pertinents et qu'il est appelé à prendre une place centrale.
On peut faire un mix entre une politique d'occupation disque et une politique basée sur le temps (détails). En ce qui me concerne, j'ai configuré MaxRetentionSec=5week
. Il s'agit, chez moi (cf. section précédente), de la durée maximale désirée des journaux qui transitent par message syslog (apache httpd et nginx écrivent eux-mêmes leurs journaux, idem pour apt et dpkg).
Dans la plupart des journaux, la date et l'heure d'un message sont exprimées dans un format difficilement exploitable comme « Jul 1 01:23:45 » ou « 01/Jul/2023:01:23:45 ».
Cela complique l'affichage simultané de plusieurs journaux dans l'ordre chronologique. On peut faire zcat $(ls -rv)
, mais bon, paye ta simplicité lors d'une urgence, et ça suppose que tous les journaux soient dans le même dossier. Surtout si les journaux englobent plusieurs mois : sort
classera « Jul » (juillet) avant « Jun » (juin), par exemple, et selon le type de tri, il classera 10,11,12, etc. après 01 et avant 02… Oui, il est possible de préciser à sort
de longs paramètres pour trier comme il faut, mais, là encore, paye ta simplicité…
De même, cela complique une recherche dans les journaux : « Jul 1 » (deux espaces) mais « Jul 10 » (une espace). Rien de grave, mais c'est pénible.
Le pompon, c'est la date+heure au milieu d'une ligne, notamment dans les journaux des serveurs web. Le journal est chronologique, donc la date est la clé du tri implicite, donc elle devrait être en début de ligne, en lieu et place de l'adresse IP qui est l'une des infos du message, pas une caractéristique de ce dernier comme l'est la date. Là encore, ça complique un tri avec sort
.
Tout cela constitue l'une des raisons qui m'a fait reculer à chaque fois que j'ai réfléchi à la réduction de la durée de conservation de mes journaux : une durée de conservation de quelques semaines, un mois au max, est souvent la plus apropriée, mais en monthly
+ rotate 0
, logrotate supprime le journal des derniers jours d'un mois dès le 1er jour du mois suivant (voir), donc on part sur rotate 1
donc 2 mois de conservation… De plus, descendre en dessous d'un mois, c'est choisir une périodicité quotidienne ou hebdomadaire, et donc devoir agréger plusieurs journaux pour obtenir une vision sur « quelques semaines - 1 mois », et donc se retrouver face au problème de tri énoncé ci-dessus…
Il existe deux ensembles de formats de date+heure faciles à manipuler : ISO 8601 et RFC 3339. Les arguments sont ici. Les deux normes ne sont pas équivalentes, certains formats communs aux deux normes, d'autres non, voir.
Comment les utiliser ?
D'après sa documentation, rsyslog permet d'utiliser le format « %Y-%M-%D %h:%m:%.6s%Z:%z », dérivé de « %Y-%M-%D %h:%m:%.3s%Z:%z » (seul le nombre de chiffres après la seconde change), qui est un format commun au RFC 3339 et à ISO 8601.
Pour l'utiliser dans tous les journaux dont rsyslog à la charge :
# echo '$ActionFileDefaultTemplate RSYSLOG_FileFormat' > /etc/rsyslog.d/0-dateformat.conf
# systemctl restart rsyslog
(Préfixer le nom du fichier par « 0 » permet qu'il soit le premier inclus dans /etc/rsyslog.conf
. Sans cela, le format de date+heure des logiciels dont le fragment de config' rsyslog serait inclus avant resterait inchangé.)
Inventaire :
ejabberd
ne permet pas de changer le format de ses journaux ni d'envoyer ses messages à syslog ;logger
(voir). À chaque requête, un processus logger
est lancé. Ça me paraît bien gourmand pour rien en comparaison d'une écriture dans une socket UNIX syslog… De plus, comme déjà dit ci-dessus, journald "interceptera" les messages syslog et procédera à une double journalisation, qui consommera de l'espace disque, et désactiver journald, même partiellement, est à contre-courant de l'histoire.Le format combined des journaux des accès, qui répond à mes autres besoins, est défini dans /etc/apache2/apache2.conf
, il n'y a plus qu'à l'adapter à ce qu'on veut en se reposant sur la doc' ou en utilisant un exemple tout prêt.
Le format des journaux des erreurs et les formats possibles sont définis dans la doc'. On notera que le format des journaux des accès (ISO 8601) ne peut pas être repris dans le journal des erreurs. Le format qui s'en rapproche le plus est « %Y-%M-%D %h:%m:%.6s » qui, comme dit plus haut, ne fait partie ni d'ISO 8601, ni du RFC 3339, mais en est très proche et en présente les mêmes avantages.
Pour appliquer le format :
# Journaux des accès
echo 'LogFormat "%{%Y-%m-%dT%T}t %h %l %u \"%r\" %>s %O \"%{Referer}i\" \"%{User-agent}i\"" combined-with-iso8601' > /etc/apache2/conf-available/iso8601-log-format.conf
echo 'LogFormat "%{%Y-%m-%dT%T}t %v:%p %h %l %u \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined-with-iso8601' >> /etc/apache2/conf-available/iso8601-log-format.conf
a2enconf iso8601-log-format.conf
# Dans chaque hôte virtuel
CustomLog ${APACHE_LOG_DIR}/<vhost>/access.log combined-with-iso8601
# Pour other_vhosts_access.log
dpkg-divert --add --rename --divert /etc/apache2/conf-available/other-vhosts-access-log.conf.dpkg-dist /etc/apache2/conf-available/other-vhosts-access-log.conf
echo 'CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined-with-iso8601' > /etc/apache2/conf-available/other-vhosts-access-log.conf
# Journaux des erreurs
echo 'ErrorLogFormat "%{cu}t [%-m:%l] [pid %P:tid %T] %7F: %E: [remote\ %a] %M% ,\ referer:\ %{Referer}i"' >> /etc/apache2/conf-available/iso8601-log-format.conf
# Dans chaque hôte virtuel (oui, pas besoin de préciser le format, il est unique, sauf si on le surcharge dans un hôte virtuel)
ErrorLog ${APACHE_LOG_DIR}/<vhost>/error.log
# /var/log/apache2/error.log est défini dans /etc/apache2/apache2.conf, il n'y a rien à faire
(Je rappelle que le format des journaux des erreurs, globaux ou par hôte virtuel, ne peut pas être modifié, cf. ci-dessus.)
Le format combined des journaux des accès, qui correspond à mes autres besoins, est défini dans la doc', il n'y a plus qu'à l'adapter. Toutes les variables utilisables (TLS, communication avec le backend, etc.) ne sont pas mentionnées, il faut creuser ailleurs dans la doc' :(. En tout cas, on a la variable « $time_iso8601 » qui fait ce qu'on veut.
Mise en pratique :
Le journal global des accès est défini dans nginx.conf avant l'inclusion des confs situées dans conf.d/… donc il faut modifier nginx.conf, soit pour inverser cet ordre, soit pour ajouter nos directives directement dedans, ce que j'ai fait…
dpkg-divert --add --rename --divert /etc/nginx/nginx.conf.dpkg-dist /etc/nginx/nginx.conf
cp /etc/nginx/nginx.conf.dpkg-dist /etc/nginx/nginx.conf
# Dans nginx.conf
log_format combined-with-iso8601 '$time_iso8601 $remote_addr - $remote_user "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log combined-with-iso8601;
# Dans chaque hôte virtuel
access_log /var/log/nginx/<vhost>/access.log combined-with-iso8601;
Deleting or removing all emails from Postfix queue
To remove all mail from the queue, enter:
postsuper -d ALLTo remove all mails in the deferred queue, enter:
postsuper -d ALL deferred
Sur un système GNU/Linux, logrotate
est l'outil qui permet d'archiver périodiquement les journaux, de les compresser, puis de les supprimer en fonction d'une durée de conservation ou d'un volume d'espace disque occupé.
Il y a quelques petits pièges et trucs à savoir. C'est ce que nous allons voir.
Le manuel de logrotate expose : « Log files are rotated count times before being removed ». logrotate conservera donc X journaux en sus du journal courant / actuel. rotate 0
: dès la périodicité atteinte, le journal actuel ne sera pas archivé, il sera supprimé. rotate 1
: un journal archivé sera conservé en sus de l'actuel. rotate 2
= deux journaux archivés en sus du journal courant. Etc.
Donc la couverte sera minimum X * périodicité, maximum X+1 * périodicité. Si la périodicité est mensuelle :
rotate 0
: le journal actuel sera effacé après un mois, donc tu gardes pile un mois d'historique, mais, dès le 1er jour du mois suivant, tu perds tout cet historique, y compris celui de la veille (dernier jour du mois précédent), donc la durée minimale de conservation est 0 ;rotate 1
: un journal actuel et un journal archivé, donc un message sera conservé deux mois au maximum (si elle a été consignée le premier jour du premier mois), et un mois au minimum (les entrées du 31e jour du mois X ne seront pas effacées le 1er jour du mois X+1) ;rotate 12
conserve 12 mois minimum, 13 mois maximum (au dernier jour du 13e mois, dans le journal « .log.12.gz », tu auras des données qui remontent jusqu'au 1er jour d'il y a 12 mois. Au 31 juillet 2023, tu as les messages du 1er juillet 2022).La période est glissante. logrotate calcule la périodicité depuis son dernier passage. Il calcule donc un jour, une semaine, un mois, etc. depuis son dernier passage, pas depuis le premier jour d'une semaine ou d'un mois. (Il conserve ses états dans /var/lib/logrotate/status
.)
C'est pour ça que si, avec une périodicité hebdomadaire (par ex.), on veut conserver un mois entier, de son 1er jour jusqu'à son dernier, rotate 4
peut ne pas suffire. Exemple : juillet 2023 est sur 6 semaines, de la semaine 26 (01-02/07) à la semaine 31 (31/07). Avec rotate 4
, si logrotate archive le journal le lundi à 0 h, alors les 1 et 2 juillets, qui seront stockés dans le journal « log.4.gz », qui deviendra « log.5.gz » ce soir-là, seront effacés. S'il archive le mercredi, alors rotate 4
est suffisant. Mais cela ne se prévoit pas : on peut forcer le passage de logrotate le 1er jour d'une semaine ou d'un mois à la main avec -f
, mais, par suite, le système peut être arrêté ou logrotate peut ne pas être exécuté pour toute raison, etc. rotate 5
(qui conserve au max 6 semaines) semble plus adéquat.
De nos jours, ce n'est plus CRON qui exécute logrotate mais un timer systemd (/lib/systemd/system/logrotate.timer
), ce qui explique qu'il est désormais exécuté à minuit pile.
(L'usage usuel de CRON prévoit un mécanisme de lissage : les tâches planifiées quotidiennes, hebdomadaires et mensuelles sont lancées à des heures différentes entre elles et entre deux systèmes. Ces heures sont définies automatiquement lors de l'installation du système, cf. /etc/crontab
. Généralement, ça tombe dans les 6 h du mat'.)
logrotate ne supprime pas les vieux journaux au-delà de la périodicité configurée. Exemple : si tu passes de rotate 12
à rotate 1
, les journaux existants nommés de « log.3.gz » à « log.12.gz » ne seront pas supprimés.
Le mode de fonctionnement nominal de logrotate, c'est de renommer (et donc déplacer tant qu'on reste sur un même système de fichiers, cf. man 2 rename
;) ) le journal courant vers le dossier des archives puis d'exécuter un script pour informer le logiciel qui écrit dedans de passer à un nouveau fichier.
Certains logiciels ne prévoient pas cette fonctionnalité. Pour éviter de les redémarrer, logrotate propose la directive de config' copytruncate
: le journal courant est copié dans les archives puis il est vidé (cf. man 2 truncate
).
Jusqu'à la mi-2018, un bug rendait inopérante une directive rotate 0
cumulée avec copytruncate
: le journal courant était copié, mais pas effacé.
logrotate propose un mode debug (logrotate -d </chemin/vers/la/config>
) qui permet de tester toute la conf' ou seulement un fragment.
Quand on utilise copytruncate
+ rotate 0
, la sortie du mode debug contient des incohérences. Exemple : « weekly 0 = weekly (no old logs will be kept) […] copying /var/log/rotate 0
et donc que la copie doit être évitée.
J'ai testé : rotate 0
produit concrètement le même effet avec ou sans copytruncate
. C'est uniquement l'affichage du mode debug qui est erroné.
En revanche, avec copytruncate
, il existe toujours un bug lors de la suppression du vieux journal. En mode normal, avec rotate 0
, logrotate renomme le journal courant « log.1 » puis le supprime. Normal. En copytruncate
, il fait pareil, mais il supprime aussi le fichier « log.2.gz » s'il existe. Ça n'a pas de sens : ce journal doit être supprimé uniquement avec rotate 1
, comme en mode normal. De même que « log.3.gz » sera supprimé par rotate 2
, etc. D'ailleurs, « log.2.gz » est aussi supprimé avec rotate 1
+ copytruncate
… Bref, il y a un bug quand rotate 0
et copytruncate
sont utilisées en même temps mais ça n'a pas d'incidence sauf si l'on réduit la durée de conservation de son journal (log.2.gz sera alors peut-être effacé alors qu'on ne le souhaite pas).
(J'arrive pas à croire que je ne l'ai pas shaarlié plus tôt, ce logiciel.)
Merci Alex.
En France, comme dans le reste de l'UE, les opérateurs de communications électroniques ouverts au public et les hébergeurs informatiques de contenus accessibles au public sont tenus de conserver certaines données durant un certain temps pour certaines finalités légales. On nomme ça la rétention des données de connexion. (Cette désignation est trompeuse puisque la conservation d'autres jeux de données est également obligatoire.) Le régime juridique des données de connexion est distinct de celui des interceptions (portant sur le contenu des communications) qui ne sera pas traité ici.
Durant les dix dernières années, ce cadre a évolué, donc je voulais faire le point. De plus, je me suis toujours demandé quelles obligations précises pèsent sur moi avec mon site web perso, mes serveurs emails et de messagerie instantanée persos, etc. Voyons ça.
Plan :
2011 : le décret 2011-219 est le dernier fixant, avec l'ancienne version du R10-13 Code des Postes et des Communications Électroniques (CPCE), le cadre français avant le grand chamboulement. Il prévoit la conservation des données de connexion, des données d'identification, de facturation, etc. ;
2014-2022 : dans plusieurs arrêts, via plusieurs questions préjudicielles posées par plusieurs juridictions nationales, la Cour de Justice de l'UE (CJUE) invalide la directive 2006/24/CE et précise le cadre européen. Arrêts notables (y'en a d'autres) : Digital Rights Ireland (2014), Tele2 Sverige (2016), LQDN et Privacy International (2020), H. K. / Prokuratuur (2021), Commissioner of the Garda Síochána (2022), SpaceNet (2022) ;
La conservation préventive, généralisée et indifférenciée des données de connexion est une atteinte disproportionnée à la vie privée, même si lesdites données ne sont pas exploitées ;
Pour la même raison, l'accès aux données de connexion doit être réservé :
2020 : dans son arrêt Breyer contre Allemagne (résumé ici), la Cour Européenne des Droits de l'Homme (CEDH) valide la collecte de données d'identification des détenteurs d'une carte SIM prépayée (l'ingérence est nécessaire et proportionnée) ;
2021-2022 : le Conseil d'État (avril 2021) et la Cour de cassation (juillet 2022) adaptent, à contrecœur, le droit français au droit de l'UE ;
2021 :
Dans son arrêt Big Brother Watch et autres contre Royaume-Uni (communiqué de presse), la CEDH dégage des critères pour valider une législation nationale implémentant la surveillance de masse (en clair : les digues ont sauté, il est loin le temps de Klass et autres c. Allemagne et de son paragraphe 41) : nécessité, proportionnalité, autorité indépendante y compris pour définir l'objet et l'étendue de la surveillance, et supervision indépendante des opérations de surveillance (aka contrôle a posteriori). Elle juge que l'ancienne législation britannique (remplacée en 2016), pourtant axée sur la sécurité nationale, n'est pas conforme à la ConvEDH par absence d'autorisation indépendante et de définition de l'étendue de la recherche et/ou des termes de celle-ci. Ensuite, la CEDH dégage des critères pour valider une législation nationale prévoyant des échanges de renseignements avec des services de renseignement étrangers : prévoir les circonstances des collaborations et celles d'utilisation des renseignements obtenus, et contrôle indépendant a posteriori. Le régime britannique satisfait à ces exigences ;
Loi renseignement 2 (relative à la prévention d’actes de terrorisme et au renseignement) puis édiction des trois décrets français qui régissent actuellement la conservation des données de connexion : 2021-1361 pour les opérateurs au titre du CPCE, 2021-1362 pour les hébergeurs et les opérateurs au titre de la LCEN, et 2021-1363 pour la conservation des données de connexion et de localisation à des fins de prévention de la menace grave et actuelle contre la sécurité nationale (qui est la conséquence de la jurisprudence CJUE interprétée par le CE pour sauver les miches de la France : la conservation généralisée est autorisée pour prévenir les menaces à la sécu nationale sous réserve d'une évaluation régulière du risque, donc hop, un décret d'injonction que l'on oubliera de réviser régulièrement et si quelqu'un rouspète, on l'abrogera pour en prendre un autre). Comme craint, le décret 2022-1327 a pris la suite du 2021-1363, puis le 2023-933, puis le 2024-901 ;
2022 :
Sources pour rédiger cette section :
Gros résumé à la truelle de la section précédente :
Données d'identification (état civil, contrat, facturation, etc.) :
Données de connexion / de trafic / d'activité / de localisation :
En sus de ça, la LCEN permet à l'autorité judiciaire de prescrire des mesures de surveillance ciblées et temporaires (source, point 7 de l'article 6). La CJUE ne s'y oppose pas, tant que c'est pour lutter contre la criminalité grave ou préserver la sécurité nationale ou publique, cf. arrêt SpaceNet ci-dessus. (C'pas déconnant, il existe bien les écoutes téléphoniques.)
A priori, c'est dans un cadre suisse similaire que ProtonMail a mouchardé l'adresse IP, le modèle et l'identifiant du terminal de militants français (source). On notera que la France a utilisé une procédure de coopération dédiée à la criminalité grave pour une affaire qui n'en relève pas et que les autorités suisses ont laissé faire (car ce n'est pas leur boulot de vérifier si des faits relèvent ou non des conventions d'entraide). Pour obtenir une collaboration, il faut une équivalence de l'infraction dans le droit suisse (je ne suis pas convaincu que ça freine les demandes puisque les autorités ne reprochent jamais d'être un mouvement social mais des infractions précises comme trouble à l'ordre public, destruction ou dégradation de bien, etc. qui existent dans toutes les législations…). Comme le note Reflets, on peut déplorer le flou dans la communication de ProtonMail, qui a changé plusieurs pages de son site web depuis cette histoire. Lire aussi l'analyse d'Alex Archambault.
Comme le note à nouveau Reflets, il en irait de même pour une surveillance ciblée par les services de renseignement ou par une administration, sous réserve d'un contrôle par une autorité indépendante. L'article 20 de la LPM 2013, qui sert de base à la collecte prévue par la loi Renseignement de 2015, prévoit un droit de communication pour les ministères de la Défense, de l'Intérieur, de l'Économie+Finances, etc., mais, j'imagine que, par sa nature et à l'aune de la jurisprudence de la CJUE, ce droit de communication de l'administration est ciblé. (Là encore, c'pas déconnant, il existe aussi les écoutes téléphoniques administratives, contrôlées par la CNCTR.)
Plein d'administrations ont un droit de communication (en dehors de tout contrôle préalable d'un juge donc) initialement accordé au fisc : AMF, DGCCRF et ADLC, douanes, sécu dont CAF, Pôle emploi, URSSAF, ANSSI, HADOPI, etc. Toutes n'ont pas accès aux données de connexion genre la Sécu ou Pôle emploi (pour ce dernier, le R5312-47 du Code du taff référence le L5312-13-2 du même Code qui exclut le L96 G du livre des procédures fiscales, c'est-à-dire les opérateurs de communications électroniques). Concernant la CAF, le Conseil constitutionnel a dit non en ce qui concerne les données de connexion, la loi n'a pas été modifiée (seul le renvoi au L83B du livre des procédures fiscale a été retiré, mais il ne concerne nullement les données de connexion), et au moins un dossier est devant la CEDH.
Depuis 2018-2019, pour répondre au critère d'indépendance posé par la CJUE (l'autorité de poursuite ne peut pas être celle qui accède aux données de connexion), l'AMF (avant de se faire retoquer par la CJUE, j'imagine) et l'ADLC demandent une autorisation préalable d'accéder aux données de connexion au contrôleur des demandes de données de connexion (CDCD), c'est-à-dire un membre du Conseil d'État suppléé par un magistrat de la Cour de cassation (et inversement, par alternance). Voir ici et là. Quid de l'indépendance des autres administrations ? HADOPI, CAF, ANSSI, etc. ?
De même, est-ce que les infractions dont ces autorités ont la charge relèvent de la gravité délimitée par la CJUE ? L'AMF s'est fait retoquer là-dessus (cf. 2022 dans la section « Historique »). La lutte contre la fraude sociale (CAF), contre les entraves à la concurrence (ADLC), ou contre le téléchargement illégal (HADOPI) relèvent-elles de la criminalité grave, de la sécurité publique, etc. ? J'en doute. De là, se faire communiquer les données de connexion que les opérateurs collectent dans le cadre de la sécurité nationale (cf. 2021 dans la section « Historique ») pour traiter des affaires qui n'en relèvent pas, tient-il la route ? A priori, la CJUE a dit non, mais la Cour de cassation a dit oui (cf. 2022 dans la section « Historique »).
Une fois que l'on a écrit tout ça, comment savoir dans quelle catégorie entre un service usuel genre un site web personnel, et les obligations qui s'imposent à nous ?
Pour rédiger cette section, je me suis appuyé sur le travail du feu groupe juridique de la FFDN (copie ici) et sur le travail de LQDN (copie ici). On notera qu'il s'agit de brouillons. Ils sont faux en cela qu'ils ne tiennent pas compte des décrets de 2021. Le premier écrit ne faisait pas consensus au sein du groupe de travail, notamment sur l'interprétation à retenir (celle, militante, de la CJUE, ou celle du droit français). Ce pan du droit est vraiment ardu.
Deux catégories d'intermédiaires techniques sont concernées :
Les deux régimes (CPCE et LCEN) se recoupent en partie, notamment sur les données à conserver.
Dans les deux cas, la prestation peut être gratuite ou payante, et le fournisseur peut être une personne morale ou physique.
La définition d'un hébergeur est plutôt claire (stockage de signaux, d'écrits, d'images, de sons ou de messages pour leur mise à dispo via des services de communication au public en ligne), mais qu'est-ce qu'un opérateur de communications électroniques ? Les définitions sont dans les articles 34-1 et 32-1 du CPCE mais rien n'est clair. En gros, ça regroupe les personnes qui exploitent un réseau de communications électroniques (ouvert au public) ou qui fournissent un service de communications électroniques (idem), ou qui offrent un accès à des services de communication au public en ligne, ou qui offrent au public, au titre d'une activité professionnelle principale ou accessoire, une connexion permettant une communication en ligne. Sachant qu'une communication électronique, c'est toute transmission de signes, signaux, écrits, d'images ou de son par voie électromagnétique et qu'un service de communications électroniques est une prestation qui consiste à fournir de telles communications. Pourquoi le vocable change en plein milieu pour « communication au public » ? Bonne question.
On retrouve les opérateurs réseaux (première définition), les services de voix sur IP (VOIP) comme SkypeOut (deuxième), les Fournisseurs d'Accès à Internet (troisième), les fournisseurs de hotspots Wi-Fi (quatrième), etc. Les hébergeurs ne sont pas englobés dans la deuxième définition. Par défaut, les fournisseurs de messagerie électronique non plus (je vais y revenir).
La notion qui revient est le caractère public. Un réseau privé n'est pas concerné. C'est d'ailleurs pour cela que plusieurs entités qui opèrent un réseau informatique à une échelle métropolitaine, par exemple, destiné à un nombre prévisible d'utilisateurs (les salariés et clients / usagers de ces entités, par exemple) prennent le statut juridique de Groupe Fermé d'Utilisateurs, pour s'éviter les contraintes du CPCE. Les services non-publiés (intranet, correspondance privée) ne sont pas concernés.
J'ai un blog Wordpress et un shaarli. Il s'agit de services de communication au public en ligne (article 6, III, 2 de la LCEN) dont je suis l'éditeur (au sens de la loi sur la presse). À ce titre, mon hébergeur doit conserver des données sur moi.
Dans les deux cas, comme sur les réseaux sociaux, d'autres personnes peuvent écrire des articles ou des commentaires. La loi permet deux statuts : soit je suis éditeur (au sens de la loi sur la presse), soit hébergeur (au sens de la LCEN).
Si je modère mes commentaires a priori et à la mano, je suis éditeur de facto, car je choisis les contenus, j'ai le contrôle de ce qui est publié. Le Bon Coin a été reconnu hébergeur en 2014 car les annonces sont modérées par un logiciel (source).
A priori, si j'octroie des droits de publication à un nombre restreint de personnes que je choisis, je suis aussi éditeur, je choisis toujours le contenu, ce n'est pas le tout-venant qui peut publier sur mon site. On notera qu'en droit de la presse, il y a une cascade de responsabilités : l'éditeur (ou le dirlo de publication) sera poursuivi, à défaut ou au titre de complicité, les auteurs aussi, à défaut les imprimeurs, à défaut les diffuseurs, donc, a priori, un éditeur n'a pas obligation de consigner qui a écrit quoi.
Les réseaux sociaux jouent sur les deux tableaux : ils se prétendent hébergeurs mais rendent visibles ou invisibles des contenus, les hiérarchisent, les font modérer selon une charte qui leur est propre par des travailleurs sous-payés (troisième point du 2e bloc), etc., ce qui semble constituer un rôle éditorial. Cependant, la question est loin d'être évidente à résorber, lire 1, 2, 3, 4.
Généralement, la consignation des données relatives aux auteurs de contenus (commentaires, articles, etc.) est effectuée par le site web lui-même, par son code, dans sa propre base de données. Les requêtes de consultation d'une page web ne doivent pas faire l'objet d'une journalisation au nom d'une prétendue obligation légale qui n'existe pas (Pages Jaunes s'est ramassée sur ce point). (D'autres finalités peuvent y conduire, cf. section « Journaux techniques » ci-dessous.
Dans mon cas, j'ai fermé les commentaires sur mon blog (mais sinon Wordpress consigne le cœur des données qu'il est obligatoire de conserver), je n'ai plus publié de contributions extérieures depuis 2011 (et Wordpress ne consigne pas les informations nécessaires), et je suis le seul auteur sur mon shaarli. Je suis uniquement éditeur, donc j'ai rien à conserver au titre d'hébergeur.
Évidemment, mes sites web non-publiés (gestionnaire de ToDo, GLPI, agrégateur RSS, etc.), dont je suis le seul utilisateur, et qui font l'objet d'une restriction d'accès par identifiant+mdp ou par adresses IP, ne sont pas des services de communication au public en ligne, donc ils sont hors périmètre (usage strictement personnel).
Garder un journal des accès web pourrait également permettre de se disculper en cas de piratage qui conduirait à la publication d'un contenu illégal plutôt que d'en assumer la responsabilité éditoriale. D'un côté, il faut que l'attaquant publie sa prose via le web (sinon il ne sera pas journalisé par le serveur web, et à part ça, j'ai uniquement un accès SSH (qui ne consigne pas les actions) et la probabilité d'une attaque réussie diminue avec des logiciels maintenus à jour. D'un autre côté, un tel journal sera inexploitable car l'attaquant se dissimulera derrière des rebonds / intermédiaires, et le contenu, qui sera temporaire (car je m'en rendrais compte rapido) et qui ne relèvera pas de la diffamation / injure / harcèlement / appel à la haine / dénigrement / etc. mais plutôt d'actes rentables genre vente de Viagra, ne sera jamais poursuivi, donc l'occasion de dégainer le journal n'existera pas. Tout montre qu'un tel journal est inutile. Sans compter qu'un piratage doit faire partie des cas de force majeur ou équivalent ("j'ai mis en place des mesures de sécurité, elles ont été contournées, c'est pas d'chance").
J'ai jamais lu que des commentaires ou articles de blog constituent une fourniture de service de communications électroniques entraînant l'application du régime prévu par le CPCE. La directive-cadre européenne 2002/21/CE dispose même de l'inverse (cf. arrêt C‑193/18 de la CJUE, points 29 à 31).
Il s'agit de correspondance privée qui s'entend comme un nombre prévisible et déterminé de destinataires individualisés. Il y a donc une communauté d'intérêt entre l'expéditeur et les destinataires. Cela a été tranché par les juridictions, y compris pour le spam… C'est différent d'un site web ou d'un profil ouvert sur un réseau social auxquels tout le monde peut accéder sans restriction. Donc le statut d'hébergeur ne s'applique pas (puisqu'il n'y a pas mise à dispo via des services de communication au public en ligne).
A priori, les listes de diffusion, les MUC (discussion de groupe) Jabber, IRC, et tant d'autres entrent également dans ce cadre-là.
Attention : parfois, un même service peut avoir plusieurs statuts. Exemple : la publication web ouverte à tous des archives d'une liste de discussion ou la mise à disposition au public de pièces jointes ou de calendriers par un webmail (type GMail) sortent du cadre de la correspondance privée, donc le statut d'hébergeur s'applique. J'ai rien de tout ça, donc je suis peinard.
Suis-je un opérateur de communications électroniques ? Auquel cas, la rétention à ce titre s'appliquerait, quand bien même celle à titre d'hébergeur ne s'applique pas. La question se pose pour de gros fournisseurs de messagerie, car si la correspondance est privée, le service en lui-même est ouvert au public (tout le monde peut ouvrir une adresse Outlook, par ex.).
La CJUE a tranché : GMail n'est pas un service de communications électroniques car sa fonction première n'est pas la transmission de signaux (cette charge est majoritairement portée par d'autres acteurs du réseau, quand bien même Google dispose de son propre réseau mondial), donc Google n'est pas un opérateur de communications électroniques, donc le CPCE ne concerne pas GMail. Les juridictions suisses ont tranché dans le même sens pour ProtonMail.
Comme le relève le Conseil d'État (note 48 pages 13 et suivante), la CJUE semble se contredire dans son arrêt LQDN de 2020, sauf à considérer que la différence entre SkypeOut (qui a été reconnu service de communications électroniques) et GMail est que SkypeOut assure, contre rémunération, la responsabilité de la transmission des communications en vertu d'accords passés avec des opérateurs télécoms là où GMail n'en fait rien, que l'essentiel du transport des emails est assumé par d'autres acteurs en best effort.
Sur la qualification juridique de GMail, on peut lire cet excellent historique.
Conclusion : je ne suis concerné ni par la LCEN, ni par le CPCE pour mes serveurs emails et de messagerie instantanée.
De toute façon, j'utilise la fonctionnalité « smtpd_sender_login_maps » de Postfix qui permet d'associer une adresse d'expéditeur à un identifiant+mdp. Donc, si, du temps où mon serveur emails hébergeait aussi une partie de ma famille (ce qui n'est plus le cas, j'en suis le seul usager), les autorités avaient débarqué pour me demander qui a émis tel email à telle date, etc., tant qu'elles me donnaient l'adresse de l'expéditeur de l'email litigieux, je pouvais dire avec certitude, et sans journal, qui en était l'auteur (sauf en cas de vol de l'identifiant+mdp, mais bon…).
Cf. les décrets 2021-1361 (pour les opérateurs au titre du CPCE), 2021-1362 (pour les hébergeurs et les opérateurs au titre de la LCEN) et 2021-1363 (pour la conservation des données de connexion et de localisation à des fins de prévention de la menace grave et actuelle pesant sur la sécurité nationale), ainsi que l'arrêt 459724 du Conseil d'État (CE) qui précise de nombreux points (dont le fait qu'on conserve uniquement ce que l'on collecte dans le cadre normal de l'activité ‒ source ‒ et qu'on n'a pas d'obligation de vérifier la véracité des informations d'identité civile).
Pour la participation à l'identification de l'auteur d'un contenu (LCEN), cinq jeux de données sont prévus :
Facturation. Type de paiement, référence du paiement, montant, date et heure (et lieu si transaction physique). Conservation : 1 ans après la fin du contrat ;
Informations techniques sur un terminal ou la source d'une connexion. Conservation : 1 an à compter de la connexion ou de l'utilisation du terminal ou la création d'un contenu.
Il en va de même pour identifier l'auteur d'une communication (CPCE), à quelques variantes près : il faut conserver également le numéro de téléphone appelant (RTC, par ex.), le numéro d'identification du terminal (CE : « données relatives aux connexions internet fixes par wi-fi ». Je comprends adresse MAC) ; les caractéristiques techniques (CE : « données collectées par l'opérateur pour effectuer et justifier la facturation de l'abonné et gérer son réseau, tels que le sens de l'appel, le type d'appel, le rôle de l'abonné, le type de communication ou le volume de données échangées »), date, heure et durée de chaque communication ; les données relatives aux services complémentaires utilisés (CE : « services complémentaires à la fourniture de communication par internet ou par téléphonie, tels que, notamment, les renvois d'appels ou le recours à un commutateur téléphonique privé ») ; les données techniques relatives au terminal et à la connexion (le 4e jeu de données ci-dessus) du destinataire ; et la localisation des communications par téléphone mobile.
Comme le relève Alexandre Archambault, la législation dit que tu peux conserver uniquement ce que tu collectes (cf. article 8 du décret 2021-1362, par ex.), mais l'article 39-3 du CPCE et l'article 6, VI de la LCEN prévoient des peines de prison et d'amende pour non conservation…
J'ai toujours interprété ça comme une manière de sanctionner une intention délibérée d'entraver les services enquêteurs : si t'as aucune donnée, c'est louche, s'il t'en manque certaines, ça passe. Exemples : il n'y a pas de facturation dans le cadre d'une prestation gratuite genre devenir auteur sur mon site web ; il n'y a pas de mécanisme de vérification du mdp pour un commentateur de blog ; il est techniquement impossible de fournir les données techniques du terminal du destinataire s'il n'est pas chez le même opérateur ; un hébergeur de machines virtuelles ne peut pas journaliser les modifications de contenus de son client à cause de la démarcation technique (mais il détient les jeux de données 1 à 3) ; etc. L'arrêt 459724 du CE me conforte dans cette interprétation.
De même, si l'on regarde bien, des outils comme Wordpress ou shaarli ne collectent pas toutes les informations exigées d'un hébergeur : date et lieu de naissance d'un commentateur ? Nature, date et heure d'une opération sur les contenus d'un shaarli ? Etc. Wordpress ne permet même pas de supprimer automatiquement au bout d'un an les données personnelles des auteurs de commentaires (son outil « Effacer les données », en sus de ne pas répondre au besoin ‒ il est conçu pour les demandes RGPD ‒, laisse intacte l'adresse IP, seuls le pseudo et l'adresse emails sont effacés).
Je ne peux m'empêcher de penser que c'est à cause de ça qu'il y a une légende urbaine sur une prétendue obligation de conserver le journal des accès à un serveur web pendant un an (démystification : 1, décision du CE contre Pages Jaunes) ou le journal d'un serveur emails.
En effet, le cœur des informations exigées (identifiant du contenu, adresse IP de l'auteur, protocole, nature de l'opération, date et heure) peuvent apparaître dans le journal des accès d'un serveur web (l'identifiant du contenu et la nature de l'opération peuvent être précisés dans l'URL, genre, pour shaarli : « POST /?edit_link=20230709_204855 »). Un conseil d'avocat sur le vif consistant à recommander cette journalisation permet d'être agnostique du type de site web utilisé et de ses capacités de journalisation, et donc de protéger le client dans le plus de cas possibles (objectif de l'avocat). Sachant que tout dépend de la question posée, du contexte présenté à l'avocat, etc., ça me paraît crédible.
Bien évidemment qu'on conserve des journaux informatiques pour d'autres motifs qu'une obligation légale tels que l'identification et le diagnostic d'un incident ou la sécurisation d'un système (détecter une compromission, parer automatiquement une attaque, etc.).
Mais cela ne peut pas être fait sous couvert de l'obligation légale présentée dans ce shaarli, il faut distinguer les finalités et la base légale, adapter la durée de conservation, etc., et, si les journaux consignent des données personnelles (comme une IP), il faut les anonymiser (selon la finalité, genre vaut mieux anonymiser après l'usage du journal par fail2ban, par ex.).
Évidemment, le RGPD s'applique aux journaux contenant des données personnelles.
S'ils répondent aux obligations présentées dans ce shaarli, pour les éléments demandés, alors la base légale est l'obligation légale, la finalité et la durée de conservation sont précisées dans les décrets, etc. Il n'y a plus qu'à y appliquer le reste du RGPD (sécurisation, traçabilité des accès, information, ne pas divulguer tout et n'importe quoi même dans le cadre d'une décision de justice, etc.).
En revanche, si les obligations présentées ci-dessus ne t'incombent pas ou si tu souhaites journaliser plus d'éléments ou pour une durée supérieure à celle prévue par la législation ou en faire un autre usage que ceux prévus par la législation, il faut une base légale et une finalité en adéquation. Ex. : faire des stats d'audience à partir d'un journal des accès d'un serveur web reposera très probablement sur le consentement, et la durée de conservation (avant anonymisation) sera proportionnée à cette finalité. Un journal technique reposera probablement sur l'intérêt légitime (idem). Etc.
J'aime beaucoup la présentation du protocole et le retour d'expérience (les embûches rencontrées et les contournements mis en œuvre genre les recruteurs qui redirigent vers un site web maison d'où un vivier d'offres limité, les recruteurs qui posent des questions imprévisibles, etc.).
Je ne suis pas surpris :
J'ignorais que :
Chiffres :
Il reste plusieurs biais dans la méthodologie :
Je ne suis pas d'accord pour affirmer qu'un premier entretien coûte rien aux sociétés commerciales. C'est une organisation et du temps supplémentaire pour étudier la candidature de manière plus approfondie, donc du fric.
Cela fait 10 ans que mes seules adresses emails personnelles sont liées à mes noms de domaine personnels, et que j'héberge et administre moi-même mes serveurs emails. \o/
Au global sur dix ans, ça tourne sans trop de douleur ni d'entretien. Mais, attention, cela dépend très fortement de l'usage.
En effet, tout administrateur d'un serveur emails doit s'atteler à deux problématiques : le spam entrant, et l'acceptation collective des emails qu'il envoie (émails sortants).
Je n'ai pas d'antispam, pas même de greylisting. Cela exige organisation et rigueur permanentes. Je communique ma véritable adresse uniquement à des gens de confiance et je file une adresse générique ‒ un alias ‒ ou une version suffixée par un délimiteur / tag aux autres, surtout aux sociétés commerciales, aux windowsiens et aux listes de discussion archivées sur le web. (Les alias et les délimiteurs sont également très pratiques pour tracer la revente / fuite d'une adresse emails et pour trier ses emails ‒ on peut ignorer l'adresse d'expédition et/ou elle peut changer en cours de route, ça n'a pas d'incidence sur le tri opéré sur l'adresse de destination, c'est-à-dire l'alias / le délimiteur ‒.) Mon seul regret est de ne pas avoir filé une telle adresse à plus de gens, par faiblesse. Heureusement, je comptabilise une unique conséquence fâcheuse. Bref, rigueur et ténacité. De plus, je n'ai pas besoin d'être contacté par le tout-venant, ce qui simplifie grandement la problématique.
L'acceptation collective se divise en deux : la norme et l'arbitraire. C’est essentiellement l'usage (volumétrie, contenu, destinataires) qui fait passer un serveur emails de l'une à l'autre de ces catégories.
J'ai mis en place toutes les techniques normalisées et informelles : le nom d'hôte EHLO (durant le dialogue SMTP) est déclaré dans le DNS, les adresses IPv4 et IPv6 pointées par ce nom sont celles de mon serveur, et j'ai configuré un reverse (PTR) pour chacune ; SPF ; DKIM ; ADSP ; DMARC ; TLS (avec un certificat auto-signé) + DNSSEC + DANE TLSA, etc. Pour un petit serveur emails (faible volumétrie), tout cela n'est pas obligatoire : DMARC et DKIM sont rarement imposés (GMail impose SPF ou DKIM), ADSP et DANE TLSA encore moins. C'est un investissement notable, mais quand c'est en place, ça ne coûte pas de temps de maintenance.
Surtout, les adresses IP du serveur emails doivent avoir une excellente réputation, c'est-à-dire ne pas traîner dans des listes de blocage (ce qui n'est pas le cas d'OVH, par ex.). SPF, DKIM, ADSP, DANE, etc. servent à rien si tes IP sont tricardes. Donc, il vaut mieux héberger son serveur emails chez un petit prestataire car plus c'est confidentiel, plus ça diminue la probabilité d'avoir des serveurs voisins spammeurs ou mal configurés. En IPv6, le blocage se fait par réseau de taille /64, donc pour ne pas être pénalisé par le comportement d'un voisin de réseau, il faut que l'hébergeur attribue au moins un /64 à ton serveur emails.
Comme tout cela ne suffit pas pour contrer le spam, il y a l'arbitraire. Des réseaux entiers, notamment ceux résidentiels, et des hébergeurs sont bloqués, temporairement ou non, car ils sont considérés comme des spammeurs notoires. Il existe des formalités administratives spécifiques à chaque fournisseur (ex. : Microsoft SNDS et JMRP) que j'ai toujours refusées d'accomplir (les normes, c'pas pour les chiens). Des mots-clés légitimes dans le corps d'un email sont bloqués. Des liens et des PJ légitimes et sans virus sont bloqués. La cadence de fournisseurs de liste de discussion légitimes est freinée. Sitôt qu'on grossit, à peu près tous les fournisseurs emails d'envergure cassent les pieds. Microsoft et GMail sont souvent cités mais c'est également la corvée avec Orange (qui limite la cadence autant que GMail) ou SFR Business (rejet arbitraire en fonction du contenu) ou…
Beaucoup attribuent une intention malveillante aux gros fournisseurs emails : ils voudraient fermer le marché, maintenir un oligopole afin de rendre captifs les usagers de l'email et exploiter toujours plus leur vie privée (GMail analyse le contenu des emails, La Poste ou ProtonMail modifient celui des emails sortants afin d'ajouter leur pub). C'est vrai, bien sûr, mais il ne faut pas expliquer par la malveillance ce que l'on peut expliquer par l'incompétence : à grande échelle, le spam est difficile à juguler et il est possible que les gros fournisseurs emails agissent pour le Plus Grand Bien (tm), mais leur part de marché, donc l'absence de contre-pouvoir, leur permet des prises de position cavalières qui, de fait, ne sont pas remises en question en interne. Une sorte de "ça marche / ça fait le job, je cherche pas plus loin, je réfléchis pas collectif / global" prononcé par un géant. Le poids des acteurs, voilà le cœur du problème, comme bien souvent. La concentration est néfaste. Et de ça, nous tous sommes responsables (absence de formation, laisser-aller vers la facilité, etc.).
Quand j'écris qu'un serveur emails perso tourne sans douleur ni entretien, c'est donc fonction de l'investissement technique initial sus-relaté, du fait que je suis un utilisateur avancé (alias, délimiteur, etc.), que je n'ai pas une quasi-obligation de recevoir les emails du premier venu, que j'émets un très faible volume d'emails (pas d'emails transactionnels ni de listes de discussion, etc.), que je converse plutôt avec des initiés (donc j'évite de fait les pénibles genre Orange, Microsoft Hotmail / Outlook, etc.), etc. Mon constat n'est pas transposable à des organismes (association, société commerciale, administration, peu importe) qui, eux, ont vocation à être ouverts au public, qui peuvent émettre un volume conséquent d’emails légitimes, qui ont des utilisateurs lambda donc peu formés, peu rigoureux, mais exigeants, etc.
Il y a bientôt un an, cet article a beaucoup circulé. Il dit vrai, bien entendu. Mais il manque des nuances que j'ai tenté d'apporter ici. Sans compter la prédominance erronée de l'analyse économique : à l'échelle de Microsoft / Orange / Google, etc., une analyse bayésienne coûte rien, mais sur un grand volume et une diversité d’usagers, elle est inefficace (beaucoup de faux-positifs), notamment car son apprentissage dépend de chaque usager et de sa bonne volonté et foi. Je partage partiellement son avis sur les bandeaux cookies : beaucoup de traitements de données persos étaient illicites depuis longtemps. Ils ne devaient pas perdurer, mais, plutôt que de changer de modèle économique, les acteurs continuent leurs pratiques crades en essayant d’obtenir un consentement vicié, tel le premier charo venu. Les traitements devraient reposer sur des bases légales plus saines, et le consentement devrait être l'exception, pas un prétexte pour dégainer n'importe quel traitement. La seule chose blâmable est la faiblesse des régulateurs.
En fonction de l'usage, un serveur emails perso est encore vivable.
P.-S. : il y a une différence entre l'offre gratuite de Microsoft (Hotmail / Live / Outlook) et les autres (Office 365, etc.). Mon serveur s'est toujours fait écourter quand je contacte des utilisateurs d'Outlook, et l'année écoulée n'a pas fait exception, mais, comme d'habitude, j'ai reçu des réponses de deux des trois destinataires professionnels dont le nom de domaine est porté par les serveurs emails de Microsoft (aucune idée si le troisième a voulu me répondre, mais, je le suppose, demande de devis, tout ça).
Quand on a un certificat auto-signé ou signé par une autorité de certification maison :
For example, the following RRset requests that no certificates be issued for the FQDN "nocerts.example.com" by any Issuer.
nocerts.example.com CAA 0 issue ";"
CAA utilise l'aspect arborescent du DNS donc une autorisation vaut pour le domaine visé et ses sous-domaines. ;)
J'ai déménagé mon serveur perso (pas celui qui héberge ce site web). Retour d'expérience.
Initialement, ce serveur était hébergé chez moi, sur un Raspberry Pi puis sur un OLinuXino, et raccordé proprement au réseau (condition pour avoir un serveur emails fonctionnel) avec le VPN d'un FAI associatif.
Quand ces ordinateurs ont rendu l'âme (avant les cartes SD, comme quoi), j'avais une contrainte personnelle de forte mobilité. J'ai donc hébergé ce serveur avec les autres auprès d'associations auxquelles je contribuais techniquement et financièrement, ARN et Grifon.
Début 2019, par démotivation et désespoir, j'ai quitté le monde associatif. Comme il est inconvenant de faire porter une charge de travail (héberger mon serveur) sur des bénévoles sans contribuer réellement (ne serait-ce qu'à la prise de décision), j'ai déménagé au plus simple : OVH. Ça fait le boulot pour pas cher. C'était censé être temporaire. Mais la flemme s'est installée.
Mon problème est simple : mes emails arrivent de moins en moins jusqu'à leurs destinataires. Quand j'étais auto-hébergé ou chez des assos, seuls quelques fournisseurs emails hégémoniques donc casse-couilles me rejetaient comme Microsoft. À l'inverse, ces derniers mois, je suis tricard, temporairement ou non, chez pas mal d'autres fournisseurs : Infomaniak, Octopuce (qui utilise Spamhaus), SFR (ceci dit, même les serveurs de Gandi se font rejeter), FDN (qui utilise Spamhaus sur ses anciennes listes de discussion), etc.
Deux explications :
MilkyWAN : je leur ai posé deux questions techniques (modèle d'hyperviseur et existence d'un VNC) en septembre 2022, pas de réponse. J'ai bien reçu l'accusé de réception émis par leur formulaire web.
FirstHeberg (anciennement FreeHeberg) :
Ikoula :
PulseHeberg :
Ligne Web Services (LWS) :
OuiHeberg :
OMGSERV :
ONETSolutions :
Chiffres d'affaires 2021 :
Source : societe.com.
J'ai choisi FirstHeberg.
Concernant le port tcp/25 (email), il est bloqué uniquement en sortie et en IPv4. Mes justificatifs caviardés (j'ai conservé les seules infos légalement obligatoires, cf. ci-dessus) ont été acceptés. Contrairement à ce que prétend le site web, le port tcp/587 n'est pas bloqué.
L'espace client ne permet pas de définir un reverse IPv6, mais une demande d'assistance permet de l'obtenir.
L'assistance est plutôt réactive et les réponses sont plutôt de qualité.
Évidemment, tout n'est pas parfait :
On verra comment ça se passe à la longue.
Mon système Debian GNU/Linux est chiffré en intégralité (sauf /boot, même si GRUB permet de s'en passer).
Même procédure que d'habitude. J'ai rencontré aucun des problèmes mentionnés. Ni partition mal copiée ni difficulté pour monter les partitions fraîchement copiées.
J'ai changé la phrase de passe du conteneur chiffré (cryptsetup luksAddKey /dev/sdX
+ cryptsetup luksRemoveKey /dev/sdX
). J'en ai profité pour passer sans encombre à la version 2 de LUKS (cryptsetup convert --type luks2 /dev/sdX
) et à l'algo de dérivation de clé argon2id (cryptsetup luksConvertKey --pbkdf argon2id /dev/sdX
).
Prenant en compte la panne du VNC (cf. ci-dessus), j'ai mis en place un système me permettant de saisir la phrase de passe de mon système chiffré via SSH.
Avant de se reposer sur la validation DNSSEC, il faut avoir confiance envers les serveurs DNS récursifs (resolver) que l'on utilise et sur la sécurité du chemin réseau qui nous sépare de lui.
C'est pour ça que, par défaut, le stub-resolver DNS de la libc ne demande pas la validation DNSSEC et retire le bit qui indique qu'une réponse est validée. Pour marquer notre confiance envers les récursifs que l'on utilise (et surtout celle envers le chemin qui nous sépare d'eux), il faut ajouter options trust-ad
dans /etc/resolv.conf
.
L'utilisation des enregistrements DNS de type SSHFP par le client SSH repose dessus. Sans la validation, il affiche (avec « -v ») : « found 1 insecure fingerprints in DNS ».
Vache, ça fait des années que le comportement du stub-resolver a changé et que je ne m'en étais pas rendu compte. :O
Le système de mon serveur personnel (pas celui qui héberge ce site web) est totalement chiffré (/boot est une partition indépendante même si GRUB permet de s'en passer). Au démarrage, je saisis la phrase de passe depuis le VNC proposé par l'hébergeur.
Très récemment, j'ai changé d'hébergeur. Avant mon déménagement, son VNC a été dysfonctionnel pendant quasiment une semaine. Ça a été le déclic : comment faire si je dois redémarrer mon serveur pendant une panne ou une maintenance du VNC de mon hébergeur ? Autant une panne du VNC de mon ancien hébergeur me semblait improbable ou très limitée dans le temps au nom du « too big to fail », autant une panne longue de mon nouvel hébergeur me paraît crédible. Donc il m'appartient de concevoir un plan B. (On pourra aussi argumenter qu'une connexion SSH directe sera toujours plus sécurisée que le VNC over HTTPS de l'hébergeur par la simple disparition de l'intermédiaire.)
Il est possible de demander à l'initrd de se connecter au réseau, de proposer un accès SSH (avec l'implémentation minimaliste dropbear
) et un terminal (implémentation minimaliste busybox
) qui permettent d'ouvrir le conteneur LUKS. J'avais lu ça chez Aeris il y a quelques années, mais on va adapter un peu.
apt install dropbear-initramfs
;Ajouter sa clé publique SSH dans /etc/dropbear-initramfs/authorized_keys
. L'auth par mot de passe est impossible (cela garantit la sécurité du serveur contre la force brute en cas de redémarrage inattendu suite à un plantage ou à une maintenance côté hébergeur) ;
Créer un fichier /etc/initramfs-tools/conf.d/ip
. Format : « IP=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>:<ntp0-ip>
» (via) ;
IP=192.0.2.42::192.0.2.1:255.255.255.0::eth0:off
;Reconstruire les initrd : update-initramfs -uk all
;
On fabrique un enregistrement DNS de type SSHFP ou une entrée pour le fichier known_hosts
(cela permettra d'authentifier la machine, d'être sûr qu'on causera au bon serveur SSH qui aura booté sur l'initrd). Dans les deux cas, ça nécessite de convertir la clé privée du serveur depuis le format dropbear vers une clé publique au format openssh :
ssh-keygen -y -f /dev/stdin <<< $(dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key -)
. Ajouter la sortie au fichier known_hosts
de la machine qui accédera au serveur ;ssh-keygen -r <FQDN> -f /dev/stdin <<<$(ssh-keygen -y -f /dev/stdin 2>/dev/null <<<$(dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key -))
.reboot
le serveur ;dropbear
n'implémente pas toute la crypto moderne, donc, si comme moi tu blindes ta conf' client SSH, il faudra réduire tes prétentions. Cela peut se faire avec une entrée dédiée dans .ssh/config
;ssh root@<serveur>
doit fonctionner ;
Comme nous le dit le prompt, il suffit d'utiliser la commande cryptroot-unlock
. Après la saisie de la phrase de passe, le système démarrera :
~ # cryptroot-unlock
Please unlock disk sda2_crypt:
cryptsetup: sda2_crypt set up successfully
~ # Connection to 192.0.2.42 closed by remote host.
Connection to 192.0.2.42 closed.
Cela fait plus de 10 ans que j'utilise DNSSEC sur mes noms de domaine personnels. \o/
À l'époque, info. était signé mais la soumission de délégations signées n'était pas ouverte (ou pas disponible chez mon bureau d'enregistrement ‒ Gandi ‒), donc j'utilisais le registre DLV de l'ISC, et BIND ne gérait pas entièrement les clés DNSSEC ni leur renouvellement automatique (source). :D
Je gère moi-même l'hébergement de mes zones DNS (avec BIND9 et NSD) et DNSSEC (avec OpenDNSSEC).
Au global, de nos jours, c'est une affaire qui tourne sans douleur. Ça n'a pas toujours été le cas :
Visualiser / lister les prochains roulements (renouvellements) de clés DNSSEC planifiés par OpenDNSSEC : ods-enforcer rollover list
.
Forcer le renouvellement / roulement / rollover des clés (en cas de compromission, par ex.) : ods-enforcer key rollover --zone <nom_zone>
. On peut limiter à un type de clé (KSK ou ZSK) en ajoutant --keytype <KSK|ZSK>
.
Depuis le 5 juillet dernier, des épisodes inédits du jeu télévisé La Carte aux trésors sont diffusés les mercredis soirs. \o/
La disponibilité d'une semaine du replay est abusée, mais, comme d'hab, torrent est notre ami. :)
(ÉDIT DU 12/07/2023 : aujourd'hui, la dispo court jusqu'au 04/08/2023. FIN DE L'ÉDIT.)
Pour regarder en direct : yt-dlp -o - 'https://www.france.tv/france-3/direct.html' | vlc -
.
systemd-journald est conçu pour archiver puis supprimer les vieux journaux (logs) selon une politique d'occupation de l'espace de stockage détails ici.
Parfois, on a besoin de conserver un journal un certain temps, ni plus, ni moins. Exemple ? L'obligation de conservation des données de connexion qui, en France, pèse sur les opérateurs de communications et les hébergeurs. Elles doivent être conservées 1 an. En dessous, l'opérateur / l'hébergeur ne remplit pas son obligation. Au-delà, le traitement est illégal au regard du RGPD car dénué de base légale (l'obligation légale court pour 1 an, pas plus).
Exemple moins pertinent : avec un volumineux système de stockage, on se retrouve avec 4 Go de journaux qui peuvent donc remonter loin et être pénibles à exploiter. Mais dans ce cas, on préférera affiner la valeur des paramètres de journald.
Pour une politique temporelle de conservation, journald propose le paramètre MaxRetentionSec. Source. Délai après lequel un journal contenant des entrées plus vieilles que ce délai sera supprimé. Par défaut, sa valeur est 0 afin de mettre en œuvre uniquement une politique de conservation basée sur l'occupation disque.
Il faut également configurer MaxFileSec. Un journal ne peut pas stocker des entrées au-delà de cette durée (1 mois par défaut). Un nouveau journal sera créé (et, l'ancien, archivé, donc supprimable). Il faut la positionner à « 1day ». Ainsi, lors de la suppression d'un journal archivé, après 1 an, seules les entrées d'il y a 366 jours seront supprimées. De même, seules les entrées du jour seront dans le journal courant, le reste sera archivé. Sans ce paramètre, soit journald supprimera le 12e mois (improbable), soit il conservera 1 an et 1 mois. Dans les deux cas, ça ne répond pas au besoin.
(Cette réflexion est basée sur le fait, qu'à priori, journald efface un journal en entier, pas les entrées d'un journal qui ont dépassé la date de péremption. Sa doc' consigne, pour le paramètre MaxFileSec : « However, to ensure that not too much data is lost at once when old journal files are deleted, it might make sense to change this value from the default of one month. ». Et le manuel de journalctl
, pour l'action rotate, consigne : « Journal file rotation has the effect that all currently active journal files are marked as archived and renamed, so that they are never written to in future ».)
Conséquence logique : il faudra également modifier la valeur de SystemMaxFiles, car il y aura jusqu'à 1 an de journaux archivés chaque jour. Et il faudra désactiver la politique de conservation fondée sur l'occupation de l'espace de stockage (cf) sinon journald pourra supprimer des journaux récents si l'espace de stockage vient à manquer.
On peut aussi désactiver totalement ou partiellement journald (Storage). Il continuera à transmettre les journaux à rsyslog
(par défaut sous Debian), et on pourra les traiter à l'ancienne avec logrotate
.