OVH Cloud OVH Cloud

serveur cvs + chroot + sshd

2 réponses
Avatar
Bonjour,

ayant à travailler avec plusieurs étudiants de ma fac sur des projets
assez conséquents, j'ai décidé d'installer un serveur CVS sur ma machine
perso étant donné qu'elle dispose d'une IP fixe. Du coup je voulais
quand même qu'une certaine sécurité soit présente alors voilà comment
j'ai procédé (ci-dessous la version "résumée" en fait j'ai suivi un
tutoriel prévu pour FreeBSD et c'est là que ça merde ... : voici le
lien du tutorial pour ceux qui ont la foi :-) :
http://www.pointless.nl/~peter/stuff/cvs-server.html#setup_ssh_server)

j'ai créé un répertoire /var/chroot/cvs (la chroot jail) qui contient
mes bases CVS (une pour chaque projet) plus les utilitaires nécessaires
(en autre le shell sh et sshd), plus les librairies dynamiques
déterminées par ldd ainsi que différents fichiers de configurations
(entre autre /etc/passwd, /etc/group, et /etc/shadow (lui je suis pas
sûr qu'il soit nécessaire mais dans le doute il y est)).
Le but est le suivant : dans les fichiers /etc/passwd et /etc/group
(ceux de la chroot jail) se trouvent l'utilisateur fg (administrateur
des bases CVS, c'est moi) , l'utilisateur sshd (requis pour pas sshd
tourne avec l'identité de root et les différents gars qui bossent avec
moi sur les projets; il y a aussi des groupes pour chaque projet
différent (de manière à ce qu'une personne qui bosse avec moi mais par
ex sur un projet X et pas sur le Y e puisse pas accéder au Y).

Dans ce répertoire se trouve aussi les répertoires "home" des gars qui
bossent avec moi et sur lesquels ils n'ont pas la permission d'écriture
et qui contiennent uniquement .ssh/authorized_keys (pour chacun il y a
sa clé publique)
Donc je démarre le serveur sshd dans sa chroot jail et les gars avec qui
je bosse peuvent intéragir sur les bases CVS en faisant les export
CVSROOT et export CVS_RSH=ssh qui vont bien.

Maintenant voilà le problème :
j'ai suivi pas à pas le tutorial, le problème est qu'il est pour FreeBSD
et la seule chose qui diffère c'est pour les fichiers /etc/passwd et
/etc/group (ils utilisent une commande BSD : pwd_mkdb), vu que je tourne
sous Mandrake je ne l'ai bien sûr pas utilisée (d'ailleurs je ne l'ai
même pas) et au moment où je lance le serveur sshd chrooté et dédié à
CVS (par chroot /var/chroot/cvs /sbin/sshd)j'obtient le message d'erreur
suivant : Privilege separation user sshd does not exist

Alors là j'ai un doute pendant 2 sec et je vérifie : l'utilisateur sshd
est bien défini dans /etc/passwd ! Là je me suis dit que c'était
peut-être sshd qui disait n'importe quoi alors j'ai fait les tests
suivants :

* j'ai mis UsePriviligeSeparation à no dans sshd_config pour qu'il se
taise et accepte de se lancer avec l'uid de root et je l'ai lancé en
mode debug. Là j'ai tenté une connexion sur ma machine à partir d'une
machine distante et il me dit dans les logs que l'utilsateur fg (moi)
n'existe pas alors que je suis bien dans le /etc/passwd de la
chroot-jail.....

* j'ai décidé de mettre les binaires passwd , groupadd et useradd dans
la chroot-jail, de root je fait chroot /var/chroot/cvs /bin/sh et voilà
ce qu'il se passe si j'essaye de faire passwd fg il me dit que l'user fg
n'existe pas, si j'essaye de créer un groupe par groupadd il le crée le
fichier est bien modifié (celui de la chroot-jail) mais si JUSTE APRES
je fait useradd pour ajouter un user lambda de même groupe que je viens
de créer il me dit que le groupe n'existe pas !!!!! C'est complètement fou !

J'en déduit donc qu'il me manque certain fichiers de config me permetant
une authentification correcte mais je ne vois pas trop lesquels. J'ai
même poussé le vice à "stracé" useradd pour voir sur quels fichiers il
faisait des open et grâce à ça j'ai vu qu'il me manquait quelques
fichiers que je me suis empressé de copier, mais ça n'a rien changé au pb.
Par ailleurs le serveur a été testé avec succès en mode non-chrooté
(utilisation du sshd "normal" pas celui dans ma chroot-jail, et des
/etc/passwd et /etc/group "normaux") et tout fonctionne correctement, ce
qui me conforte dans mon idée que c'est le pb c'est bien le chrooting
(plus exactement qu'il manque certains fichiers pour l'authentification
quand on est chrooté et qu'on a donc pas accès à l'arborescence
complète) qui pose problème.

Voilà je serai extrêmement reconnaissant à quiconque pour m'aider à
résoudre ce pb et déjà un grand merci à ceux qui ont eu le courage de
lire jusque là !!! (désolé j'ai essayé de faire le plus court possible
mais pour expliquer ce put*** de pb de manière plus ou moins
compréhensible c'est un peu long :-) )

François-Gérard

2 réponses

Avatar
Bruno Mathieu
none a écrit:

J'en déduit donc qu'il me manque certain fichiers de config me permetant
une authentification correcte mais je ne vois pas trop lesquels. J'ai



Bonsoir,

Voici ma suggestion pour essayer de trouver les fichiers en question :
* faire ldd sur les binaires pour voir les dépendances de librairies;
* utiliser strings sur les binaires et librairies en recherchant / pour voir
les fichiers de config potentiellement utilisés.

Ensuite, mettre tous ces fichiers dans la prison. Si alors le useradd ou le
passwd fonctionnent, regarder les derniers accès avec stat pour voir
desquels il s'agissait et enlever les autres.

Si ça ne marche pas vérifier aussi les variables d'environnement utilisées
par ces programmes et librairies toujours avec strings et les droits sur
les fichiers.

La méthode est un peu "bestiale" mais elle donne des résultats de temps en
temps ;-)

--
Bruno

Avatar
none a écrit:


J'en déduit donc qu'il me manque certain fichiers de config me permetant
une authentification correcte mais je ne vois pas trop lesquels. J'ai




Bonsoir,

Voici ma suggestion pour essayer de trouver les fichiers en question :
* faire ldd sur les binaires pour voir les dépendances de librairies;
* utiliser strings sur les binaires et librairies en recherchant / pour voir
les fichiers de config potentiellement utilisés.

Ensuite, mettre tous ces fichiers dans la prison. Si alors le useradd ou le
passwd fonctionnent, regarder les derniers accès avec stat pour voir
desquels il s'agissait et enlever les autres.

Si ça ne marche pas vérifier aussi les variables d'environnement utilisées
par ces programmes et librairies toujours avec strings et les droits sur
les fichiers.

La méthode est un peu "bestiale" mais elle donne des résultats de temps en
temps ;-)



Merci beaucoup mais finalement j'ai trouvé plus simple. Le projet
chrootssh (http://chrootssh.sourceforge.net/) est exactement ce qu'il me
fallait ! Il n'y avait qu'à rajouter cvs dans la chroot-jail qu'il
crée automatiquement.

François-Gérard