Configuration de l'accès à la console

Lorsque des utilisateurs normaux (non root) se connectent localement à un ordinateur, ils se voient attribuer deux types d'autorisation spéciale :

  1. Ils peuvent exécuter certains programmes qu'ils ne pourraient pas exécuter autrement.

  2. Ils peuvent accéder à certains fichiers (normalement des fichiers de périphériques spéciaux utilisés pour accéder à des disquettes, CD-ROM, etc.) auxquels ils ne pourraient pas accéder autrement.

Du fait qu'il y a plusieurs consoles sur un ordinateur, et que plusieurs utilisateurs peuvent être connectés localement à l'ordinateur en même temps, il faut que l'un d'eux "gagne" le combat pour accéder à ces fichiers. Le premier utilisateur se connectant à la console est propriétaire de ces fichiers. Une fois que le premier utilisateur se déconnecte, le second utilisateur à s'être connecté devient propriétaire des fichiers.

Par contre, chaque utilisateur se connectant à la console sera autorisé à exécuter des programmes dont l'usage est normalement réservé à l'utilisateur root. Ceci sera effectué sous forme graphique si X Window est en cours d'exécution, ce qui permet d'inclure ces actions en tant qu'éléments de menu dans une interface utilisateur graphique. Tels qu'ils sont livrés, les programmes accessibles depuis la console sont shutdown, halt, poweroff et reboot.

Désactivation de Shutdown via Ctrl-Alt-Suppr

Par défaut, /etc/inittab spécifie que votre système est configuré pour s'arrêter et redémarrer en réponse à la combinaison de touches Ctrl-Alt-Suppr. Pour désactiver complètement cette fonction, commentez la ligne suivante dans /etc/inittab:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Sinon, vous pouvez décider de ne donner qu'à certains utilisateurs non root l'autorisation d'arrêter le système au moyen de la combinaison de touches Ctrl-Alt-Suppr. Pour limiter cette autorisation à quelques utilisateurs, suivez la procédure ci-dessous :

  1. Ajoutez l'option -a à la ligne /etc/inittab ci-dessus :

    ca::ctrlaltdel:/sbin/shutdown -a -t3 -r now

    -a demande à shutdown de chercher le fichier /etc/shutdown.allow, que vous devrez créer à l'étape suivante.

  2. Créez un fichier nommé shutdown.allow dans /etc. Le fichier shutdown.allow doit contenir les noms d'utilisateurs de tous les utilisateurs qui ont l'autorisation d'arrêter le système en utilisant la combinaison de touches Ctrl-Alt-Suppr. Le fichier /etc/shutdown.allow est une liste qui, sur chacune de ses lignes, reporte un nom d'utilisateur :

    stephen
    jack
    sophie

Dans ce fichier shutdown.allow d'exemple, stephen, jack et sophie sont autorisés à arrêter le système via la combinaison de touches Ctrl-Alt-Suppr. Lorsque cette combinaison est utilisée, le fichier shutdown -a contenu dans /etc/inittab contrôle si des utilisateurs dans /etc/shutdown.allow (ou root) sont connectés à une console virtuelle. Si l'un d'entre eux l'est, la procédure d'arrêt se poursuit ; dans le cas contraire, un message d'erreur sera transmis à la console du système.

Pour plus d'informations sur shutdown.allow, reportez-vous à la page du manuel sur la commande shutdown.

Désactivation de l'accès aux programmes de la console

Pour désactiver l'accès des utilisateurs aux programmes de la console, entrez en tant que root la commande ci-dessous :

