Schulangebot powered by UCS@school hosted by Hostern

In den letzten Tagen erreichen uns viele Anfragen aus dem Hosting-Umfeld, wie man schnell und einfach für Schulen ein Angebot anbieten kann, damit diese arbeiten können.
Dieser Artikel beschreibt, wie man dies umsetzen kann. Er dient als Diskussionsgrundlage und wird laufend erweitert.

Ziel
Ein Angebot zu erstellen, das es Schulen erlaubt “Online-Lehre quick & dirty” anzubieten. Vorbild ist unteranderem beispielsweise der Artikel “Wie geht Online-Lehre quick & dirty?”.

Schulangebot

  • UCS@school-Appliance mit weiteren wichtigen Diensten
  • Prio 1:
    • Benutzerverwaltung (Benutzer, Klassen, Arbeitsgruppen, CSV-Import)
    • Dateispeicher & Messenger & Etherpad
    • möglichst DSGVO-konform
    • Erweiterbar um weitere Dienste
  • Prio 2: Video-Conferencing, Mail, Lern-Management-System

Appliance zum selber hosted by Hostern

Konzept

  • Um horizontal zu skalieren, setzen wir eine VM auf, die später geclont und individualisiert wird.
  • Ein MVP befindet sich hier: https://mvp.ucs-schule.de/univention/portal/
  • Für spätere Aktualisierungen wird zusätzlich ein Ansible-Server genutzt.
  • Es gibt eine Domain mit Subdomains pro Schule.
  • Nach Bestellung bekommt jede Schule ihre Appliance vorprovisioniert angelegt.
    • Inklusive eines Links auf das Portal
    • Zugangsdaten für Schuladministrator + Standardpasswort (muss beim ersten Login zurückgesetzt werden)
    • Link zur Benutzer-Verwaltung
    • Link zum CSV-Import mit Beispiel-Benutzer-Import-Datei

Dokumentation

