Mã hóa, giải mã và bảo vệ bằng mật khẩu tập tin trên Linux Image Mã hóa, giải mã và bảo vệ bằng mật khẩu tập tin trên Linux

Bài viết này sẽ hướng dẫn các bạn mã hóa, giải mã và bảo vệ bằng mật khẩu với tập tin trên hệ điều hành Linux. Trong bài viết này sẽ giới thiệu với các bạn các công cụ giúp chúng ta có thể mã hóa cũng như cách nén file trên bản phân phối CentOS 7 từ đó giúp cho chúng ta có thể tự tìm hiểu và tự học Linux cơ bản một cách dễ dàng hơn.

1. Mã hóa bằng GnuPG

1.1. Giới thiệu và cài đặt GnuPG

GnuPG (GNU Privacy Guard) hay còn gọi GPG nó chính là công cụ cơ bản giúp cho chúng ta có thể mã hóa trên hệ điều hành Linux. Được viết bởi GNU Project bằng ngôn ngữ lập trình C. Nó cung cấp mã hóa, giải mã, chữ ký số và ký tên.

Nếu gói gnupg không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Chạy lệnh sau để cài đặt gói gnupg:

    root@ubuntuserver:~# apt-get install gnupg
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    ...
    
  • Đối với bản phân phối RHEL/CentOS:

    Chạy lệnh bên dưới để thực hiện cài đặt gói gnupg:

    [root@localhost ~]# yum -y install gnupg
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    epel/x86_64/metalink                                                                                    | 5.6 kB  00:00:00
    * base: centos-hcm.viettelidc.com.vn
    * epel: hkg.mirror.rackspace.com
    * extras: centos-hcm.viettelidc.com.vn
    * updates: centos-hcm.viettelidc.com.vn
    base                                                                                                    | 3.6 kB  00:00:00
    epel                                                                                                    | 5.4 kB  00:00:00
    extras                                                                                                  | 2.9 kB  00:00:00
    updates                                                                                                 | 2.9 kB  00:00:00
    ...
    

Sau khi cài đặt chúng ta chạy lệnh sau để xem version của gnupg hiện tại:

[root@localhost ~]# gpg --version
gpg (GnuPG) 2.0.22
libgcrypt 1.5.3
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, ?, ?, ELG, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

Qua kết quả trên cho chúng ta biết các toán thuật toán mà gnupg hổ trợ mã hóa chính là IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256.

1.2. Sử dụng GnuPG

Bước 1: Chúng ta thực hiện tạo một tệp test.txt như bên dưới và thực hiện xem nội dung của tệp test.txt như sau:

[root@localhost ~]# echo "Hello blogd.net" > test.txt
[root@localhost ~]# cat test.txt
Hello blogd.net

Bước 2: Tiếp theo chúng ta thực hiện mã hóa tệp test.txt bằng gpg cùng với tùy chọn -c:

[root@localhost ~]# gpg -c test.txt
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/pubring.gpg' created

Trong quá trình mã hóa thì gpg sẽ yêu cầu chúng ta nhập mật khẩu:

Nhập mật khẩu

Lưu ý: Nhập mật khẩu 2 lần để mã hóa tệp. Mã hóa trên được thực hiện thao mặc định với thuật toán CAST5. Chúng ta có thể chỉ định thuật toán khác.

Kết quả sau khi tạo mã hóa xong thì sẽ xuất hiện một tệp test.txt.gpg như sau:

[root@localhost ~]# ls -l
total 8
-rw-r--r--. 1 root root   16 Sep 25 11:20 test.txt
-rw-r--r--. 1 root root   63 Sep 25 11:23 test.txt.gpg

Khi chúng ta muốn xem nội dung tệp mã hóa hiện tại khi chưa giải mã thì không thể:

[root@localhost ~]# cat test.txt.gpg
Qh��D���.2�m�&Y<��1(�isߗ�6B��y�0y�	~=5)]�}���/[root@localhost ~]#

