10 Sep 2023, 00:00

Double Windows chiffré avec Veracrypt en UEFI

But : avoir 2 installs Windows distinctes (en + d’une debian), chacune chiffrée par Veracypt, et que le choix se fasse via GRUB et sans avoir à choisir au sein de windows boot manager.

Si 2 installs Windows coexistent au sein d’une même ESP, alors ils partageront la même BCD, et comme le choix de l’OS intervient après le boot de l’OS et donc du déchiffrement Veracrypt, ça rend la solution non viable.

Solution (hacky) : avoir 2 ESP.

Structure du disque (table GPT) :

  • 1 partition ESP1 (FAT32, 500m, flag boot)
  • 1 partition ESP2 (FAT32, 500m, SANS le flag boot)
  • 1 partition WIN1 (NTFS, 50G ou +)
  • 1 partition WIN2 (NTFS, 50G ou +)
  • partitions nécessaires pour Debian, avec éventuellement LUKS (auquel cas 1 partition pour /boot )

Démarche générale :

  • Installer Win1

  • Installer Debian

  • Vérifier le double-boot via GRUB

  • Installer Veracrypt sur Win1, chiffrer la partition système (ceci remplace notamment EFI\Microsoft\Boot\bootmgfw.efi par le lanceur de Veracrypt)

  • Vérifier le boot de Win1 chiffré en direct, puis via GRUB. Remettre GRUB en lanceur par défaut dans l’UEFI

  • Booter Debian, copier le code GRUB (section dans /boot/grub/grub.cfg) de lancement de Win1 dans /etc/grub.d/40_custom pour être sûr de le conserver(on peut renommer l’entrée pour + de clarté)

  • Via efibootmgr, supprimer les 2 entrées Veracrypt et Windows Boot Manager (essentiel pour éviter les conflits)

  • Via Gparted enlever le flag boot sur ESP1, le positionner sur ESP2

  • update-grub (il ne devrait plus avoir d’autre OS détécté par os-prober, seulement l’entré manuelle)

  • Installer Win2

  • Vérifier le triple-boot via GRUB

  • Installer Veracrypt sur Win2, chiffrer la partition système

  • Booter Debian, copier le code GRUB de lancement de Win2 dans /etc/grub.d/40_custom

  • Via efibootmgr, supprimer les 2 entrées Veracrypt et Windows Boot Manager

  • Via Gparted enlever le flag boot sur ESP2, le positionner sur ESP1

  • update-grub

Normalement grub sera le seul OS référencé par l’EFI, il y’aura 1 entrée pour chacun des windows chiffrés, et chaque windows sera complètement indépendant d’un point de vue fichiers de démarrage.
On peut toutefois toujours monter la partition d’une install windows depuis l’autre en fonctionnement.

05 Sep 2023, 00:00

Incohérence des adresses mails entre AD, OAC et EAC

Dans le cas d’une synchronisation d’un AD local vers Azure Active Directory (AAD), il peut arriver d’avoir une incohérence dans les adresses mail d’un utilisateur entre l’AD local, le Office Admin Center (OAC) et le Exchange Admin Center (EAC).

Par exemple, supposons que

  • nous avons un domaine local de type mondomaine.ville.entreprise.fr . Ce domaine n’est pas routable sur internet. Nous avons en plus un domaine monentreprise.com qui est routable sur internet et est le domaine utilisé pour les adresses mail
  • monentreprise.com a bien été ajouté comme UPN dans le domaine local
  • nous avons également créé entreprise.onmicrosoft.com chez Microsoft 365, et ajouté/validé le domaine monentreprise.com sur M365
  • le serveur local synchronise les utilisateurs vers AAD
  • l’utilisateur possède une license qui octroie une boîte mail

Dans le cas où, en local, dans “Utilisateurs et Ordinateurs AD” (ADUC), le “Nom d’ouverture de session de l’utilisateur” (UPN) est “@mondomaine.ville.entreprise.fr”, alors l’utilisateur apparaîtra comme “@entreprise.onmicrosoft.com” dans l’OAC et dans l’EAC. Les mails envoyés arriveront via la même adresse “onmicrosoft”. L’adresse “@monentreprise.com” apparaît normalement comme un alias, et les mails envoyés à cette adresse sont bien reçus.

