Anmeldung an bestimmten Rechner verbieten

Hallo,

gibt es eine Möglichkeit die Anmeldung an bestimmten Rechnern (z.B. Lehrerrechner) für bestimmte Gruppen (z.B. Schüler) zu unterbinden? Kann man irgendwo eine Überprüfung anhand des Hostnames z.B. einfügen?

vG

Hallo zefania,

das ist bei Samba so nicht vorgesehen, man müsste es aber durch geeignete Skripte hinbekommen. Ansatzpunkte wären:

Auf dem Server das Root-Preexec-Skript. Dort sind Rechnernamen und Username verfügbar. Man müsste zum Abmelden alle Samba-Prozesse killen, die dem User gehören. Eventuell wird dann aber der User nicht vom Client abgemeldet, er hat nur keinen Zugriff auf die Netzlaufwerke.

Oder auf den Clients: Bei Windows die Netlogon-Skripte. Hier könnte man bei einem Match mit shutdown -l den User wieder ausloggen. Auch beim Linux-Client gibt es Skripte, die bei der Anmeldung ausgeführt werden, wo man eine sofortige Abmeldung einfügen könnte.

Viele Grüße

Jörg

Hallo Jörg,

danke für die Hinweise. Ich schau mal, was man direkt auf den Clients machen könnte.

vG

Sind das Linux-Clients? Da geht es relativ einfach, wenn man einen Cronjob auf dem Server laufen läßt, der öfter mal überprüft, wer angemeldet ist. Du kannst mit wenig Aufwand das Script „doppelanmeldung.sh“ von Jesko anpassen

Hi Michael,

ich suche eher etwas, was die Anmeldung verhindert und nicht im Nachhinein korrigiert.

vG

Ok, ich habe es erst einmal so gelöst:

#!/bin/bash
#redirect all output to syslog (http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/)
exec 1> >(logger -s -t $(basename $0)) 2>&1

#define teacher computers
teacherComputers="a101-pc01 a103-pc22"
groups=`id -nG`
user=`id -nu`

#Only allow teachers, staff and admins to access specific computers
if [[ $teacherComputers == *$HOSTNAME* ]]
  then
    if [[ $groups == *teachers* ]] || [[ $groups == *staff* ]] || [[ $groups == *sudo* ]]
      then
        echo "$user is allowed to access the computer!";
      else
        echo "Access denied for $user"
        gnome-session-quit --logout --force
    fi
  else
    echo "No access restrictions on this computer!"
fi

Allerdings weiß ich noch nicht genau, wo der beste Ort, wo eine solche Datei hin soll. Ich habe es als “Startprogramm” hinzugefügt und da läuft es auch soweit. Wo wäre noch ein geeigneter Ort?

vG

Hi,

ich habe heute noch eine andere Lösung ausprobiert, die IMHO besser ist und schneller geht. Die Idee kommt von hier:
https://serverfault.com/questions/110298/restricting-account-logins-using-ldap-and-pam?answertab=votes#tab-top

Ich habe also folgendes am Ende meiner /etc/security/access.conf eingefügt:

-:ALL EXCEPT root linuxadmin (staff) (teacher):ALL

Und dann noch in der /etc/pam.d/common-account folgendes am Anfang eingefügt:

account required pam_access.so

Damit klappt es jetzt besser, da die Schüler sofort nach der Passworteingabe geblockt werden und nicht erst nach einem halben Anmeldevorgang. Einziges „Problem“: Die Fehlermeldung sagt, dass das Passwort nicht gültig ist, was ja so nicht stimmt. Aber das stört mich jetzt nicht so sehr - es erfüllt seinen Zweck :slight_smile:

vG

1 „Gefällt mir“

Beim PAM gibt es auch die Möglichkeit die Benutzer nur an bestimmten Tagen oder Zeiten zu sperren bzw. ihnen Zugang zu erlauben. Leider unterstützt das pam_time Module keine Gruppen, sondern nur einzelne User. Ich habe mir deshalb ein Skript geschrieben, welches die Benutzer ausliest und den entsprechenden Syntax für /etc/security/time.conf ausgibt:

#!/usr/bin/python3
import csv
from subprocess import call

classes = {}
out = ""
user = ""

#creates updated csv in /var/lib/sophomorix/print-data/all.csv
call(["sophomorix-print", "-a"])

with open('/var/lib/sophomorix/print-data/all.csv', 'rU') as exemplarfile:
    reader = csv.reader(exemplarfile, delimiter=';')
    i = 0
    #get all classes and put the user in the right class
    for row in reader:
        if row[1] != "teachers":
            if row[1] not in classes:
                classes[row[1]] = []
            classes[row[1]].append(row[2])

    #create the strings for /etc/security/time.conf
    for grade in classes:
        #print("\n"+grade)
        user = "* ; * ; "
        for i in range(0, len(classes[grade])):
            #print(classes[grade][i])
            if i == 0:
                user += classes[grade][i]
            else:
                user += "|" + classes[grade][i]
        out += "\n" + user + "; Wk0730-1330"

print(out)

Das Time-Module muss noch in der /etc/pam.d/common-auth aktiviert werden:

account required pam_time.so

Mit obigen Skript regele ich den Zugang zu den Computern, die bei uns in den Grundschulklassen stehen. Wk0730-1330 bedeutet: an allen Werktagen zwischen 7.30 und 13.30 Uhr.

vG