Ik Van Linux

Hulpmiddelen voor hulpverleners


Zoals ik al zei help ik graag mensen, die zelf ook enthousiast over Linux zijn of willen worden. En dan met name mensen die meer willen weten dan de standaard desktop toepassingen. Denk daarbij aan werken met een Raspberry Pi, of het zelf hosten van interessante toepassingen. En vergeet ook de huis automatisering niet.
Dat helpen doe ik het liefste van persoon tot persoon. Ik ben normaal gesproken op de donderdagmiddag in de Lochal bibliotheek in Tilburg te vinden in het Digilab. En twee maal in de maand op de bijeenkomsten van de HCC Midden Brabant in Tilburg.

De uitleg is meestal op de praktijk gericht. Dat wil zeggen dat we de theorie meteen in de praktijk gaan brengen op de computer van de gast. Dat kan diens laptop zijn, maar het kan ook zijn/haar server zijn waar we wat op willen gaan doen.
De gast heeft, als het goed is, volledige toegang tot die computers. Maar ik, als hulpverlener, kan daar meestal niet bij. Ik heb geen account op die computer en ik kan er vaak niet eens bij omdat ik niet in het netwerk van de gast kan komen.

De gemakkelijkste manier, voor mij, is om steeds de laptop van de gast uit zijn/haar handen te trekken om er zelf wat op te typen. Dat is lastig voor de gast en voor mij. Ik zit dan meestal niet recht voor het toetsenbord, waardoor het toetsenbord nog meer verkeerde toetsen pleegt te krijgen dan het normaal al heeft. En het liefste laat ik de gast zelf zo veel mogelijk doen. Daar leer je tenslotte het meeste van.
En hoe stuur ik een voorgefabriceerd bestand gemakkelijk naar de gast? Via email misschien? Dat is niet echt handig. Of hoe krijg ik een URL met lange, lastig te typen parameters naar de computer van de gast?

Daarom wil ik hier een vier tal hulpmiddelen aan je voorstellen die ik graag pleeg te gebruiken. Hopelijk heb jij ook wat aan die hulpmiddelen.

Lastige teksten heen weer kopiëren en plakken


Laat ik maar met het gemakkelijkste hulpmiddel beginnen. Vaak moet de leerling een stuk tekst over typen. Kopiëren plakken zou dan gemakkelijker zijn.

Denk hierbij aan een lastig terminal commando, of een public key, of een lastig te typen URL. Meestal is het gewoon platte tekst.

Je kunt die platte tekst in een bestandje stoppen en dan het bestandje oversturen. Maar dat is eigenlijk een stapje te veel. Er is een makkelijkere methode.

Etherpad

Etherpad is een open source toepassing, waarmee je met meerdere mensen tegelijk in een openbare webpagina kunt typen. Je kunt het beschouwen als een online openbaar kladblok.

Je kunt Etherpad zelf hosten, bijvoorbeeld als een Docker container. Je zou daarvoor kunnen kiezen als je heel paranoïde bent over de veiligheid. Maar daarover dadelijk meer.
Het is echter veel gemakkelijker om gebruik te maken van een van de vele openbare Etherpad aanbieders.

Ik kies voor dat laatste. Voor die paar keer per maand dat het wil gebruiken heb ik geen zin om het zelf te gaan hosten en onderhouden. Gemakzucht heet dat.

Freeshell.de

Ik maak graag gebruik van Etherpad van Freeshell.de. Freeshell.de is eigenlijk een gratis Linux Shell hoster, die al sinds 2002 deze dienst aanbiedt. De dienst is in de jaren steeds verder uitgebreid. En daar is nu de Etherpad dienst bijgekomen. Het is gratis en je hoeft jezelf niet eens aan te melden.

Freeshell.de is een echte aanrader. Meldt je gratis aan. Het enige wat van je gevraagd wordt is om een ansichtkaart te versturen. Dat is een ludieke kleine drempel om te belemmeren dat er misbruik van het systeem gemaakt wordt.

