Sometimes I write things, sometimes I don't.

To content | To menu | To search

Interdire l'utilisation d'un shell via SSH

À côté ses utilisations les plus communes (shell, transfert de fichiers, etc), SSH est un bon outil qui permet de contrôler l'accès aux branches créées avec Bazaar. C'est couplé avec le Bazaar smart server que je l'utilise afin de savoir qui à le droit ou non de modifier les branches. Pour cela, chaque personne ayant le droit d'écriture doit disposer d'un compte sur la machine serveur. Cependant, il est prudent de limiter l'accès de ses personnes.

En effet, donner un compte utilisateur sur une machine possédant SSH revient généralement à donner l'accès au shell via SSH à cet utilisateur. Dans mon cas, je ne souhaite pas que l'utilisateur puisse avoir accès au shell mais seulement à ce qu'il puisse pusher ses branches via bzr+ssh://. L'idée est de laisser l'utilisateur se connecter puis de le déconnecter tout de suite après. Pour réaliser ceci, on édite alors le fichier /etc/passwd avec les droits d'administrateur. Ne le faites surtout pas si vous ne savez pas sur quoi vous allez tomber, cette manipulation s'avérer dangereuse pour votre système !

Une fois le fichier ouvert, on recherche l'utilisateur qui ne doit pas avoir accès au shell. La ligne doit ressembler à ça :
utilisateur:x:1004:1004:,,,:/home/utilisateur:/bin/bash

Ici on voit que le terminal de l'utilisateur est de type bash. On change alors la valeur /bin/bash (ou autre si elle est différente) par /bin/true. On obtient alors ceci :
utilisateur:x:1004:1004:,,,:/home/utilisateur:/bin/true

Lors de sa tentative de connexion, l'utilisateur aura droit à une déconnexion automatique.
utilisateur@localhost:~$ ssh utilisateur@domaine.tld
Last login: Sat Oct 24 14:05:26 2009 from ....
Connection to domaine.tld closed.


Bien entendu, les commandes utilisant bzr+ssh:// continueront à fonctionner.

Comments

1. On Saturday 24 October 2009, 17:13 by Thomas

Eviter d’éditer un /etc/passwd à la main : man chsh

Voir aussi les packages scponly ou rssh pour des shells dédiés à certains accès via ssh.

2. On Saturday 24 October 2009, 19:02 by LordFarquaad

Je suis pratiquement sûr que cette manipulation ne protège rien du tout. En effet la valeur indiquée dans /etc/passwd ne sert que de valeur « par défaut » pour le login.

La commande ssh permet d’ailleurs de choisir un autre shell au moment de la connexion, cf man ssh :
« If command is specified, it is executed on the remote host instead of a login shell. ».
Essaie avec /bin/bash avec un utilisateur pour lequel tu as mis /bin/true dans /etc/passwd ;)

3. On Saturday 24 October 2009, 22:35 by Eric

Bien évidemment, ceci n’interdit rien du tout. D’ailleurs c’est logique, si on peut toujours exécuter des commandes bzr à distance via le tunnel ssh, on pourra aussi y exécuter d’autres choses, et oui, comme le dit le commentaire précédent, les autres choses peuvent très bien être /bin/sh ou /usr/bin/bash. Mais à la limite ce n’est même pas la peine de toutes façons, le bash c’est juste une interface, celui qui a le tunnel peut taper directement sur les fichiers et les commandes même si on lui retirait l’invite.

Si vous voulez avoir des comptes bzr seulement il faut faire tourner un serveur bzr (bzr serve), ou ne donner accès que aux fichiers (sftp ou webdav pourraient être des options).

4. On Sunday 25 October 2009, 18:26 by supremerenard

L’utilisation du fichier ssh dans /etc/pam.d avec pam_require me semble plus simple et plus efficace :D

5. On Tuesday 27 October 2009, 12:39 by NSB

Bonjour,

De façon générale il est préférable de ne pas modifier les fichiers /etc/passwd et /etc/shadow à la main. “usermod” est là pour ça. Exemple pour la manipulation que tu souhaite effectuer:

$ sudo usermod <loginutilisateur> -s /bin/true

A bon entendeur… :)