rm -f /etc/security/console.apps/*

Dans les environnements où la console est normalement sécurisée (mots de passe BIOS et LILO définis, combinaison de touches Ctrl-Alt-Suppr désactivée, commutateurs d'alimentation et de réinitialisation désactivés, etc.), il n'est peut-être pas souhaitable d'autoriser l'accès d'utilisateurs arbitraires à la console où ils peuvent exécuter les programmes poweroff, halt et reboot, accessibles par défaut.

Pour désactiver tout accès des utilisateurs de console aux programmes de la console, entrez en tant que root les commandes ci-dessous :

rm -f /etc/security/console.apps/poweroff
rm -f /etc/security/console.apps/halt
rm -f /etc/security/console.apps/reboot

Désactivation de tout accès à la console

Le module PAM pam_console.so gère les autorisations et l'authentification des fichiers de la console (pour plus d'informations sur la configuration de PAM, reportez-vous au Chapitre 8). Pour désactiver tout accès à la console, y compris aux programmes et aux fichiers, dans le répertoire /etc/pam.d, ajoutez un commentaire à toutes les lignes faisant référence à pam_console.so. Le script suivant se chargera de cette tâche :

cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done

Définition de la console

Le module pam_console.so utilise le fichier /etc/security/console.perms pour définir les autorisations d'accès à la console des utilisateurs. La syntaxe de ce fichier est très flexible ; vous pouvez éditer le fichier afin que ces instructions ne soient plus applicables. Toutefois, le fichier par défaut contient une ligne ressemblant à ceci :

 <console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]

Lorsque les utilisateurs se connectent, ils sont liés à une sorte de terminal, soit un serveur X portant un nom tel que :0 ou mymachine.example.com:1.0 ; soit un périphérique tel que /dev/ttyS0 ou /dev/pts/2. Par défaut, il convient de définir que les consoles virtuelles locales et les serveurs X locaux permettent d'héberger une console systè, mais si vous voulez considérer le terminal série à côté de vous sur le port /dev/ttyS1 comme pouvant également le faire, vous pouvez modifier cette ligne comme suit :

<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] /dev/ttyS1

Rendre des fichiers accessibles depuis la console

/etc/security/console.perms contient des lignes telles que :

<floppy>=/dev/fd[0-1]* \
    /dev/floppy/*
<sound>=/dev/dsp* /dev/audio* /dev/midi* \
    /dev/mixer* /dev/sequencer \
    /dev/sound/*
<cdrom>=/dev/cdrom* /dev/cdwriter*

Si nécessaire, vous pouvez également ajouter vos propres lignes. Vérifiez que chaque ligne que vous ajoutez se réfère au périphérique approprié. Par exemple, vous pouvez ajouter la ligne suivante :

<scanner>=/dev/sga

(Assurez-vous, naturellement, que /dev/sga est réellement votre scanner et non, par exemple, votre disque dur).

Ceci est la première partie. La seconde partie consiste à définir le sort de ces fichiers. Examinez la dernière section de /etc/security/console.perms:

<console> 0660 <floppy> 0660 root.floppy
<console> 0600 <sound>  0640 root
<console> 0600 <cdrom>  0600 root.disk

et ajoutez la ligne ci-dessous :

<console> 0600 <scanner> 0600 root

Ensuite, lorsque vous vous connecterez à la console, vous recevrez la propriété du périphérique /dev/sga et vos autorisations seront 0600 (lecture et écriture réservées pour vous). Lorsque vous vous déconnecterez, le périphérique sera la propriété du root et disposera toujours des autorisations 0600 (lecture et écriture réservées au root).

Activation de l'accès à la console pour d'autres applications

Pour rendre d'autres applications accessibles aux utilisateurs de la console, vous devrez simplement travailler un petit peu plus.

Tout d'abord, l'accès à la console ne fonctionne que pour les applications résidant dans /sbin ou /usr/sbin, de sorte que l'application que vous voulez exécuter doit s'y trouver également. Après l'avoir vérifié, suivez la procédure ci-dessous :

  1. Créez un lien entre le nom de votre application, tel que notre programme d'exemple foo, et l'application /usr/bin/consolehelper :
    cd /usr/bin
    ln -s consolehelper foo

  2. Créez le fichier /etc/security/console.apps/foo:
    touch /etc/security/console.apps/foo

  3. Créez un fichier de configuration PAM pour le service foo dans /etc/pam.d/. Nous vous suggérons de commencer avec une copie du service d'arrêt du fichier de configuration PAM, puis de la modifier si vous voulez en modifier le comportement :
    cp /etc/pam.d/halt /etc/pam.d/foo

Désormais, lorsque vous exécutez /usr/bin/foo, cette action appelle consolehelper qui, avec l'aide de /usr/sbin/userhelper, authentifiera l'utilisateur en demandant le mot de passe utilisateur si /etc/pam.d/foo est une copie de /etc/pam.d/shutdown ; (dans le cas contraire, il fait précisément ce qui est spécifié dans /etc/pam.d/foo), puis exécute /usr/sbin/foo avec des autorisations root.