Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

       Установка необходимых пакетов

$ sudo dnf install gnutls-utils openssl




        Создание ключей на токене

  1. Подготовим токен. 

    $ pkcs15-init -E
    $ pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
    $ pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize

    В параметрах pin и so-pin можно указать желаемые пин-коды пользователя и администратора.

  2. Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.

    $ pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45
    <вводим PIN пользователя>

     

  3. Проверим сгенерированный ключ:

    $ pkcs15-tool --list-keys
    Using reader with a card: Aktiv Rutoken ECP 00 00
    Private RSA Key [Private Key]
     Object Flags : [0x3], private, modifiable
     Usage : [0x4], sign
     Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
     ModLength : 2048
     Key ref : 1 (0x1)
     Native : yes
     Path : 3f001000100060020001
     Auth ID : 02
     ID : 45

    Создание сертификата и импорт его на токен

  4. Определите URI RFC7512 ключа:
    p11tool --list-all
    ...
    pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=0000000042545d2e;token=Rutoken%20ECP%20%28User%20PIN%29

    Будем называть его $TOKEN_URI. Я буду использовать ключ аутентификации как личный. Нам нужно будет определить URI закрытого ключа, который мы хотим использовать. Для этого используйте p11toolеще раз:


    $ p11tool --outfile=/tmp/p11_output --login --list-all $TOKEN_URI


    Этот вывод будет содержать следующую информацию:

    ...
    Object 0:
        URL: pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=0000000042545d2e;token=Rutoken%20ECP%20%28User%20PIN%29;id=%45;object=Private%20Key;type=private
        Type: Private key (RSA-2048)
        Label: Private Key
        Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; 
        ID: 45
    ...

    Нам понадобится URL поле, которое будем называть $KEY_URI

    Теперь у нас есть все необходимое для создания либо самоподписанного сертификата, либо запроса на подпись сертификата (CSR), который будет отправлен в центр сертификации для подписи. 

    $ openssl req -engine pkcs11 -new -key "$KEY_URI" -keyform engine -x509 -out cert.pem -text


  5. Сохраняем сертификат на токен:

    $ pkcs11-tool -l -y cert -w cert.pem --id 45



  6. Создание раздела LUKS

    Для просмотра всех дисков в системе, используйте команду:

    $ lsblk

    Получим вывод по типу следующего

    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    sr0          11:0    1 1024M  0 rom  
    zram0       252:0    0  3,8G  0 disk [SWAP]
    nvme0n1     259:0    0   20G  0 disk 
    ├─nvme0n1p1 259:1    0    1M  0 part 
    ├─nvme0n1p2 259:2    0    1G  0 part /boot
    └─nvme0n1p3 259:3    0   19G  0 part /home
                                         /
    nvme0n2     259:4    0    2G  0 disk 

    Находим наш диск и запоминаем его название для последующих команд (в данном случае это - nvme0n2)

    Очистка диска


    На этом шаге обнуляем таблицу разделов диска:

    sudo dd if=/dev/zero of=/dev/nvme0n2 count=4096


    *Это не обязательно

    Отформатируйте диск под LUKS


    Используем для этого утилиту Cryptsetup. Её подкоманда luksFormat запускает первый этап создания зашифрованного раздела LUKS.
    После этого появится предупреждение об удалении всех данных (которые могли всё ещё оставаться на диске). Кроме того, вас попросят придумать и ввести парольную фразу для диска.

    $ sudo cryptsetup luksFormat /dev/nvme0n2
    
    WARNING!
    
    ========
    
    This will overwrite data on /dev/sdX irrevocably.
    
    
    
    Are you sure? (Type uppercase yes): YES
    
    Enter passphrase:
    
    Verify passphrase:

    Откройте LUKS-том


    Процесс создания зашифрованного раздела завершён. Теперь для продолжения работы с диском нужно вводить парольную фразу. Открыть произвольный LUKS-том (то есть, подключить виртуальное блочное устройство) можно с помощью подкоманды open.

    $ cryptsetup open /dev/nvme0n2 vaultdrive


    Чтобы посмотреть список открытых томов, нужно вывести содержимое каталога /dev/mapper:

    $ ls /dev/mapper
    
    control  vaultdrive


    Чтобы закрыть LUKS-том vaultdrive нужно написать:


    $ cryptsetup close vaultdrive


    После этого он исчезнет из каталога /dev/mapper.

    Создайте файловую систему


    $ sudo mkfs.xfs -f -L myvault /dev/mapper/vaultdrive



    Создайте файловую систему, чтобы иметь возможность хранить свои данные на диске. В нашем примере был выбран формат XFS, но это далеко не единственный вариант: можно использовать, например, ext4 или JFS. И многие другие.


    Настройка LUKS

    Для корректной настройки LUKS, необходимо указать URI ключа вручную. Для начала узнаем URI сертификата:

    $ p11tool --outfile=/tmp/p11_output --login --list-all $TOKEN_URI
    ...
                    URL: pkcs11:model=PKCS%2315;manufacturer=Aktiv%20Co.;serial=0000000042545d2e;token=Rutoken%20ECP%20%28User%20PIN%29;id=%45;object=Certificate;type=cert

    ...


    «URL» выше — это URI нашего сертификата, $CERT_URI. Теперь мы можем зарегистрировать его:

    $ sudo systemd-cryptenroll --pkcs11-token-uri="$CERT_URI" /dev/nvme0n2

    Вывод будет иметь вид:



    Если мы проверим вывод cryptsetup luksDump /dev/nvme0n2, мы увидим, что токен зарегистрирован:

    ...
    Keyslots:
      0: luks2
      ...
      1: luks2
      ...
    Tokens:
      1: systemd-pkcs11
            Keyslot:  1
    ...




    Давайте укажем для systemd-cryptsetup правильный URI закрытого ключа в заголовке. Сначала сбросим заголовок, запустив команду:

    $ cryptsetup token export -token-id 1 > header.json



    Откроем header.json в своем любимом редакторе, замените значение «pkcs11-uri» на значение $KEY_URI секретного ключа, который мы нашли ранее, импортируйте его обратно и удалите старый токен:

    ~# cryptsetup token import --json-file header.json --token-id $NEW_TOKEN_ID /dev/nvme0n2 

    ~# cryptsetup token remove --token-id $OLD_TOKEN_ID /dev/nvme0n2



    Теперь мы можем проверить, работает ли разблокировка:
    ~# /lib/systemd/systemd-cryptsetup attach luks /dev/sdXn - pkcs11-uri="auto"
    Set cipher aes, mode xts-plain64, key size 512 bits for device /dev/disk/by-uuid/65b6de87-2fe1-41f7-b99e-6113bbc8c905.
    Automatically discovered security PKCS#11 token 'pkcs11:model=PKCS%2315%20emulated;manufacturer=ZeitControl;...User%20PIN%29;id=%03;object=Authentication%20key;type=private' unlocks volume.
    Please enter PIN for security token 'OpenPGP card (User PIN)' in order to unlock luks: ****************
    Successfully logged into security token 'OpenPGP card (User PIN)'.
    Successfully decrypted key with security token.






  • No labels