Bây giờ, chúng ta muốn giải mã tệp được mã hóa ở trên, chúng ta sử dụng lệnh gpg như sau. Để kiểm tra chính sác chúng ta thực hiện xóa tệp gốc trước khi giải mã và để lại tệp được mã hóa test.txt.gpg thực hiện như bên dưới:

[root@localhost ~]# rm -rf test.txt
[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root   63 Sep 25 11:23 test.txt.gp
[root@localhost ~]# gpg test.txt.gpg
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
File `test.txt' exists. Overwrite? (y/N) y
gpg: WARNING: message was not integrity protected
[root@localhost ~]# cat test.txt
Hello blogd.net

Sau khi giải mã thành công chúng ta có thể đọc nội dung tệp và nội dung tệp hoàn toàn giống với nội dung tệp gốc mà chúng ta đã xóa đi.

Lưu ý: Chúng ta cần cung cấp cùng một mật khẩu chúng ta đã cung cấp khi mã hóa để giải mã khi được nhắc.

2. Mã hóa bằng bcrypt

2.1. Giới thiệu và cài đặt bcrypt

bcrypt là một công cụ mã hóa và giải mã các tập tin bằng thuật toán Blowfish. Các tệp được mã hóa sẽ được lưu với phần mở rộng là .bfe. Theo mặc định, bcrypt sẽ nén các tệp đầu vào trước khi mã hóa, xóa các tệp đầu vào và ghi đè lên các tệp đầu vào với dữ liệu ngẫu nhiên để ngăn phục hồi dữ liệu.

Mã hóa bằng thuật toán blowfish không được khuyến khích kể từ thời điểm người ta nghĩ rằng thuật toán mật mã có thể bị tấn công.

Nếu gói bcrypt không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Chạy lệnh sau để cài đặt gói bcrypt:

    root@ubuntuserver:~# apt-get install bcrypt
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer required:
    apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
    liblua5.2-0 ssl-cert
    Use 'apt autoremove' to remove them.
    The following NEW packages will be installed:
    bcrypt
    ...
    
  • Đối với bản phân phối RHEL/CentOS:

    Chạy lệnh bên dưới để thực hiện cài đặt gói bcrypt:

    [root@localhost ~]# yum -y install bcrypt
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: centos-hcm.viettelidc.com.vn
    * epel: hkg.mirror.rackspace.com
    * extras: centos-hcm.viettelidc.com.vn
    * updates: centos-hcm.viettelidc.com.vn
    Resolving Dependencies
    --> Running transaction check
    ---> Package bcrypt.x86_64 0:1.1-14.el7 will be installed
    --> Finished Dependency Resolution
    ...
    

2.2. Sử dụng bcrypt

Bước 1: Thực hiện tạo tệp test-bcrypt.txt và xem nội dung tệp như bên dưới:

[root@localhost ~]# echo "Hello Blogd.net" > test-bcrypt.txt
[root@localhost ~]# cat test-bcrypt.txt
Hello Blogd.net
[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 16 Sep 30 21:09 test-bcrypt.txt

Bước 2: Chúng ta mã hóa tệp bằng cách sử dụng lệnh bcrypt. Trong quá trình mã hóa chúng ta cần thực hiện nhập mật khẩu 2 lần:

[root@localhost ~]# bcrypt test-bcrypt.txt
Encryption key:Key must be at least 8 characters
Encryption key:
Again:

Sau khi mã hóa tệp thành công thì sẽ xuất hiện một tệp mới có tên test-bcrypt.txt.bfe được tạo từ tệp gốc và sẽ thay thế tệp gốc:

[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 86 Sep 30 21:09 test-bcrypt.txt.bfe

Khi chúng ta muốn xem nội dung của tệp đã bị mã hóa thì chúng ta không thể đọc được nội dung:

[root@localhost ~]# cat test-bcrypt.txt.bfe
���C�������q�'f:2[
�T�2K�x�.�T��+|��|��
                    ;�K���A0�z�ژ{�&[bB��[root@localhost ~]#

Để có thể xem nội dung tệp chúng ta cần thực hiện giải mã tệp đã bị mã hóa. Trong quá trình giải mã chúng ta cần nhập đúng mật khẩu với mật khẩu đã tạo mã hóa ban đầu:

[root@localhost ~]# bcrypt test-bcrypt.txt.bfe
Encryption key:
Invalid encryption key for file: test-bcrypt.txt.bfe

Sau khi chạy lệnh bên trên thì tệp test-bcrypt.txt đã xuất hiện và thay thế tệp test-bcrypt.txt.bfe và chúng ta có thể xem nội dung tệp cách bình thường như bên dưới:

[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 16 Sep 30 21:10 test-bcrypt.txt
[root@localhost ~]# cat test-bcrypt.txt
Hello Blogd.net

3. Mã hóa bằng ccrypt

3.1. Giới thiệu và cài đặt ccrypt

ccrypt là một tiện ích để mã hóa và giải mã các tập tin. Nó dựa trên thuật toán Rijndael cypher. Mã hóa một tập tin bằng cách sử dụng ccrypt. Nó sử dụng ccencrypt để mã hóa và ccdecrypt để giải mã.

Nếu gói ccrypt không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Chạy lệnh sau để cài đặt gói ccrypt:

    root@ubuntuserver:~# apt-get install ccrypt
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer required:
    apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
    liblua5.2-0 ssl-cert
    Use 'apt autoremove' to remove them.
    Suggested packages:
    elpa-ps-ccrypt
    The following NEW packages will be installed:
    ccrypt
    ...
    
  • Đối với bản phân phối RHEL/CentOS:

    Chạy lệnh bên dưới để thực hiện cài đặt gói ccrypt:

    [root@localhost ~]# yum -y install ccrypt
    Loaded plugins: fastestmirror
    Determining fastest mirrors
    epel/x86_64/metalink                                                                                  | 6.2 kB  00:00:00
    * base: mirrors.123host.vn
    * centos-sclo-rh: mirrors.123host.vn
    * centos-sclo-sclo: mirrors.123host.vn
    * epel: my.fedora.ipserverone.com
    * extras: mirrors.viethosting.com
    * updates: mirrors.viethosting.com
    base                                                                                                  | 3.6 kB  00:00:00
    ...
    

3.2. Sử dụng ccrypt

Bước 1: Chúng ta thực hiện tạo một tệp test-ccrypt.txt như bên dưới và thực hiện xem nội dung của tệp test-ccrypt.txt như sau:

[root@localhost ~]# echo "Hello Blogd.net" > test-ccrypt.txt
[root@localhost ~]# cat test-ccrypt.txt
Hello Blogd.net
[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 16 Sep 30 21:26 test-ccrypt.txt

Bước 2: Thực hiện mã hóa tệp test-ccrypt.txt khi mã hóa chúng ta cần sử dụng lệnh ccencrypt sau đó nhập mật khẩu 2 lần để mã hóa thành công và sau khi mã hóa thành công thì tệp test-ccrypt.txt được thay thế bằng tệp test-ccrypt.txt.cpt:

[root@localhost ~]# ccencrypt test-ccrypt.txt
Enter encryption key:
Enter encryption key: (repeat)
[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 48 Sep 30 21:26 test-ccrypt.txt.cpt

Sau khi mã hóa thành công chúng ta không thể xem nội dung tệp:

[root@localhost ~]# cat test-ccrypt.txt.cpt
�Sp��Z�ꀒV�]���lU�UBC�tٕ�n㗸<��j�OÖ�)Ɛ[root@localhost ~]#

Để có thể xem nội dung tệp chúng ta cần thực thi lệnh ccdecrypt để giải mã tệp test-ccrypt.txt.cpt khi giải mã chúng ta cần nhập đúng mật khẩu mà chúng ta đã tạo trong quá trình mã hóa:

[root@localhost ~]# ccdecrypt test-ccrypt.txt.cpt
Enter decryption key:
[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 16 Sep 30 21:26 test-ccrypt.txt
[root@localhost ~]# cat test-ccrypt.txt
Hello Blogd.net

4. Mã hóa bằng zip

4.1. Giới thiệu và cài đặt zip

ZIP là một trong những định dạng lưu trữ hỗ trợ nén dữ liệu không mất dữ liệu. Một tệp ZIP có thể chứa một hoặc nhiều tệp hoặc thư mục có thể đã được nén. Định dạng tệp ZIP cho phép sử dụng thuật toán mật mã dòng pkzip.

Nếu gói zip không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Chạy lệnh sau để cài đặt gói zip:

    root@ubuntuserver:~# apt-get install zip
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer required:
    apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
    liblua5.2-0 ssl-cert
    Use 'apt autoremove' to remove them.
    The following additional packages will be installed:
    unzip
    The following NEW packages will be installed:
    unzip zip
    ...
    
  • Đối với bản phân phối RHEL/CentOS:

    Chạy lệnh bên dưới để thực hiện cài đặt gói zip:

    [root@localhost ~]# yum -y install zip
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirrors.123host.vn
    * centos-sclo-rh: mirrors.123host.vn
    * centos-sclo-sclo: mirrors.123host.vn
    * epel: my.fedora.ipserverone.com
    * extras: mirrors.viethosting.com
    * updates: mirrors.viethosting.com
    ...
    

4.2. Sử dụng zip để đặt mật khẩu

Bước 1: Đầu tiên chúng ta thực hiện tạo 3 tệp như bên dưới:

[root@localhost ~]# echo "Hello Blogd.net test zip password 1." > test-zip-1.txt
[root@localhost ~]# echo "Hello Blogd.net test zip password 2." > test-zip-2.txt
[root@localhost ~]# echo "Hello Blogd.net test zip password 3." > test-zip-3.txt
[root@localhost ~]# ls -l
total 12
-rw-r--r--. 1 root root 37 Sep 30 21:54 test-zip-1.txt
-rw-r--r--. 1 root root 37 Sep 30 21:54 test-zip-2.txt
-rw-r--r--. 1 root root 37 Sep 30 21:54 test-zip-3.txt

Bước 2: Sau khi thực hiện tạo 3 tệp như trên chúng ta tạo một thư mục zip được mã hóa chứa cả 3 tệp này bằng cách sử dụng lệnh zip kết hợp với tùy chọn --password như sau:

[root@localhost ~]# zip --password blogdpassword test-blogd.zip test-zip-1.txt test-zip-2.txt test-zip-3.txt
  adding: test-zip-1.txt (stored 0%)
  adding: test-zip-2.txt (stored 0%)
  adding: test-zip-3.txt (stored 0%)
[root@localhost ~]# ls -l
total 16
-rw-r--r--. 1 root root 685 Sep 30 23:18 test-blogd.zip
-rw-r--r--. 1 root root  37 Sep 30 21:54 test-zip-1.txt
-rw-r--r--. 1 root root  37 Sep 30 21:54 test-zip-2.txt
-rw-r--r--. 1 root root  37 Sep 30 21:54 test-zip-3.txt

Ở đây blogdpassword là mật khẩu được sử dụng để mã hóa cho thư mục chúng ta cần mã hóa. Một thư mục được tạo với tên test-blogd.zip với các tệp được nén bên trong là test-zip-1.txt, test-zip-2.txt, test-zip-3.txt.

Khi chúng ta muốn giải mã mật khẩu được nén thì sử dụng lệnh unzip sau đó nhập mật khẩu chúng ta đã tạo trong quá trình nén. Để kiểm chứng điều này chúng ta sẽ copy thư mục đã nén sang /opt/ sau đó thực thi lệnh unzip. Khi giải nén thành công chúng ta thấy có 3 tệp test-zip-1.txt, test-zip-2.txt, test-zip-3.txt.

[root@localhost ~]# cp test-blogd.zip /opt/
[root@localhost ~]# cd /opt/
[root@localhost opt]# ls -l
total 4
-rw-r--r--. 1 root root 685 Sep 30 23:21 test-blogd.zip
[root@localhost opt]# unzip test-blogd.zip
Archive:  test-blogd.zip
[test-blogd.zip] test-zip-1.txt password:
 extracting: test-zip-1.txt
 extracting: test-zip-2.txt
 extracting: test-zip-3.txt
[root@localhost opt]# ls -l
total 16
-rw-r--r--. 1 root root 685 Sep 30 23:21 test-blogd.zip
-rw-r--r--. 1 root root  37 Sep 30 21:54 test-zip-1.txt
-rw-r--r--. 1 root root  37 Sep 30 21:54 test-zip-2.txt
-rw-r--r--. 1 root root  37 Sep 30 21:54 test-zip-3.txt

5. Mã hóa bằng openssl

5.1. Giới thiệu và cài đặt openssl

OpenSSL là một công cụ thực hiện các chức năng mã hóa dòng lệnh có thể được sử dụng để mã hóa tin nhắn cũng như các tập tin với tiêu chuẩn giao thức mã hóa của SSL và TLS.

Nếu gói openssl không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Chạy lệnh sau để cài đặt gói openssl:

    root@ubuntuserver:~# apt-get install openssl
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer required:
    apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
    liblua5.2-0 ssl-cert
    Use 'apt autoremove' to remove them.
    The following packages will be upgraded:
    openssl
    ...
    
  • Đối với bản phân phối RHEL/CentOS:

    Chạy lệnh bên dưới để thực hiện cài đặt gói openssl:

    [root@localhost opt]# yum -y install openssl
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirrors.123host.vn
    * centos-sclo-rh: mirrors.123host.vn
    * centos-sclo-sclo: mirrors.123host.vn
    * epel: my.fedora.ipserverone.com
    * extras: mirrors.viethosting.com
    * updates: mirrors.viethosting.com
    Resolving Dependencies
    --> Running transaction check
    ---> Package openssl.x86_64 1:1.0.2k-16.el7_6.1 will be updated
    ...
    

5.2. Sử dụng openssl

Bước 1: Chúng ta thực hiện tạo một tệp có tên test-openssl.txt và xem nội dung tệp như sau:

[root@localhost ~]# echo "Hello blogd.net" > test-openssl.txt
[root@localhost ~]# cat test-openssl.txt
Hello blogd.net

Bước 2: Sau khi tạo tệp chúng ta thực hiện mã hóa tệp đã tạo trong quá trình tạo mã hóa chúng ta cần nhập mật khẩu 2 lần:

[root@localhost ~]# openssl enc -aes-256-cbc -in test-openssl.txt -out test.openssl.dat
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
[root@localhost ~]# ls -l
total 8
-rw-r--r--. 1 root root 48 Sep 30 23:27 test.openssl.dat
-rw-r--r--. 1 root root 16 Sep 30 23:25 test-openssl.txt

Trong đó các tùy chọn có ý nghĩa như sau:

  • enc: mã hóa.
  • -aes-256-cbc: thuật toán được sử dụng.
  • -in: đường dẫn đầy đủ của tệp sẽ được mã hóa.
  • -out: đường dẫn đầy đủ nơi nó sẽ được giải mã.

Tệp sau khi được mã hóa chúng ta sẽ không thể xem nội dung tệp được:

[root@localhost ~]# cat test.openssl.dat
Salted__��ao70n�Q��nD��]�)oݪ�T��+u��(�v'K[root@localhost ~]#

Bây giờ, chúng ta muốn giải mã tệp được mã hóa ở trên, chúng ta sử dụng lệnh openssl như sau. Để kiểm tra chính sác chúng ta thực hiện xóa tệp gốc trước khi giải mã và để lại tệp được mã hóa test.openssl.dat thực hiện như bên dưới:

[root@localhost ~]# rm -rf test-openssl.txt
[root@localhost ~]# ls -l
total 4
-rw-r--r--. 1 root root 48 Sep 30 23:27 test.openssl.dat
[root@localhost ~]# openssl enc -aes-256-cbc -d -in test.openssl.dat -out test-openssl-2.txt
enter aes-256-cbc decryption password:
[root@localhost ~]# ls -l
total 8
-rw-r--r--. 1 root root 48 Sep 30 23:27 test.openssl.dat
-rw-r--r--. 1 root root 16 Sep 30 23:28 test-openssl-2.txt
[root@localhost ~]# cat test-openssl-2.txt
Hello blogd.net

Khi giải mã chúng ta cần nhập đúng mật khẩu mà chúng ta đã tạo trong quá trình mã hóa.

6. Mã hóa bằng p7zip-full

6.1. Giới thiệu và cài đặt p7zip-full

7-Zip là một trình lưu trữ tệp miễn phí mã nguồn mở rất nổi tiếng được viết bằng C++ và có thể nén và giải nén hầu hết các định dạng tệp lưu trữ đã biết. Nó có tỷ lệ nén cao ở định dạng 7z với nén LZMA và LZMA2 ngoài ra còn hỗ trợ nhiều định dạng lưu trữ khác như XZ, BZIP2, GZIP, TAR, ZIP... Nó cung cấp mã hóa AES-256 mạnh mẽ ở các định dạng 7z và ZIP. Nó cũng đi kèm với khả năng tự giải nén cho định dạng 7z.

Nếu gói p7zip-full không có trên hệ thống của bạn, bạn có thể dễ dàng cài đặt như sau:

  • Đối với bản phân phối Debian/Ubuntu:

    Chạy lệnh sau để cài đặt gói p7zip-full:

    root@ubuntuserver:~# apt-get install p7zip-full
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages were automatically installed and are no longer required:
    apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 libjansson4
    liblua5.2-0 ssl-cert
    Use 'apt autoremove' to remove them.
    The following additional packages will be installed:
    p7zip
    Suggested packages:
    p7zip-rar
    ...
    
  • Đối với bản phân phối RHEL/CentOS:

    Chạy lệnh bên dưới để thực hiện cài đặt gói p7zip-full:

    [root@localhost ~]# yum -y install p7zip-full
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: mirrors.123host.vn
    * centos-sclo-rh: mirrors.123host.vn
    * centos-sclo-sclo: mirrors.123host.vn
    * epel: my.fedora.ipserverone.com
    * extras: mirrors.viethosting.com
    * updates: mirrors.viethosting.com
    ...
    

6.2. Sử dụng p7zip-full

Bước 1: Chúng ta cần tạo 3 tệp như sau:

[root@localhost ~]# echo " Hello Blogd.net test p7zip 1." > test-7zip-1.txt
[root@localhost ~]# echo " Hello Blogd.net test p7zip 2." > test-7zip-2.txt
[root@localhost ~]# echo " Hello Blogd.net test p7zip 3." > test-7zip-3.txt
[root@localhost ~]# ls -l
total 12
-rw-r--r--. 1 root root 31 Oct  1 21:52 test-7zip-1.txt
-rw-r--r--. 1 root root 31 Oct  1 21:52 test-7zip-2.txt
-rw-r--r--. 1 root root 31 Oct  1 21:52 test-7zip-3.txt

Bước 2: Sau khi tạo thành công 3 tệp như trên chúng ta tạo một thư mục zip được mã hóa chứa cả 3 tệp này bằng cách sử dụng lệnh 7za kết hợp với tùy chọn -t theo sau đó là tên định dạng, cho phép chúng ta chọn định dạng lưu trữ như zip, gzip, bzip2 hoặc tar nếu không chọn thì mặt định sẽ là 7z và tùy chọn -p là cờ để thiết lập mật khẩu như bên dưới:

[root@localhost ~]# 7za a -tzip -p -mem=AES256 blogdtest-7zip.zip test-7zip-1.txt test-7zip-2.txt test-7zip-3.txt

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R) Xeon(R) CPU           L5630  @ 2.13GHz (206C2),ASM,AES-NI)

Scanning the drive:
3 files, 93 bytes (1 KiB)

Creating archive: blogdtest-7zip.zip

Items to compress: 3


Enter password (will not be echoed):
Verify password (will not be echoed) :

Files read from disk: 3
Archive size: 691 bytes (1 KiB)
Everything is Ok
[root@localhost ~]# ls -l
total 16
-rw-r--r--. 1 root root 691 Oct  1 21:56 blogdtest-7zip.zip
-rw-r--r--. 1 root root  31 Oct  1 21:52 test-7zip-1.txt
-rw-r--r--. 1 root root  31 Oct  1 21:52 test-7zip-2.txt
-rw-r--r--. 1 root root  31 Oct  1 21:52 test-7zip-3.txt

Ở đây trong quá trình tạo chúng ta cần nhập mật khẩu 2 lần như trên. Sau khi tạo thành công thì thư mục được tạo với tên blogdtest-7zip.zip với các tệp được nén bên trong là test-7zip-1.txt, test-7zip-2.txt, test-7zip-3.txt.

Khi chúng ta muốn giải mã mật khẩu được nén thì sử dụng lệnh 7za với tùy chọn e sẽ trích xuất tệp lưu trữ trong thư mục làm việc hiện tại sau đó nhập mật khẩu chúng ta đã tạo trong quá trình nén. Để kiểm chứng điều này chúng ta sẽ copy thư mục đã nén sang /opt/ sau đó thực thi lệnh 7za. Khi giải nén thành công chúng ta thấy có 3 tệp test-7zip-1.txt, test-7zip-2.txt, test-7zip-3.txt.

[root@localhost ~]# cp blogdtest-7zip.zip /opt/
[root@localhost ~]# cd /opt/
[root@localhost opt]# ls -l
total 4
-rw-r--r--. 1 root root 691 Oct  1 21:56 blogdtest-7zip.zip
[root@localhost opt]# 7za e blogdtest-7zip.zip

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R) Xeon(R) CPU           L5630  @ 2.13GHz (206C2),ASM,AES-NI)

Scanning the drive for archives:
1 file, 691 bytes (1 KiB)

Extracting archive: blogdtest-7zip.zip
--
Path = blogdtest-7zip.zip
Type = zip
Physical Size = 691


Enter password (will not be echoed):
Everything is Ok

Files: 3
Size:       93
Compressed: 691
[root@localhost opt]# ls -l
total 16
-rw-r--r--. 1 root root 691 Oct  1 21:56 blogdtest-7zip.zip
-rw-r--r--. 1 root root  31 Oct  1 21:52 test-7zip-1.txt
-rw-r--r--. 1 root root  31 Oct  1 21:52 test-7zip-2.txt
-rw-r--r--. 1 root root  31 Oct  1 21:52 test-7zip-3.txt

7. Lời kết

Qua bài trên, giúp cho chúng ta hiểu hơn về mã hóa, giải mã và bảo vệ bằng mật khẩu với tập tin trên hệ điều hành Linux. Ngoài ra, bài viết trên còn hổ trợ chúng ta trong việc đặt mật khẩu nén thư mục trên Linux cùng với việc sử dụng các công cụ mã hóa đa dạng.