doku:pamsshaccess
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
— | doku:pamsshaccess [2009-05-16 09:00] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== | ||
+ | Per SSH sollen sich Benutzer jeweils nur von bestimmten Hosts erlaubt werden. | ||
+ | |||
+ | Siehe auch [[pamdiensteerlauben]] | ||
+ | |||
+ | Beispiel Benutzer < | ||
+ | |||
+ | * / | ||
+ | < | ||
+ | account | ||
+ | </ | ||
+ | |||
+ | * / | ||
+ | < | ||
+ | + : testuser : fc4.strukturpunkt.de | ||
+ | - : testuser : ALL | ||
+ | </ | ||
+ | |||
+ | * DNS-Lookup wird jeweils on-the-fly gemacht, keine Neustart nötig. | ||
+ | |||
+ | * Falls root reglementiert wird: access.conf wird auch für cron gelesen, daher für '' | ||
+ | < | ||
+ | + : root : cron | ||
+ | + : root : 192.168.4.1 | ||
+ | - : root : ALL | ||
+ | </ | ||
+ | |||
+ | Getestet: | ||
+ | * Zugriff via Passwort und/oder authorized_keys | ||
+ | * Fedora 7 | ||
+ | * Debian 4.0 (Etch) | ||
+ | ===== Umgang mit dynamischen IP-Nummern | ||
+ | |||
+ | * / | ||
+ | < | ||
+ | # | ||
+ | # (c) 2006 Klaus.Franken@StrukturPunkt.de | ||
+ | # | ||
+ | |||
+ | # creates $SYSTEMFILE from $TEMPLATE | ||
+ | # change lines like " | ||
+ | # store actual ip-numer in / | ||
+ | # print ip-number only if changed | ||
+ | |||
+ | # Version: 6.12.1 | ||
+ | |||
+ | use strict; | ||
+ | use Net::DNS; | ||
+ | use IO::File; | ||
+ | |||
+ | my $SYSTEMFILE="/ | ||
+ | my $TEMPLATE="/ | ||
+ | |||
+ | sub getSaveIp ($) { | ||
+ | my $DYNDOMAIN=shift; | ||
+ | |||
+ | my $VARRUN="/ | ||
+ | my $dynip; | ||
+ | my $dynipLast; | ||
+ | my $res = Net:: | ||
+ | my $query = $res-> | ||
+ | |||
+ | if ($query) { | ||
+ | foreach my $rr ($query-> | ||
+ | next unless $rr-> | ||
+ | # | ||
+ | $dynip=$rr-> | ||
+ | } | ||
+ | } else { | ||
+ | warn "query failed: ", $res-> | ||
+ | # exit 1; | ||
+ | } | ||
+ | |||
+ | |||
+ | if (-r $VARRUN) { | ||
+ | my $Fd = new IO::File; | ||
+ | open ($Fd, $VARRUN) || die ("open $VARRUN: $!"); | ||
+ | $dynipLast = < | ||
+ | chomp($dynipLast); | ||
+ | close($Fd); | ||
+ | } | ||
+ | |||
+ | if ($dynipLast ne $dynip) { | ||
+ | print "new dynip($DYNDOMAIN): | ||
+ | my $Fd = new IO::File; | ||
+ | open ($Fd, "> $VARRUN" | ||
+ | print $Fd " | ||
+ | close($Fd); | ||
+ | } | ||
+ | return ($dynip); | ||
+ | } | ||
+ | |||
+ | my $FdTemplate = new IO::File; | ||
+ | open ($FdTemplate, | ||
+ | |||
+ | my $FdSystem = new IO::File; | ||
+ | open ($FdSystem, "> | ||
+ | |||
+ | while (my $line = < | ||
+ | if ($line =~ / | ||
+ | my $hostname=$1; | ||
+ | #print " | ||
+ | my $dynip=getSaveIp($hostname); | ||
+ | if (! $dynip) { | ||
+ | warn " | ||
+ | } | ||
+ | $line =~ s/ | ||
+ | } | ||
+ | print $FdSystem $line; | ||
+ | } | ||
+ | close ($FdTemplate); | ||
+ | close ($FdSystem); | ||
+ | |||
+ | exit 0; | ||
+ | |||
+ | </ | ||
+ | * Perl-Modul Net::DNS | ||
+ | * Test: %%perl -e "use Net:: | ||
+ | * Debian: '' | ||
+ | * mkdir / | ||
+ | * / | ||
+ | < | ||
+ | account | ||
+ | account | ||
+ | </ | ||
+ | * :!: Debian-Trouble: | ||
+ | |||
+ | * / | ||
+ | < | ||
+ | + : testuser : dynip(fc4.strukturpunkt.de) | ||
+ | - : testuser : ALL | ||
+ | </ | ||
+ | |||
+ | ===== Ausblick | ||
+ | * pam_exec.so | ||
+ | ===== Trouble gelöst ===== | ||
+ | < | ||
+ | so richtig glücklich bin ich mit den Hausmitteln von PAM nicht geworden: | ||
+ | |||
+ | - in der Prüfung von pam_access.so wird dummerweise imm der erste | ||
+ | gefundene Hostname hergenommen (also: es wird eine Reverse-Lookup auf | ||
+ | die IP-Nummer gemacht und dieser Name wird für weitere Prüfungen | ||
+ | hergenommen; | ||
+ | nicht überprüft) | ||
+ | |||
+ | - damit können wir nicht formulieren, | ||
+ | eine IP-Nummer aufgelöst wird und erlaubt/ | ||
+ | |||
+ | - Es gibt zwar ein PAM-Modul pam_exec. Aber darin ist nicht vorgesehen | ||
+ | die aktuellen Login-Daten abzufragen. Man kann einfach nur ein Programm | ||
+ | starten. | ||
+ | |||
+ | Ich sehe folgende Lösungmöglichkeiten: | ||
+ | |||
+ | 1. http:// | ||
+ | Das pam-exec (nicht zu verwechseln mit pam_exec !) startet ein Programm | ||
+ | _und_ übermittelt die Login-Daten ähnlich wie das Modul pam_warn. Darin | ||
+ | könnten wir die gewünschte Prüfung machen. | ||
+ | |||
+ | Allerdings muss dafür selbst compiliert werden. Das halte schlecht | ||
+ | pflegbar und zu fehleranfällig auf Dauer (insbesondere bei vielen Systemen) | ||
+ | |||
+ | 2. Wir schränken den Login auf Domains ein, z.B. .dsl.de.ignite.net | ||
+ | Das entspricht als Login-Regel dem was wir aktuell in der Logwatch per | ||
+ | Sichtprüfung machen. Allerdings bringt das nicht wirklich viel und Sie | ||
+ | haben damit kein Möglichkeit mal eben von einem anderen Provider die | ||
+ | Verbindung aufzubauen. | ||
+ | |||
+ | 3. per " | ||
+ | r2d2.selfip.net aktuell ermittelt und dies die Regeldatei | ||
+ | / | ||
+ | pam_access.so bzw. / | ||
+ | IP-Nummer darf. | ||
+ | Das ist zwar ein wenig von hinten durch die Brust ins Auge programmier, | ||
+ | aber der Aufwand hält sich in Grenzen und es ist IMHO übersichtlich genug. | ||
+ | |||
+ | Die Variante 3 ist mein Favorit! Soll ich's so machen? | ||
+ | </ | ||
+ | |||
+ | Variante wurde umgesetzt, s. o. |