Les restrictions horaires sous Linux

Avec Ubuntu Linux, il est possible d'affecter à votre ordinateur des restrictions horaires, afin d'empêcher la connexion d'un ou plusieurs utilisateurs à votre système. Grâce aux restrictions horaires, vous pourrez, par exemple, limiter l'accès à l'ordinateur pour vos enfants (une sorte de Contrôle Parental, en somme), ou bien encore protéger la connexion à votre serveur durant certaines heures.

2 grandes orientations s'offrent à vous:

  • utiliser une interface graphique (utilisateur normal)
  • configurer manuellement des fichiers textes (utilisateur avancé)

Pour utiliser une interface graphique, consulter la page sur le logiciel timekpr.

Le script CTparental que l'on retrouve dans la page de documentation comment mettre en place un contrôle parental se base sur les principes décrits dans la partie Configuration manuelle, mais automatise toutes les étapes.

Une fois le script installé il vous suffira de lancer :

sudo CTparental -off  # si vous ne voulez pas du filtrage sur Internet.

puis :

sudo CTparental -tlo  # pour paramétrer les plages horaires de connexion de chaque usager. Attention à bien se laisser un compte en accès H24 7/7

Comprendre ce que vous allez faire

Tout au long de ce tutoriel, nous allons nous servir du Module PAM (Pluggable Authentication Modules, en anglais modules d'authentification enfichables). Il permet de contrôler l'authentification des utilisateurs lorsqu'ils se connectent. Puis, nous utiliserons les fichiers de configuration de sécurité afin de définir les heures de connexion autorisées.
Ces manipulations peuvent être exécutées sur n'importe quelle version d'Ubuntu, et ne nécessitent qu'un simple éditeur de texte (vim, emacs, nano, gedit, kate, pour ne citer qu'eux).

Activer les Restrictions Horaires via le Module PAM

Tout d'abord, commencez par vous rendre dans le répertoire /etc/pam.d/, où se situe l'ensemble des services configurables :

$ ls /etc/pam.d/
atd   common-account   common-session  gdm                login   ppp    sudo
chfn  common-auth      cron            gdm-autologin      other   samba
chsh  common-password  cupsys          gnome-screensaver  passwd  su

Si nous souhaitons bloquer la connexion à l'ordinateur, nous allons devoir modifier le service lightdm. Editez donc le fichier lightdm et ajoutez-y cette ligne de code (à la fin du fichier) :

account required pam_time.so

Si vous utilisez kdm, ce sera donc ce fichier qu'il faudra ouvrir.
Et voilà, c'est terminé pour la configuration du module PAM ! Cela aura pour effet d'activer le contrôle des heures sur ce service .

Si vous possédez un serveur, vous ne disposez sûrement pas d'interface graphique. Auquel cas, Lightdm n'est pas installé et la connexion ne sera pas bloquée. Pour empêcher la connexion aux TTY, il faut modifier le fichier login du même dossier, et y ajouter la même ligne de code que celle précédemment citée. Cette manipulation est également valable pour les personnes qui ont installé une interface graphique et qui souhaitent bloquer l'accès à l'écran de connexion ainsi qu'aux terminaux.

Configurer les Horaires d'Accès

Maintenant que le service PAM a été activé, nous n'avons plus qu'à configurer les heures d'accès. Ouvrez le répertoire /etc/security. Plusieurs fichiers de configuration s'offrent à vous :

$ ls /etc/security/
access.conf  namespace.conf  pam_env.conf
group.conf   namespace.init  time.conf
limits.conf  opasswd         time.conf.bak

Editez le fichier time.conf. Quelques explications accompagnées d'exemples (en anglais) introduisent le fichier. Pour définir les horaires d'accès, copiez-collez la ligne de code suivante (à la fin du fichier, comme toujours) :

*;*;utilisateurs;horaires

A la place du champ utilisateur, écrivez le login du compte que vous souhaitez bloquer.

Si vous souhaitez bloquer plusieurs utilisateurs, écrivez leurs login à la suite, séparés par l'opérateur |. Par exemple, si je souhaite bloquer les comptes de patrick, jean et emilie :
*;*;patrick|jean|emilie;horaires

Par contre, si vous désirez bloquer l'accès au système pour tous les utilisateurs sauf un en particulier, il faut utiliser l'opérateur ! devant la personne concernée.
Par exemple, si je souhaite que l'accès à l'ordinateur soit refusé à tous les utilisateurs, excepté nicolas et xavier :

*;*;!nicolas|xavier;horaires

Intéressons-nous maintenant au champ horaires. C'est dans ce champ que la sélection du jour et des horaires de connexion autorisées sera possible.
Vous devez tout d'abord spécifier le jour de la semaine, au moyen des abréviations suivantes :

Mo : Lundi		Fr : Vendredi		Wd : Samedi/Dimanche
Tu : Mardi		Sa : Samedi		Wk : Lundi/Mardi/Mercredi/Jeudi/Vendredi
We : Mercredi		Su : Dimanche
Th : Jeudi		Al : Tous les Jours
Attention de ne pas confondre les abréviations Wk et Wd qui sont trompeuses ! et surtout mal identifiées sur internet : on trouve facilement des informations contradictoires !

Puis, on spécifie les heures limites. Celles-ci doivent être au format 24H, composée de 4 chiffres. Par exemple, pour limiter de 15H17 à 18H34, on écrira : 1517-1834.
Pour autoriser marie à se connecter seulement le Mardi, de 15H17 à 18H34, on obtient le résultat :

