openssl x509 -enddate -noout -in file.crt
Doit fonctionner avec les fichiers crt, pem
openssl x509 -enddate -noout -in file.crt
Doit fonctionner avec les fichiers crt, pem
Sous Teamviewer, il y’a un ID attribué à la sesion actuellement ouverte et active (non verrouillée), qui est celui qui s’affiche dans la fenêtre ; c’est l’identifiant utilisateur.
Mais si on veut pouvoir accéder au poste à tout moment, il faut l’ID de serveur ; pour l’obtenir, clic-droit sur l’icône de TV dans la zone de notification, puis À propos de Teamviewer.
Depuis Windows Server 2019, l’accès aux dossiers partagés (sur un autre serveur) qui ne nécessitent pas d’authentification est désactivé.
Pour le réactiver, il faut aller dans gpedit.msc
, et aller dans Configuration ordinateur -> Modèles d'administration -> Réseau -> Station de travail LANMAN
et activer le paramètre Activer les ouvertures de session invité non sécurisées
.
Probablement faisable via gpmc.msc
dans le cas d’un domaine.
https://wiki.debian.org/KVM
https://www.how2shout.com/linux/how-to-install-and-configure-kvm-on-debian-11-bullseye-linux/
Pour voir si le processeur possède les extensions matérielles nécessaires pour la virtualisation matérielle :
grep -E --color '(vmx|svm)' /proc/cpuinfo
kvm est un hyperviseur type 1, en espace noyau, sous forme de module noyau pour Linux (intégré au noyau depuis la version 2.6.20). Il permet l’accès aux instructions processeur de virtualisation (Intel-VT ou AMD-V).
QEMU est un émulateur de PC (ou hyperviseur de type 2) : il simule du matériel (disques, RAM etc) pour un système invité. Grâce à kvm, il peut mettre à disposition le processeur physique, pour des performances quasi-natives.
L’un n’a pas besoin de l’autre (kvm peut servir à faire tourner une appli Linux sans OS complet, via containerization, et QEMU peut faire tourner un OS virtuel en émulant complètement un processeur), mais c’est en binôme qu’ils fonctionnent le mieux.
Pour voir si une VM utilise kvm , il faut trouver le PID de la VM, puis entrer la commande strings /proc/<PID>/cmdline|grep kvm
. Si oui, on peut y lire “-enable-kvm” ou “accel=kvm”.
Il y’a un module noyau nommé kqemu, qui visait à améliorer les performances de qemu, mais celui-ci a été rendu obsolète par kvm. Son seul avantage potentiel est qu’il fournissait une accélération (logicielle) sur les processeurs ne disposant pas des extensions de virtualisation (mais en ce cas, Virtualbox reste aujourd’hui une solution correcte), si l’invité et l’hôte sont sous la même architecture.
Le paquet qemu-user permet de faire tourner un OS compilé pour une architecure différente du processeur physique ?
libvirt
est une bibliothèque qui permet de gérer les machines virtuelles. Elle peut aussi se connecter à plusieurs hyperviseurs, dont kvm/QEMU, mais aussi Xen par exemple.
virt-install
est une interface en ligne de commande pour simplifier la création de VM.
virsh
est une interface en ligne de commande pour interagir avec libvirt, et donc créer, supprimer, modifier, démarrer, arrêter etc. les VMs.
virsh list --all
virsh -c qemu:///system list --all
virt-manager
est une interface graphique pour interagir avec libvirt (même rôle que virsh, mais en GUI).
Il me semble que c’est un protocole/une interface pour mettre le matériel de l’hôte à disposition des invités, avec le moins de latence possible. Ces périphériques virtuels nécessitent des pilotes spécifiques, sans quoi ils ne seront pas disponibles, au moins sous Windows. On peut trouver ces pilotes sur cette page.
En montant l’ISO en tant que lecteur CD lors de l’installation de Windows, on peut installer les pilotes pour le contrôleur de disque, à la volée (il faut choisir le dossier qui contient directement les pilotes, il n’y a pas de récursivité).
C’est simplement un émulateur. Il est plutôt simple d’utilisation, peut être utilisé par un utilisateur non privilégié, mais n’a pas de performances folles.
Hyperviseur de type 1.
kvm est déjà présent dans le noyau par défaut. Pour installer QEMU sous Debian Bullseye : sudo apt install qemu-system-x86
.
Pour installer virt-manager : sudo apt install virt-manager
. Installera automatiquement qemu.
https://blog.wikichoon.com/2016/01/qemusystem-vs-qemusession.html
QEMU peut être utilisé avec une connexion système, ou avec une connexion session.
La connexion système permet l’accès complet à toutes les ressources ; libvirtd est lancé en tant que root
, les VMs en tant qu’utilisateur qemu
. L’accès d’un utilisateur simple est géré via polkit. On peut ajouter le user au groupe libvirt
pour lui permettre un accès aux ressources sans avoir à s’authentifier en root.
La configuration de libvirt est dans /etc/libvirt/
.
La connexion session est spécifique à l’utilisateur. Tout est exécuté par l’utilisateur simple. Les configurations/pools sont stockés dans le $HOME. Cependant le réseau accessible par défaut est lent, et peu flexible (difficile à rendre accessible depuis l’extérieur). À voir avec qemu-bridge-helper pour accéder à un pont réseau (créé au préalable par l’admin) ?
La configuration de libvirt est stockée dans $HOME/.config/libvirt
.
Par défaut, c’est la combinaison L-Ctrl + L-Alt
.
On peut gérer les VMs d’un serveur distant via ssh. Pour ceci, via virsh : virsh --connect qemu+ssh://root@example.com/system
.
Via virt-manager, il faut ajouter une connexion, et entrer l’URI qemu+ssh://root@example/system
.
En ce cas, il faudra entrer certains chemins manuellement (par exemple pour définir un chemin vers un ISO ou un fichier qcow2), le bouton “Parcourir” étant grisé.
La configuration par défaut est de “Copier la configuration du processeur de l’hôte”. Il me semble que ça donne des performances très moyennes. Il vaut mieux décocher cette case et choisir le mode host-passthrough
. De même, la détection automatique de la topologie ne me donnait pas de très bons résultats. En choisissant une topologie manuelle, ça fonctionne bien mieux.
Socket : nombre de processeurs physiques sur la MB (1 dans la plupart des cas)
Coeurs : nombre de core du CPU
Chaînes : nombre de thread de chaque core
https://wiki.qemu.org/Documentation/Networking
Le réseau par défaut est un réseau en NAT, et il ne démarre pas automatiquement.
Si on veut bridger une VM à une carte réseau, il faut d’abord créer le pont au niveau système ; il ne semble pas possible de bridger la VM directement à l’interface physique.
Si connexion à qemu:///system
, les pools de stockage (emplacement des fichiers image de disque dur) sont définis dans /etc/libvirt/storage/
et celui par défaut pointe sur /var/lib/libvirt/images/
. Les définitions de VMs (fichier XML) sont rangées dans /etc/libvirt/qemu/
.
Si connexion à qemu:///session
, les pools de stockage dont définis dans $HOME/.config/libvirt/storage/
et celui par défaut pointe vers $HOME/.local/share/libvirt/images/
. Les définitions de VMs sont rangées dans $HOME/.config/libvirt/qemu/
.
Les images sont au format qcow2.
Il est possible d’utiliser directement un périphérique de type block. Pour ceci, il faut éditer le fichier XML.
L’avantage principal que je vois est le fait de pouvoir ponter facilement et à la volée la carte réseau virtuelle et n’importe quelle carte réseau (physique, pont ou virtuelle, genre tap0 ), sans préparer le réseau auparavant.
Pour pouvoir passer les périphériques USB à l’invité, l’utilisateur qui lance VBox doit faire partie du groupe vboxusers :
sudo adduser $(whoami) vboxusers
Pour gérer l’USB2 / USB3 , il faut l’extension pack :
sudo apt install virtualbox-ext-pack
On peut passer les périphériques à la volée, via clic-droit sur l’icône USB en bas à droite de la fenêtre de la VM.
set "myvar=string or something else"
Si on met les guillemets juste autour du contenu à affecter, les guillemets feront partie du contenu de la variable !
CALL path\to\script.bat
(attend la fin de l’éxecution du script appelé avant de continuer le script principal)
Si on veut attendre un certain nombre de secondes (ici 5) :
timeout 5
Si on veut une interaction de l’utilisateur :
timeout -1
On peut également utiliser
pause
mais dans certains cas, cela ne fonctionne pas dans les scripts.
Éditer le fichier avec Notepad++, et choisir dans le menu Encodage -> Codage de caractères -> Langues d'Europe occidentale -> OEM 850
. Si les accents avaient été entrés avant la conversion, ils ont été remplacés par d’autres caractères, il faut donc les réécrire correctement.
Il faut échapper le retour à la ligne par un circonflexe ^
. Il semble qu’il faille faire commencer la ligne suivante par un espace, car le premier caractère ne sera pas pris en compte (non vérifié).
goto :label
:label
echo "This is label"
Fin du label ???
2 sources qui m’ont aidé :
https://theitbros.com/sysprep-windows-machine/
https://www.ac-nantes.fr/medias/fichier/procedure-image-de-reference-multiplateforme_1433950335218-pdf
Sur une install, rentrer en mode audit :
c:\Windows\System32\sysprep\sysprep.exe /audit
ou Ctrl-Maj-F3
sur l’écran de choix de langue lors de l’OOBE (configuration du hostname, utilisteur etc…)
Ceci redémarre sur une session Administrateur. Sur la fenetre qui s’ouvre, faire Cancel pour personnaliser l’image.
sc delete DiagTrack
sc delete dmwappushservice
echo ““ > C:\ProgramData\Microsoft\Diagnosis\ETLLogs\AutoLogger\AutoLogger-DiagTrack-Listener.etl
reg add “HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection” /v AllowTelemtery /t REG_DWORD /d 0 /f
et DisableWinTracking
Get-AppxPackage *3dbuilder* | Remove-AppxPackage
Get-AppxPackage *windowsalarms* | Remove-AppxPackage
Get-AppxPackage *windowscommunicationsapps* | Remove-AppxPackage
Get-AppxPackage *officehub* | Remove-AppxPackage
Get-AppxPackage *skypeapp* | Remove-AppxPackage
Get-AppxPackage *getstarted* | Remove-AppxPackage
Get-AppxPackage *zunemusic* | Remove-AppxPackage
Get-AppxPackage *windowsmaps* | Remove-AppxPackage
Get-AppxPackage *solitairecollection* | Remove-AppxPackage
Get-AppxPackage *bingfinance* | Remove-AppxPackage
Get-AppxPackage *zunevideo* | Remove-AppxPackage
Get-AppxPackage *bingnews* | Remove-AppxPackage
Get-AppxPackage *onenote* | Remove-AppxPackage
Get-AppxPackage *people* | Remove-AppxPackage
Get-AppxPackage *windowsphone* | Remove-AppxPackage
Get-AppxPackage *bingsports* | Remove-AppxPackage
Get-AppxPackage *bingweather* | Remove-AppxPackage
Get-AppxPackage *xbox* | Remove-AppxPackage
Get-AppxPackage *yourphone* | Remove-AppxPackage
Get-AppxPackage *feedback* | Remove-AppxPackage
Get-AppxPackage *microsoft.wallet* | Remove-AppxPackage
Get-AppxPackage *spotify* | Remove-AppxPackage
C:\Windows\SysWOW64\OneDriveSetup.exe /uninstall
choco install office365business
Exécuter : sysprep
Enter OOBE ; Generalize ; Shutdown
Ceci permet de définir l’action au prochain démarrage du système (rentrer en mode OOBE pour paramétrage des users etc), de généraliser l’image (enlever toutes les informations/pilotes spécifiques au matériel utilisé), et demande à redémarrer immédiatement.
Nous avons donc une installation contenant les logiciels et personnalisations nécessaires, sans information de matériel ou d’utilisateurs, qui rentrera en mode OOBE à son prochain démarrage.
Il faut maintenant créér une image pour pouvoir installer cette image. Pour ceci :
Brancher le disque sur une installation fonctionnelle de Windows. Si aucune disponible, ceci peut se faire depuis le DVD d’install de Windows (Réparer l’ordi -> invite de commande).
Entrer en ligne de commande ; vérifier la lettre du lecteur systeme (par exemple avec diskpart > list vol). Ici c’est D:
. Puis lancer :
dism /capture-image /imagefile:D:\win10custom.wim /capturedir:d:\ /name:"Win10 Pro Custom Edition"
À la fin de l’opération, on a un fichier win10custom.wim, qui peut se substituer au fichier install.wim d’une install classique (en le renommant install.wim)
Si besoin, splitter l’image :
Dism /Split-Image /ImageFile:D:\win10custom.wim /SWMFile:D:\win10custom.swm /FileSize:3900
En cas message erreur après sysprep (cant complete installation) ; ce problème vient du fait que le compte Administrateur utilisé pour le mode audit a un mot de passe vide, ce qui est contraire aux exigences de sécurité. Pour le régler :
https://www.urtech.ca/2015/12/solved-windows-could-not-complete-the-installation-windows-10-sysprep/
Maj-F10
-> secpol.msc
puis Accout policy -> Password policy -> longueur minimale 0
ou bien on peut changer le mot de passe du compte admin :
Maj-F10
-> net user Administrateur Password1234
.
On peut par la suite supprimer ce mot de passe avec la commande
net user Administrateur *
puis en validant 2 fois un mdp vide.
Si on a une erreur à la généralisation, on peut vérifier pourquoi dans le log C:\Windows\System32\Sysprep\Panther\setupact.log
.
Si c’est une erreur du type Package 123123123.Blablabla_version_editor was installed for a user, but not provisionned for all users
, il faut le supprimer. Pour ceci, on vérifie qu’il est trouvé :
get-appxpackage -alluser *Blablabla*
S’il est bien trouvé, on le supprime avec :
get-appxpackage -allusers *Blablabla* | remove-appxpackage -allusers
Il est possible que Windows retourne l’erreur “Windows n’a pas pu valider votre installation”. Vérifier l’état de Bitlocker avec manage-bde -status
. Il faut désactiver bitlocker pour pouvoir généraliser l’image. pour ceci, sous Powershell : Disable-Bitlocker –MountPoint ‘C:'
.
https://theitbros.com/sysprep-was-not-able-to-validate-your-windows-installation/
Si on souhaite sortir du mode Audit, il faut entrer la commande sysprep
et choisir “Enter OOBE”. On aura l’obligation de créer un nouvel utilisateur admin, mais les utilisateurs existants ne sont pas affectés. On peut ensuite se logger avec un ancien utilisateur et suprimer l’utilisateur nouvellement créé.
Le but est d’avertir les utilisateurs d’un domaine Active Directory lorsque leur mot de passe est proche de l’expiration, pour leur permettre de le renouveler avant l’expiration.
Le renouvellemnt se fait sans problème lorsque l’on est connecté directement au réseau, mais dans le cas d’un accès via OpenVPN avec authentification auprès de l’AD, la connexion VPN sera bloquée lorsque le mot de passe est expiré. D’où la procédure ici-présente.
Le but, si je comprends bien, est d’enregistrer une empreinte du mot de passe (ou le mot de passe chiffré) dans un fichier, pour qu’il soit utilisable sans interaction humaine, sans pour autant être exposé en clair sur le disque.
Le fichier obtenu sera spécifique à ce compte utilisateur, et cette machine. Il devra être recréé si l’opération doit être effectuée depuis un autre compte, ou le même compte sur une autre machine.
Lancer powershell, puis les commandes suivantes (adapter le chemin de fichier si besoin) :
$credential = Get-Credential # entrer identifiant et mot de passe à conserver
$credential.Password | ConvertFrom-SecureString | Set-Content D:\encrypted_password.txt
Le fichier D:\encrypted_password.txt
contient le hash qui nous intéresse.
À noter que ceci a été réalisé en utilisant un utilisateur qui possède une licence valide auprès d’Office 365. Non testé auprès d’autres fournisseurs SMTP.
Il s’agit du script de Robert Pearman que j’ai légèrement modifié, et francisé.
Le script en question, qui doit être enregistré avec l’extension .ps1
(penser à modifier les variables de début de script) :
#################################################################################################################
#
# Version 1.4 February 2016
# Robert Pearman (WSSMB MVP)
# TitleRequired.com
# Script to Automated Email Reminders when Users Passwords due to Expire.
#
# Requires: Windows PowerShell Module for Active Directory
#
# For assistance and ideas, visit the TechNet Gallery Q&A Page. http://gallery.technet.microsoft.com/Password-Expiry-Email-177c3e27/view/Discussions#content
# Or Checkout my Youtube Channel - https://www.youtube.com/user/robtitlerequired
#
##################################################################################################################
# Please Configure the following variables....
$smtpServer="smtp.office365.com"
$expireindays = 14
$mailfrom = "expediteur@example.com"
$passwordFile = "D:\encrypted_password.txt"
$from = "Mot de passe <$mailfrom>"
$logging = "Enabled" # Set to Disabled to Disable Logging
$logFile = "C:\log_mail.csv" # ie. c:\mylog.csv
$testing = "Enabled" # Set to Disabled to Email Users
$testRecipient = "debug@example.com"
#
###################################################################################################################
# Force TLS1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# get password from file
$encryptedPassword = Get-Content $passwordFile | ConvertTo-SecureString
$Credential = New-Object System.Management.Automation.PsCredential($mailfrom, $encryptedPassword)
# Check Logging Settings
if (($logging) -eq "Enabled")
{
# Test Log File Path
$logfilePath = (Test-Path $logFile)
if (($logFilePath) -ne "True")
{
# Create CSV File and Headers
New-Item $logfile -ItemType File
Add-Content $logfile "Date,Name,EmailAddress,DaystoExpire,ExpiresOn,Notified"
}
} # End Logging Check
# System Settings
$textEncoding = [System.Text.Encoding]::UTF8
$date = Get-Date -format ddMMyyyy
# End System Settings
# Get Users From AD who are Enabled, Passwords Expire and are Not Currently Expired
Import-Module ActiveDirectory
$users = get-aduser -filter * -properties Name, PasswordNeverExpires, PasswordExpired, PasswordLastSet, EmailAddress |where {$_.Enabled -eq "True"} | where { $_.PasswordNeverExpires -eq $false } | where { $_.passwordexpired -eq $false }
$DefaultmaxPasswordAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge
# Process Each User for Password Expiry
foreach ($user in $users)
{
$Name = $user.Name
$emailaddress = $user.emailaddress
$passwordSetDate = $user.PasswordLastSet
$PasswordPol = (Get-AduserResultantPasswordPolicy $user)
$sent = "" # Reset Sent Flag
# Check for Fine Grained Password
if (($PasswordPol) -ne $null)
{
$maxPasswordAge = ($PasswordPol).MaxPasswordAge
}
else
{
# No FGP set to Domain Default
$maxPasswordAge = $DefaultmaxPasswordAge
}
$expireson = $passwordsetdate + $maxPasswordAge
$today = (get-date)
$daystoexpire = (New-TimeSpan -Start $today -End $Expireson).Days
# Set Greeting based on Number of Days to Expiry.
# Check Number of Days to Expiry
$messageDays = $daystoexpire
if (($messageDays) -gt "1")
{
$messageDays = "dans " + "$daystoexpire" + " jours."
}
else
{
$messageDays = "aujourd'hui."
}
# Email Subject Set Here
$subject="Votre mot de passe ESCDA expire $messageDays"
# Email Body Set Here, Note You can use HTML, including Images.
$body ="
$name,
<p> Votre mot de passe va expirer $messageDays<br>
Pour changer votre mot de passe, appuyer sur Ctrl+Alt+Suppr et choisir Modifier un mot de passe <br>
<p>Merci, <br>
</P>"
# If Testing Is Enabled - Email Administrator
if (($testing) -eq "Enabled")
{
$emailaddress = $testRecipient
} # End Testing
# If a user has no email address listed
if (($emailaddress) -eq $null)
{
$emailaddress = $testRecipient
}# End No Valid Email
# Send Email Message
if (($daystoexpire -ge "0") -and ($daystoexpire -lt $expireindays))
{
$sent = "Yes"
# If Logging is Enabled Log Details
if (($logging) -eq "Enabled")
{
Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson,$sent"
}
# Send Email Message
Send-Mailmessage -Credential $Credential -smtpServer $smtpServer -from $from -to $emailaddress -Port "587" -useSsl -subject $subject -body $body -bodyasHTML -priority High -Encoding $textEncoding
} # End Send Message
else # Log Non Expiring Password
{
$sent = "No"
# If Logging is Enabled Log Details
if (($logging) -eq "Enabled")
{
Add-Content $logfile "$date,$Name,$emailaddress,$daystoExpire,$expireson,$sent"
}
}
} # End User Processing
# End
Ce script va parcourir les utilisateurs et isoler chaque utilisateur dont le mot de passe :
et pour chacun d’eux, envoie un mail à l’adresse mail spécifiée dans leur profil AD, ou à l’adresse “$testRecipient” si aucune adresse n’est spécifiée.
(Note : en l’état, le script est en mode de test, et n’écrit donc qu’à l’adresse $testRecipient. pour activer l’envoi réel des mails aux utilisateurs, il faut passer $testing
à Disabled
dans les variables de début de script)
On retrouve la liste des utilisateurs traités (que leur adresse expire bientôt ou non) dans le fichier de log, par défaut C:\log_mail.csv
. Ceci peut se désactiver en passant $logging
à Disabled
.
Enfin, il faut activer l’éxécution automatique de ce script. Pour ceci, dans taskschd.msc
, créer une tâche de base, mettre en programme/script powershell
et en argument -windowstyle hidden -File "C:\chemin\vers\le\script\password_notification.ps1"
En powershell :
get-aduser -filter * -properties passwordlastset, passwordneverexpires |ft Name, passwordlastset, Passwordneverexpires
(OPAL 1 est un peu différent et n’est pas analysé ici)
La norme OPAL 2.0 est une norme qui définit notamment un standard pour qu’un péripĥérique de stockage (disque dur, ssd etc) auto-protège ses données par du chiffrement. C’est un SED, un Self-Encrypting Disk.
C’est donc une puce dans le disque lui-même qui s’occupe de chiffrer et déchiffrer les données (libérant ainsi le CPU de ces tâches, et réduisant la surface d’attaque concernant les failles CPU/RAM ; d’autres attaques concernant ce type de chiffrement sont toutefois existantes).
Le chiffrement du disque se fait un peu à la manière de LUKS : la clé qui va réellement chiffrer les données (Data Encryption Key, DEK) est elle-même chiffrée par le mot de passe utilisateur (Authentication Key, AK).
Ainsi, il est facile de changer le mot de passe du disque sans tout rechiffrer (la DEK ne change pas, mais est rechiffrée avec la nouvelle AK).
Il est également instantané et simple d’effacer de manière sécurisée et intégralement un disque, simplement en regénérant une nouvelle DEK. Ainsi, le reste du contenu n’a pas besoin d’être effacé, puisqu’il est indéchiffrable, la clé ayant été supprimée. C’est le Secure Disk Erasure.
Sur un disque OPAL, les données sont TOUJOURS chiffrées par une DEK, mais en l’absence de AK, la DEK est lisible en clair et donc utilisée de manière transparente (voir MSID).
Spécifications d’OPAL sur le site du TCG : https://www.trustedcomputinggroup.org/wp-content/uploads/TCGandNVMe_Joint_White_Paper-TCG_Storage_Opal_and_NVMe_FINAL.pdf
Un diaporama qui schématise bien OPAL et différentes attaques
La disponibilité de l’interface OPAL via un adaptateur USB va dépendre de l’adaptateur en question. Ce fil mentionne un adaptateur qui semble fonctionner avec les disques M.2 SATA et NVMe.
Les intervalles de verrouillage sont des sections continues sur le disque, exprimées en LBA, qui peuvent être verrouillées de manière indépendantes les unes des autres. Chaque intervalle a sa propre MEK.
Ceci permet, il me semble, de partager un disque entre plusieurs utilisateurs, en ne laissant chacun accéder qu’aux données qui lui sont autorisées.
Ceci permet également d’avoir certains intervalles qui ne sont PAS chiffrés.
Le Global Range représente l’ensemble des intervales qui ne sont pas définis explicitement (les Local Ranges). C’est le range 0.
Lorsqu’on définit un nouvel intervalle, les données déjà présentes dessus sont détruites.
On peut lister les LockingRange ainsi :
sudo ./sedutil-cli --listLockingRanges mYpAsSwOrD /dev/sdX
La Preboot-Authentication (PBA) est un MBR particulier (shadow MBR) qui contient une instance de sedutil permettant de déverrouiller le disque, pour ensuite pouvoir le démarrer.
Selon cette discussion, MBREnable = Y
dit au disque de présenter ce shadow MBR lors du boot, alors que MBRDone = Y
dit au disque de ne PLUS présenter ce shadow MBR.
La gestion d’un disque OPAL sous Linux se fait avec l’utilitaire sedutil. C’est un utilitaire open-source, développée par la Drive Trust Alliance.
Il n’est, en 2021, pas disponible dans les dépôts Debian, et doit donc être téléchargé ou compilé depuis le lien ci-dessus.
Pour pouvoir gérer les disques SATA, il faut activer le paramètre allow_tpm
du module libata. Pour le faire de manière permanente, il faut ajouter libata.allow_tpm=1
à /etc/default/grub
(ligne GRUB_CMDLINE_LINUX_DEFAULT=
), mettre à jour la config de GRUB et redémarrer.
Pour le faire de manière temporaire sans redémarrage du système, il semble qu’il faille écrire 1
dans le fichier /sys/module/libata/parameters/allow_tpm
, mais je n’arrive pas à obtenir l’accès en écriture sur mon système.
Ceci ne semble pas nécessaire pour les disques NVMe. Par contre, il semble qu’il faille être root.
Cet utilitaire nécessite souvent les droits root pour agir directement sur le périphérique.
sudo sedutil-cli --scan
/dev/sda No
-> Pas de support d’OPAL
/dev/sda 12
-> Support d’OPAL (“12” pour support de OPAL 1 et 2, “2” pour support d’OPAL 2 uniquement, il me semble)
sudo ./sedutil-cli --query /dev/nvme0
On y voit notamment le statut de verrouillage (LockingEnabled) et de shadowing du MBR (MBREnabled) :
Locking function (0x0002)
Locked = N, LockingEnabled = Y, LockingSupported = Y, MBRDone = N, MBREnabled = Y, MediaEncrypt = Y
Ceci va réinitialiser
https://www.reddit.com/r/sysadmin/comments/9ogdnk/psid_revert_of_encrypted_ssd_not_possible/
sudo ./sedutil-cli --yesIreallywanttoERASEALLmydatausingthePSID PSIDPASSWORD /dev/sdX
sudo ./sedutil-cli --PSIDrevert PSIDPASSWORD /dev/sdX
Si le constructeur a mis des tirets dans le PSID, il faut les enlever (sinon on aura l’erreur “One or more header fields have 0 length”). Il doit faire 32 caractères de long.
sudo sedutil-cli --initialSetup mYpAsSwOrD /dev/sdX
Définit les mot de passe SID et Admin1 (avec le password fourni) (c’est le takeownership).
Active le shadowing de MBR.
Ceci équivaut aux suites de commandes (à vérifier) :
sudo ./sedutil-cli --takeOwnership mYpAsSwOrD /dev/sdX
# définit les password SID et Admin1
sudo ./sedutil-cli --activateLockingSP mYpAsSwOrD /dev/sdX
# active la possibilité de chiffrement ? (LockingEnabled)
sudo ./sedutil-cli --setMBREnable on mYpAsSwOrD /dev/sdX
#
On peut ensuite effectivement chiffrer le disque :
sudo ./sedutil-cli --enablelockingrange 0 mYpAsSwOrD /dev/sdX
Le disque devient ainsi non-lisible sans le mot de passe (y compris le MBR, il n’apparaîtra pas dans fdisk).
On voit “Locked = Y” lorsqu’on lance query
sudo ./sedutil-cli --setlockingrange 0 rw mYpAsSwOrD /dev/sdX
Il redevient ainsi libible, y compris le MBR.
On peut également définir le volume en lecture seule :
sudo ./sedutil-cli --setlockingrange 0 ro mYpAsSwOrD /dev/sdX
ou le verrouiller :
sudo ./sedutil-cli --setlockingrange 0 lk mYpAsSwOrD /dev/sdX
https://github.com/Drive-Trust-Alliance/sedutil/wiki/Remove-OPAL
On peut désactiver le chiffrement SANS suppresion des données avec :
sudo ./sedutil-cli --revertnoerase mYpAsSwOrD /dev/sdX
(il faut avoir deverrouillé le disque avant, en RX ou RO, sinon erreur FAIL)
Si la copie d’un fichier a été interrompue, on peut la reprendre avec rsync --append
(qui va bêtement reprendre si le fichier de destination est plus petit que le fichier source) ou rsync --append-verify
(qui va vérifier que les données pré-existantes sont bien les mêmes sur la source et la destination).
Si l’on construit une image live de Debian en se basant sur une version non stable (testing ou sid), les dépôts de sécurité ne sont pas encore existants. lb build
ou lb chroot
vont donc planter avec une erreur de type “E: The repository ‘http://security.debian.org bullseye/updates Release’ does not have a Release file.”.
Pour éviter ceci, on peut mettre dans le fichier auto/config
la ligne :
--security "false" \
Normalement ça ne devrait plus poser de problèmes. On peut aller vérifier que le fichier config/chroot
contient LB_SECURITY="false"
.