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 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]
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).
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
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.
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.
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 ..
De testmap met het testbestand verwijder je met:
dany@pindabook:~> rm -r testmap/
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/