Op het moment van dit schrijven krijg je een zeer royale 42GB harde schijf quota voor je shell account. En je krijgt er nog eens 42GB bij voor een gratis Open Cloud account. Verder kun je gratis een website hosten, inclusief het gebruik van een eveneens gratis MySQL database (onbeperkte grootte, maar fair use). Ook krijg je een freeshell.de email adres. En sinds kort kun je er zelfs Docker containers draaien, via Podman, waardoor je van alles zelf kunt hosten.

Tot zo ver de reclame. Het ging om Etherpad. Ga naar https://pad.freeshell.de en daar kun je zelf een naam geven aan je kladblok, of je kunt een willekeurige naam laten genereren.

Etherpad start

De naam is de toegangssleutel tot je kladblok. Iedereen met die naam kan dus meelezen en mee typen. Gebruik je de naam test dan zie je waarschijnlijk een hoop rommel die mensen als test hebben ingetypt.
Gebruik je een moeilijk te raden naam, dan ben je redelijk anoniem bezig.

De leerling/gast opent diezelfde pagina. En dan kun je gewoon teksten heen weer kopiëren en plakken.

Iedere deelnemer krijgt een kleur en een naam. Rechts boven is te zien wie er allemaal op de pagina bezig zijn. Je kunt daarbij je eigen naam en kleur aanpassen, als je dat leuk vindt. Nodig is het natuurlijk niet.

Etherpad welkom

Veiligheid

Let op! De kladblok is dus openbaar. Iedereen die de naam van de kladblok weet kan meelezen en ook mee typen. Gebruik daarom een niet te korte naam voor je kladblok. Die zijn te gemakkelijk te raden.

Bedenk ook dat je de gehele geschiedenis van het kladblok kunt terughalen. Dus snel een geheim stukje uitwissen heeft niet veel zin. Voorkom gewoon dat er geheime dingen mee uitgewisseld worden.

Rechts bovenin zie je wat icoontjes. Met het tandwieltje kun je de kladblok wissen, als je dat wil. Misschien doe je dat liever nog niet, zodat je leerling thuis nog wat naslagwerk heeft.
Maar bedenk dat de eigenaar van de dienst eventueel nog een reserve kopie kan hebben liggen van je kladblok.

Er wordt geen garantie gegeven dat een kladblok het eeuwige leven heeft. Daarom kun je de inhoud ervan ook downloaden als archief.

De moraal van dit verhaal: Type of plak geen dingen die je geheim wilt houden in Etherpad. Daar is het volgende hulpmiddel veel beter voor geschikt.

Geheimen heen weer kopiëren en plakken


Etherpad is een schitterend hulpmiddel om stukken tekst met elkaar uit te wisselen. Eenvoudiger gaat bijna niet. Maar zoals we net al gezien hebben is het niet geschikt voor het versturen van geheimen, zoals wachtwoorden en sleutels.

Daarom wil ik nu het tweede hulpmiddel aan je voor stellen:

Password pusher

Met Pwpush kun je op een veilige manier geheimen versturen. Deze dienst is ook open source en je kunt het ook zelf hosten. Maar daar doe ik ook de moeite niet voor. Ik gebruik Pwpush misschien wel vaker dan Etherpad, maar nou ook weer niet zo vaak dat ik het nodig vind om het zelf te hosten.

Het idee achter Pwpush is dat je een geheim stukje tekst, meestal een wachtwoord of private key, in de webbrowser plakt en Pwpush maakt daar dan een link van, die je naar een of meerdere anderen kunt sturen. Hoe je dat stuurt mag je zelf weten. Per mail, per chat programma, of zelfs via Etherpad.
Je kunt instellen hoe vaak de ontvanger de link mag openen en hoe lang de link geldig blijft. Op die manier kun je dus de beschikbaarheid beperken, waardoor hackers minder tijd krijgen om de link te onderscheppen.

Gebruiksaanwijzing

Dit is maar een momentopname. Het kan zijn dat de interface met het programma in de toekomst gaat wijzigen. Hopelijk zal zo'n wijziging niet zo drastisch zijn dat je niet meer weet hoe het werkt.

