GNU/Linux >> Belajar Linux >  >> Linux

Cara mengenkripsi satu sistem file Linux

Ada beberapa alasan berbeda mengapa Anda mungkin ingin mengenkripsi sistem file, seperti melindungi informasi sensitif saat tidak digunakan, tidak perlu khawatir mengenkripsi file individual di sistem file, atau alasan lain. Untuk mengenkripsi sistem file secara manual di Red Hat Enterprise Linux (RHEL), Anda dapat menggunakan cryptsetup memerintah. Artikel ini akan memandu Anda melalui cara menggunakan Ansible untuk melakukan ini bagi Anda untuk server RHEL 8.

Sebelum kita mendalami penggunaan Ansible untuk mengotomatisasi proses itu, pertama-tama mari kita melalui langkah-langkah untuk secara manual buat sistem file terenkripsi sehingga kami lebih memahami apa yang kami minta Ansible lakukan. Ada perintah asli di RHEL yang memungkinkan Anda membuat sistem file terenkripsi, dan kami akan menggunakannya dalam panduan kami.

[ Anda mungkin juga senang membaca: Mengonfigurasi LUKS:Linux Unified Key Setup ]

Buat partisi terenkripsi secara manual

Untuk memulainya, kita akan melihat perangkat tempat saya akan meletakkan partisi:

[root@ansibleclient ~]# fdisk /dev/vdc

Welcome to fdisk (util-linux 2.32.1).
Changes will remain only in memory until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/vdc: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x803e8b19

Device     Boot Start     End Sectors Size Id Type
/dev/vdc1        2048 6291455 6289408   3G 83 Linux

Command (m for help):

Kita dapat melihat bahwa /dev/vdc saya sudah memiliki partisi di dalamnya, tetapi masih ada ruang yang tersedia untuk partisi lain. Saya akan membuat /dev/vdc2 saya partisi:

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (2-4, default 2):
First sector (6291456-62914559, default 6291456):
Last sector, +sectors or +size{K,M,G,T,P} (6291456-62914559, default 62914559): +7G

Created a new partition 2 of type 'Linux' and of size 7 GiB.

Command (m for help): p
Disk /dev/vdc: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x803e8b19

Device     Boot   Start      End  Sectors Size Id Type
/dev/vdc1          2048  6291455  6289408   3G 83 Linux
/dev/vdc2       6291456 20971519 14680064   7G 83 Linux

Command (m for help): w
The partition table has been altered.
Syncing disks.

[root@ansibleclient ~]# partprobe /dev/vdc
[root@ansibleclient ~]#

Saya sekarang memiliki partisi /dev/vdc2 ukuran 7G. Selanjutnya, saya memformat partisi itu untuk luks :

[root@ansibleclient ~]# cryptsetup luksFormat /dev/vdc2

WARNING!
========
This will overwrite data on /dev/vdc2 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/vdc2:
Verify passphrase:
[root@ansibleclient ~]#

Untuk membuka volume terenkripsi, saya menggunakan luksOpen argumen untuk cryptsetup , dan saya beri tahu nama yang saya inginkan sebagai target manualluks :

[root@ansibleclient ~]# cryptsetup luksOpen /dev/vdc2 manualluks
Enter passphrase for /dev/vdc2:
[root@ansibleclient ~]# ls /dev/mapper/
control  examplevg-examplelv  manualluks  mycrypt  rhel-root  rhel-swap
[root@ansibleclient ~]#

Setelah dibuka, saya benar-benar bisa menggunakannya. Dalam contoh ini, saya akan menempatkan grup volume di sana:

[root@ansibleclient ~]# vgcreate manual_luks_vg /dev/mapper/manualluks
  Physical volume "/dev/mapper/manualluks" successfully created.
  Volume group "manual_luks_vg" successfully created
