Tips en Trucs 2019

Bestanden en mappen versleutelen met Cipher

Versleutelen van bestanden en mappen is niet eenvoudig, maar met cipher is versleutelen kinderspel.

Bij het versleutelen (encrypteren) wordt een tekstbestand onleesbaar gemaakt. Een versleuteld bestand kan enkel gelezen worden door personen die de juiste versleutelingssleutel (wachtwoord) kennen. Versleutelen wordt veel gebruikt om bestanden met vertrouwelijke informatie over een netwerk te verzenden.

Cipher is een Ash module waarmee je bestanden en mappen eenvoudig met een aes-256-cbc encryptie kunt versleutelen.

Ash is een modulair Bash kader waarmee je eenvoudiger herbruikbare Bash scripts kunt schrijven. De modules zijn de fundamentele bouwstenen van Ash. Ze laten toe om terminalopdrachten en bibliotheken te schrijven die je in andere Ash modules kunt hergebruiken.

Cipher installeren

Cipher is een Bash script en vind je niet terug in de standaard softwarebronnen van openSUSE Leap 15.1. De ontwerper gebruikt Github, waardoor we eerst git installeren om Cipher van Github te kunnen downloaden:

dany@pindabook:~> sudo zypper install git
[sudo] wachtwoord voor root: 
Gegevens van opslagruimte laden...
Lezen van geïnstalleerde pakketten...
Pakketafhankelijkheden oplossen...

De volgende 25 NIEUWE pakketten zullen worden geïnstalleerd:
  bash-completion-devel cvs cvsps git git-core git-cvs git-email git-gui gitk git-svn git-web libpcre2-8-0
  libsha1detectcoll1 libsvn_auth_kwallet-1-0 libutf8proc2 perl-Authen-SASL perl-DBD-SQLite perl-DBI perl-Digest-HMAC
  perl-Error perl-Net-SMTP-SSL subversion subversion-bash-completion subversion-perl tk

De volgende 8 aanbevolen pakketten zijn automatisch geselecteerd:
  git-cvs git-email git-gui gitk git-svn perl-Authen-SASL perl-Net-SMTP-SSL subversion-bash-completion

Het volgende pakket wordt gesuggereerd, maar zal niet worden geïnstalleerd:
  git-daemon

