Restriction de l'utilisation Shell grâce à Lshell
Par Francis Besset le lundi 25 janvier 2010 - Systèmes | Lien permanent

Vos utilisateurs ont un accès Shell sur votre serveur et vous souhaiteriez limiter l'utilisation du Shell à certains utilisateurs ?
Heureusement pour vous, grâce à Lshell nous allons pouvoir mettre en place une stratégie de limitation ou d'interdiction d'utilisation de commandes afin d'empêcher vos utilisateurs de faire des bêtises sur votre système.
Pour ceux qui ne savent pas ce qu'est un Shell, voici la définition donnée par Wikipédia :
Le shell (mot anglais signifiant interpréteur de commande) est un logiciel fournissant une interface pour un utilisateur. Le shell est la partie la plus externe du système d'exploitation, c'est l'interface utilisateur du système d'exploitation.
Lshell vous permettra de définir la liste des commandes que votre ou vos utilisateurs pourront utiliser. Vous pourrez par ailleurs, interdire l'utilisation de certains caractères.
Pour commencer, nous allons devoir installer Lshell.
Sous Debian, lancez la commande ci-dessous.
apt-get update && apt-get upgrade
apt-get install lshell
Si votre système utilise les paquets RPM, vous utiliserez la commande suivante.
yum install lshell
Lshell est disponible aussi pour FreeBSD, NetBSD, Arch Linux et en paquet RPM.
Si votre distribution ne vous permet pas d'installer Lshell, il vous reste la possibilité de l'installer directement depuis les sources. Par ailleurs, lors du téléchargement des sources, pensez à vérifier que vous téléchargez la dernière version.
wget http://sourceforge.net/projects/lshell/files/lshell/0.9.8/lshell-0.9.8.tar.gz/download
tar xvzf lshell-0.9.8.tar.gz
cd lshell-0.9.8
python setup.py install
Pour nous mettre en situation, nous aurons un utilisateur qui aura le droit d'accès à son application. Pour cela nous allons tout d'abord le créer en précisant directement lshell en tant que shell comme environnement de ligne de commande.
adduser --shell /usr/bin/lshell nom_utilisateur
Si votre utilisateur est déjà existant et que vous souhaitez changer le shell qu'il utilise vous pouvez éditer le fichier /etc/passwd.
Selon les systèmes, l'exécutable Lshell peut être dans un chemin différent.
Nous allons désormais configurer Lshell pour notre utilisateur.
Le fichier de configuration que nous allons éditer se trouve dans /etc/lshell.conf.
# lshell.py configuration file
[global]
logpath : /var/log/lshell
loglevel : 2
[default]
allowed : ['ll', 'cd', 'echo', 'passwd', 'appli_perso']
forbiden : [';', '&', '|', '`', '>', '<']
warning_counter : 2
aliases : {'ll':'ls -l'}
Notre fichier de configuration contient la section global qui permet de définir les paramètres communs au système.
logpath permet de définir le répertoire où sera enregistré le fichier journal.
loglevel indique le niveau de verbosité du journal.
La section default définit les paramètres communs à tous les utilisateurs de Lshell.
allowed permet de définir la liste des commandes autorisées. Dans le cas présent, un utilisateur qui utilisera lshell sera limité à utiliser la commande ll pour lister les fichiers et dossiers, passwd pour qu'il puisse changer son mot de passe ainsi que appli_perso qui est l'application dont on avait dit qu'il aurait le droit d'accès.
forbiden liste les commandes et caractères interdit. Dans le cas présent, comme nous avons listé des commandes autorisées, il n'y a aucun besoin de lister toutes les commandes. Cependant on y a listé les caractères interdits. Dans le cas présent il ne pourra pas utiliser le point virgule, l'esperluette, le pipe, supérieur que, inférieur que.
warning_counter indique le nombre de fois qu'un utilisateur aura un avertissement avant que la session soit automatiquement fermée par Lshell.
aliases permet de créer des alias sur certaines commandes. Dans le cas présent nous créons l'alias ll qui est le raccourci de la commande ls -l
Vous pouvez spécifier des droits spécifiques à certains utilisateurs en copiant la section default et en la remplaçant par le nom votre utilisateur.
# lshell.py configuration file
[global]
logpath : /var/log/lshell
loglevel : 2
[default]
allowed : ['ll', 'cd', 'echo', 'passwd']
forbiden : [';', '&', '|', '`', '>', '<']
warning_counter : 2
aliases : {'ll':'ls -l'}
[nom_utilisateur]
allowed : ['ll', 'cd', 'echo', 'passwd', 'appli_perso']
forbiden : [';', '&', '|', '`', '>', '<']
warning_counter : 2
aliases : {'ll':'ls -l'}
Il peut s'avérer être assez fastidieux de copier coller autant de fois qu'il existe d'utilisateurs.
Pour cela vous pouvez créer des groupes utilisateurs sur votre système et modifier la configuration pour y ajouter le groupe.
# lshell.py configuration file
[global]
logpath : /var/log/lshell
loglevel : 2
[default]
allowed : ['ll', 'cd', 'echo', 'passwd']
forbiden : [';', '&', '|', '`', '>', '<']
warning_counter : 2
aliases : {'ll':'ls -l'}
[grp:nom_du_groupe]
allowed : ['ll', 'cd', 'echo', 'passwd', 'appli_perso']
forbiden : [';', '&', '|', '`', '>', '<']
warning_counter : 3
aliases : {'ll':'ls -l'}
Vous remarquerez la redondance d'informations dans notre fichier de configuration. Heureusement nous pouvons raccourcir cette configuration grâce au signe +.
# lshell.py configuration file
[global]
logpath : /var/log/lshell
loglevel : 2
[default]
allowed : ['ll', 'cd', 'echo', 'passwd']
forbiden : [';', '&', '|', '`', '>', '<']
warning_counter : 2
aliases : {'ll':'ls -l'}
[grp:nom_du_groupe]
allowed : + ['appli_perso']
warning_counter : 3
Lshell permet d'aller encore bien plus loin. Malheureusement je n'aborderais pas tous les cas ici. Cet article est toutefois une bonne mise en selle pour utiliser Lshell.
Pour vous donner un ordre d'idée, voici quelques exemples de ce que l'on peut faire en plus avec Lshell :
- Restreindre l'accès à certains répertoires
- Mettre en place un timer pour la déconnexion automatique,
- Forcer un mot de passe particulier,
- Changer le Home Path de l'utilisateur,
- Etc.
Je vous conseille d'acheter le magazine GNU/Linux Magazine, #46 Février Mars 2010 ou de vous rendre directement sur le site de Lshell.
(Article directement inspiré de GNU/Linux Magazine, #46 Février Mars 2010.)




Commentaires
Un équivalent pour ce qui est SFTP/SSH existe et s'appelle RSSH.
Bravo pour ce billet très complet
@Mr Xhark : Merci beaucoup. Je vais aller jeter un oeil à RSSH pour voir ce que ça donne.