[root@ansibleclient ~]# vgdisplay manual_luks_vg
  --- Volume group ---
  VG Name               manual_luks_vg
  System ID            
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               6.98 GiB
  PE Size               4.00 MiB
  Total PE              1787
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1787 / 6.98 GiB
  VG UUID               bjZ7FM-9jNw-pdfs-Dd5y-5IsF-tEdK-CpVqH4
   
[root@ansibleclient ~]#

Saya memiliki grup volume, manual_luks_vg , jadi sekarang saya dapat memasukkan volume logis ke dalam:

[root@ansibleclient ~]# lvcreate -n manual_luks_logvol -L +5G manual_luks_vg
  Logical volume "manual_luks_logvol" created.
[root@ansibleclient ~]# lvdisplay manual_luks_vg
  --- Logical volume ---
  LV Path                /dev/manual_luks_vg/manual_luks_logvol
  LV Name                manual_luks_logvol
  VG Name                manual_luks_vg
  LV UUID                nR5UKo-jRvR-97L0-60YF-dbSp-D0pc-l8W3Td
  LV Write Access        read/write
  LV Creation host, time ansibleclient.usersys.redhat.com, 2020-12-03 10:15:03 -0500
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5
   
[root@ansibleclient ~]#

lvcreate perintah menentukan nama untuk volume logis baru saya, manual_luks_logvol , ukurannya, 5G, dan bahwa volume logis harus berada dalam grup volume manual_luks_vg .

Pada titik ini, saya memiliki volume logis, tetapi saya belum memformatnya untuk ext atau xfs . Mengetik mkfs lalu tekan Tab menunjukkan kepada saya bahwa ada sejumlah opsi bagi saya untuk memformat partisi ini:

# mkfs
mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs

Di sini, saya akan menggunakan mkfs.xfs :

[root@ansibleclient ~]# mkfs.xfs /dev/manual_luks_vg/manual_luks_logvol
meta-data=/dev/manual_luks_vg/manual_luks_logvol isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Saya sudah memformatnya, tetapi tidak dipasang. Untuk memasangnya, saya akan membuat direktori baru dan kemudian menjalankan mount perintah:

[root@ansibleclient ~]# mkdir /manual_luks
[root@ansibleclient ~]# mount /dev/manual_luks_vg/manual_luks_logvol /manual_luks

Untuk memverifikasi bahwa itu berhasil, saya dapat menggunakan mount dengan sendirinya dan kemudian menulis ke file baru di sana:

[root@ansibleclient ~]# mount | grep luks
/dev/mapper/manual_luks_vg-manual_luks_logvol on /manual_luks type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@ansibleclient ~]# date > /manual_luks/testing
[root@ansibleclient ~]# cat /manual_luks/testing
Thu Dec  3 10:24:42 EST 2020
[root@ansibleclient ~]#

Untuk mengaktifkan sistem untuk memasang partisi terenkripsi saat boot, saya perlu memperbarui /etc/crypttab saya mengajukan. Format filenya adalah nama luks Anda perangkat, partisi fisik, dan kemudian file yang isinya hanya sandi untuk luks perangkat:

# cat /etc/crypttab
manualluks /dev/vdc2 /root/manualluks.txt

Dalam /root/manualluks.txt , saya baru saja memiliki kata sandi plaintext untuk luks saya perangkat.

Saya menggunakan luksAddKey argumen untuk menambahkan kunci ke perangkat:

# cryptsetup luksAddKey /dev/vdc2 /root/manualluks.txt

Untuk memasang sistem file saat boot, edit /etc/fstab file sehingga ada entri untuk volume logis dan titik pemasangannya:

/dev/manual_luks_vg/manual_luks_logvol /manual_luks xfs defaults 0 0

Setelah Anda melakukan langkah-langkah manual untuk membuat partisi dan menulisnya, berikan sistem boot ulang untuk memverifikasi bahwa pengaturan tetap ada dan sistem melakukan boot ulang seperti yang diharapkan.