Een geheime link aanmaken en verzenden

Ga naar eu.pwpush.com, de start pagina voor Europesche klanten.

Het is mogelijk om je aan te melden en in te loggen, maar dat hoeft niet perse (tot nu toe). Ik gebruik Pwpush altijd zonder aanmelding.
Speciaal voor dit verhaal heb ik me nu wel aangemeld. En het enige verschil wat ik tot nu toe zie is dat ik nu ook bestanden kan versturen met Pwpush. Maar daar zijn genoeg andere methoden voor, zie verderop in dit verhaal.

Pwpush welkomstscherm


Klik nu op Try out without an account. We gaan nu een Pwpush link maken.

Pwpush vul hier je geheim in

Vul in het Secret text veld het geheim in wat je wil versturen. Zorg dat je niet verraadt waar het geheim voor dient. Hoe minder informatie je hier invult, hoe minder houvast een hacker heeft om er iets mee te kunnen.

In het vak Expiration kun je de levensduur en het aantal bezichtigingen van de link invullen. Zit je gast naast je, zet dan de levensduur op 15 minuten. Wanneer je niet weet of de ontvanger de link meteen kan verwerken, dan zet je de levensduur beter iets langer. Drie dagen is meestal wel genoeg denk ik.

Zet het aantal keren dat de link bekeken mag worden niet te laag. Sommige chat programma's, zoals Slack, vinden het leuk om een plaatje van de website toe te voegen als ze een link zien. Dat plaatje telt dan al mee als eerste bezoek.

Vooral het aantal keren dat de link gebruikt mag worden en de beperkte levensduur ervan is een sterk beveiligingsmiddel. Als je een wachtwoord in plain text per email naar iemand stuurt, dan is de kans groot dat het wachtwoord voor eeuwig in de ontvanger zijn email box rond blijft slingeren.
Dat kan ook gebeuren met de link, maar die is na het verstrijken van de levensduur niet meer te gebruiken.

Je kunt eventueel een Passphrase Lockdown ingeven. De geheime informatie wordt dan nog eens extra beveiligd met een wachtwoord. De ontvanger moet dat wachtwoord natuurlijk wel kennen om het bericht te kunnen decrypten. Die passphrase kun je op een normale manier met de ontvanger communiceren, want die passphrase is even beperkt houdbaar als de link zelf.

Klik tenslotte op Push it en je komt in het laatste scherm terecht.

Pwpush de geheime link

Hier zie je de Secret Link. Je kunt die kopiëren en in een mail, chat of Etherpad bericht plakken. De ontvanger zou het zelfs lekker retro ook over kunnen typen.
Je kunt zelfs een QR code scannen of downloaden. Maar dat werkt alleen op mobiele apparaten. Niet echt onze use case lijkt me.

Een geheime link openen

De ontvanger opent de link in de browser en krijgt dan de volgende pagina te zien (als hij/zij op tijd is):

Pwpush overbodige pagina

Wat mij betreft hadden ze deze stap over mogen slaan. Het voegt niet heel veel toe. Het kan alleen maar verwarring veroorzaken wanneer de ontvanger niet helemaal weet wat de bedoeling van de link is. Maar laten we maar gewoon doen wat er van ons gevraagd wordt.

Pwpush toon het geheim

Nu wordt het interessanter. Je ziet dat de tekst nog vervaagd is. Dat kan handig zijn als er iemand achter je staat die mee kan lezen wat er gebeurt, of er stiekem een foto van kan maken.
Wanneer je in het vervaagde kader klikt wordt de geheime tekst weergegeven. Je zou het dan kunnen selecteren en kopiëren. De tekst vervaagt weer vanzelf als je lang genoeg niets doet.
Je hoeft de tekst niet te bekijken als je dat niet nodig vindt. Je kunt meteen op het Copy to clipboard knopje klikken. Dat werkt, zelfs met een nog vervaagde tekst.

