Blog Post

Lucrul cu partiții criptate in Linux

May 30, 2024, 9:39 a.m. Tech centos linux


LUKS - Lucrul cu partiții criptate in Linux

Vreau sa fac niște modificări pe un server și aveam partiții criptate (encrypted at rest), nu mai sunt sigur dacă am parola corectă sau nu, și sunt curios și care partiții sunt criptate și care nu.

  • folosim lsblk ca sa afișăm partiții si volume de disc
[bla@server ~]# lsblk -f
NAME                                            FSTYPE      LABEL UUID                                   MOUNTPOINT
#...
nvme0n2
├─nvme0n2p1                                     ext4              10561544-e0e2-436b-92cb-724391033dc1   /boot
# ...
└─nvme0n2p2                                     
#...
  ├─cl-encrdata                                  crypto_LUKS       45603b53-d383-4e5b-9f77-4e8107267dc7
   └─luks-45603b53-d383-4e5b-9f77-4e8107267dc7 xfs               01b767ff-a150-4146-96e9-fd83c4a2ef55   /encrdata
#...
  └─cl-var_www                                  xfs               8c62677e-49eb-4cdd-ade1-a0eafd1bba0f   /var/www
  • avem o partiție criptată /dev/cl/encrdata identificată cu crypto_LUKS
  • verificăm status cu cryptsetup
  • nu merge să folosim doar numele encrdata (trebuie calea completă):
[bla@server ~]# cryptsetup status encrdata
/dev/mapper/encrdata is inactive.
[bla@server ~]# cryptsetup status /dev/cl/encrdata
/dev/cl/encrdata is active and is in use.
  type:    n/a
  • afișăm informațiile despre partiție, ne interesează locațiile unde sunt salvate parolele (în Keyslots):
[bla@server ~]# cryptsetup luksDump /dev/cl/encrdata
LUKS header information
Version:        2
Epoch:          6
Metadata area:  16384 [bytes]
Keyslots area:  16744448 [bytes]

Data segments:
  0: crypt
    offset: 16777216 [bytes]
    length: (whole device)
    cipher: aes-xts-plain64
    sector: 512 [bytes]
#...
Keyslots:
  0: luks2
    Key:        512 bits
    Priority:   normal
    Cipher:     aes-xts-plain64
    Cipher key: 512 bits
#...
    Digest ID:  0
  2: luks2
    Key:        512 bits
    Priority:   normal
    Cipher:     aes-xts-plain64
    Cipher key: 512 bits
#...
    Digest ID:  0
  • observăm două “parole” în locațiile 0 și 2 (Keyslots:)⤴️
  • verificam parola folosind opțiunea --test-passphrase (si --verbose pentru lizibilitate):
[bla@server ~]# cryptsetup --test-passphrase luksOpen /dev/cl/encrdata --verbose
Enter passphrase for /dev/cl/encrdata:
No key available with this passphrase.
Enter passphrase for /dev/cl/encrdata:
Key slot 0 unlocked.
  • prima ⤴️ încercare a fost cu parolă incorectă, a doua a fost corectă și a corespuns locației 0 (Key slot 0 unlocked)
  • dacă vrem mai multă precizie putem interoga direct locația folosind opțiunea --key-slot 0
cryptsetup luksOpen --test-passphrase --key-slot 0 /dev/encrdata && echo correct
Enter passphrase for /dev/cl/encrdata:
No key available with this passphrase.
Enter passphrase for /dev/cl/encrdata:
No key available with this passphrase.
Enter passphrase for /dev/cl/encrdata:
correct
  • aceeași comanda pentru o locație inexistentă
cryptsetup luksOpen --test-passphrase --key-slot 1 /dev/cl/encrdata && echo correct
Enter passphrase for /dev/cl/encrdata:
Keyslot open failed.
No usable keyslot is available.

Bibliografie:

Stack Exchange

https://unix.stackexchange.com/questions/185390/list-open-dm-crypt-luks-volumes

https://unix.stackexchange.com/questions/507174/is-it-possible-to-determine-which-luks-slot-has-been-used-to-unlock-an-encrypted?rq=1

https://unix.stackexchange.com/questions/318382/detemine-which-luks-slot-a-passphrase-is-in

https://unix.stackexchange.com/questions/350462/debian-verify-disk-encryption-password-for-already-mounted-system

ChatGPT

  • chiar și versiunea free produce un output de bun simț (testat cu chatgpt 3.5)
You are a linux expert and guru working for Redhat.

I am a linux administrator trying to understand the LUKS setup on my homeserver.

I am interested to know about the ways LUKS is configured, disk partitioning and testing the password I have for decrypting the disk.

Please guide me to how to use linux commands to gather more information and lets try to then create a summary of my setup.

  • server-ul era un Centos, deși comenzile de mai sus sunt folosite pe toate distribuțiile
  • unele sfaturi trebuie trecute prin "filtrul gândirii", întrucât aveau greșeli de sintaxă
  • dacă ai niște minime cunoștințe de linux te va ajuta fără să cauți in documentație sau pe net