Sekarang setelah kita memahami apa yang perlu kita lakukan untuk membuat partisi terenkripsi secara manual, kita tahu apa yang perlu kita lakukan untuk mengotomatisasi proses tersebut.

Otomatiskan pembuatan partisi terenkripsi

Skrip yang dihosting di https://people.redhat.com/pgervase/sysadmin/partition.yml memberikan satu contoh cara menggunakan Ansible untuk mengambil disk kosong dan melalui langkah-langkah untuk membuat partisi terenkripsi, memasangnya, dan kemudian menulis untuk itu. Seperti banyak hal dengan teknologi, ada beberapa cara berbeda untuk mencapai ini, tetapi pendekatan ini juga akan menunjukkan beberapa contoh variabel, mendapatkan fakta, dan menggunakan blok dan penyelamatan.

---
- name: pb to create partition
  hosts: all
  become: true
  vars:
    target_size: 3GiB
    target_device: /dev/vdc
    myvg: examplevg
    mylv: examplelv
    keyfile: /root/mylukskey.yml
    mycrypt: mycrypt

Di bagian atas buku pedoman, saya menempatkan beberapa informasi dasar dan mendeklarasikan beberapa variabel. Daripada memiliki parameter yang di-hardcode dalam buku pedoman, dengan menetapkannya sebagai variabel, saya dapat menimpanya ketika saya menjalankan permainan dan membuat tugas dapat digunakan untuk tujuan lain.

 tasks:
    - name: block for doing basic setup and verification for target system
      block:
        - name: get facts for "{{ target_device }}"
          parted:
            device: "{{ target_device }}"
          register: target_facts

        - name: print facts for "{{ target_device }}"
          debug:
            msg: "{{ target_facts }}"

        - name: check to see if there are any facts for /dev/vdb1. this means there are existing partitions that we would overwrite, so fail
          debug:
            msg: "{{ target_facts }}.partitions"
          failed_when: ansible_devices.vdb.partitions.vdb1 is defined   ### if vdb1 is defined, there's already a partition there, so abort.

        - name: print size for the disk
          debug:
            msg: "the size is {{ target_facts['disk']['size'] }} kib"

        - name: copy keyfile to remote system
          copy:
            src: mylukskey.yml
            dest: "{{ keyfile }}"

        - name: make sure cryptsetup is installed
          yum:
            name: cryptsetup
            state: installed

Beberapa tugas pertama yang dijalankan akan mendapatkan informasi tentang sistem target saya dan memastikan bahwa saya tidak akan menimpa partisi yang ada. Saya kemudian menyalin keyfile ke sistem jarak jauh saya. file kunci . ini berisi frasa sandi yang akan digunakan saat saya membuat wadah LUKS. Tidak semua sistem akan memiliki cryptsetup paket terinstal, jadi hal selanjutnya yang harus dilakukan adalah menginstal RPM tersebut jika belum diinstal.

   - name: block to attempt to get info on what my destination device will become
      block:
        - name: task to attempt to get info on what my destination device will be
          parted:
            device: "{{ target_device}}"
            number: 1
            state: info
          register: info_output
        - name: print info_output
          debug:
            msg: "{{ info_output }}"

    - name: block to attempt parted
      block:
        - name: use parted in block to create new partition
          parted:
            device: "{{ target_device }}"
            number: 1
            state: present  
            part_end: "{{ target_size }}"
          register: parted_output

      rescue:
        - name: parted failed
          fail:
            msg: 'parted failed:  {{ parted_output }}'