Voor de veiligheid kun je daarna ook nog op de Delete This Secret Link Now knopje klikken om de link meteen ongeldig te maken. Maar ik betwijfel of veel ontvangers dat ook werkelijk ooit doen.

Veiligheid

Maar dit is toch ook een openbare dienst? Is dat wel veilig dan?

Het antwoord daarop is afhankelijk van hoe je ermee omgaat. Pwpush is open source, dus als je erop vertrouwt dat Pwpush geen stiekeme achterdeurtjes heeft ingebouwd in zijn eigen versie, dan is de software veilig. De geheimen worden namelijk encrypted opgeslagen in de database van de server. Zodra het geheim aan het einde van zijn leven komt wordt deze uit de database verwijderd. Je mag er dus van uitgaan dat niemand mee kan lezen.

Maar wat nu als er wel iemand kan meelezen? Dan moet jij er gewoon voor zorgen dat de informatie niet compleet is. Stel voor dat je de login gegevens voor een server naar iemand anders wilt versturen. Daarvoor heb je de bestemming nodig, de gebruikersnaam en het wachtwoord.
Het is natuurlijk niet slim om die gegevens allemaal bij Pwpush in te vullen. Mocht iemand de link op tijd onderscheppen, dan ben je de pineut. Nee, de bestemming en de gebruikersnaam communiceer je op een normale manier met je tegenpartij. Alleen het wachtwoord verstuur je via Pwpush. Een onbekende kan daar niets mee, het is onmogelijk om te weten waar dat wachtwoord voor dient.

Je kunt nog een klein stapje verder gaan en bijvoorbeeld een of meerdere letters aan het einde van het wachtwoord toevoegen. De ontvanger moet die letters dan wissen voordat het wachtwoord gebruikt kan worden.

Bestanden versturen met croc


Vaak bestaat de behoefte om snel even een bestand, of een paar bestanden tegelijk naar de ander te sturen. Maar hoe doe je dat snel even wanneer de twee computers niet samen in hetzelfde netwerk zitten?

Je zou gebruik kunnen maken van file transfer websites zoals Wormhole, Swisstransfer, of Transfer.it. Maar dat gaat niet werken wanneer tenminste een van de twee computers geen grafische user interface heeft.

Er bestaat gelukkig een heel leuk, cross platform CLI tooltje met de naam croc.

Op github staat hoe je het programma kunt instaleren. Onder Linux doe je dat bijvoorbeeld als volgt:

curl https://getcroc.schollz.com | bash

Het programma werkt zowel op Intel/AMD als op ARM. Dus het werkt ook op je Raspberry pi.

Om een bestand te versturen geef je het volgende commando:

croc send bestand.txt

Ik hoop dat je zelf slim genoeg bent om te snappen dat bestand.txt van alles mag zijn. Je mag ook meerdere bestanden na elkaar opgeven, wild card tekens gebruiken, of zelfs hele directories in een keer benoemen.
In tegenstelling tot veel GUI oplossingen worden meerdere files niet eerst gezipt. Dat maakt het aan de ontvangers kant en stuk gemakkelijker.

Na het invoeren van een croc send commando krijg je een overzicht te zien wat croc gaat doen en je krijgt een code te zien.

croc send test.txt
Sending 'test.txt' (5.6 kB)      
Code is: 3533-sailor-concert-jester

On the other computer run:
(For Windows)
    croc 3533-sailor-concert-jester
(For Linux/macOS)
    CROC_SECRET="3533-sailor-concert-jester" croc 

Die code bestaat uit een getal en drie willekeurige woorden. Het getal wordt bepaald door een relay server en maakt de overdracht uniek. De 3 woorden zorgen voor de encryptie van de overdracht.

In het overzicht staat wat je aan de ontvanger kant moet intypen om de overdracht te starten dat is per operating systeem anders.
Onder Linux wordt de code eerst aan en variabele toegekend, waarna het croc command wordt uitgevoerd. Vroeger stond de code achter het croc commando, wat meer gebruikelijk is. Maar dat bleek niet zo veilig te zijn op systemen waar meerdere mensen tegelijk op kunnen werken. En andere gebruiker zou dan kunnen zien welke commando's er allemaal draaien. Dat zou op de oude manier de code kunnen verraden.
Ik zelf vind de nieuwe manier wat ongemakkelijk. Het is wat meer type werk. Maar gelukkig kan het ook makkelijker.

