Anhang: ist-zuhause
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #! /bin/dash -e # /usr/local/sbin/ist-zuhause tested, ob Rechner im heimatlichen Netzwerk # Copyright (c) 2023 kB @ UbuntuUsers.de # SPDX-License-Identifier: GLWTPL # https://spdx.org/licenses/GLWTPL.html (Good Luck With That Public License) # Die nächste Zeile lt. Anleitung individuell anpassen! TOKEN='fe80::3681:c4ff:fe▒▒:▒▒▒▒ dev cable lladdr 34:81:c4:▒▒:▒▒:▒▒ router' PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin case $PAM_TYPE in (auth) test -n "$PAM_USER" && getent group nopasswdlogin | grep -wq "$PAM_USER" && ip -6 neigh | grep -q "$TOKEN" && exit 0 # 0 = SUCCESS ;; (*) false esac || exit 9 # 9 = AUTH_ERR exit 255 |
Dieses Skript prüft für PAM, ob der ausführende Rechner sich im heimatlichen Netzwerk aufhält oder nicht und meldet das Ergebnis als Rückgabewert:
0
bedeutet: „Der Rechner ist zuhause.“,9
(oder jeder andere Wert) bedeutet: „Er ist nicht zuhause oder es kann nicht entschieden werden.“
Das Skript muss herunter geladen und im Ordner /usr/local/sbin als ausführbare Datei abgelegt werden. Es muss root gehören und nur root
darf in die Datei schreiben können. Auch die Ordner im Pfad /usr/local/sbin dürfen nur durch root
beschreibbar sein. Dateibesitzer und Dateirechte sind ggf. mit dem Programmen chown und chmod richtig einzustellen.
Im Skript ist in der Zeile 8 der Wert für die Variable TOKEN
individuell einzustellen. Dazu führt man im Heimatnetz den Befehl
ip -6 neigh
aus und kopiert aus dessen Ausgabe die Angaben für den eigenen Router als Wert in das Skript. Dabei ändern sich individuell:
die IPv6-Link-Local-Adresse des Routers
fe80:…
der Name der Netzwerk-Schnittstelle (im Beispiel
cable
)die Layer-2-Adresse des Routers (die 6 Hexadezimalzahlen nach
lladdr
)der DNS-Name des Routers (im Beispiel
router
)
Nicht mit kopieren darf man das letzte Wort der Ausgabezeile mit dem momentanen Status der Nachbarschaftsangaben.
Das Skript ist vorgesehen für die Ausführung durch das PAM-Modul pam_exec
. Dieses versorgt das Skript mit einigen Umgebungsvariablen wie PAM_TYPE
, PAM_USER
u.a.
Das Skript soll nur für das Thema auth
etwas prüfen und liefert bei einem Aufruf in anderen Kontexten immer Misserfolg zurück. Für auth
werden drei Prüfungen durchgeführt:
Wurde überhaupt ein Benutzername benannt?
Ist dieser Benutzer berechtigt, statt einer Passwort-Eingabe ein TOKEN zu verwenden? Dazu muss er zur Gruppe
nopasswdlogin
gehören. Diese Gruppe muss man selber anlegen und die gewünschten Benutzer dieser Gruppe zuordnen. Man kann aber auch ganz auf diese Prüfung verzichten.Ist der Rechner im Heimatnetz?
Wenn alle Prüfungen bejaht wurden, meldet das Skript Erfolg zurück, sonst Misserfolg.
Natürlich ist das alles fälschbar und somit ist das Verfahren höchstens solange sicher, bis der Angreifer weiß, was er fälschen muss.