Schritte zum aufsetzen

  1. VM-Erstellen mit Zugang ins Internet
    1. 2 Cores, 8 GB RAM, 100 GB Storage (HDD)
  2. Download und Installation ISO: http://updates.software-univention.de/download/ucs-cds/ucs4.4-3/UCS_4.4-3-amd64.iso
    1. Booten und Standardkofniguration durchgehen / Installation mit LLVM
    2. Netzwerkeinstellungen per DHCP
  3. Neue UCS-Domain anlegen
    • FQDN: ms.ucs-schule.intranet
    • LDAP-Basis: dc=ucs-schule,dc=intranet
  4. Setup abschließen
  5. Im Appcenter die UCS@school installieren und den grafischen Wizard durchgehen
    • Single-Server-Umgebung
    • Name: Schule
    • Schulkürzel: schule
  6. Konfiguration Portal
    • Portal-Eigenschaften - Kacheln in “Neuem Tab” öffnen
    • Sieben Kacheln
      • Anmelden
      • Eigene Dateien
      • Chat
      • Notizen
      • Eigene Passwort zurücksetzen
      • Hilfe
      • Schüler*Innen Passwörter zurücksetzen
      • Benutzerverwaltung
  7. CMD oder Ansible
    1. Installiere Let’s encrypt

      univention-app install letsencrypt --username Administrator --noninteractive --pwdfile /opt/pw
      ucr set letsencrypt/domains=subdomain.ucs-schule.de
      /usr/share/univention-letsencrypt/refresh-cert-cron

    2. HTTPS erzwingen

      ucr set force_https=yes

    3. Konfiguration Portal
    4. Self-Service installieren

      univention-install univention-self-service-master univention-self-service univention-self-service-passwordreset-umc
      ucr set umc/self-service/passwordreset/whitelist/groups=‘Domain Users,Domain Users schule’

    5. Etherpad/Notizen installieren

      univention-app install etherpad-lite --username Administrator --noninteractive --pwdfile /opt/pw

    6. Schuladministrator anlegen
    7. Schuladministrator Benutzer-Verwaltung zur Verfügung stellen

      ucr set ucsschool/wizards/schoolwizards/workaround/admin-connection=yes
      udm modify ucsschool-umc-admins-default

    8. TimeServer setzen (de.pool.ntp.org)

      ucr set timeserver=de.pool.ntp.org

    9. Rocket.chat installieren

      univention-app install rocketchat --username Administrator --noninteractive --pwdfile /opt/pw
      udm settings/extended_attribute modify --dn “cn=rocketchatActivated,cn=rocketchat,cn=custom attributes,cn=univention,dc=ucs-schule,dc=intranet” --set default=TRUE

    10. Owncloud installieren

    univention-app install owncloud --username Administrator --noninteractive --pwdfile /opt/pw

    1. SAML-IDP auf externe Domain ändern (abgeleitet um Let’s encrypt config von hier
FQDN=externalDNS.ucs-schule.de
ucr set ucs/server/sso/autoregistraton=no \
    saml/idp/entityID="https://${FQDN}/simplesamlphp/saml2/idp/metadata.php" \
    saml/idp/certificate/privatekey="/etc/simplesamlphp/${FQDN}-idp-certificate.key" \
    saml/idp/certificate/certificate="/etc/simplesamlphp/${FQDN}-idp-certificate.crt" \
    ucs/server/sso/fqdn=$FQDN \
    umc/saml/sp-server=$FQDN \
    ucs/server/sso/virtualhost=false \
    apache2/ssl/certificate=/etc/univention/ssl/${FQDN}/cert.pem \
    apache2/ssl/key=/etc/univention/ssl/${FQDN}/private.key
echo "ServerName $FQDN" >>/etc/apache2/ucs-sites.conf.d/servername.conf
univention-run-join-scripts --force --run-scripts 91univention-saml.inst
ucr set umc/saml/idp-server=https://${FQDN}/simplesamlphp/saml2/idp/metadata.php
univention-run-join-scripts --force --run-scripts 92univention-management-console-web-server.inst
ucr set \
    apache2/ssl/certificate=/etc/univention/letsencrypt/signed_chain.crt \
    apache2/ssl/key=/etc/univention/letsencrypt/domain.key
service apache2 restart; service univention-management-console-web-server restart; service univention-management-console-server restart
12. SSO 
13. CSV-Import auf Standardformat konfigurieren
13. Automatische Updates in UCS aktivieren

Schritte zur Individualisierung (nach dem Klonen)

  1. Let’s encrypt Zertifikat neu austellen (mit neuer Subdomain)
  2. SSO neu konfigurieren (mit neuer Subdomain)
FQDN=mvp.ucs-schule.de	
udm saml/serviceprovider create \
    --ignore_exists \
    --position "cn=saml-serviceprovider,cn=univention,dc=ucs-schule,dc=intranet" \
    --set isActivated=TRUE \
    --set Identifier="https://$FQDN/rocketchat/_saml/metadata/UCS" \
    --set NameIDFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" \
    --set simplesamlAttributes=TRUE \
    --set AssertionConsumerService="https://$FQDN/rocketchat/_saml/validate/UCS" \
    --set singleLogoutService="https://$FQDN/rocketchat/_saml/logout/UCS" \
    --set simplesamlNameIDAttribute="mailPrimaryAddress" \
    --set LDAPattributes="uid" \
    --set LDAPattributes="mailPrimaryAddress" \
    --set LDAPattributes="cn" \
    --set serviceProviderOrganizationName="Rocket.Chat" \
    --set serviceproviderdescription="Rocket.Chat"

Was bekommt ein Kunde nach Bestellauslösung und Auswahl der Subdomain

  • Portal-Link (Subdomain)
  • Zugangsdaten für Schuladministrator + Standardpasswort (muss beim ersten Login geändert werden)
  • Direktlink zu Benutzer-Modul
  • Direktlink zu CSV-Import
  • Beispiel-Benutzer-Import-Datei