croc
Enter receive code: 3533-sailor-concert-jester
Accept 'test.txt' (5.6 kB)? (Y/n) 

Op deze manier hoef je de naam van de variabele niet steeds in te vullen.

Aan de ontvangerskant moet je eerst in de directory gaan staan waar je de bestanden wenst te ontvangen. Daarna geef je het croc commando, gevolgd door Enter, waarna gevraagd wordt om de code. Croc toont dan de bestandsnamen en vraagt of je die echt wenst te ontvangen. Als je daar Y op antwoordt wordt de overdracht gestart.

Let wel, de verzender moet het croc send commando zijn gang laten gaan, totdat de ontvanger de bestanden binnen heeft. De overdracht vindt synchroon plaats. De bestanden worden dus niet eerst ergens opgeslagen voor latere download.
Zodra de ontvanger de bestanden binnen heeft wordt het croc send commando aan de verzendende kant automatisch beëindigd.

Veiligheid

Is croc veilig? Ja, wanneer je croc van de officiële bron haalt heb ik geen reden om het te wantrouwen. De relay server onderhandelt alleen de verbinding tussen de zender en de ontvanger. De data zelf gaat rechtstreeks en encrypted van de verzender naar de ontvanger. De relay server krijgt daar niets van mee.

Mocht je jouw super geheime bestanden niet toevertrouwen aan croc dan kun je er altijd nog voor kiezen om je bestanden vooraf te encrypten met een andere tool, zoals Cryptomater.

Croc via Tor

Wanneer je bestanden wenst te verzenden of ontvangen via het Tor netwerk dan moet je gebruik maken van een proxy server. Als je bijvoorbeeld gebruik maakt van het Tails besturingssysteem doe je dat als volgt:

croc --socks5 'localhost:9050' send bestand.txt

Terminal op afstand met tmate


Ik denk dat we allemaal Teamviewer wel kennen. Rustdesk is echter wat minder bekend, maar wel volledig open source en zelf te hosten, wanneer je dat wil. Dus geen gezeur meer van Teamviewer, wat je niet commercieel mag gebruiken. Maar dat terzijde.

We zijn voornamelijk in de terminal bezig. En dan is het overnemen van de totale desktop misschien een beetje te veel van het goede. Zou het niet mooi zijn als we de terminal van de gast over kunnen nemen, zodat we samen tegelijk op diens machine kunnen werken?

Dat kan met tmate. Standaard is het programma echter zelden op een Linux distributie geïnstalleerd. Maar dat is op Debian gebaseerde machines snel opgelost met:

sudo apt install tmate

Tmate is verwant aan tmux, de hopelijk welbekende terminal multiplexer. Tmate werkt daarom vrijwel gelijk aan tmux. Alleen de manier van starten is anders.

De gast/leerling typt het commando tmate in en dan verschijnt er een stuk tekst op het scherm, met aan het eind 4 URLs:

tmate
Tip: if you wish to use tmate only for remote access, run: tmate -F                                                [0/0]
To see the following messages again, run in a tmate session: tmate show-messages
Press <q> or <ctrl-c> to continue
---------------------------------------------------------------------
Connecting to ssh.tmate.io...
Note: clear your terminal before sharing readonly access
web session read only: https://tmate.io/t/ro-d24RMrNnaTwPZKspUpFmZkEQP
ssh session read only: ssh ro-d24RMrNnaTwPZKspUpFmZkEQP@lon1.tmate.io
web session: https://tmate.io/t/RM6w6B2W7EEV9b7Ta5heUpQ4V
ssh session: ssh RM6w6B2W7EEV9b7Ta5heUpQ4V@lon1.tmate.io

