Medienbildung und Informatik

Fol­gen­de Auf­ga­ben haben Pro­gram­mier­an­fän­ger von mir nach ca. vier Ein­hei­ten Python bekom­men. Das Bei­spiel zeigt – fin­de ich – ganz gut, dass Medi­en­kom­pe­tenz und Infor­ma­tik sich sehr gut ergän­zen kön­nen, teil­wei­se viel­leicht sogar ein­an­der bedin­gen. Das Pro­blem der Pass­wort­län­ge und dem Pass­wort­auf­bau wird hier bewusst nicht ange­spro­chen, weil das pro­gram­mier­tech­nisch etwas anspruchs­vol­ler ist. Das kommt dann in der Folgestunde.
Wei­ter­hin ist natür­lich auch das sha-2-Ver­schlüs­se­lungs­ver­fah­ren moder­ne­ren Ent­wick­lun­gen wie z.B. pbkdf2 weit unter­le­gen, aber auch pro­gram­mier­tech­nisch wesent­lich beherrsch­ba­rer. sha512 ist schon ganz ok, auch wenn heu­ti­ge Gra­fik­kar­ten ca. 200 Mil­lio­nen Schlüs­sel pro Sekun­de berechnen.

Kryptografie

Immer wie­der hörst du davon, dass bei gro­ßen Anbie­tern Daten­bank­in­hal­te gestoh­len wer­den. In dem Arti­kel steht aller­dings nichts davon, dass Pass­wör­ter gestoh­len wer­den, son­dern Has­h­es. Heu­te wirst du ler­nen, dass du jetzt schon ganz ein­fach viel bes­ser sein kannst als Lin­kedIn und das mit nur ganz weni­gen Code­zei­len in Python.

Um alles mög­lichst gut zu ver­ste­hen, musst du auf jeden Fall die bei­den oben ver­link­ten Arti­kel lesen oder wenigs­tens überfliegen.

Aufgabe 1:

Nimm eines dei­ner Pass­wör­ter und las­se fol­gen­des Pro­gramm lau­fen (z.B. auf https://try.jupyter.org ).

1
2
3
4
5
6
7
# wir weisen Python an, Kryptografiefunktionen zu laden
import hashlib
# wir fragen nach einem Passwort
crypted_phrase = input()
# Und geben den Hash des Passworts als MD5-Hash aus
print("Hash is:")
print(hashlib.md5(crypted_phrase.encode('utf-8')).hexdigest())

Nimm jetzt den Hash und kopie­re ihn auf die­se Sei­te. Nach Ein­ga­be der Sicher­heits­ab­fra­ge (reCap­t­cha) kannst du schau­en, ob der Hash dei­nes Pass­worts bereits bekannt ist (Wenn du das Ver­fah­ren mit dem Pass­wort „12345678“ durch­führst, wirst du sehen, dass das „geknackt“ wird.

Wie­der­ho­le das Ver­fah­ren mit einem dei­ner Pass­wör­ter und fol­gen­dem Pro­gramm (mit „12345678“ klappt es! – auch mit dei­nem Passwort?):

1
2
3
4
5
6
7
# wir weisen Python an, Kryptografiefunktionen zu laden
import hashlib
# wir fragen nach einem Passwort
crypted_phrase = input()
# Und geben den Hash des Passworts als MD5-Hash aus
print("Hash is:")
print(hashlib.sha512(crypted_phrase.encode('utf-8')).hexdigest())

Wenn dein Pass­wort auch im zwei­ten Fall „geknackt“ wur­de, hast du ein Pro­blem, wenn du Opfer eines Daten­bank­dieb­stahls wirst. Auch dein Anbie­ter wird nur Has­h­es in einer Daten­bank speichern.

Infor­mie­re dich jetzt über den Unter­schied zwi­schen dem md5- und dem sha512-Ver­schlüs­se­lungs­ver­fah­ren. Python kann fol­gen­de Ver­fah­ren „von Natur aus“: md5, sha1, sha224, sha256, sha384, sha512.

Aufgabe 2:

Das Pro­blem ist schon lan­ge gelöst – mit nur weni­gen Code­zei­len mehr. Infor­mie­re dich über den Begriff „Salt“ in Ver­bin­dung mit Hashes.

1
2
3
4
5
6
import hashlib
# Statt "somestring" kannst bzw. solltest du möglichst wirres Zeug hier reinschreiben
salt = "somestring"
crypted_phrase = input()
salted_password = crypted_phrase + salt
print(hashlib.md5(salted_password.encode('utf-8')).hexdigest())

Wenn du jetzt ver­suchst, den Hash cra­cken zu las­sen, klappt das nicht mehr, weil ein soge­nann­test „salt“ (Salz) zum Pass­wort hin­zu­ge­fügt wird. Bei unse­rem Pro­gramm ver­wen­det jedes Pass­wort jedoch den glei­chen Salt.

Auch dafür gibt es eine Lösung:

1
2
3
4
5
6
import hashlib, uuid
# Python schreibt nun für dich wirres Zeug hier hinein
salt = uuid.uuid4().hex
crypted_phrase = input()
salted_password = crypted_phrase + salt
print(hashlib.md5(salted_password.encode('utf-8')).hexdigest())

Hät­ten Lin­kedIn und ande­re die Benut­zer­pass­wör­ter mit einem siche­ren Algo­rith­mus (z.B. sha512) gehasht und mit einem Salt ver­se­hen, wäre der Dieb­stahl der Daten­ban­ken nicht so ein gro­ßes Pro­blem, da es sehr lan­ge dau­ern wür­de, die Pass­wör­ter aus den Has­h­es zu errechnen.

In der Pra­xis spei­chert man die Salts im Klar­text zusam­men mit den Has­h­es, meist durch ein Trenn­zei­chen abge­setzt. Du kannst ja ein­mal über­le­gen, war­um das kein Pro­blem darstellt.

Aufgabe 3:

Schrei­be fol­gen­de Programme

  1. Es wird zwei­mal ein Pass­wort abge­fragt und dazu ein Hash berech­net. Stim­men bei­de Has­h­es (und damit die Pass­wör­ter) über­ein, soll das Pro­gramm die Aus­ga­be „Access granted!“ machen, ansons­ten „Access denied!“ ausgeben.
  2. Ein Pro­gramm fragt nach einem „Masterpasswort“ (pass­word) und einem Domain­na­men (salt). Es berech­net dar­aus einen Hash, den man als Pass­wort für die betref­fen­de Web­sei­te benut­zen kann – wenn man immer das rich­ti­ge Mas­ter­pass­wort und den glei­chen Domain­na­men ein­gibt – qua­si ein ganz ein­fa­cher Passwortmanager!

Über Owncloud mit Quellen syncen, die eigentlich nicht syncen können

Die Mög­lich­keit, Ord­ner und Datei­en über meh­re­re Gerä­te zu syn­chro­ni­sie­ren, möch­te ich nicht mehr mis­sen. Egal ob ich auf der Arbeit, zu Hau­se oder unter­wegs bin – über­all habe ich den glei­chen Datenbestand.

Wenn ich ver­schie­de­ne Diens­te im Netz nut­ze, brau­che ich meist für jeden eine eige­ne App bzw. ein eige­nes Pro­gramm. Eini­ge Diens­te schei­nen auf den ers­ten Blick gar kei­ne Syn­chro­ni­sa­ti­on zu erlau­ben (z.B. der FTP-Zugang für den Webs­pace). Dafür gibt es eine Lösung über Own­cloud. Own­cloud kann näm­lich schon sehr lan­ge exter­ne Daten­quel­len einbinden.

Dazu muss man sich zunächst ein­mal bei Own­cloud als Admi­nis­tra­tor ein­log­gen und unter Apps auf das +-Zei­chen klicken.

owncloud01Danach akti­viert man unter „not enab­led“ das Plugin „Exter­nal Storage“.

owncloud02Anschlie­ßend muss man in den Admin­be­reich gehen

owncloud03… und allen Nut­zern erlau­ben, das Plugin zu nutzen:

owncloud05Dabei sind die unter­schied­lichs­ten Pro­to­kol­le mög­lich, z.B. auch ande­re Own­cloud­sys­te­me. Man kann auch glo­ba­le Ord­ner defi­nie­ren, die allen oder nur eini­gen Nut­zern der Own­cloud-Instanz zur Ver­fü­gung ste­hen. Anschlie­ßend kann sich jeder Nut­zer unter dem Men­u­punkt „Per­so­nal“ eige­ne Daten­quel­len definieren:

owncloud06Natür­lich kann ich auch nur ein­zel­ne Ord­ner der exter­nen Quel­le synchronisieren:

owncloud07Own­cloud ver­hält sich gegen­über den exter­nen Quel­len wie ein nor­ma­ler Cli­ent, d.h. es wer­den kei­ne Daten auf dem Own­cloud­ser­ver gespei­chert – er stellt ledig­lich die Schnitt­stel­le zu ande­ren Diens­ten hier.

Der Trick ist, dass ich für alle die­se Diens­te dann nur noch eine App auf dem Tablet, dem Smart­pho­ne oder dem Rech­ner benö­ti­ge, um mit ganz unter­schied­li­chen Quel­len Datei­en und Daten aus­zu­tau­schen, auch wenn die­se offi­zi­ell über­haupt kei­ne Syn­chro­ni­sa­ti­ons­funk­ti­on unter­stüt­zen. Die­se Diens­te erschei­nen in der Own­cloud-App ein­fach unter dem Namen, den ich für den Ord­ner ver­ge­ben habe.

Eine Syn­chro­ni­sa­ti­ons­app für IServ, mei­nen Lan­des­ser­ver, Goog­le, jeden belie­bi­gen Webs­pace usw. – reiz­voll – oder?

OpenLDAP automatisch installieren und einrichten

Ich habe heu­te ein Script geschrie­ben, wel­ches OpenLDAP auf Debi­an­sys­te­men auto­ma­tisch instal­lie­ren und auch gleich für ppo­li­cy kon­fi­gu­rie­ren kann. Wer sowas schon­mal von Hand gemacht hat, weiß um die Schwie­rig­kei­ten. Es soll­te auf den meis­ten Debi­an­de­ri­va­ten funk­tio­nie­ren (ent­wi­ckelt habe ich auf stretch), ist aber leicht anpass­bar, da ich alle Ein­zel­schrit­te in Funk­tio­nen gepackt habe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#!/bin/bash
 
# globals
LDAPDB="mdb"
PASSWORD="test1234"
HOSTNAME=`hostname`
DOMAIN=`echo  $HOSTNAME | awk -v FS="." '{print $1}'`
TLD=`echo  $HOSTNAME | awk -v FS="." '{print $2}'`
PPOLICY_FILE="/etc/ldap/schema/ppolicy.ldif"
LOGFILE="debug.txt"
 
# basesetup()
# Installs slapd (openLDAP) unattended
# using debconf
 
basesetup() {
 
	PASS=$1
        HOST=$2
	DBTYPE=$3
 
	echo "Building LDAP-Roottree ...\n"
 
	export DEBIAN_FRONTEND=noninteractive
	echo -e " \
		slapd    slapd/internal/generated_adminpw    password   $PASS
		slapd    slapd/password2    password    $PASS
		slapd    slapd/internal/adminpw    password   $PASS
		slapd    slapd/password1    password    $PASS
		slapd	 slapd/backend: string	$DBTYPE
		slapd	 slapd/domain	string	$HOST
	" | debconf-set-selections
 
	apt-get install -y slapd ldap-utils
 
}
 
make_index() {
 
	echo "Adding index ...\n"
 
        echo -e " \
dn: olcDatabase={1}$LDAPDB,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: mail,givenName eq,subinitial
        " | ldapmodify -Y EXTERNAL -H ldapi:///
 
}
 
# configure_policy()
# installs: 	ppolicy-scheme
# 		ppolicy-module
# 		overlay
# 		ppolicycontext
# 		defaultpolicy
 
configure_policy() {
 
        echo "Setting temporary ACLs ..."
 
        echo -e " \
dn: olcDatabase={1}$LDAPDB,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write by * none
        " | ldapmodify -Y EXTERNAL -H ldapi:///
 
	echo "Adding ppolicy-scheme ..."
 
	ldapadd -Q -Y EXTERNAL -H ldapi:/// -f $PPOLICY_FILE
 
        echo "Activating ppolicy-module ..."
 
        echo -e " \
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: ppolicy.la
        " | ldapmodify -Y EXTERNAL -H ldapi:///
 
	/etc/init.d/slapd restart
 
        echo "Generating ppolicy-context ..."
 
        echo -e " \
dn: ou=policies,dc=$DOMAIN,dc=$TLD
objectClass: organizationalUnit
objectClass: top
ou: policies
        " | ldapadd -Q -Y EXTERNAL -H ldapi:///
 
        echo "Setting default policy ..."
 
        echo -e " \
dn: cn=default,ou=policies,dc=$DOMAIN,dc=$TLD
objectClass: top
objectClass: person
objectClass: pwdPolicy
cn: default
sn: default
pwdAllowUserChange: TRUE
# this don't work though documentation says it should
# pwdAttribute: userPassword
# So we use OID for workaround
pwdAttribute: 2.5.4.35
pwdInhistory: 3
pwdLockout: TRUE
pwdLockoutDuration: 1800
pwdMaxAge: 0
pwdMaxFailure: 3
pwdMinLength: 6
pwdMustChange: TRUE
pwdSafeModify: TRUE
# comment for syntax reason (trailing TAB here leads to syntax error when importing)
        " | ldapadd -Q -Y EXTERNAL -H ldapi:///
 
        echo "Generating overlay ..."
 
        echo -e " \
dn: olcOverlay=ppolicy,olcDatabase={1}$LDAPDB,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=$DOMAIN,dc=$TLD
olcPPolicyHashCleartext: FALSE
olcPPolicyUseLockout: FALSE
olcPPolicyForwardUpdates: FALSE
# comment for syntax reason (trailing TAB here leads to syntax error when importing)
        " | ldapadd -Q -Y EXTERNAL -H ldapi:///
 
}
 
# configure_tls()
# does:
#	generating of cert-authority
#	generating of certs for slapd
#	configuring of slapd for using tls
 
configure_tls() {
 
	echo
 
}
 
# toggle_acl()
# sets ACL back to save values after install
 
toggle_acl() {
 
	echo
 
}
 
# debug_output()
# dumps to file:
#	debconf values for slapd
#	complete Root-DN
#	complete cn=config
 
debug_output() {
 
	debconf-show slapd > $LOGFILE
	slapcat >> $LOGFILE
	ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config >> $LOGFILE
 
}
 
 
# cleanldap()
# Removes all of openLDAP
 
cleanldap() {
 
	apt-get remove -y slapd ldap-utils --purge
 
}
 
# main
 
basesetup $PASSWORD $HOSTNAME $LDAPDB
make_index
configure_policy
debug_output
cleanldap

Eigent­lich muss man oben nur ein ande­res Pass­wort set­zen und am Ende das „cleanldap“ aus­kom­men­tie­ren. Da das Gan­ze noch „Work in Pro­gress“ ist, feh­len noch eini­ge Funktionen:

  1. Kon­fi­gu­ra­ti­on für TLS
  2. Inte­gra­ti­on des freeradius-Schemas
  3. Ver­nünf­ti­ge ACLs nach Abschluss der Instal­la­ti­on setzen

Ja, ich ste­he in die­sem Jahr ziem­lich auf LDAP …

Lustige Portweiterleitungen

Unse­re Schul­home­page besitzt einen eige­nen Log­in­be­reich, für den wir ger­ne auch die Nutzername/Passwortwortkombination nut­zen woll­ten wie für den Schul­ser­ver. Meh­re­re unter­schied­li­che Zugän­ge sind in der Regel nut­zer­un­freund­lich und wer­den kaum akzeptiert.

Das ver­wen­de­te Joom­la! hat zum Glück eine Rei­he von Authen­ti­fi­zie­rungs­plugins, unter ande­rem LDAP, POP3, IMAP oder Kebe­ros. Am ein­fachs­ten geht es über IMAP, d.h. Joom­la! ver­sucht sich mit den Nut­zer­da­ten bei Mail­ser­ver des Schul­ser­vers ein­zu­log­gen und wenn das klappt, legt es einen neu­en Benut­zer­ac­count an, den es zukünf­tig immer extern authen­ti­fi­ziert. Dum­mer­wei­se klapp­te das bei uns nur über eine unver­schlüs­sel­te Ver­bin­dung zuver­läs­sig – also kei­ne sinn­vol­le Option.

Glück­li­cher­wei­se läuft unser Joom­la! auf einem VSer­ver, auf den wir Shell­zu­griff haben. Mit einem linux­ty­pi­schen Ein­zei­ler kann man den Mail­ser­ver­port durch einen ver­schlüs­sel­ten Kanal auf den VSer­ver tun­neln – bei uns:

ssh ‑R 1143:localhost:143 unprivileged@vserver.xy ‑N ‑T

Das sorgt dafür, das der unver­schlüs­sel­te Mail­ser­ver­port 143 auf dem VSer­ver unter der Port­num­mer 1143 erreich­bar ist.

Nor­ma­ler­wei­se wür­de nach die­sem Kom­man­do das Pass­wort des Benut­zer „unpri­vi­le­ged“ (der Nut­zer soll­te mög­lichst wenig Rech­te auf dem Ziel­ser­ver haben, wes­halb die Port­num­mer auch grö­ßer als 1024 sein muss) erfragt wer­den. Damit das nicht geschieht, ver­wen­den wir die Authen­ti­fi­zie­rung per Public-Key.

Unser Schul­ser­ver ist nur per VDSL an das Inter­net ange­bun­den und wird ein­mal täg­lich pro­vi­der­sei­tig vom Netz getrennt. Damit wür­de unser Tun­nel zusam­men­bre­chen. Damit das erkannt wird, läuft fol­gen­des Script per cron­job alle fünf Minuten:

#!/bin/bash
COUNT=‚ps aux | grep unpri­vi­le­ged | wc ‑l‚
if [ $COUNT ‑ge 2 ]; then
exit 0
else
ssh ‑R 1143:localhost:143 unprivileged@vserver.xy ‑N ‑T
fi

Die Varia­ble COUNT ent­hält die Aus­ga­be der Befehls­pipe zwi­schen den Back­ticks ‚. Wenn der Tun­nel offen ist, ent­hält die Aus­ga­be zwei Zei­len (den eigent­li­chen Tun­nel­pro­zess und den Such­pro­zess nach „unpri­vi­le­ged“). Wenn das so ist, tut das Script nichts, wenn nicht, star­tet es den Tun­nel ein­fach neu. Das Script muss mit Root­rech­ten lau­fen, da ein Port unter­halb von 1024 lokal ver­wen­det wird.

Auf die­se Wei­se kann man im Prin­zip jeden Dienst lokal auf einen VSer­ver wei­ter­lei­ten, z.B. auf den LDAP der Mus­ter­lö­sung aus Baden-Würt­tem­berg und muss dann kei­ne Klar­text­pass­wör­ter mehr durch die Gegend schicken.

Tablets in der Schule: Bitte (fast) keine Androids mehr!

Vorweg

Ich set­ze per­sön­lich kei­ne Tablets im Unter­richt oder mei­nen eige­nen Work­flow ein. Für mich per­sön­lich sind das Spiel­zeu­ge und kei­ne Arbeits­ge­rä­te. Mei­ne Fin­ger sind zu dick und unmotorisch.

Ich gestal­te mei­nen digi­ta­len Unter­richt aber so, dass das Gerät dafür kaum eine Rol­le spielt, wenn es zumin­dest einen Brow­ser und eini­ger­ma­ßen per­for­man­te Leis­tungs­da­ten zum Ren­dern von Web­in­hal­ten ver­fügt. Mei­ne Tools stel­len stan­dar­di­sier­te Schnitt­stel­len bereit, sodass hof­fent­lich jeder die App und das Gerät dafür nut­zen kann, die/das zu ihr/ihm passt.

App“ ist für mich ein ande­res Wort für „Pro­gramm, des­sen Ober­flä­che auf Touch­be­die­nung zuge­schnit­ten ist“. Damit sind Tablets natür­lich will­kom­men – es gibt ja ande­re Men­schen als mich mit ande­ren Vor­lie­ben und Präferenzen.

Was ich gar nicht mag, ist als Admin Son­der­lö­sun­gen bau­en zu müs­sen, weil ein Her­stel­ler meint, eige­ne „Stan­dards“ sei­en kun­den­freund­li­cher. Des­we­gen has­se ich aus Admi­nis­tra­to­ren­sicht spe­zi­ell Apple wie die Pest. So viel zum Rant.

Was man in der Schule von der Software eines Gerätes erwarten können muss

 

  1. Regel­mä­ßi­ge Betriebssystemupdates
  2. Regel­mä­ßi­ge Sicherheitsupdates
  3. Ver­läss­li­che Sand­bo­xes für Prüfungssituationen
  4. Ver­läss­li­ches, leicht zu bedie­nen­des MDM (Lösung zum Mana­gen der Gerä­te, wenn sie schul­ei­gen sind)

… über einen Zeit­raum von min­des­tens fünf Jah­ren. Ein Her­stel­ler, der das nicht bie­ten kann, hat nach mei­ner Mei­nung in der Schu­le bei schul­ei­ge­nen(!) Gerä­ten nichts verloren.

Damit fal­len (fast) alle Andro­id­ge­rä­te heraus.

Warum keine Androids?

Das Lizenz­mo­dell von Android ermög­licht erst die Her­stel­lung extrem güns­ti­ger Gerä­te. Die Quell­tex­te lie­gen offen, das Sys­tem lässt sich recht unauf­wän­dig an fast jede belie­bi­ge Hard­ware­um­ge­bung anpas­sen, d.h. als Her­stel­ler bin ich in der Wahl mei­ner CPU, mei­nes Gra­fik­pro­zes­sors usw. recht frei. Dar­aus ent­steht eine Viel­zahl an Pro­dukt­li­ni­en. Um das Sys­tem per­for­mant und schlank zu hal­ten, bricht man mit einem Grund­prin­zip von Linux, auf dem Android basiert: Dem gene­ri­schen System.

Ein gene­ri­sches Sys­tem läuft unver­än­dert auf sehr vie­len unter­schied­li­chen Umge­bun­gen: Ubun­tu kann ich auf fast jeden Rech­ner instal­lie­ren – Linux bringt die dafür erfor­der­li­chen Trei­ber gleich mit und erkennt z.B. Hard­ware beim Start vollautomatisch.

Ein gene­ri­sches Sys­tem kann dar­über­hin­aus zen­tral geup­datet wer­den – im Prin­zip läuft ja über­all das Glei­che. Lei­der schleppt natür­lich ein gene­ri­sches Sys­tem alles nur Denk­ba­re an Trei­bern mit sich und ist daher recht groß – das passt vor allem nicht zu güns­ti­ger Hardware.

Kurz gesagt: Bei Andro­iden muss der Her­stel­ler jedes Sicher­heits- und Funk­ti­ons­up­dates für alle sei­ne Pro­dukt­li­ni­en manu­ell ein­pfle­gen und sei­nen Kun­den z.B. als Betriebs­sys­tem­image bereit­stel­len. Das lohnt sich bei Gerä­ten wie Tablets und Han­dys mit ohne­hin meist kur­zer Ver­wen­dungs­zeit in der Regel nicht, sprich:

Die meis­ten Andro­id­ge­rä­te sind nach recht kur­zer Zeit sicher­heits­tech­nisch ein Debakel

Die ein­zi­ge ech­te Aus­nah­me, die ich dies­be­züg­lich ken­ne, ist die Nexus­se­rie von Goog­le selbst. Mei­ne Nexus­ta­blets der ers­ten Genera­ti­on erhal­ten bis heu­te zeit­nah Updates – schon fast vier Jah­re mittlerweile.

Man kann aus­wei­chen auf Com­mu­nities rund um Cya­no­gen­mod – Techi­es wie ich könn­ten das ggf.. – aber für Schu­len im All­ge­mei­nen ist das kei­ne Option.

In der Schu­le brau­che ich nach mei­nem Emp­fin­den Gerä­te, die min­des­tens drei, bes­ser fünf zuver­läs­sig lau­fen. Rea­lis­tisch fin­de ich eher einen Gerä­te­wech­sel nach drei Jah­ren, d.h. min­des­tens(!) drei Gerä­te pro Schul­lauf­bahn, denn schon heu­te wer­den die meis­ten Men­schen (auch und gera­de SuS!)  Gerä­te, die noch älter sind, auf­grund des tech­no­lo­gi­schen Wan­dels als unzu­mut­bar emp­fin­den – daher noch ein Seitenhieb:

Bei Kal­ku­la­tio­nen „Tablet preis­lich gegen Schul­buch / Taschen­rech­ner / Atlas“ ohne Ein­be­zug des tech­no­lo­gi­schen Wan­dels (Pro­duk­t­up­grade nach drei Jah­ren) wäre ich SEHR vor­sich­tig ob des rea­len Preis­vor­teils gegen­über heu­te – unser Wirt­schafts­sys­tem basiert nicht dar­auf, dass wir stän­dig weni­ger ausgeben.

 

iPads und Windowstablets 

Apple ist ein in sich geschlos­se­nes Sys­tem und Micro­soft macht den Her­stel­lern sei­ner Gerä­te recht rigi­de Vor­ga­ben, was die Hard­ware­aus­stat­tung angeht – im Prin­zip fah­ren die die gene­ri­sche Stra­te­gie des Linux­ker­nels. Damit ist die Sicher­heits­pro­ble­ma­tik in einem wesent­li­chen Kern­punkt ent­schärft, weil nicht der Her­stel­ler Updates bereit­stellt, son­dern eben Apple und Micro­soft und die­se Updates auch über die betriebs­sys­tem­ei­ge­nen Mecha­nis­men instal­lie­ren. Die damit ver­bun­de­ne Lang­fris­tig­keit macht den Ein­satz z.B. einer MDM-Lösung oder Klas­sen­raum­steue­rung erst beherrsch­bar: Wenn ich nicht andau­ernd ver­seuch­te Gerä­te wie­der­her­stel­len und neu in eine MDM-Lösung inte­grie­ren muss, wird die Bewäl­ti­gung des Arbeits­pen­sums mög­lich. Und gera­de Schul­ge­rä­te, die durch vie­le Hän­de gehen, sind gegen­über der­ar­ti­gen Drang­sa­lie­run­gen extrem gefähr­det. Selbst Apple hat mitt­ler­wei­le kapiert, dass ein 1:1‑Design eben nicht in eine 1:many-Umgebung passt und ent­wi­ckelt in die rich­ti­ge Rich­tung.

Nach­trag:

Etwas aus­führ­li­cher hat sich Andre­as Hof­mann mit der neu­en Initia­ti­ve von Apple beschäftigt.

 

Anfangsgenölewiederaufgriff

Mir ist völ­lig klar, dass mit der auto­ma­ti­schen Update­po­li­tik von Apple und gera­de auch Micro­soft auch sehr streit­ba­re Mecha­nis­men Ein­zug in die mobi­len Gerä­te hal­ten – vor allem vor dem Daten­schutz­hin­ter­grund. Mir wäre ein Ubun­tu-Touch auf frei­er Hard­ware ohne UEFI- und TPM-Mist bedeu­tend lieber.

Da wir aber im „Isn­um­mal­so­land“ leben, geht es um prag­ma­ti­sche Ansät­ze. Und da hat Apple schon auf­grund des App­an­ge­bot im Ver­gleich zu Micro­soft zur­zeit die Nase für vie­le Anwen­der halt vor­ne. Ich per­sön­lich fin­de das doof.

Viel­leicht fehlt es bei Andro­ids ein­fach auch nur an Dienst­leis­tern, die das Gan­ze z.B. mit Cya­no­gen­mod schlicht pro­fes­sio­na­li­sie­ren und Ser­vice­bund­les für drei bis fünf Jah­re anbieten.

1 2 3 4 5 23