[[Vorlage(Kopie, pam_time)]] [[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:sudo: Root-Rechte] [:Editor: Bearbeiten von Textdateien] [:Terminal: Ein Terminal öffnen] [:PAM:Benutzer-Authentifizierung und -anmeldung konfigurieren] }}} [[Inhaltsverzeichnis(3)]] '''pam_time''' ist ein Bestandteil von [wikipedia:Pluggable_Authentication_Modules:PAM], den Pluggable Authentication Modules[4]. Sie sind eine Softwarebibliothek, welche für Authentifizierungsdienste zur Verfügung steht. Damit kann man bestimmten Benutzern die Nutzung bestimmter [:Dienste:], Programme oder generell die Anmeldung am Computer zu bestimmten Uhrzeiten an bestimmten Tagen erlauben oder verbieten. Dieser Artikel erklärt jedoch nur die Einschränkung der Nutzungszeit des Rechners durch eine Sperre der Anmeldung. = Installation = Die benötigte Software ist bereits ein integraler Bestandteil von Ubuntu, siehe [:PAM:]. = Anwendung = Grundsätzlich ist das Modul `pam_time` recht einfach benutzbar: 1. Als Erstes werden gewünschte Zeiten in der Konfigurationsdatei '''time.conf''' im Verzeichnis '''/etc/security/''' eingerichtet. [#Konfiguration-der-time-conf „Konfiguration der '''time.conf'''“] 1. Im zweiten Schritt wird das Zeitmodul '''pam_time.so''' durch einen Eintrag in der Konfigurationsdatei '''common-account''' im Verzeichnis '''/etc/pam.d''' aktiviert. [#Aktivierung-der-Zeitsteuerung „Aktivierung der Zeitsteuerung“] Diese beiden Schritte werden in den folgenden Abschnitten ausführlich erklärt. Um sich bei der Einrichtung nicht selber auszusperren, muss man die ebenfalls unten beschriebene Funktionsweise verstehen und beachten. Abschließende [#Beispiele Beispiele] verdeutlichen die Anwendung und decken typische Nutzungsmöglichkeiten ab. == Funktionsweise == Das Modul `pam_time`, sofern aktiviert, prüft beim Anmeldevorgang Zeile für Zeile die Regeln in seiner Konfigurationsdatei und selektiert alle Regeln bzw. Zeilen, bei der Service, Terminal und Benutzername des aktuellen Anmeldeversuchs mit den Kriterien der Regel übereinstimmen: * Die Prüfung beginnt, als wäre eine Regel ''„Alle dürfen sich jederzeit anmelden.“'' vorgegeben. * Wenn eine auf die aktuelle Anmeldesituation passende Zeile gefunden wird, gilt als neuer zulässiger Zeitraum die Überlappung aus bisherigem und dem in dieser Regel positiv bestimmten Zeitraums. * Nach Abarbeitung aller Zeilen wird geprüft, ob der aktuelle Zeitpunkt im so bestimmten zulässigen Zeitraum liegt; wenn dies nicht erfüllt ist, wird der Anmeldeversuch als unzulässig abgewiesen, sonst als grundsätzlich zulässig zurück gemeldet. Der zulässige Zeitraum (der auch aus mehreren Teilbereichen bestehen kann) wird also durch zusätzliche Zeilen immer nur eingeschränkt und niemals erweitert. In der Praxis sollte man zur Vermeidung eigener Verwirrung in den Regeln immer die Zeiträume notieren, innerhalb deren eine Anmeldung zulässig ist. Beachte: In der Praxis will man oft die zulässigen Arbeitszeiten am Rechner beschränken. Das Modul `pam_time` beschränkt aber nur die Anmeldezeitpunkte und beendet selbst nicht eine aktive Sitzung; das muss man durch zusätzliche Maßnahmen sicherstellen. == Aktivierung der Zeitsteuerung == Damit die Zeitsteuerung überhaupt aktiviert wird, muss sie in der Konfigurationsdatei '''common-account''' im Verzeichnis '''/etc/pam.d/''' eingetragen werden. {{{#!vorlage Warnung Die hier vorgeschlagene Arbeitsweise kann zu einem unbenutzbaren System führen: 1. Die Dateien '''/etc/pam.d/common-*''' werden automatisch vom Paketsystem [:APT:] verwaltet. Inkompatible eigene Änderungen können bei Aktualisierungen unerwartete Folgen haben! 1. Diese Dateien wird von allen Authentifizierungsmethoden für alle Services verwendet. Das ist zwar im Rahmen dieses Artikels erwünscht, kann aber bei fehlerhafter Konfiguration zum vollständigen Ausschluss führen! }}} Aktivierung: Mit Root-Rechten[1] in einem Texteditor[2] folgenden Eintrag entweder am Anfang oder am Ende der Konfigurationsdatei einfügen: {{{ account required pam_time.so }}} Es erscheint dann bei der Anmeldung am [:Displaymanager:] der Hinweis "`Passwort ungültig, bitte wiederholen`" (Ubuntu), "`Falsches Passwort, bitte wiederholen`" (Derivate von Ubuntu) oder ein ähnlicher Hinweis. Es sind keine Änderungen in weiteren Konfigurationsdateien erforderlich, da die Datei '''common-account''' in allen anderen Dateien bereits eingebunden ist. Dies betrifft auch die Anmeldung an einer [:Terminal#Virtuelle-Konsole:virtuellen Konsole]! == Konfiguration der time.conf == Die Definition der erlaubten Zeiten für eine Anmeldung erfolgt mit einem Texteditor[2] mit Root-Rechten[1] in der Datei '''/etc/security/time.conf'''. Diese Datei muss ggf. selbst angelegt werden, muss dem Benutzer [:root:] gehören und darf nur von diesem beschreibbar sein. === Aufbau === Eine Konfiguration besteht aus mindestens einer Zeile, welche grundsätzlich so aufgebaut ist: {{{ # Was?; Wo? ; Wer? ; Wann? login ; ttys ; users ; times }}} Jede Zeile besteht aus vier Spalten, welche durch ein Semikolon "`;`" voneinander getrennt werden. Spalten zwischen den Semikolons können anstatt durch ein Leerzeichen durch den [#Moegliche-Operatoren Platzhalter] `*` freigehalten werden. Das bedeutet, dass beispielsweise ein `*` in der Spalte `users` keine Einschränkungen der Benutzer macht: Diese Regel in dieser Zeile gilt dann also für alle Benutzer. === Ausfüllhilfe === * Die erste Spalte muss grundsätzlich nicht verändert werden, da im Artikel nur Logins konfiguriert werden sollen. * `ttys` setzt man am besten auf `*`, um wirklich alle möglichen Orte von versuchten Anmeldungen zu erfassen. * Für `users` wird der Benutzer eingetragen, welcher mit dieser Zeile zeitlich beschränkt werden soll. * Bei `times` werden die erlaubten Zeiten für den Benutzer eingetragen. Eine Umkehrung durch Operatoren wie `!` (Logisches "Nicht") ist möglich: {{{ login ; * ; users ; !times }}} Dann darf sich der Benutzer, welcher für `users` einzusetzen ist, nicht in den Zeiten, die für `times` einzusetzen sind, einloggen. {{{#!vorlage Experten `login` ist der Service, auf den sich der Artikel mit seinen Erklärungen und Beispielen bezieht. Experten haben hier erweiterte Konfigurationsmöglichkeiten, die der Artikel aufgrund ihrer Komplexität nicht abdecken kann. Mit `login` sind bereits häufige Nutzungsmöglichkeiten sehr gut abgedeckt. }}} Die vollständigen Möglichkeiten werden in den folgenden Tabellen beschrieben und anschließend in [#Beispiele Beispielen] konkret mit eingesetzten Benutzern und Zeiten angewendet. === Parameter (Spalte 1-4) === Folgende Parameter sind zwingender Bestandteil der '''time.conf''': {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Konfiguration +++ Parameter Bedeutung +++ `services` Eine logische Liste der PAM-Service-Namen, für die die Regel gilt. Für Logins wird immer einfach `login` eingetragen. +++ `ttys` Eine logische Liste der Terminal Namen, für die diese Regel gilt. Empfehlung: `*` für alle Terminals (und virtuelle Konsolen) +++ `users` Eine logische Liste von Benutzernamen. Sie werden so voneinander getrennt: Benutzer01|Benutzer02 +++ `times` Eine logische Liste von Tagen und Zeitspannen. Beispiele in den folgenden Tabellen. +++ `#` Leitet einen Kommentar ein. Alles nach diesem Zeichen bist zum Zeilenende wird von '''pam_time''' ignoriert. Damit kann man eigene Anpassungen dokumentieren oder deaktivieren. }}} ==== Tagesbezeichnungen ==== {{{#!vorlage Tabelle <-2 tablestyle="width: 57%;" rowclass="titel"> Mögliche Bezeichnungen für Tage im Abschnitt `times` +++ Bezeichnung Bedeutung +++ `Mo` montags +++ `Tu` dienstags +++ `We` mittwochs +++ `Th` donnerstags +++ `Fr` freitags +++ `Sa` sonnabends +++ `Su` sonntags +++ `Wk` Arbeitstage ('''w'''or'''k'''), Abkürzung für `MoTuWeThFr` +++ `Wd` an Wochenenden ('''w'''eeken'''d'''), Abkürzung für `SaSo` +++ `Al` an allen Tagen, Abkürzung für `MoTuWeThFrSaSo` }}} Die Tage bestehen also jeweils aus zwei Zeichen. Sie können miteinander kombiniert werden. Dabei gibt es jedoch einige Besonderheiten zu beachten. ==== Besonderheiten bei Tagen ==== {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Besonderheiten bei der Kombination von Tagen +++ Kombination Erklärung +++ `MoMo` Wiederholte Tage werden wie ungenannte Tage behandelt, also deaktiviert. `MoMo` hebt also den Montag auf, was dazu führt, dass in diesem Beispiel gar kein Tag aktiviert ist. +++ `MoWk` Verschiedene Tage werden wie Ausnahmen kombiniert, also die Teilmenge von der Gesamtmenge ausgeschlossen. Alle Wochentage außer Montage. +++ `AlFr` Alle Tage außer Freitag. }}} ==== Uhrzeitformat ==== {{{#!vorlage Tabelle <-2 tablestyle="width: 57%;" rowclass="titel"> Format der Uhrzeit-Angaben +++ Format Erklärung +++ `HHMM` Stunde und Minute im 24-Stunden-Format +++ `HHMM-HHMM` Start- und Endzeit der Regel }}} === Mögliche Operatoren === {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Mögliche Operatoren für alle vier Parameter +++ Verfügbare Operatoren Bedeutung +++ `!` Logisches "Nicht". Alles außer der folgende Parameter. +++ `&` Logisches "Und". Als Kombination zweier Parameter zwischen diesen platziert. Gilt für beide Elemente. +++ `|` Logisches "Oder". Als Oder zweier Parameter zwischen diesen platziert. Gilt für ein Element, welches zutreffen muss. +++ `*` Platzhalter für alle möglichen Elemente eines Parameters. Kann allein stehen oder ein Teilelement erweitern. Nicht verwendbar für Zeitangaben. }}} Diese Konfigurationen sind sofort und ohne Neustart des Computers wirksam. == Hinweise zu SSH == Damit das auch mit [:SSH/#Der-SSH-Server:SSHD] zusammen funktioniert muss man in der '''/etc/ssh/sshd_config''' den Parameter `UsePam` auf `yes` setzen. = Beispiele = == Kurze Beispiele zum Verständnis == {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Beispiele für die '''time.conf''' +++ Beispiel Erklärung +++ ` * ; * ; * ; Al0000-2400` Für alle Anmeldesituationen ist jederzeit eine Anmeldung zulässig. Diese Regel muss man nicht selbst verwenden, da sie implizit immer am Anfang der Prüfung steht. +++ ` * ; * ; * ; !Al0000-2400` Für alle Anmeldesituationen ist niemals eine Anmeldung zulässig. Diese Regel wird man natürlich niemals verwenden wollen. +++ `* ; * ; alice ; !SuMoTuWeTh2200-0700` Für alle PAM Services aus dem Verzeichnis '''/etc/pam.d''' auf allen virtuellen Konsolen und Terminals gilt für Benutzerin '''alice''' ein Anmeldeverbot von 22.00 Uhr bis 07.00 Uhr an allen Tagen, außer Freitag und Sonnabend. Hinweise: Für Logins ist `login` in erster Spalte empfohlen, und die Zeiträume schreibt man besser unter Vermeidung der Negation wie im folgenden Beispiel. +++ `* ; * ; alice ; SuMoTuWeTh0700-2200 | FrSa0000-2400` Benutzerin `alice` darf sich von Sonntag bis Donnerstag nur im Zeitraum 07-22 Uhr anmelden, aber an Freitagen und Samstagen jederzeit. +++ `* ; * ; ! bob ; !Wk1230-1315` Jeder außer `bob` muss an Werktagen die Mittagspause einhalten. (Eigentlich: … darf sich nur außerhalb der Mittagspause anmelden.) +++ `login;tty* & !pts*;du|ich;!Al0000-2400` Benutzer `du` oder `ich` darf sich niemals an einer [:Terminal#Virtuelle-Konsole:virtuellen Konsole] (`tty*`) anmelden (`login`). An Terminals (`pty*`) gilt diese Regel aber nicht, d.h. für Anmeldeversuche an diesen Stellen wird die Zeitanforderung gar nicht geprüft und ebenso nicht für andere Benutzer außer `du` oder `ich`. +++ `login ; * ; !tom ; WdMo0300-0400` Jeder Benutzer außer `tom` (also betrifft die Regel auch [:root:]!) darf sich am Wochenende und an Montagen in der Zeit von 03.00 Uhr bis 04.00 Uhr (und nur dann!) an allen (`*`) virtuellen Konsolen oder Terminals anmelden (`login`). Beachte: Was `tom` darf, wird überhaupt nicht durch diese Regel eingeschränkt! (Eine solche Regel realisiert vermutlich nicht das, was der Systemverwalter erreichen wollte.) }}} == Nutzungszeit des Computers einschränken (vollständiges Anwendungsbeispiel) == Ziel ist eine leicht umsetzbare Lösung für eine Kindersicherung durch Beschränkung der Nutzungszeit, welche den Login außer am Wochenende (So-Do) 22 bis 7 Uhr verhindert. Sollte man zu der Zeit noch eingeloggt sein, bekommt man 20 min vor Schluss ein Hinweisfenster und danach fährt der Computer um 22 Uhr herunter. Ein erneuter Login soll durch eine Anmeldesperre bis 7 Uhr morgens nicht mehr möglich sein. Danach kann man den Computer wieder betreiben, bis er spätestens 22 Uhr wieder herunterfährt. ## Als erstes wird '''PAM''' so konfiguriert, dass sich das Kind im Bereich der eingestellten Uhrzeitspanne nicht mehr am System anmelden kann. Danach wird die Zeitsteuerung [:Cron#Die-systemweite-Cron-Tabelle-etc-crontab:] des Systems so erweitert, dass das Betriebssystem mit Hilfe von '''cron''' zur angegebenen Zeit den Computer des Kindes eigenständig herunterfährt. 20 min davor erscheint ein Hinweisfenster, welches das Kind davon in Kenntnis setzt und es bittet, seine Aktivitäten zu beenden. === pam_time aktivieren und konfigurieren === Zunächst wird die Zeitsteuerung konfiguriert danach aktiviert, wie im Abschnitt [#Anwendung Anwendung] beschrieben. Die benötigten zwei Einträge am Ende der beiden Dateien kann man mit zwei [:echo:]-Befehlen in Verbindung mit [:Shell/Umleitungen#tee-Ausgabe-verdoppeln:tee] automatisch vornehmen lassen, wenn man die gewünschten Werte einträgt: {{{#!vorlage Befehl echo '* ; * ; username ; !SuMoTuWeTh2200-0700' | sudo tee -a /etc/security/time.conf echo 'account required pam_time.so' | sudo tee -a /etc/pam.d/common-account }}} Man muss die Dateien also nicht manuell bearbeiten, sondern passt die Werte in diesen echo-Befehlen an und führt die Befehle aus. Das verhindert, dass man versehentlich in einem Editor wichtige vorhandene Systemeinstellungen in den Dateien zerstört und lässt sich bequem ohne besonderes Vorwissen ins Terminal kopieren. Für `username` trägt man den Nutzernamen des Kindes (in Kleinbuchstaben) ein. `!SuMoTuWeTh2200-0700` ist die Uhrzeit der Anmeldesperre im Format `HHMM-HHMM` (`HH`=Stunde, `MM`=Minute), wobei zuerst die Start- und dann die Endzeit eingetragen wird. Das "`!`" bedeutet, dass zu der Zeit der Zugang gesperrt wird. `SuMoTuWeTh` bedeutet gültig am "Sonntag Montag Dienstag Mittwoch Donnerstag" zu der eingetragenen Uhrzeit. Die Sperre ist also am Freitag (`Fr`) und Samstag (`Sa`) aufgehoben. {{{#!vorlage Hinweis Auf exakte Schreibweise des Formates achten! Keine Leerzeichen zwischen den Tagen! }}} === Cron konfigurieren === Eine wirksame Sperre der Anmeldungkann leicht dadurch umgangen werden, indem sich der Benutzer zur gewünschten Sperrzeit einfach nicht ausloggt. Mit der Zeitsteuerung [:Cron#Die-systemweite-Cron-Tabelle-etc-crontab:Cron] kann man dieses Ausloggen in Sperrzeiten erzwingen. Daher ist dieser zusätzliche Schritt für eine wirksame zeitliche Zugangsbeschränkung im Sinne etwa einer Kindersicherung streng empfohlen bzw. nötig. [[Vorlage(Bildunterschrift, pam_time-cron-zenity.png, 300, "Ankündigung", left)]] {{{#!vorlage Hinweis Falls man [:Kubuntu:] benutzt, sollte man noch [:Zenity#Installation:] nachinstallieren, damit das Kind ein Hinweisfenster vor dem Herunterfahren bekommt. }}} Dazu werden mit Root-Rechten[1] vier Zeilen ganz am Ende der Datei [:Cron#Die-systemweite-Cron-Tabelle-etc-crontab:/etc/crontab] eingetragen, welche für die Zeitsteuerung des Herunterfahrens verantwortlich ist. Auch in diesem Beispiel erfolgen die Eintragungen über echo-Befehle im Terminal. {{{#!vorlage Befehl echo '### kidstime' | sudo tee -a /etc/crontab echo '00 22 * * 1-4 root shutdown -h now' | sudo tee -a /etc/crontab echo '40 21 * * 1-4 username DISPLAY=:0 LANG=de_DE.UTF-8 zenity --info --text "Hallo liebes Kind. Bitte beende deine Aktivitäten. Für heute ist Schluss. In 20 min wird der Computer automatisch ausgeschalten..."' | sudo tee -a /etc/crontab echo '# Ende (als letzte Zeile der Crontab unbedingt benötigt!)' | sudo tee -a /etc/crontab }}} Zeilen 1 und 4 sind lediglich erläuternde Kommentare, welche in die Konfigurationsdatei '''/etc/crontab''' eingetragen werden sollten. Die letzte Zeile muss sogar eingetragen werden, da die letzte Zeile immer ein Kommentar oder eine eingefügte unsichtbare Leerzeile sein muss. Zeile 2: `00 22` ist die Uhrzeit, zu der der Computer herunterfahren soll. Sie wird im Format `MM HH` eingetragen. Im Beispiel fährt der Computer um 22.00 Uhr herunter und zwar am Wochentag `1-4`, von Sonntag zu zählen beginnend: `1`=Sonntag, `4`=Donnerstag. Zeile 3: Um 21.40 Uhr, gekennzeichnet als `40 21` in Zeile 3, erfolgt ein Hinweisfenster beim zuerst (bzw. allein) eingeloggten Benutzer. `1-4` in dieser dritten Zeile ist nochmals die Festlegung der Wochentage. Als `username` ist wieder der gewünschte Benutzer einzusetzen. {{{#!vorlage Hinweis Zum Löschen oder Verändern der bearbeiteten Konfigurationsdateien öffnet man sie mit Root-Rechten[1] mit einem Texteditor[2]. Ein vorangestelltes "`#`" vor einer Zeile deaktiviert diese vorübergehend. }}} = Links = * [http://www.linux-pam.org/ PAM-Projektseite] {en} * [man:pam_time:] {en} - Manpage * [http://tldp.org/HOWTO/User-Authentication-HOWTO/x115.html] {en} - mehr Hintergrundinformationen zu '''PAM''' * [http://linuxwiki.de/PAM] - Linuxwiki: Was man mit PAM noch alles machen kann * [askubuntu:68918/how-do-i-restrict-my-kids-computing-time:How do I restrict my kids computing time?] {en} * [askubuntu:183530/how-to-lock-yourself-out-of-the-primary-account-temporarily:How to lock yourself out of the primary account temporarily?] {en} - pam_time in [:LightDM:] einbinden * [ubuntu_fr:tutoriel/restrictions_horaires:Les restrictions horaires sous Linux] {fr} im franz. Ubuntu-Wiki * [github:grover66/kidtimer:kidtimer] {en} - Shell-Skript zur Einschränkung der Benutzerzeit * [topic:timekpr-und-nanny-ersatz-fuer-xubuntu:timekpr- und nanny-Ersatz] - weitere Skript-Lösung # tag: System, Sicherheit, Shell, Desktop, Kinder