Er zijn twee manieren om als client een verbinding te maken met de gast/leerling computer, via een web browser of via ssh.
De links met https erin zijn bedoeld voor de web browser. Dit wil echter niet altijd even lekker werken. Daarom raad ik aan om uitsluitend de ssh versies te gebruiken. Waarom ook niet, we draaien immers Linux en daar is ssh standaard op geïnstalleerd.

Je hebt verder de keuze uit een read-only versie en een volledige versie. Over de read-only versie dadelijk wat meer.

In de volledige versie kan de client (de hulpverlener) alles meelezen en, indien nodig, mee typen. Zodra de host (de gast/leerling) het Tmate programma beëindigt, stopt het delen van de verbinding en wordt de hulpverlener verder buitengesloten en kan er geen verbinding meer gemaakt worden met de gast/leerling computer.

Tijdens de sessie kun je de standaard tmux sneltoetsen gebruiken om nieuwe vensters aan te maken etc. De host (gast/leerling) kan alles meelezen wat er gebeurt.

Merk op dat je als client (hulpverlener) geen account of wachtwoord op de host computer nodig hebt. Je hoeft ook geen private/public key pair uit te wisselen. Alles wat je nodig hebt om in te loggen zit verstopt in de URL.
Let op hoe je de sessie URLs met de ander deelt. Het kan via Etherpad, maar bedenk wel dat Etherpad een openbaar kladblok is. Je kunt namelijk met meerdere tegelijk op zo'n Etherpad kladblok bezig zijn.
Meestal hoef je je daar geen zorgen over te maken, zo'n sessie duurt vaak niet lang. En je kunt zien wanneer er iemand anders aankoppelt. Maar dat zou je ook over het hoofd kunnen zien.
Als je echt op zeker wilt spelen deel je de URL via Pwpush, waarna je die geheime link weer deelt via Etherpad. Na het openen van de URL kun je dan meteen de geheime link weggooien om misbruik te voorkomen.

Read only links

Je zou denken dat er niet veel te vertellen zou zijn over de read only mode. Je kunt immers minder. De hulpverlener kan dan alleen maar meelezen. Hij/zij kan dan dus niet mee typen.

Maar zoals de tekst, die tmate toont al aangeeft moet je als host eerst het scherm wissen voordat je de read-only URL met de hulpverlener deelt. Dat doe je door op q of op ctrl-C te klikken. Je moet dan natuurlijk wel eerst de URL gekopieerd hebben, anders heb je niets om aan de hulpverlener te geven.
Als je het scherm niet wist, dan kan de hulpverlener ook de normale link zien zodra hij/zij verbinding maakt. En daar zou misbruik van gemaakt kunnen worden.

En de read-only mode is ook echt read-only. Er is niet eens een nette manier om de read-only client te stoppen. Je kunt typen wat je wil, er wordt niets geaccepteerd.

De enige nette manier om te stoppen is wanneer de host (gast/leerling) zijn tmate sessie beëindigt. Dan stopt namelijk ook de (read-only) client.
Mocht je daar niet op willen wachten dan kun je het tmate client process op je computer killen door killall tmate in een andere terminal te typen. Of je sluit gewoon het terminal venster, dat kan ook. Maar zoals ik al zei, een nette manier om het te stoppen is er niet.

Veiligheid

Is het veilig? Ja, de verbinding is versleuteld via https of ssh. Je moet alleen zorgen dat je de URL op een veilige manier naar de hulpverlener krijgt. Maar daar heb ik je al een paar prima oplossingen voor gegeven.

De sessie URLs zijn alleen geldig zolang tmate op de host draait. Zodra tmate op de host wordt gestopt, zijn de URLs niet meer geldig. Elke nieuwe tmate sessie genereert nieuwe, willekeurige URLs. Het is weinig waarschijnlijk dat een tmate URL, die al weken rond ligt te slingeren, nog geldig is.

En zodra de tmate applicatie op de host afgesloten wordt, kan niemand meer meekijken of mee typen.
Het is sowieso veiliger dan je hele desktop omgeving te delen via Teamviewer, of beter nog Rustdesk.