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.)