*;*;marie;Tu1517-1834

Les connexions en dehors de cette plage horaire seront interdites.
Tout comme pour les utilisateurs, il est possible d'utiliser les opérateurs | et ! pour indiquer plusieurs horaires (l'opérateur ! indiquera alors que toutes les heures de connexion seront autorisées, sauf celles qui seront indiquées).

Les deux étoiles (jokers) au début de la ligne de code remplissent respectivement les champs services et tty. Etant donné que l'on souhaite bloquer tout accès au système, il est inutile de spécifier quel service ou quel tty vous souhaitez bloquer.
Si toutefois vous souhaitez empêcher l'utilisation d'un service particulier, il suffit de le spécifier, comme l'exemple qui suit :
login;tty1|tty4|tty5;marie;!Wd0000-2400

Ainsi, l'utilisateur marie ne pourra pas se connecter aux TTY 1, 4 et 5 durant le week-end.

Quelques Exemples de Restrictions Horaires

mathilde est autorisée à se connecter tous les jours de 13H20 à 15H20, puis de 16H00 à 20H30 :

*;*;mathilde;Al1320-1520|Al1600-2030

pierre, franck et florian sont autorisés à se connecter de 14H00 à 18H45 pendant les jours de semaine, et de 14H00 à 22H15 pendant le week-end :

*;*;pierre|franck|florian;Wk1400-1845|Wd1400-2215

olivier n'est jamais autorisé à se connecter. jessica peut se connecter le Mercredi de 13H00 à 16H00 :

*;*;olivier;!Al0000-2400
*;*;jessica;We1300-1600
# 2 lignes différentes, car deux horaires différentes pour chacun des utilisateurs

Expiration d'une Session

Lorsqu'une Session arrive à expiration (qu'elle dépasse la limite horaire alors que l'utilisateur est déjà connecté), le module PAM ne peut atteindre l'utilisateur concerné. En effet, si mathilde se connecte pendant les horaires de temps autorisées, elle est tout à fait libre de dépasser ces plages horaires ! Pour cela, nous allons utiliser un nouveau programme : cron. Cette application exécute des commandes à des intervalles de temps données. Dans notre cas, nous allons faire usage de la commande skill -KILL -u FIXME (man skill sous xenial: "These tools are obsolete and unportable" ⇒ kill) pour déconnecter l'utilisateur lorsque la Session expire.
La Manipulation est très simple. Editez simplement le fichier /etc/crontab. Ajoutez-y alors la ligne de code suivante :

Minute Heure    * * Jour(s)   root    skill -KILL -u Utilisateur

Comme précédemment, remplacez les champs Minute et Heure aux horaires désirées. Puis, remplissez le champ Jour(s) par le(s) jour(s) interdit(s), ou tapez simplement une étoile (*) pour indiquer tous les jours de la semaine. Enfin, remplacez le champ Utilisateur par le login du compte à bloquer, et voilà !

Les Jours ne se notent pas de la même façon avec les tâches cron ! Voici la liste des abréviations à utiliser avec ce programme :
mon : Lundi	fri : Vendredi
tue : Mardi	sat : Samedi
wed : Mercredi	sun : Dimanche
thu : Jeudi	 *  : Tous les Jours

Quelques Exemples de tâches cron (avec les exemples d'horaires de la partie précédente)

jessica peut se connecter le Mercredi de 13H00 à 16H00
–> Déconnexion : Mercredi, à 16H00.

00 16    * * wed   root    skill -KILL -u jessica

mathilde est autorisée à se connecter tous les jours de 13H20 à 15H20, puis de 16H00 à 20H30.
–> Déconnexion : Tous les Jours, à 15H20 et 20H30.

20 15    * * *   root    skill -KILL -u mathilde
30 20    * * *   root    skill -KILL -u mathilde

pierre, franck et florian sont autorisés à se connecter de 14H00 à 18H45 pendant les jours de semaine, et de 14H00 à 22H15 pendant le week-end
–> Déconnexion (1) : Lundi, Mardi, Mercredi, Jeudi et Vendredi, à 18H45.
–> Déconnexion (2) : Samedi et Dimanche, à 22H15.

45 18    * * mon,tue,wed,thu,fri   root    skill -KILL -u pierre && skill -KILL -u franck && skill -KILL -u florian
15 22    * * sat,sun               root    skill -KILL -u pierre && skill -KILL -u franck && skill -KILL -u florian
La commande skill -KILL -u déconnecte l'utilisateur de l'interface graphique, mais aussi des TTY. Elle est donc parfaitement utilisable pour les administrateurs de serveur.
Cependant, cette commande est immédiate et la déconnexion sera faite sans avertissement. Il serait donc préférable de prévenir de l'installation de ce dispositif les utilisateurs de l'ordinateur ou du réseau en question !

Il est possible de prévenir les utilisateurs avec une commande wall lancée par cron quelques minutes avant la fin de la plage horaire, qui sera affichée dans les terminaux de tous les utilisateurs.

40 18    * * mon,tue,wed,thu,fri   root echo "fin de session dans 5 minutes" | wall

Pour prévenir les utilisateurs d'interface graphique, on peut utiliser à la place de wall la commande notify-send qui est dans le paquet libnotify-bin.

40 18    * * mon,tue,wed,thu,fri   pierre DISPLAY=:0 notify-send "fin de session dans 5 minutes"

FIXME


Contributeurs principaux :

  • tutoriel/restrictions_horaires.txt
  • Dernière modification: Le 10/05/2018, 16:48
  • (modification externe)