Pada titik ini, saya memiliki sistem yang siap dan sesuai untuk dipartisi. Untuk tujuan pencatatan saya sendiri, saya memiliki tugas yang mencetak informasi yang parted memberikan kembali untuk perangkat target saya, /dev/sdb . Partisi di sini harus kosong karena saya sudah gagal saat ansible_devices.vdb.partitions.vdb1 didefinisikan, jadi ini hanya untuk verifikasi. Selanjutnya, saya menggunakan parted untuk membuat partisi saya. Untuk menangkap kesalahan dalam langkah ini—mungkin perangkat tujuan saya terlalu kecil, atau terjadi sesuatu yang lain—saya menggunakan blok dan penyelamatan untuk mendaftarkan output parted dan kemudian tampilkan itu di gagal bagian dari bagian penyelamatan saya.

    - name: block for LUKS and filesystem tasks
      block:
        - name: create LUKS container with passphrase
          luks_device:
            device: "{{ target_device }}1"
            state: present
            name: "{{ mycrypt }}"
            keyfile: "{{ keyfile }}"

        - name: open luks container
          luks_device:
            device: "{{ target_device }}1"
            state: opened
            name: "{{ mycrypt }}"
            keyfile: "{{ keyfile }}"

        - name: create a new volgroup in that partition
          lvg:
            vg: "{{ myvg }}"
            pvs: "/dev/mapper/{{ mycrypt }}"

        - name: create a logvol in my new vg
          lvol:
            vg: "{{ myvg }}"
            lv: "{{ mylv }}"
            size: +100%FREE`

       - name: create a filesystem
          filesystem:
            fstype: xfs
            dev: "/dev/mapper/{{ myvg }}-{{ mylv }}"

Sekarang saya memiliki partisi dan cryptsetup diinstal, saya perlu melakukan bagian LUKS dan sistem file dari pengaturan saya. Langkah pertama adalah menggunakan luks_device modul, bersama dengan keyfile yang saya salin. Setelah saya memiliki wadah LUKS, saya membuat grup volume, lalu volume logis, dan kemudian sistem file.

       - name: mount device
          mount:
            path: /mnt
            src: "/dev/mapper/{{ myvg }}-{{ mylv }}"
            state: mounted
            fstype: xfs

    - name: put some content in my new filesystem
      copy:
        content: "this is secure content!"
        dest: /mnt/newcontent.txt

    - name: set content in /etc/crypttab so I can mount the partition on reboot
      copy:
        content: "{{ mycrypt }} {{ target_device }}1 {{ keyfile }}"
        dest: /etc/crypttab
        owner: root
        group: root
        mode: 0644

Setelah saya memiliki sistem file di sana, saya memasang sistem file dan menulis file uji untuk memverifikasi bahwa semuanya berfungsi dengan benar. Langkah terakhir adalah membuat /etc/crypttab file sehingga sistem dapat memasang sistem file saya ketika di-boot ulang.

[ Ingin mempelajari lebih lanjut tentang keamanan? Lihat daftar periksa keamanan dan kepatuhan TI. ] 

Menutup

Proses mengonfigurasi partisi terenkripsi secara manual tidak terlalu sulit, atau bahkan memakan waktu. Namun, tugas-tugas tersebut sangat cocok untuk Ansible tangani untuk Anda, membantu memastikan konfigurasi yang konsisten, aman, dan dapat direproduksi.

Informasi lebih lanjut tentang perangkat LUKS dapat ditemukan di:

  • Cara membuat gambar terenkripsi LUKS dan memasangnya saat boot
  • Mengenkripsi perangkat blok menggunakan LUKS
  • Mengunci data dengan sandi LUKS di konsol web RHEL

Linux
  1. Cara mengenkripsi file dengan gocryptfs di Linux

  2. Cara membuat sistem file pada partisi Linux atau volume logis

  3. Cara mengenkripsi partisi dengan DM-Crypt LUKS di Linux

  1. Cara menggunakan systemd-nspawn untuk pemulihan sistem Linux

  2. Linux – Bagaimana Memberi Ram ke Cache Sistem File?

  3. Cara Membuat Snapshot Sistem File menggunakan Perintah Snapper di Linux

  1. Cara Mengubah UUID Partisi di Sistem File Linux

  2. Cara Menemukan Jenis Sistem File yang Dipasang Di Linux

  3. Cara Memperbarui Kali Linux Dengan Satu Perintah