Synology inrichten voor leerlingen

Als leraar is het handig om een webserver in te kunnen zetten voor leerlingen die websites moeten opleveren m.b.v. HTML, CSS, JAVASCRIPT, PHP en een MySQL database.

In dit artikel wordt uitgelegd hoe een Synology NAS ingericht kan worden.

Groep

  • Maak een nieuwe groep aan;
  • Verleen deze groep uitsluitend toegang tot de toepassing FileStation.

Autorisaties kunnen op één centrale plek worden beheerd.

Gebruiker

  • Maak per leerling of team een nieuwe gebruiker aan;
  • Koppel de gebruiker aan de eerder gemaakte groep en aan de groep [http];
  • Pas verder geen wijzigingen toe.

Autorisaties worden op groepsniveau bepaald en leerlingen kunnen bulksgewijs geimporteerd worden.

Gebruiker | Geavanceerd

  • Vink aan [Dwing gebruikers om het wachtwoord te wijzigen nadat de administrator het wachtwoord opnieuw heeft ingesteld];
  • Schakel de basismapservice in.

Door het afdwingen van een nieuw wachtwoord kan vooraf één centraal wachtwoord worden ingesteld. De basismapservice zorgt er voor dat op gebruikersniveau bestanden opgeslagen kunnen worden.

Web Station | Algemene instellingen

Vink aan [Persoonlijke website inschakelen].

Binnen de basis-map van elke gebruiker wordt de map www aangemaakt.

File Station

  • Maak een nieuwe map binnen de map web aan, bijvoorbeeld school;
  • Maak onder deze map per gebruiker een nieuwe map.

Web Station | Virtuele host

  • Maak per gebruiker een virtuele host aan;
  • Selecteer per gebruiker de eerder aangemaakte map in web;
  • Verwijder nu de eerder aangemaakte gebruikers-mappen in web.

In het volgende hoofdstuk worden de gebruikersmappen opnieuw aangemaakt maar dan als symbolic link.

Putty

  • Gebruik Putty om via SSH verbinding met de Synology te maken;
  • Log in als root;
    • Log eerst in als admin;
    • Tik in: sudo -i;
    • Vul nogmaals het wachtwoord in.
  • Voer per gebruiker het volgende commando uit: sudo ln -s /volume1/homes/[gebruikersnaam]/www /volume1/web/school/[gebruikersnaam]

Via de bovenstaande commando's worden de symbolic links gemaakt naar de www-mappen van de gebruikers. Hier komen uiteindelijk de bestanden in te staan.

 

Op de MAC kan de terminal worden gebruikt i.p.v. Putty. Login met ssh gebruikersnaam@lokaalipadres.

Het onderstaande sh script kan gebruikt worden om de symbolic links voor meerdere gebruikers tegelijk aan te maken:

  • Voer het script uit om de submappen in web aan te maken;
  • Koppel de virtuele hosts;
  • Voer het script opnieuw uit om de submappen te vervangen door de symbolic links.

for i in $(seq -f "%02g" 1 5)
do
 
bron="/volume1/homes/l${i}/www"
doel="/volume1/web/school/l${i}"
bestand="/volume1/web/school/test.php"
 
#bronmappen aanmaken indien niet bestaan!

if [ -d $bron ]
then
	echo "$bron bestaat"
else
	mkdir $bron
	echo "$bron aangemaakt"
fi

#testbestanden kopieren

cp -R $bestand $bron

#doelmappen aanmaken indien niet bestaan!

if [ -d $doel ]
then
	rm -rf $doel
	sudo ln -s $bron $doel
	echo "Symbolic link aangemaakt: $bron > $doel"
else
	mkdir $doel
	echo "$doel aangemaakt"
fi
 
done

Eventueel kan ook gebruik gemaakt worden van een Array:

arrLeerlingen=("Truus" "Pietje" "Miepje")

for i in "${arrLeerlingen[@]}"
do

bron="/volume1/homes/${i}/www" 
doel="/volume1/web/school/${i}" 
bestand="/volume1/web/school/test.php"

De virtuele host is nu - extern - te benaderen via http://gebruikersnaam.domeinnaam.nl/test.php, mits voldaan is aan de juiste DNS en router configuraties.

De website is ook, zonder virtuele host, te benaderen via  http://domeinnaam/~gebruikersnaam/test.html.

Iconen UI gebruiker verbergen

Wanneer een gebruiker inlogt op DSM kunnen ongewenste iconen verschijnen zoals die van de Photo Station en/of WordPress (3rd party).

WordPress (3rd party)
  • Voer in Putty het commando uit: vi /usr/syno/synoman/webman/3rdparty/WordPress/config;
  • Wijzig "allUsers": true, in "allUsers": false;

Deze oplossing werkt voor alle 3rd party packages.

Photo Station
  • Log in op de Photo Station;
  • Ga naar instellingen;
  • Vink aan [Photo Station in het hoofdmenu van DSM verbergen].

Database

Het handigste is om in phpMyAdmin een gebruiker en database in één te maken. Kies voor localhost bij de server naam. Voor het gebruik van de onderstaande php-code is het noodzakelijk dat bij de php-instellingen van de virtual host de extensies MYSQL en PDO_MYSQL staan aangevinkt. Bij een MariaDB versie 10 wordt als host 127.0.0.1:3307 gebruikt.

<?php 

$db = new PDO("mysql:host=127.0.0.1:3307;dbname=database_name","database_table", "database_password"); 

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$sql = "SELECT achternaam FROM klanten"; 

$resultaat = $db->query($sql); 

foreach($resultaat as $row) { 
    echo $row['achternaam'].''; 
} 

$db = NULL; 

?> 

M.b.v. van het onderstaande script kan een gebruiker en database in één aangemaakt worden via phpMyAdmin:

Create USER 'DB1'@'localhost' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'DB1'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `DB1`;
GRANT ALL PRIVILEGES ON `DB1`.* TO 'DB1'@'localhost';

Via de onderstaande (Excel) VBA functie kan een batch worden gegenereerd:

Public Function getSQL(Voornaam) As Variant

getSQL = "Create USER '" & Voornaam & "'@'localhost' IDENTIFIED BY 'P@ssword01x';" & vbNewLine & _
"GRANT USAGE ON *.* TO '" & Voornaam & "'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;" & vbNewLine & _
"CREATE DATABASE IF NOT EXISTS `" & Voornaam & "`;" & vbNewLine & _
"GRANT ALL PRIVILEGES ON `" & Voornaam & "`.* TO '" & Voornaam & "'@'localhost';"

End Function