Skip to content

Verschlüsseltes RAID1

Linux
  • Heute mal wieder was zum Ausprobieren.

    Hardware

    • 2 * 4TB HDD

    Software

    • Debian Buster 10

    Pakete installieren

    apt install cryptsetup
    apt install mdadm
    

    Installation

    Moment, wir brauchen noch einen Plan 🙂 Jede Platte wird mit je zwei Partitionen ausgestattet.

    • sdb1 raid_pool_1_1
    • sdb2 raid_pool_2_1
    • sdc1 raid_pool_1_2
    • sdc2 raid_pool_2_2

    Platten partitionieren

    root@frank-mankel:~# gdisk /dev/sdb
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: not present
      BSD: not present
      APM: not present
      GPT: not present
    
    Creating new GPT entries.
    
    Command (? for help): d
    No partitions
    
    Command (? for help): n
    Partition number (1-128, default 1): 1
    First sector (34-7814037134, default = 2048) or {+-}size{KMGTP}: 
    Last sector (2048-7814037134, default = 7814037134) or {+-}size{KMGTP}: 3907018567
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300): 
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): n
    Partition number (2-128, default 2): 
    First sector (34-7814037134, default = 3907018752) or {+-}size{KMGTP}: 
    Last sector (3907018752-7814037134, default = 7814037134) or {+-}size{KMGTP}: 
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300): 
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sdb.
    The operation has completed successfully.
    

    Verschlüsseln

    cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdb1
    cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdb2
    cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdc1
    cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdc2
    

    Beispiel-Ausgabe

    root@frank-mankel:~# cryptsetup --key-size 512 --hash sha256 --iter-time 5000 --use-random luksFormat /dev/sdb2
    
    WARNING!
    ========
    This will overwrite data on /dev/sdb2 irrevocably.
    
    Are you sure? (Type uppercase yes): YES
    Enter passphrase for /dev/sdb2: 
    Verify passphrase: 
    

    Entschlüsseln

    cryptsetup open /dev/sdb1 raid_pool_1_1
    

    Ok, was passiert hier? Wir müssen das Passwort eingeben, danach wird die HDD für das RAID vorbereitet.

    Disk /dev/mapper/raid_pool_1_1: 1.8 TiB, 2000375681024 bytes, 3906983752 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    

    Der Rest

    cryptsetup open /dev/sdc1 raid_pool_1_2
    cryptsetup open /dev/sdb2 raid_pool_2_1
    cryptsetup open /dev/sdc2 raid_pool_2_2
    

    Raid anlegen

    mdadm --create /dev/md0 --auto md --level=1 --raid-devices=2 /dev/mapper/raid_pool_1_1 /dev/mapper/raid_pool_1_2 
    

    Danach gibt es das Device md0

    Disk /dev/md0: 1.8 TiB, 2000240377856 bytes, 3906719488 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    

    Das andere

    mdadm --create /dev/md1 --auto md --level=1 --raid-devices=2 /dev/mapper/raid_pool_2_1 /dev/mapper/raid_pool_2_2
    

    und

    Disk /dev/md1: 1.8 TiB, 2000241360896 bytes, 3906721408 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    

    Formatieren

    mkfs.ext4 /dev/md0
    mkfs.ext4 /dev/md1
    

    Danach sind beide Raids einsatzbereit. Hier schon gemountet.

    /dev/md0                        1.8T  626M  1.7T   1% /mnt/md0
    /dev/md1                        1.8T   77M  1.7T   1% /mnt/md1
    
  • Mir war dann gestern, nach einigen Neustarts aufgefallen, das die Raids den Status [1/2] hatten. Also nur eine HDD im Raid-Verbund. Ursache - unbekannt!

    Normalzustand

    /dev/mapper/raid_pool_1_1: UUID="7b7a5028-165a-6d71-d51a-671216e353ec" UUID_SUB="109b5184-0d3a-b26b-cd72-8239f0f6a56e" LABEL="frank-mankel:0" TYPE="linux_raid_member"
    /dev/md0: UUID="6744030a-4c14-4cbc-a626-7365aab80e22" TYPE="ext4"
    /dev/mapper/raid_pool_1_2: UUID="7b7a5028-165a-6d71-d51a-671216e353ec" UUID_SUB="6f8da3a7-e86f-f3bf-5602-de7dcad62aa0" LABEL="frank-mankel:0" TYPE="linux_raid_member"
    /dev/mapper/raid_pool_2_1: UUID="aa6daa4e-0964-4446-22f0-e6e3a65ea34a" UUID_SUB="ffd29fd9-84ca-1d64-2671-a0d3c417ee8c" LABEL="frank-mankel:1" TYPE="linux_raid_member"
    /dev/md1: UUID="a56404ef-4525-473d-a616-2fdf79c314f6" TYPE="ext4"
    /dev/mapper/raid_pool_2_2: UUID="aa6daa4e-0964-4446-22f0-e6e3a65ea34a" UUID_SUB="29c67ccb-9582-75e5-8345-c5589680e663" LABEL="frank-mankel:1" TYPE="linux_raid_member"
    

    Status anzeigen (hier korrekt)

    root@frank-mankel:~# cat /proc/mdstat
    Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
    md1 : active raid1 dm-25[1] dm-24[0]
          1953360704 blocks super 1.2 [2/2] [UU]
          bitmap: 0/15 pages [0KB], 65536KB chunk
    
    md0 : active raid1 dm-23[1] dm-22[0]
          1953359744 blocks super 1.2 [2/2] [UU]
          bitmap: 0/15 pages [0KB], 65536KB chunk
    
    unused devices: <none>
    

    Detaillierter Zustand

    root@frank-mankel:~# mdadm -D /dev/md0
       /dev/md0:
                  Version : 1.2
            Creation Time : Mon Aug 26 15:52:03 2019
               Raid Level : raid1
               Array Size : 1953359744 (1862.87 GiB 2000.24 GB)
            Used Dev Size : 1953359744 (1862.87 GiB 2000.24 GB)
             Raid Devices : 2
            Total Devices : 2
              Persistence : Superblock is persistent
       
            Intent Bitmap : Internal
       
              Update Time : Fri Aug 30 04:03:25 2019
                    State : clean 
           Active Devices : 2
          Working Devices : 2
           Failed Devices : 0
            Spare Devices : 0
       
       Consistency Policy : bitmap
       
                     Name : frank-mankel:0  (local to host frank-mankel)
                     UUID : 7b7a5028:165a6d71:d51a6712:16e353ec
                   Events : 55682
       
           Number   Major   Minor   RaidDevice State
              0     253       22        0      active sync   /dev/dm-22
              1     253       23        1      active sync   /dev/dm-23
    

    Problem

    Jetzt wird die ganze Sache kompliziert und man muss fürchterlich aufpassen, das nichts schief geht. Das Raid zeigt einem die UUID der noch enthaltenen Platte an. Somit muss man sich die andere raus suchen, siehe ganz oben.

    Annahme, vom Raid md0 fehlt das zweite Laufwerk. Dann machen wir

    mdadm --add /dev/md0 /dev/mapper/raid_pool_1_2
    

    Mein md0 besteht ja aus

    /dev/mapper/raid_pool_1_1
    /dev/mapper/raid_pool_1_2   
    

    Script

    Hier mein Script, was ich nach dem Starten des PCs ausführe. Das klappt auf meinem Proxmox perfekt, ich darf nur keine Einträge in der /etc/fstab haben und die eine Maschine, die eine Platte auf diesem Raid nutzt, erst später starten. Auf keinen Fall auf Autostart=1 stellen!

    Außerdem habe ich in dem Script auf

    /dev/disk/by-uuid/4dd45131-bf78-4a23-ad29-af1b24284ca0
    

    umgestellt. Die UUID findet ihr mit

    ls -lha /dev/disk/by-uuid
    

    Ausgabe

    lrwxrwxrwx 1 root root  10 Aug 29 13:24 4dd45131-bf78-4a23-ad29-af1b24284ca0 -> ../../sdc1
    lrwxrwxrwx 1 root root  10 Aug 29 13:24 a8234184-3c6a-44d1-a6a3-d06d0baedfcc -> ../../sdc2
    lrwxrwxrwx 1 root root  10 Aug 29 13:24 857a73ca-199f-4e04-9651-088963e29fae -> ../../sdd1
    lrwxrwxrwx 1 root root  10 Aug 29 13:25 ed78c5ce-5bc9-49aa-9bc7-000771610940 -> ../../sdd2
    

    umgestellt. Das macht die Sache robuster, wenn man mal HDDs ansteckt usw. Weil dabei können sich ja mal gerne die Laufwerksbezeichnungen ändern. Die UUID bleibt aber immer gleich.

    #Passwort abfragen
    echo "Passwort eingeben!"
    read -s password
    echo "Bitte warten......"
    
    
    ## Passwörter abfragen
    echo -n $password | cryptsetup open /dev/disk/by-uuid/4dd45131-bf78-4a23-ad29-af1b24284ca0 raid_pool_1_1 -d -
    echo -n $password | cryptsetup open /dev/disk/by-uuid/857a73ca-199f-4e04-9651-088963e29fae raid_pool_1_2 -d -
    echo -n $password | cryptsetup open /dev/disk/by-uuid/a8234184-3c6a-44d1-a6a3-d06d0baedfcc raid_pool_2_1 -d -
    echo -n $password | cryptsetup open /dev/disk/by-uuid/ed78c5ce-5bc9-49aa-9bc7-000771610940 raid_pool_2_2 -d -
    
    ## Raid 0&1 mounten
    mount /dev/md0 /mnt/md0
    mount /dev/md1 /mnt/md1
    
    echo "Laufwerke erfolgreich gemountet!"
    

    Ich hoffe jetzt, das ich mich damit erst mal nicht mehr beschäftigen muss. Und immer nur machen, wenn man ganz viel Zeit hat 🙂

    Damit es immer so aussieht 🙂

    fcdf8c19-31e3-4933-a452-847f4415c750-grafik.png

  • Root-Rechte für Angreifer

    Linux
    1
    0 Stimmen
    1 Beiträge
    49 Aufrufe
    Niemand hat geantwortet
  • Docker & Redis Datenbank

    Verschoben Linux
    2
    0 Stimmen
    2 Beiträge
    149 Aufrufe
    FrankMF

    @FrankM sagte in Docker & Redis Datenbank:

    save 60 1
    #save 900 1
    save 300 10
    save 60 10000

    Hier kann man auch noch schön sehen, wie ich gekämpft habe, bis ich mal eine dump.rdb gesehen habe. Auch irgendwie logisch, das ich nie eine gesehen hatte, wenn man weiß das

    save 900 1

    bedeutet, das er alle 900 Sekunden speichert, wenn mindestens eine Änderung vorhanden ist. Das kann dann schon was dauern. Ich habe das dann mal verkürzt, damit ich schneller ein Ergebnis habe.

    save 60 1

    Das brachte mich dann dem Ziel näher. Danach konnte ich die dump.rdb auch finden.

    Bitte keine Redis DB ohne Passwort laufen lassen!
  • Python & Redis-Datenbank

    Verschoben Linux
    3
    0 Stimmen
    3 Beiträge
    94 Aufrufe
    FrankMF

    Heute dann die nächste Herausforderung. Mein JSON soll so aussehen, damit ich das entsprechend erweitern kann.

    Stocks {0: {'stockname': 'Deutsche Telekom Aktie', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 100}, 1: {'stockname': 'Henkel', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 50}}

    Die Daten sollen wie oben schon ausprobiert, in einer Redis Datenbank liegen. So weit auch kein großes Problem. ABER, der Zugriff auf diese Daten war dann meine nächste Hürde 🙂

    Ok, ich habe also mehrere Einträge im JSON File bzw. in der Datenbank. Wie komme ich da nun wieder dran. Ein paar ☕ später dann die Lösung.

    Wie komme ich an den einzelnen Eintrag, also über den Index??

    r1.json().get('stocks', 1)

    Gibt als Ergebnis

    {'stockname': 'Henkel', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 50}

    Ok, das passt schon mal. Somit kann man dann gewohnt auf die einzelnen Elemente zugreifen.

    print("TESTING", testing['stockname'])

    Ausgabe

    TESTING Henkel

    Ok, Teil 1 erledigt. Jetzt habe ich ja irgendwann mehrere Elemente in der Liste und brauch dann den letzten Index , um damit was machen zu können. Also, z.B. durch die Daten zu loopen.

    objkeys = r1.json().objkeys('stocks') print("Objkeys", objkeys)

    Ausgabe

    Objkeys ['0', '1']

    Ok, kommt eine Liste des Index zurück. Damit kann man arbeiten 😉

    Ich hatte dann zum Testen mittels einer while Schleife die Daten geladen, aber jetzt beim Tippen klingelt es und wir machen das schön mit enumerate 😉

    @staticmethod def load(): data = {} for count, value in enumerate(objkeys): testing = r1.json().get('stocks', count) data[count] = { "stockname": testing['stockname'], "wkn1": testing['wkn1'], "wkn2": testing['wkn2'], "quantity": testing['quantity']} return data

    Somit habe ich die Daten aus der Redis Datenbank in einem Objekt und kann damit arbeiten.

  • Wenn dir der Redis-Server flöten geht....

    Verschoben Redis
    3
    0 Stimmen
    3 Beiträge
    519 Aufrufe
    FrankMF

    So, nach einer kleinen Pause und ein wenig nachdenken ist mir doch noch was eingefallen 😉

    Backports! Man so einfach!

    nano /etc/apt/sources.list

    Das folgende eintragen.

    # backports deb http://deb.debian.org/debian stretch-backports main

    Danach ein

    apt update

    Und dann schauen wir uns mal die Version an....

    apt -t stretch-backports search redis-server Sorting... Done Full Text Search... Done golang-github-stvp-tempredis-dev/stretch-backports 0.0~git20160122.0.83f7aae-1~bpo9+1 all Go package to start and stop temporary redis-server processes libtest-redisserver-perl/oldstable,oldstable 0.20-1 all redis-server runner for tests python-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python 2.X using hiredis python3-hiredis/oldstable,oldstable 0.2.0-1+b2 amd64 redis protocol reader for Python using hiredis redis/stretch-backports 5:5.0.3-3~bpo9+2 all Persistent key-value database with network interface (metapackage) redis-server/stretch-backports 5:5.0.3-3~bpo9+2 amd64 [residual-config] Persistent key-value database with network interface

    Und die habe ich gestern Abend gebaut.

    127.0.0.1:6379> INFO # Server redis_version:5.0.5

    Ok, das schmerzt jetzt 😛

  • Redis startet nicht!?

    Verschoben Redis
    1
    0 Stimmen
    1 Beiträge
    341 Aufrufe
    Niemand hat geantwortet
  • Redis Replication

    Angeheftet Verschoben Redis
    4
    1 Stimmen
    4 Beiträge
    416 Aufrufe
    FrankMF

    Um die Verbindung zu testen, kann man folgende Befehle nutzen.

    redis-cli -h 10.1.1.0 -p 6379 -a <PASSWORD>

    und

    telnet 10.1.1.0 6379
  • Redis installieren

    Angeheftet Verschoben Redis
    1
    0 Stimmen
    1 Beiträge
    353 Aufrufe
    Niemand hat geantwortet
  • Redis Datenbank sichern

    Verschoben Redis
    1
    0 Stimmen
    1 Beiträge
    746 Aufrufe
    Niemand hat geantwortet