Zwei Moodle Unterbrueche in der letzten Woche
Daniel Baumann
daniel.baumann at bfh.ch
Sun Dec 25 11:32:42 CET 2016
Hallo zusammen,
die vergangene Woche gab es zwei Moodle Unterbrueche:
* Montag, 19.12.2016: 07:47 bis 08:01
* Freitag, 23.12.2016: 19:31 bis Samstag, 24.12. 11:54
Kurze Erklaerung:
* Moodle laeuft innerhalb eines Linux Containers. Der Container laeuft
auf einem sogenannten Container Server.
* Die Container Management-Tools haben eine sicherheitsrelevante
Einstellung fuer das Verzeichnis, welches alle Container Dateien
enthaelt.
* Fuer beide Ausfaelle war eine zu restriktive, sicherheitsrelevante
Standardeinstellung fuer das Container Verzeichnis verantwortlich.
Der Effekt war dass der Webserver die Moodle Dateien nicht lesen
und daher waehrend der angegebenen Zeitraeume die Moodle Webseite
nicht benutztbar war.
* Die Einstellung ist korrigiert, das Problem wird nicht mehr wieder
auftreten.
Lange (technische) Erklaerung:
* Auf dem Container Server liegen alle Container unter /srv/container
auf dem Dateisystem (resp. /srv/container ist der Mountpoint des
NetApp Shares).
* Im allgemeinen Fall gilt:
- Wenn unprivilierte User sich auf dem Container Server anmelden
koennten, und das Container Verzeichnis (/srv/container) fuer
diese les- und ausfuehrbar ist (Mode 0755 resp. rwxr-xr-x, was
den Standart-Permissions fuer ein Verzeichnis enspricht), koennen
diese in die Container Root Verzeichnises hinein (z.B.
/srv/container/example.bfh.ch).
- Die ist grundsaetzlich nicht erwuenscht: einerseits koennten so
Dateien gelesen werden die nur User des Containers lesbar sein
sollten, anderer seits im Falle von gleichen UIDs (z.B. User
foo/1000 auf dem Container Server koennte zufaelligerweise dem
User bar/1000 im Container ensprechen) koennen sogar Daten im
Container vom Container Server aus geloescht werden
(z.B. /srv/container/example.bfh.ch/home/foo).
- Um dies zu verhindern, setzt man standardmaessig das Container
Verzeichnis auf root-only (d.h. Mode 0700 resp. rwx------). Damit
wird oben beschriebens Problem ausgeschlossen und das
manipulieren von Container Files vom Container Server aus ist nur
durch root moeglich.
- container-tools (CNT) implementiert dies als sichere
Standardeinstellung, solange diese nicht mit dpkg-statoveride
lokal ueberschrieben wird, wird bei jedem dpkg-reconfigure oder
dpkg --configure dies wieder hergestellt:
-> siehe ensprechende Code Zeile:
https://sources.debian.net/src/open-infrastructure-container-tools/20161101-lts2-1/debian/open-infrastructure-container-tools.postinst/#L28
-> resp. der Commit der Aenderung damals:
https://sources.progress-linux.org/users/daniel/debian/packages/open-infrastructure-container-tools/commit/?id=6306bdcc6383d13b3db6108af44051507d19d92e
- LXC macht das bis heute leider nicht und ist by default angreifbar
(ja, wenn ich mal Zeit haette wuerd ich ein CVE Submission machen
dafuer).
* Als wir im Juli von die Container Management-Tools weg von LXC hin
zu CNT migriert haben, haetten wir:
- einerseits das NetApp Share sinnvollerweise neu strukturieren
sollen.
- andererseits das Moodle Share welches aus anderen Gruenden noch
anderst aufgebaut ist, mit den anderen "normalen" Container
Shares harmonisieren sollen.
- Beides haben wir aus Zeitgruenden leider immer wieder nach hinten
schieben muessen. Geplant ist schon laenger, dies waehrend der
seit Mitte Dezember laufenden Upgrades aller Container Server auf
Debian 9 (stretch) bis Ende Januar 2017 abzuschliessen.
* Konkret fuer BFH summieren sich dann folgende Dingen zusaetzlich
auf:
- Im Moodle Container Server Fall befindet sich wegen anderem
NetApp Layout der Mountpoint nicht unter /srv/container, sondern
unter /mnt/nfs/moodle.
Grund: Daten und Container liegen aus Performance Gruenden auf
dem gleichen, schnelleren Share (beide SAS), statt wie normal auf
zwei unterschiedlichen (Container auf SAS, Daten auf SATA).
- Da nspawn (berechtigterweise) keine Symlinks als root
Verzeichnisse (z.B. /srv/container/example.bfh.ch) fuer Container
akzeptiert, muss das darueber liegende Verzeichnis
(/srv/container) gesymlinkt sein.
Es zeigt also /srv/container nach /mnt/nfs/moodle/[...].
- Ohne dpkg-statoverride wird /srv/container auf 700
zurueckgesetzt, und damit sind die Daten fuer den Container nicht
mehr lesbar. Dies geschiet automatisch in gewissen interfallen,
namentlich immer beim einspielen jeglicher (Security) Updates.
* Abhilfe (und warum das Problem nicht mehr auftauchen wird):
- einerseits haben wir temporaer auf dem Moodle Container Server per
dpkg-statoverride die Permissions gesetzt, diese werden von den
Container Management-Tools nicht wieder zurueckgesetzt.
- andererseits wird ab Januar 2017 unser neue Monitoring
Infrastruktur fuer LFE Dienste dies ueberwachen und sofort
alarmieren.
Wir entschuldigen uns fuer die beiden Ausfaelle und wuenschen bei
dieser Gelegenheit allen weiterhin frohe Festtage und einen guten Rutsch.
Gruesse,
Daniel
--
Berner Fachhochschule / Bern University of Applied Sciences
IT-Services / Team Infrastructure Services
Daniel Baumann
IT System Engineer Linux
___________________________________________________________
Dammweg 3, CH-3013 Bern
Phone direct +41 31 848 48 22
Phone Servicedesk +41 31 848 48 48
daniel.baumann at bfh.ch
https://servicedesk.bfh.ch
https://www.bfh.ch
https://linux.bfh.ch
More information about the bfh-moodle-announce
mailing list