Det kan være praktisk at give underviserne og instruktorerne en maskine til
brug i undervisning. F.eks. til hurtig upload af delte filer.
public_html
Det er ikke usædvanligt for brugere på en Unix maskine at eksponere en given
mappe under deres hjemmemappe bag et URL som <hostname>/~<username>/
.
F.eks. onlineta.org/~oleks/.
Konventionen er at det er mappen ~/public_html/
(relativt til den hhv.
Unix-bruger) der bliver således eksponeret, hvis mappen findes.
Følgende Nginx-konfiguration ruller denne funktionalitet ud til alle
Unix-brugere på maskinen:
location ~ "^/~(.*?)(/.*?)?$" {
alias /home/$1/public_html/$2;
autoindex on;
}
hidden_html
Konfigurationen for public_html
for oven, har indeksering slået til. Det
vil sige at hvis den givne sti referer til en mappe, da vises mappens indhold.
Det er nogen gange et uønsket funktionalitet, f.eks. hvis man ønsker at dele
filer i ly.
En konvention man kan tage i brug er at eksponere mappen ~/hidden_html/
, i
stil med ~/public_html/
for oven, bag et URL som
<hostname>/@<username/
, og så lade være med at slå indeksering til.
F.eks. giver onlineta.org/@oleks/ et 403,
mens der faktisk ligger en “hemmelig” fil her: onlineta.org/@oleks/secret.txt.
Følgende Nginx-konfiguration ruller denne funktionalitet ud til alle
Unix-brugere på maskinen:
location ~ "^/@(.*?)(/.*?)?$" {
alias /home/$1/hidden_html/$2;
}
Som et ekstra lag af obfuskering, men samtidigt, troværdighed, kan man
omnavngive filen til dens SHA256-sum. Altså:
$ sha256sum <file>
<sha256sum> <file>
$ mv <file> <sha256sum>
F.eks. finder man selvsamme secret.txt
ved at se på
onlineta.org/@oleks/12058bdda0a2ca9520985ec128b85c297d099459d7c3b15db911323b1f1d459e.
Selvom URL’en er lang, giver man brugeren både en fil on en checksum på en
gang.
Upload Script
Man kan med fordel bruge følgende script til at lægge noget op på en måskine
med sådan en hidden_html
mappe:
#!/usr/bin/env bash
set -euo pipefail
server=#### UDFYLD MIG ###
user=#### UDFYLD MIG ####
path=$1
ext="${path##*.}"
filename="$(sha256sum "${path}" | cut -d' ' -f1).${ext}"
remote_path="/home/${user}/hidden_html/${filename}"
scp "$path" ${user}@${server}:${remote_path}
ssh ${user}@${server} \
"chgrp www-data ${remote_path} && chmod 640 ${remote_path}"
echo "https://${server}/@${user}/${filename}"
Bemærk, at du vil skulle indtaste din adgangskode to gange: først for at
kopiere filen med scp
, og dernæst for at logge ind på maskinen med ssh
for at rette op på rettighederne til filen. Bemærk også, at filen hermed ejes
af dig, men er synlig for gruppen www-data
, som formentlig er alle de
menneskelige brugere på serveren.
Hvis alt gik vel, afslutter scripttet ved at skrive et URL til filen.