Si on modifie le nom d’ouverture de session en “@monentreprise.com”, après synchronisation (et délai de qqs minutes), l’adresse sera modifiée dans l’OAC.
Selon les cas, l’adresse peut également être modifiée dans l’EAC, mais pas systématiquement. Dans le cas où elle reste en “onmicrosoft”, c’est que l’attribut “mail” en local (ADUC) est manquant.
Si on ajoute l’attribut “mail” et lui donnant la valeur “@monentreprise.com”, après synchronisation (et délai), alors elle sera bien mise à jour dans l’EAC, et les mails envoyés auront l’adresse correcte.

30 Jul 2023, 00:00

Live-USB Bookworm

Même procédure que pour buster avec quelques variations :

sudo aptitude install live-build live-tools
mkdir bookworm_live && cd bookworm_live
mkdir auto && cp /usr/share/doc/live-build/examples/auto/* ./auto/

config

Fichier auto/config

#!/bin/sh

set -e

lb config noauto \
	--architectures 'amd64' \
	--archive-areas 'main contrib non-free non-free-firmware' \
	--bootappend-live 'boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr' \
	--binary-images 'iso-hybrid' \
	--distribution 'bookworm' \
	--linux-flavours 'amd64' \
	--source 'false' \
	--backports 'true' \
	"${@}"

Liste de paquets

Fichier config/package-lists/live.list.chroot

live-boot
live-config
live-config-systemd
systemd-sysv

#FIRMWARE
firmware-linux firmware-atheros firmware-b43-installer firmware-bnx2x firmware-brcm80211 firmware-iwlwifi firmware-libertas firmware-myricom firmware-netxen firmware-qlogic firmware-realtek broadcom-sta-dkms

#UTILS
nmap rcconf gparted hfsprogs ntfs-3g hfsplus hfsutils dosfstools lightdm bash-completion chntpw dcfldd bootlogd less mesa-utils numlockx ethtool grub2 ssh gdisk testdisk iftop nethogs pm-utils dmraid aptitude apt-file smartmontools debootstrap pciutils usbutils cifs-utils e2fsprogs mtools screen lvm2 net-tools mdadm lsscsi haveged rng-tools cryptsetup efibootmgr efivar ncdu wireless-tools dnsutils git iperf iperf3 lshw pmount grub-efi-ia32-bin grub-pc-bin grub-efi-amd64-bin curl dislocker

# TEAMVIEWER
libqt5webkit5 qml-module-qtquick2 qml-module-qtquick-controls qml-module-qtquick-dialogs

# DESKTOP
hplip system-config-printer xsane simple-scan mate-desktop-environment caja-open-terminal mesa-utils firefox-esr-l10n-fr chromium-l10n pulseaudio pavucontrol pavumeter mate-media-common mate-media mate-settings-daemon-dev mate-settings-daemon-common mate-settings-daemon chromium engrampa unrar pluma bluez blueman pulseaudio-module-bluetooth gddrescue ddrescueview vlc rdesktop conky network-manager-gnome webcamoid cheese webp-pixbuf-loader

Noyau, backports et pinning

Voir notes pour Bullseye

09 Jul 2023, 00:00

WordPress, reverse proxy et https

Si on héberge un WordPress derrière un reverse proxy (dans mon cas jwilder-nginx+letsencrypt) qui gère le https et les certificats, WordPress verra le trafic en non-chiffré.
Il faut donc l’informer que le trafic est chiffré de manière externe, et qu’il doit modifier les URLs en https://.
Si je comprends bien, ceci se fait via la détection d’une en-tête définie par le reverse proxy.

Pour ceci, on ajoute dans le wp-config.php (dans le volume) :

//Load Balancer NGINX Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS']='on';

19 Jun 2023, 00:00

Exchange online et Powershell

Installation

Install-Module ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement

Connect-ExchangeOnline -UserPrincipalName user@domain.com
Si le nom fourni est un admin, il pourra consulter les statistiques des autres boîtes mail.

Connection RPS (remote PowerShell) dépréciée :
Connect-ExchangeOnline -UseRPSSession

Lister les dossiers d’une boîte mail par ordre de taille

$mailbox = "user@domain.com"
(guillemets obligatoires)

Pour la taille de chaque dossier uniquement, sans les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Select FolderPath,FolderSize,@{ name="FolderSizeBytes"; expression={((($_.FolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])}}| Sort-Object -Property FolderSizeBytes -Descending | Out-String -Width 10000 | ft

Avec les sous-dossiers :
Get-EXOMailboxFolderStatistics $mailbox | Select FolderPath,FolderAndSubfolderSize,@{ name="FolderAndSubfolderSizeBytes"; expression={((($_.FolderAndSubfolderSize -replace '^(.*\()(.*)(\sbytes\))$','$2').Replace(',','')) -as [bigint])}}| Sort-Object -Property FolderAndSubfolderSizeBytes -Descending | Out-String -Width 10000 | ft

On peut le piper vers un fichier : > report.txt

Afficher les infos générales d’un boîte mail

Get-EXOMailboxStatistics $mailbox

31 May 2023, 00:00

Noms des services

Pour faire la correspondance entre les noms réels services Windows et leur nom d’affichage (localisés), on peut utiliser la commande Powershell
Get-Service

On peut également rechercher avec un motif du genre
Get-Service -Name *wua*
pour chercher sur le nom ou
Get-Service -DisplayName *update* pour chercher sur le nom d’affichage. Aucune sensibilité à la casse.

24 May 2023, 00:00

Police fixe pour l'horloge de Mate

Par défaut, la police de l’horloge MATE est une police à espacement variable, ce qui cause un très léger mouvement de l’ensemble des icônes de la zone de notification. Pour la passer en police chasse fixe pour empêcher ceci, créer/éditer le fichier ~/.config/gtk-3.0/gtk.css et y coller ce bloc :

#clock-applet-button {
  font-family: monospace-regular;
}

Puis pkill mate-panel devrait recharger le panneau avec la modification.

Source

13 May 2023, 00:00

Créer ou recréer les fichiers de démarrage BIOS Windows 10

Fichiers de démarrage BIOS

Les fichiers de démarrage Windows (10) consistent en :

  • Un dossier BOOT\ contenant :
    • des dossiers de langues type fr-fr
    • Fonts
    • Ressources
    • BCD
    • BCD.LOG (+1|2)
    • BOOTSTAT.DAT
    • bootuwf.dll
    • bootvhd.dll
    • memtest.exe
  • bootmgr
  • BOOTNXT
  • BOOTSECT.BAK

Ces fichiers peuvent être sur le disque C, ou bien sur une partition dédiée (nommée “Réservé au système” si créée automatiquement lors de l’installation de Windows)

Voici comment créer ces fichiers de démarrage s’il sont manquants (par exemple la partition de démarrage a été effacée, ou bien on souhaite passer d’une partition unique à une partition de démarrage séparée) :

Situation initiale :

  • table de partition en MBR
  • 1 seule partition NTFS avec une install windows (C:\Windows, C:\Users etc)
  • aucun fichier de démarrage

Méthode

On accède au disque sous Debian.
Il faut s’assurer d’avoir 500M de libre avant le début de la partition. Peut se faire depuis GParted, en définissant 500M d’espace libre avant la partition (va réécrire l’ensemble de la partition, prévoir les backups et le temps).

Par souci de cohérence dans l’ordre des partitions, on s’assure que la partition soit bien numérotée 2 dans la table de partitions. Si elle est notée 1, on peut changer son numéro avec la procédure définie ici

dev=/dev/sdX
sudo sfdisk --dump $dev > sdX.bkp
nano sdX.bkp
# changer le chiffre
sudo sfdisk -f $dev < sdX.bkp
# débrancher/rebrancher disque (ou reboot)

On crée ensuite une partition non formatée en début de disque, de 500M.

On démarre ensuite sur une clé USB d’install de Windows 10 (en mode BIOS) -> Dépannage -> Invite de commande
On lance diskpart ; on vérifie le numéro du disque (list disk, dans cet exemple 9), le numéro de la partition vierge de 500M (list part, dans cet exemple 8)

select disk 9
select part 8
active
list vol
# il est probable que la partition de 500M n'apparaisse pas dans les volumes,
# à cause d'un mauvais identifiant (83) défini par GParted ; on le modifie en 07
detail part
set id 07
format fs=ntfs quick

Ça a créé un volume pour cette partition, et lui a assigné une lettre. On vérifie les lettres de la partition Windows, et de la partition de démarrage. Dans cet exemple, respectivement D: et G:.
On sort de diskpart, puis
bcdboot C:\Windows /s G: /l fr-fr /f bios

Normalement ça doit démarrer avec la nouvelle partition !

Fichiers de démarrage EFI

Les fichiers doivent nécessairement être sur une partition FAT32, typiquement la partition système ESP. C’est notamment le fichier EFI\Microsoft\Boot\bootmgfw.efi qui est le bootloader.

L’ensemble de la manip est globalement la même. Il n’est pas pertinent de définir la partition comme “active” ni de définir son type. bcdboot C:\Windows pour mettre les fichiers sur la partition ESP ; on peut aussi affecter une lettre à une autre partition et spécifier le flag /s X:. Il est probable que le lancement direct via l’EFI ne fonctionne pas en ce cas, mais il sera possible de lancer l’OS via GRUB par exemple.

24 Mar 2023, 00:00

Téléphonie via Teams

Vocabulaire

Auto-attendant = SVI (serveur vocal interactif, navigation à l’aide des touches)
Call queue = file attente (message/musique attente + transfert des appels aux agents)
PSTN = RTC (réseau téléphonique commuté)

Généralités

Pour pouvoir utiliser la téléphonie Teams, chaque utilisateur a besoin de :

  • une licence Teams Phone Standard (Téléphonie Teams) : nécessaire pour se connecter au réseau RTC MS
  • une licence forfait d’appel
  • un numéro de téléphone attribué

Une fois ces 3 conditions validées (et un certain délai éventuel), chaque utilisateur verra apparaître le pavé de numérotation dans Teals, section Appels.
Si le pavé n’apparaît pas, voir cette page.

Gérer les numéros de téléphone

Se fait via le Teams Admin Center (TAC) :

Voice -> Phone numbers

Nombre de numéros de tél disponibles :

Numéro User : (nombre de calling plans*1.1) + 10 + pay-as-you-go-licences
Numéro Service (Voice App) (payant pour les appelants) : 5
Numéro Service (gratuit pour les appelants) : ?

Dépassement du forfait et numéros payants

Pour pouvoir continuer à appeler lorsque les minutes de forfait sont épuisées, et pouvoir appeler des numéros spéciaux (082* etc.), il faut acheter des crédits de communication.
Une fois les crédits achetés, il faut affecter la licence Crédits de communication à chaque utilisateur qui doit pouvoir les utiliser.

Numéro de service

Aussi appelé “Voice App”.
Peut être partagé entre plusieurs utilisateurs.
Il faut un compte de ressources, un numéro affecté à l’usage Service (voice app), une licence (gratuite) Teamps Phone ressource Account (Teams système téléphonique utilisateur virtuel).

Teams Admin Center -> Voice -> Call queues
Ajouter, choisir le compte de ressource créé auparavant.
Une fois créé et les utilisateurs (“agents”) affectés, chacun d’eux pourra appeler en tant que ce numéro de service.

Délégation

Déléguer sa ligne à une ou plusieurs personnes leur permet de recevoir les appels et répondre au nom du délégueur.
Pour ça, c’est fait directement par le client :
Teams -> Paramètres -> General -> Gérer les délégués

Par défaut, le délégué appelle avec son propre numéro, à moins de cliquer sur la petite flèche à côté de Appeler.

Compte de ressources

TAC -> Voices -> Ressource accounts (-> Add)

Choisir “Call queue” pour associer (plus tard) ce compte de ressource à une file d’attente.
L’utilisateur sera alors créé, visible également dans le Office Admin Center.

Si on veut lui assigner un numéro de téléphone, il est nécessaire que cet utilisateur possède une licence (gratuite) de type “Téléphonie Microsoft Teams Standard - Utilisateur virtuel”.
Une fois la licence assignée, et quelques minutes écoulées, on peut lui assigner un numéro (qui doit être de type “Voice app”) via le bouton “Assign/Unassign”. Choisir “Calling Plan” si le plan d’appel est fourni par Microsoft.

Les modifications mettent quelques minutes à se propager.

Files d’attente

TAC -> Voice -> Call queues (-> Add)

Un appel sur une file d’attente sera réparti entre tous les utilisateurs appartenant à cette file d’attente.
Il y’a plusieurs stratégies (tous en même temps, le 1er dispo, le + longtemps inactif etc).

Il est nécessaire, à la création, de l’associer à un compte de ressource.

On peut ensuite affecter des utilisateurs (ou un Canal d’une Team) à cette file d’attente : ce sont tous les utilisateurs qui seront sollicités lors d’un appel sur ce numéro.

Le “Conference Mode” permet apparemment de recevoir les appels plus rapidement, et ne semble être incompatible qu’avec Skype for Business.

Répondeur partagé (numéro de service)

Via un groupe créé manuellement

Créer un groupe Microsoft 365 (OAC -> Groupes -> Nouveau groupe M365).
Ajouter les personnes qui doivent recevoir le message en tant que membres.

Paramétrer la call queue pour rediriger les appels non-répondus vers un boite vocale partagée (shared voicemail) ; choisir celle du groupe précédemement créé
Les membres du groupe recevront les appels dans outlook, dans la section Groupes

Il faut toutefois ajouter chaque utilisteur manuellement au groupe ; je n’ai pas trouvé comment ajouter un groupe de sécurité à un groupe MS365.

Via une Team

Chaque équipe possède une adresse mail ; il faut la trouver dans Teams, et activer le transfert des mails aux membres de l’équipe ( -> Administrateur -> Teams -> Choisir l’équipe -> Paramètres -> “Envoyer des copies des emails aux membres” ).

Paramétrer la call queue pour rediriger les appels non-répondus vers l’adresse mail de l’équipe.
Ainsi chaque membre recevra un mail (contenant le message vocal en PJ).

Pour les voir dans Teams directement ??

https://dynamicconsulting.com/2020/06/02/shared-voicemail-displaying-in-teams/

Appels en tant que numéro de service

Pour forcer le changement du numéro affiché lors des appels sortants pour un utilisateur, dans le TAC :
Voice -> Caller ID policies

Ajouter une politique, choisir un numéro de service (ou compte de ressource) qui sera utilisé pour les appels sortants.

Ensuite, toujours dans le TAC, Users -> Manage Users, sélectionner tous les utilisateurs à modifier, Policies -> Edit -> Caller ID Policy et choisir la stratégie créée précedemment.

Il semble que l’on peut toujours appeler en tant que délégueur si la stratégie s’applique uniquement au délégué.

Rendre muet la sonnerie d’un appel

Dans le client Teams :
Paramètres -> Notifications -> Apparence et sons -> Désactiver "Faire jouer le son..."

https://answers.microsoft.com/en-us/msteams/forum/all/need-to-be-able-to-mute-incoming-calls-while-on-a/8366dd59-0573-4daa-b6c9-3c669adea0b3?page=2

Appeler en numéro masqué

Dans la stratégie Caller ID, c’est le paramètre “Override Caller ID Policy” (ou “EnableUserOverride” via powershell).
Elle n’override rien directement, elle permet à l’utilisateur final d’overrider (=passer en anonyme uniquement). Aucun effet si la stratégie passe déjà les appels en anonyme.

L’utilisateur final peut ensuite aller dans les paramètres de l’appli Teams -> Appels -> Identifiant de l’appelant.

!!! Quelques minutes nécessaires pour appliquer le changement !!! (~3-5 minutes selon mes tests)

https://learn.microsoft.com/en-us/microsoftteams/how-can-caller-id-be-used-in-your-organization#end-user-control-of-outbound-caller-id

## Affectation à une stratégie en fonction d’un groupe de sécurité

Ne semble pas être possible pour la stratégie Caller ID
Possible de contourner ?

https://techcommunity.microsoft.com/t5/microsoft-teams/how-to-assign-a-quot-caller-id-policy-quot-via-quot-group-policy/m-p/3255641

Enregistrer un appel

https://learn.microsoft.com/en-us/microsoftteams/cloud-recording

Enregistré dans onedrive

Powershell

Nécessite le module MicrosoftTeams

https://learn.microsoft.com/fr-fr/skypeforbusiness/set-up-your-computer-for-windows-powershell/download-and-install-the-skype-for-business-online-connector

Rapports

TAC -> Analytics & Reports -> usage reports

Les rapports PSTN usage indiquent tous les appels émis/reçus par les numéros gérés par Teams.
Le “Display Name” ou “Username” correspondent au numéro géré par Teams qui est concerné, que ce soit un appel entrant ou sortant.
Pour actualiser le rapport, il faut agir dessus, par exemple changer l’ordre de tri, ou générer un autre rapport puis re-générer le rapport souhaité.

Dans le cas d’un appel sortant,

  • le type sera “user-out”
  • si l’utilisateur a paramétré le numéro masqué, on verra quand même son nom dans le rapport, mais le “Caller ID” sera vide
  • si l’utilisateur appelle en tant que numéro de service, on verra quand même son nom, mais le “Caller ID” sera celui du numéro de service

Dans le cas d’un appel entrant,

  • si c’est un numéro de service qui reçoit, le type sera “ucap_in”
  • si c’est directement un numéro utilisateur qui reçoit, le type sera “user_in”
  • si l’appelant a masqué son numéro, le “Caller ID” sera vide

Liens divers

Présentation :
https://docs.microsoft.com/fr-fr/microsoftteams/what-is-phone-system-in-office-365
https://docs.microsoft.com/en-us/microsoftteams/what-is-phone-system-in-office-365 (anglais)

Fonctionnalités :
https://docs.microsoft.com/fr-fr/microsoftteams/here-s-what-you-get-with-phone-system
https://docs.microsoft.com/en-us/microsoftteams/here-s-what-you-get-with-phone-system (anglais)

Gestion des licenses :
https://docs.microsoft.com/fr-fr/microsoftteams/teams-add-on-licensing/virtual-user
https://docs.microsoft.com/en-us/microsoftteams/teams-add-on-licensing/virtual-user (anglais)
6.70€/util/mois

https://docs.microsoft.com/fr-fr/microsoftteams/teams-add-on-licensing/microsoft-teams-add-on-licensing?tabs=small-business
https://docs.microsoft.com/fr-fr/microsoftteams/set-up-calling-plans

Transférer numéros :
https://docs.microsoft.com/fr-fr/microsoftteams/phone-number-calling-plans/transfer-phone-numbers-to-teams
https://docs.microsoft.com/fr-fr/microsoftteams/phone-number-calling-plans/manually-submit-port-order (demande manuelle, car transfert auto non dispo pour la france)

Demande contact
https://info.microsoft.com/ww-landing-Contact-Me-Business-Voice-Contact-Me.html?lcid=en-us

Microsoft 365 business standard : 10.5€/mois/user
Office 365 E3 : 19.7€/mois/user

18 Mar 2023, 00:00

Cloner un système Windows d'un disque SATA vers un disque NVMe

Il est nécessaire que la table de partition soit GPT, car Windows refuse de booter sur un SSD NVMe en mode BIOS (et donc MBR).

Il faut déjà avoir démarré une première fois en mode sans échec sur le disque SATA avec le NVMe connecté sur son emplacement NVMe. Ainsi le système installera les pilotes nécessaires à la bonne détection/initialisation du SSD.
Sinon on risque d’avoir une erreur de type “INACCESSIBLE_BOOT_DEVICE” ou reboot immédiat sur l’UEFI.

On peut ensuite cloner le disque normalement (sgdisk, dcfldd etc.)

Si on a quand même le message “INACCESSIBLE_BOOT_DEVICE”, il faut d’abord démarrer en mode sans échec (par exemple en interrompant 3 fois le boot. Le prochain redémarrage devrait fonctionner.