25 nieuwe te installeren pakketten.
Totale downloadgrootte: 14,5 MiB. Reeds in de cache: 0 B. Na de bewerking zal aanvullend 59,0 MiB worden gebruikt.
Doorgaan? [j/n/v/...? alle opties tonen] (j): 
pakket bash-completion-devel-2.7-lp151.4.1.noarch wordt opgehaald            (1/25),  31,4 KiB (  292   B uitgepakt)
Ophalen: bash-completion-devel-2.7-lp151.4.1.noarch.rpm ....................................................[gereed]
pakket cvs-1.12.12-lp151.2.4.x86_64 wordt opgehaald                          (2/25), 405,1 KiB (966,5 KiB uitgepakt)
Ophalen: cvs-1.12.12-lp151.2.4.x86_64.rpm ..................................................................[gereed]
pakket cvsps-2.1-lp151.2.3.x86_64 wordt opgehaald                            (3/25),  63,0 KiB (128,6 KiB uitgepakt)
Ophalen: cvsps-2.1-lp151.2.3.x86_64.rpm ....................................................................[gereed]
pakket libpcre2-8-0-10.31-lp151.2.3.x86_64 wordt opgehaald                   (4/25), 235,5 KiB (648,1 KiB uitgepakt)
Ophalen: libpcre2-8-0-10.31-lp151.2.3.x86_64.rpm ...........................................................[gereed]
pakket libsha1detectcoll1-1.0.3-lp151.3.3.x86_64 wordt opgehaald             (5/25),  23,1 KiB ( 45,8 KiB uitgepakt)
Ophalen: libsha1detectcoll1-1.0.3-lp151.3.3.x86_64.rpm .....................................................[gereed]
pakket libutf8proc2-2.1.0-lp151.2.2.x86_64 wordt opgehaald                   (6/25),  58,9 KiB (308,7 KiB uitgepakt)
Ophalen: libutf8proc2-2.1.0-lp151.2.2.x86_64.rpm ...........................................................[gereed]
pakket perl-DBI-1.639-lp151.2.3.x86_64 wordt opgehaald                       (7/25), 746,5 KiB (  2,1 MiB uitgepakt)
Ophalen: perl-DBI-1.639-lp151.2.3.x86_64.rpm ...............................................................[gereed]
pakket perl-Digest-HMAC-1.03-lp151.2.1.noarch wordt opgehaald                (8/25),  16,4 KiB ( 10,5 KiB uitgepakt)
Ophalen: perl-Digest-HMAC-1.03-lp151.2.1.noarch.rpm ........................................................[gereed]
pakket perl-Error-0.17025-lp151.2.1.noarch wordt opgehaald                   (9/25),  40,5 KiB ( 70,5 KiB uitgepakt)
Ophalen: perl-Error-0.17025-lp151.2.1.noarch.rpm ...........................................................[gereed]
pakket perl-Net-SMTP-SSL-1.04-lp151.2.1.noarch wordt opgehaald              (10/25),  12,4 KiB (  4,4 KiB uitgepakt)
Ophalen: perl-Net-SMTP-SSL-1.04-lp151.2.1.noarch.rpm .............................................[gereed (994 B/s)]
pakket tk-8.6.7-lp151.2.3.x86_64 wordt opgehaald                            (11/25),   1,7 MiB (  4,6 MiB uitgepakt)
Ophalen: tk-8.6.7-lp151.2.3.x86_64.rpm .....................................................................[gereed]
pakket subversion-1.10.0-lp151.3.6.x86_64 wordt opgehaald                   (12/25),   2,7 MiB (  9,8 MiB uitgepakt)
Ophalen: subversion-1.10.0-lp151.3.6.x86_64.rpm ............................................................[gereed]
pakket perl-DBD-SQLite-1.54-lp151.2.3.x86_64 wordt opgehaald                (13/25),   1,9 MiB (  8,6 MiB uitgepakt)
Ophalen: perl-DBD-SQLite-1.54-lp151.2.3.x86_64.rpm .............................................[gereed (3,2 MiB/s)]
pakket perl-Authen-SASL-2.16-lp151.2.1.noarch wordt opgehaald               (14/25),  53,2 KiB ( 96,8 KiB uitgepakt)
Ophalen: perl-Authen-SASL-2.16-lp151.2.1.noarch.rpm ........................................................[gereed]
pakket git-core-2.16.4-lp151.3.4.x86_64 wordt opgehaald                     (15/25),   3,9 MiB ( 23,2 MiB uitgepakt)
Ophalen: git-core-2.16.4-lp151.3.4.x86_64.rpm ..................................................[gereed (7,3 MiB/s)]
pakket subversion-bash-completion-1.10.0-lp151.3.6.noarch wordt opgehaald   (16/25),  35,6 KiB ( 47,8 KiB uitgepakt)
Ophalen: subversion-bash-completion-1.10.0-lp151.3.6.noarch.rpm ............................................[gereed]
pakket gitk-2.16.4-lp151.3.4.x86_64 wordt opgehaald                         (17/25), 247,0 KiB (735,0 KiB uitgepakt)
Ophalen: gitk-2.16.4-lp151.3.4.x86_64.rpm ..................................................................[gereed]
pakket git-web-2.16.4-lp151.3.4.x86_64 wordt opgehaald                      (18/25), 195,5 KiB (322,5 KiB uitgepakt)
Ophalen: git-web-2.16.4-lp151.3.4.x86_64.rpm ...............................................................[gereed]
pakket git-gui-2.16.4-lp151.3.4.x86_64 wordt opgehaald                      (19/25), 311,3 KiB (  1,2 MiB uitgepakt)
Ophalen: git-gui-2.16.4-lp151.3.4.x86_64.rpm ...............................................................[gereed]
pakket git-email-2.16.4-lp151.3.4.x86_64 wordt opgehaald                    (20/25), 139,4 KiB ( 59,9 KiB uitgepakt)
Ophalen: git-email-2.16.4-lp151.3.4.x86_64.rpm .............................................................[gereed]
pakket git-cvs-2.16.4-lp151.3.4.x86_64 wordt opgehaald                      (21/25), 178,5 KiB (215,5 KiB uitgepakt)
Ophalen: git-cvs-2.16.4-lp151.3.4.x86_64.rpm ...............................................................[gereed]
pakket subversion-perl-1.10.0-lp151.3.6.x86_64 wordt opgehaald              (22/25), 922,7 KiB (  4,9 MiB uitgepakt)
Ophalen: subversion-perl-1.10.0-lp151.3.6.x86_64.rpm .......................................................[gereed]
pakket libsvn_auth_kwallet-1-0-1.10.0-lp151.3.6.x86_64 wordt opgehaald      (23/25),  29,9 KiB ( 18,6 KiB uitgepakt)
Ophalen: libsvn_auth_kwallet-1-0-1.10.0-lp151.3.6.x86_64.rpm ...............................................[gereed]
pakket git-svn-2.16.4-lp151.3.4.x86_64 wordt opgehaald                      (24/25), 645,4 KiB (  1,2 MiB uitgepakt)
Ophalen: git-svn-2.16.4-lp151.3.4.x86_64.rpm ...............................................................[gereed]
pakket git-2.16.4-lp151.3.4.x86_64 wordt opgehaald                          (25/25), 117,9 KiB (  2,9 KiB uitgepakt)
Ophalen: git-2.16.4-lp151.3.4.x86_64.rpm ...................................................................[gereed]
Controleren op conflicten tussen bestanden: ................................................................[gereed]
( 1/25) Installeren van: bash-completion-devel-2.7-lp151.4.1.noarch ........................................[gereed]
( 2/25) Installeren van: cvs-1.12.12-lp151.2.4.x86_64 ......................................................[gereed]
( 3/25) Installeren van: cvsps-2.1-lp151.2.3.x86_64 ........................................................[gereed]
( 4/25) Installeren van: libpcre2-8-0-10.31-lp151.2.3.x86_64 ...............................................[gereed]
( 5/25) Installeren van: libsha1detectcoll1-1.0.3-lp151.3.3.x86_64 .........................................[gereed]
( 6/25) Installeren van: libutf8proc2-2.1.0-lp151.2.2.x86_64 ...............................................[gereed]
( 7/25) Installeren van: perl-DBI-1.639-lp151.2.3.x86_64 ...................................................[gereed]
( 8/25) Installeren van: perl-Digest-HMAC-1.03-lp151.2.1.noarch ............................................[gereed]
( 9/25) Installeren van: perl-Error-0.17025-lp151.2.1.noarch ...............................................[gereed]
(10/25) Installeren van: perl-Net-SMTP-SSL-1.04-lp151.2.1.noarch ...........................................[gereed]
(11/25) Installeren van: tk-8.6.7-lp151.2.3.x86_64 .........................................................[gereed]
(12/25) Installeren van: subversion-1.10.0-lp151.3.6.x86_64 ................................................[gereed]
Aanvullende rpm-uitvoer:
Updating /etc/sysconfig/svnserve ...


