Ceci est une ancienne révision du document !
Les Restrictions Horaires sous Linux
Introduction
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é)
Utilisation du logiciel timekpr
Ce logiciel se télécharge depuis ces pages : https://launchpad.net/timekpr. Bien que le site soit en anglais, le logiciel est traduit en français. Un fichier deb est fourni pour Ubuntu. Une fois installé, le logiciel est logiquement placé dans le menu "Système → Administration".
Pour Ubuntu 9.04 (Jaunty Jackalope) il suffit de rajouter les dépôts suivants au fichier /etc/apt/sources.list :
deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu jaunty main
Et la clé pour accéder aux dépôts :
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6DE44C38
L'interface est excessivement simple et se compose de 2 onglets :
- Le tableau de bord qui récapitule les réglages (ici pour l'utilisateur Nathalie) :
- L'écran de configuration des règles (ici pour l'utilisateur Nathalie) :
Il est possible de définir une durée maximale d'utilisation par jour et/ou des heures limites d'utilisation.
Configuration manuelle
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 gdm. Editez donc le fichier gdm
et ajoutez-y cette ligne de code (à la fin du fichier) :
account required pam_time.so
GDM est l'écran de connexion des distributions Ubuntu, Edubuntu et Xubuntu. Pour Kubuntu, qui utilise KDE, le service se nomme 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 .
login
du même dossier, et y ajouter la même ligne de code que celle précedemment 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.
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
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).
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
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à !
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
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éconnection 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 root sudo -u pierre notify-send "fin de session dans 5 minutes"
Liens
Contributeurs principaux :