(13/25) Installeren van: perl-DBD-SQLite-1.54-lp151.2.3.x86_64 .............................................[gereed]
(14/25) Installeren van: perl-Authen-SASL-2.16-lp151.2.1.noarch ............................................[gereed]
(15/25) Installeren van: git-core-2.16.4-lp151.3.4.x86_64 ..................................................[gereed]
(16/25) Installeren van: subversion-bash-completion-1.10.0-lp151.3.6.noarch ................................[gereed]
(17/25) Installeren van: gitk-2.16.4-lp151.3.4.x86_64 ......................................................[gereed]
(18/25) Installeren van: git-web-2.16.4-lp151.3.4.x86_64 ...................................................[gereed]
(19/25) Installeren van: git-gui-2.16.4-lp151.3.4.x86_64 ...................................................[gereed]
(20/25) Installeren van: git-email-2.16.4-lp151.3.4.x86_64 .................................................[gereed]
(21/25) Installeren van: git-cvs-2.16.4-lp151.3.4.x86_64 ...................................................[gereed]
(22/25) Installeren van: subversion-perl-1.10.0-lp151.3.6.x86_64 ...........................................[gereed]
(23/25) Installeren van: libsvn_auth_kwallet-1-0-1.10.0-lp151.3.6.x86_64 ...................................[gereed]
(24/25) Installeren van: git-svn-2.16.4-lp151.3.4.x86_64 ...................................................[gereed]
(25/25) Installeren van: git-2.16.4-lp151.3.4.x86_64 .......................................................[gereed]

Ash installeren

Cipher is gebaseerd op Ash, dus installeren we eerst Ash. We beginnen met het downloaden van de broncode van Github:

dany@pindabook:~> git clone --recursive https://github.com/ash-shell/ash.git
Cloning into 'ash'...
remote: Enumerating objects: 384, done.
remote: Total 384 (delta 0), reused 0 (delta 0), pack-reused 384
Receiving objects: 100% (384/384), 54.85 KiB | 567.00 KiB/s, done.
Resolving deltas: 100% (163/163), done.
Submodule 'core_modules/github.com/ash-shell/apm' (https://github.com/ash-shell/apm.git) registered for path 'core_modules/github.com/ash-shell/apm'
Submodule 'core_modules/github.com/ash-shell/env' (https://github.com/ash-shell/env.git) registered for path 'core_modules/github.com/ash-shell/env'
Submodule 'core_modules/logger' (https://github.com/ash-shell/logger.git) registered for path 'core_modules/github.com/ash-shell/logger'
Submodule 'core_modules/obj' (https://github.com/ash-shell/obj.git) registered for path 'core_modules/github.com/ash-shell/obj'
Submodule 'core_modules/github.com/ash-shell/test' (https://github.com/ash-shell/test.git) registered for path 'core_modules/github.com/ash-shell/test'
Submodule 'core_modules/yaml-parse' (https://github.com/ash-shell/yaml-parse.git) registered for path 'core_modules/github.com/ash-shell/yaml-parse'
Cloning into '/home/dany/ash/core_modules/github.com/ash-shell/apm'...
remote: Enumerating objects: 3, done.        
remote: Counting objects: 100% (3/3), done.        
remote: Compressing objects: 100% (3/3), done.        
remote: Total 148 (delta 0), reused 0 (delta 0), pack-reused 145        
Receiving objects: 100% (148/148), 22.25 KiB | 1.85 MiB/s, done.
Resolving deltas: 100% (79/79), done.
Cloning into '/home/dany/ash/core_modules/github.com/ash-shell/env'...
remote: Enumerating objects: 19, done.        
remote: Total 19 (delta 0), reused 0 (delta 0), pack-reused 19        
Cloning into '/home/dany/ash/core_modules/github.com/ash-shell/logger'...
remote: Enumerating objects: 3, done.        
remote: Counting objects: 100% (3/3), done.        
remote: Compressing objects: 100% (3/3), done.        
remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 70        
Cloning into '/home/dany/ash/core_modules/github.com/ash-shell/obj'...
remote: Enumerating objects: 3, done.        
remote: Counting objects: 100% (3/3), done.        
remote: Compressing objects: 100% (3/3), done.        
remote: Total 111 (delta 0), reused 0 (delta 0), pack-reused 108        
Receiving objects: 100% (111/111), 17.35 KiB | 3.47 MiB/s, done.
Resolving deltas: 100% (56/56), done.
Cloning into '/home/dany/ash/core_modules/github.com/ash-shell/test'...
remote: Enumerating objects: 4, done.        
remote: Counting objects: 100% (4/4), done.        
remote: Compressing objects: 100% (3/3), done.        
remote: Total 33 (delta 1), reused 1 (delta 1), pack-reused 29        
Cloning into '/home/dany/ash/core_modules/github.com/ash-shell/yaml-parse'...
remote: Enumerating objects: 58, done.        
remote: Total 58 (delta 0), reused 0 (delta 0), pack-reused 58        
Submodule path 'core_modules/github.com/ash-shell/apm': checked out 'b054e1536e47287a36f2962ba7aea2f199f27ab2'
Submodule path 'core_modules/github.com/ash-shell/env': checked out 'd86468bb3acf1ced62e7e95041a90b0fc12d606a'
Submodule path 'core_modules/github.com/ash-shell/logger': checked out '3f0c4299bbfa2b592bd4e70c1bb03fb81100765c'
Submodule path 'core_modules/github.com/ash-shell/obj': checked out '8525a072bc18b7698cfab5f9b352170523105ca1'
Submodule path 'core_modules/github.com/ash-shell/test': checked out 'd0fc3b6df0475c1f8ab6d1da7dc8df0186423c73'
Submodule path 'core_modules/github.com/ash-shell/yaml-parse': checked out '3f8465fa588a57f27f6ee0e84c0d3fe74531325f'

Daarna moeten we de gedownloade software beschikbaar maken voor de gebruiker. Om software beschikbaar te maken voor een gebruiker, moeten we nagaan in welke mappen uitvoerbare opdrachten staan:

dany@pindabook:~> echo $PATH
/home/dany/bin:/usr/local/bin:/usr/bin:/bin

De eerste map /home/dany/bin is de map waar uitvoerbare opdrachten staan die enkel door de gebruiker dany gebruikt kunnen worden. Systeemsoftware (voor alle gebruikers) staat in de andere twee mappen en kan je enkel installeren als root gebruiker (systeembeheerder). De veiligste manier om software te testen (en te gebruiken) is werken als gewone gebruiker (dany) met beperkte rechten. We maken Ash beschikbaar voor de gebruiker dany door een koppeling naar de gedownloade software te maken:

dany@pindabook:~> ln -s ~/ash/ash ~/bin/

De ~ tekens worden door de terminal automatisch vervangen door de persoonlijke map van de huidige gebruiker (in het voorbeeld: /home/dany).

Cipher installeren

Nu Ash geïnstalleerd is, kunnen we Cipher installeren:

dany@pindabook:~> ash apm:install https://github.com/ash-shell/cipher.git
<< apm >>: Installing https://github.com/ash-shell/cipher.git

Versleutelen met Cipher

Een bestand met cipher versleutelen

Als testbestand maken we een tekstbestand aan:

dany@pindabook:~> echo "Dit is een testbestand voor Cipher" > testbestand.txt

Als controle bekijken we de inhoud ervan:

dany@pindabook:~> more testbestand.txt 
Dit is een testbestand voor Cipher

Het testbestand versleutel (encrypt) je met een wachtwoord met de opdracht:

dany@pindabook:~> ash cipher:e testbestand.txt 
<< cipher >>: Enter encryption password: 
<< cipher >>: Confirm encryption password: 
<< cipher >>: File encrypted at testbestand.txt.enc
dany@pindabook:~> more testbestand.txt.enc 
U2FsdGVkX1/87t7SGsn0RURH5o/4e4mkHPZrxXMY78750dD8ICJ3EMFtVWQXxjQY
p4Cu6ImVEFKn/2W/HLw3qg==

Zoals je merkt kan je de inhoud van het testbestand niet meer lezen.

Het versleutelde bestand ontsleutelen

Om het testbestand te kunnen lezen, moet je het eerst met het wachtwoord ontsleutelen (decrypt):

dany@pindabook:~> ash cipher:d testbestand.txt.enc 
<< cipher >>: Enter decryption password: 
<< cipher >>: File decrypted at testbestand.txt
dany@pindabook:~> more testbestand.txt 
Dit is een testbestand voor Cipher

En het testbestand kan terug gelezen worden. Let ook op de bestandnaam (extensie): aan een versleuteld bestand werd .enc aan de bestandnaam toegevoegd. Het niet ontsleutelde bestand krijgt opnieuw de oorspronkelijke bestandsnaam.

Een volledige map versleutelen

Weer zorgen we voor een testmap (mkdir) en verplaatsen (mv) we het tekstbestand naar de testmap:

dany@pindabook:~> mkdir testmap
dany@pindabook:~> mv testbestand.txt testmap/
dany@pindabook:~> ls testmap/
testbestand.txt

De ls opdracht toont de inhoud van de testmap.

De map en zijn inhoud versleutel je met een wachtwoord met de opdracht:

dany@pindabook:~> ash cipher:e testmap/
<< cipher >>: Enter encryption password: 
<< cipher >>: Confirm encryption password: 
<< cipher >>: Directory encrypted at testmap.tar.gz.enc

Bij het openen van de versleutelde map, krijg je de volgende foutmelding:

dany@pindabook:~> cd testmap.tar.gz.enc
-bash: cd: testmap.tar.gz.enc: Is geen map

Bij het versleutelen van de map wordt de map en zijn inhoud in één bestand opgeslagen. Bekijk je de inhoud van de versleutelde map, dan merk je dat deze niet leesbaar is:

dany@pindabook:~> more testmap.tar.gz.enc
U2FsdGVkX193KWWvL9E41ZYJDtP0Ir0LY6tcS2n4hVL1+9ov9+Dv7WymxJ1pE7z2
zMxLj6VCxsQDFTBW+2TFYAzOXPRaNUX1VDkR2/S4MIYQRQV52UaK/BySrQFKycwx
A3A4ZqEcbDFPassE08DgfGKv+M9lQDacMeCfglpqPQbMi8JGmmnlcPFzP1VWwT8j
gvM8bL7w4JjlwDTjflS79vS/hoGHNpALbey8HIKC3J7OQgFMAMpooy7JewZ9ZXBp
Nf6e9vrp68Z65fja+RZwfDcmJWO+CNGrmrvIr6R2c9qxvMFFny14ALb4KyIhR0ul
xlRi1WGPQENWQELOtmgEUtC18awjgbGLz+RoC6J0RliBixIRCI2IUEDk5bf7d3OG
7U6gw3tYA5QYhtLXdTnzpEgYuZokHrWBYFhrCpWpSjzLISb3GBvwfifnOurxpXQ4
gq0M9hLek5gSX7/uCcStOA==

Je kunt de inhoud van de map pas terug raadplegen door deze eerst met het juiste wachtwoord te ontsleutelen:

dany@pindabook:~> ash cipher:d testmap.tar.gz.enc 
<< cipher >>: Enter decryption password: 
<< cipher >>: Directory decrypted at testmap/

De ontsleutelde map te openen en de inhoud weer te geven:

dany@pindabook:~> cd testmap/
dany@pindabook:~/testmap> ls -l
totaal 4
-rw-r--r-- 1 dany users 35 28 jun 10:53 testbestand.txt

Ook de inhoud van het in de ontsleutelde map opgeslagen tekstbestand is terug te lezen:

dany@pindabook:~/testmap> more testbestand.txt 
Dit is een testbestand voor Cipher

De ontsleutelde map verlaat je terug met de opdracht:

dany@pindabook:~/testmap> cd ..

Opruimen

Testbestand en -map opruimen

De testmap met het testbestand verwijder je met:

dany@pindabook:~> rm -r testmap/
Cipher

Cipher en Ash verwijderen

Eerst verwijderen we Cipher. Open de map met de Ash modules:

dany@pindabook:~> cd ash_modules/

Het configuratiebestand module_aliases.yaml bevat per actieve module een regel. We deactiveren Cipher door deze regel te verwijderen:

dany@pindabook:~/ash_modules> sed -i.bak '/cipher/d' ./module_aliases.yaml

Als backup maakt deze opdracht een kopie (.bak) voor de Cipher regel verwijderd wordt. Je weet maar nooit.

dany@pindabook:~/ash_modules> sed -i.bak '/cipher/d' ./module_aliases.yaml

Daarna kan je de map met de Cipher module verwijderen:

dany@pindabook:~/ash_modules> rm -rf github.com/ash-shell/cipher/

En als je geen enkele Ash module meer gebruikt en je het Ash Bash kader niet meer gebruikt, kan je Ash zelf ook verwijderen:

dany@pindabook:~> rm -rf ash/
dany@pindabook:~> rm -rf ash_modules/