# [OpenSSH] n'arrive pas à chrooter un user ! [résolu]

## l_arbalette

Bonjour à tous,

J'ai emergé openSSH avec le USE chroot. En effet, je souhaite que certains utilisateurs soient emprisonnés dans leur home.

J'ai suivi pour cela le seul document que j'ai trouvé (tous les autres docs s'y rapportent par un biais ou par un autre), et qui se trouve à cette adresse : http://mail.incredimail.com/howto/openssh/

sachant que sous Gentoo, le use flag "chroot" permet d'intégrer automatiquement le patch mentionné dans le doc précédent.

J'ai créé un user test en faisant :

 *Quote:*   

> mkdir /home/test
> 
> useradd -d /home/test/./ test
> 
> passwd test

 

Un extrait de /etc/passwd donne :

 *Quote:*   

> test:x:1003:1003::/home/test/./:/bin/bash

 

J'ai lancé  le script donné dans le doc. pour créer dans /home/test un environnement chrootable.

Et quand je teste, ça ne marche pas. J'obtiens le message suivant :

 *Quote:*   

> T-bow-Dlx / # ssh test@localhost
> 
> Password:
> 
> Last login: Tue Oct 17 11:24:35 2006 from localhost
> ...

 

Que se passe-t-il ? Quelqu'un peut-il m'aider ? Est-ce que c'est le script de création de l'environnement chrootable qui n'est pas bon ?

parce que j'ai quelques messages bizarres quand je le lance :

 *Quote:*   

> T-bow-Dlx / # ./create_chroot_env_for_user.sh test
> 
> cp: ne peut évaluer `(0xffffe000)': Aucun fichier ou répertoire de ce type
> 
> cp: ne peut évaluer `(0xffffe000)': Aucun fichier ou répertoire de ce type
> ...

 

malgré tout, il copie des choses :

 *Quote:*   

> T-bow-Dlx / # ls -lha /home/test/
> 
> total 24K
> 
> drwxrwx---  6 root root 4,0K oct 17 11:43 .
> ...

 

Précision : Je ne souhaite pas utiliser app-misc/jail pour le moment : j'aimerais pouvoir faire fonctionner ce patch !

Merci de votre aide,

----------

## l_arbalette

un petit up !

Vraiment personne n'a d'idées ?

----------

## l_arbalette

Bon, j'avance tout doucement, car il n'y a pas des masses de documentation à ce sujet.

Je pense être maintenant sûr que le problème vient (en tout cas sous Gentoo) du script qui créé l'environnement "chrootable".

En effet, quand je lance la commande :

 *Quote:*   

> chroot /home/test /bin/bash

 

sur le répertoire qui est censé être chrootable grâce au script, j'ai le message d'erreur 

 *Quote:*   

> chroot: cannot run command `/bin/bash': Permission denied

 

J'ai vérifié les droits : à priori, pas de problème de ce côté :

 *Quote:*   

>  ls -lha /home/test/bin/
> 
> drwxrwx--x 2 root root 4,0K oct 20 12:35 .
> 
> drwxrwx--x 6 root root 4,0K oct 20 12:35 ..
> ...

 

J'ai regardé d'un peu plus près que signifiait les messages  *Quote:*   

> cp: ne peut évaluer `(0xffffe000)': Aucun fichier ou répertoire de ce type 

 

lors de la création de l'environnement. En fait, c'est parceque pour certains programmes, ldd renvoie une ligne bizarre sans l'adresse de la librairie qu'il aurait fallu copier.

Exemple sur /bin/bash :

 *Quote:*   

> ldd /bin/bash
> 
>  linux-gate.so.1 =>  (0xffffe000)  <--- ici, par comparaison aux lignes en dessous, il manque l'adresse de la librairie linux-gate.so.1, et un mauvais argument est donné à cp...d'où le message.
> 
>         libncurses.so.5 => /lib/libncurses.so.5 (0xb7f16000)
> ...

 

Le problème, c'est qu'un slocate linux-gate.so.1 ne renvoie absolument rien....donc pas sûr que ce soit vraiment un problème...

J'espère que ça éclairera quelqu'un....parce que là, je commence à sécher !

En tout cas, le but intermédiaire semble être déjà de pouvoir, en dehors de tout contexte SSH, chrooter sur ce répertoire...

EDIT1 : j'avais même pas pensé à le faire, mais en root, quand je fais /home/test/bin/bash, j'ai le même message

bash: /home/chroot/bin/bash: Permission non accordée

Pourtant, les droits sont OK !

----------

## l_arbalette

je viens de faire des strace sur le /bin/bash normal, et le /home/test/bin/bash : ça ne m'apprend rien : dès la première ligne , il me sort un execve("/bin/bash"[.......] = -1 EACCESS, tandis qu'il sort à =0 quand ça marche....

Puis m'est venu l'idée de faire un ldd sur /home/test/bin/bash. Et là :

```
ldd /home/chroot/bin/ls

        not a dynamic executable

```

Est-ce que ça pourrait être lié au fait qu'on n'arrive pas à exécuter /home/test/bin/bash (alors que le /bin/bash s'exécute parfaitement et où ldd sort la liste des librairies liées ?)

 :Rolling Eyes: 

----------

## DuF

Bon, j'ai jamais fait mais peut être qu'en disant des bêtises je pourrai t'aider  :Very Happy: 

C'est quoi les droits sur le répertoire /home/test ?

Sinon, après avoir fait le chroot, faudrait pas faire un "env-update" pour obtenir une opération du genre : 

```
>> Regenerating /etc/ld.so.cache...
```

----------

## l_arbalette

OUF !!! Je ne suis plus tout seul ! J'avais l'impression (très légère) d'être tout seul sur le coup !

Merci DuF.

Alors. Pour les droits de /home/test : (et c'est pas une bêtise parce que Google m'a plusieurs fois parlé de ça....)

 *Quote:*   

> T-bow-Dlx thibaut # ls -lha /home/
> 
> total 49K
> 
> drwxrwxr-x 10 root    root  4,0K oct 20 12:12 .
> ...

 

(en fait, depuis, j'ai tout refais en changeant "test" par "chroot". Mais pour la clarté, je vais laisser "test" dans mes posts. Si des oublis s'insèrent, vous saurez pourquoi c'est "chroot" et pas "test")

Ensuite pour le env-update, j'aimerais bien être au stade où je peux lancer cette commande. Mais le chroot ne va pas jusque là : ça plante dès la tentative d'exécution de /bin/bash. Et le lancement de /home/test/bin/bash tout seul donne le même résultat !

 *Quote:*   

> /home/test/bin/bash
> 
> bash: /home/test/bin/bash: Permission non accordée
> 
> 

 

----------

## DuF

Quand tu fais ce qui suit : 

```
chroot /home/test /bin/bash
```

Tu as un message d'erreur ou pas ? Car si t'en n'as pas logiquement tu enchaines direct avec l'env-update et il devrait pas te jeter.

En gros, moi j'avais compris que la commande chroot passe sans retourner d'erreurs, a priori ça n'a pas l'air d'être le cas ?

----------

## Ey

```

T-bow-Dlx / # ls -lha /home/test/

total 24K

drwxrwx--- 6 root root 4,0K oct 17 11:43 .

drwxrwxr-x 10 root root 4,0K oct 17 10:59 ..

drwxrwx--- 2 root root 4,0K oct 17 11:43 bin

drwxrwx--- 2 root root 4,0K oct 17 11:43 etc

drwxrwx--- 2 root root 4,0K oct 17 11:43 lib

drwxrwx--- 4 root root 4,0K oct 17 11:43 usr

```

ne cherche pas plus loin, ton /home/test/bin n'est pas accessible par un user lambda...

----------

## l_arbalette

 *DuF wrote:*   

> Quand tu fais ce qui suit : 
> 
> ```
> chroot /home/test /bin/bash
> ```
> ...

 

Non, effectivement, j'ai un message d'erreur :

```
T-bow-Dlx / # chroot /home/chroot/ /bin/bash

chroot: cannot run command `/bin/bash': Permission denied
```

et par SSH patché avec le USE chroot :

```
ssh test@localhost

Password:

Last login: Fri Oct 20 11:50:04 2006 from localhost

Could not chdir to home directory /test/home/: Permission denied

/bin/bash: Permission denied

Connection to localhost closed.

```

C'est pourquoi après, je me suis penché sur l'erreur de /bin/bash permission denied.

En gros, d'après ce que j'ai compris, les commandes sont exécutées dans l'ordre suivant :

login SSH

chroot dans l'environnement spécifié

/bin/bash.

Bon, ben dans mon cas, le login SSH fonctionne. Mais pas le chroot. Et pas le /bin/bash du nouvel environnement.

(voir le détail de mes posts plus haut : tout y es....sauf la réponse à Ey !   :Laughing:  )

Ey,

En effet, j'ai pensé à ça aussi. Et j'ai modifié les droits. Regardes un peu plus haut dans mon 3ème post : j'ai reposté les nouveaux droits. Que j'ai encore rendu plus permissif maintenant.

```
T-bow-Dlx / # ls -lha /home/test/

total 24K

drwxrwx--x  6 root root 4,0K oct 20 12:35 .

drwxrwxr-x 10 root root 4,0K oct 20 12:12 ..

drwxrwxr-x  2 root root 4,0K oct 20 12:35 bin

drwxrwxr-x  2 root root 4,0K oct 20 12:29 etc

drwxrwxr-x  2 root root 4,0K oct 20 16:15 lib

drwxrwxr-x  4 root root 4,0K oct 20 12:35 usr
```

Mais ça ne marche toujours pas.

Impossible de chrooter dans le nouvel environnement. Et la commande /home/test/bin/bash (sans faire de chroot) ne fonctionne pas non plus (voir mes posts plus haut pour le détail : je sais, mes posts sont long, mais c'est pour vous donner toutes les infos utiles)....

----------

## truc

désolé de faire un mini off, mais je ne peux pas vraiment t'aider.. je me permets quand même de poser une petite question

 *Quote:*   

> useradd -d /home/test/./ test 

 

Pourquoi  tu rajoutes ./, ça a une utilité?

----------

## l_arbalette

Oui. Le how-to appelle ça le "magic token" : cette petite anomalie volontaire dans la déclaration du chemin vers le répertoire home du user permet à OpenSSH de savoir qu'il doit être chrooté.

Et cette anomallie ne perturbe pas les autres programmes.

 *Quote:*   

> This version will allow chrooted sessions for certain users, indentifiable by the magic token "/./" in their home directory path : if the home directory /home/test/./hello, then the chroot directory will be /home/test/, and the home directory of the user inside chroot cage will be /hello

 

sauf que chez moi, l'environnement chroot n'a pas l'air d'être bien configuré....et je ne trouve pas pourquoi !   :Crying or Very sad: 

----------

## _Seth_

salut, je ne sais pas si cela t'aidera à résoudre ton problème mais

 *t-bow wrote:*   

> Le problème, c'est qu'un slocate linux-gate.so.1 ne renvoie absolument rien....donc pas sûr que ce soit vraiment un problème... 

 

c'est normal que tu ne la trouve pas, elle n'existe pas  :Wink:  (sur ton dur en tout cas).

D'autre part, est ce qu'il n'y a pas un problème avec bash ? J'ai lu ceci sur le site de chrootssh :

 *la faq de chrootssh wrote:*   

> Q: What shells can I use if I don't want to use sh?
> 
> A: Any shell! [...] If the shell you wish to use compiles statically, then thats all you need to do to use it from inside the chroot. I suggest trying this if you are having trouble with anything working under the chroot. [...]

 

C'est sans doute une question bête mais est ce qu'il ne faudrait pas que bash soit compilé statiquement ?

----------

## _Seth_

autre question saugrenue, est ce que tu as bien un /home/test/etc/passwd et /home/test/etc/group ? Sinon cela pourrait peut être expliquer que tu n'aies pas les droits pour lancer /bin/bash ?

----------

## l_arbalette

Merci _Seth_ pour tes infos.

Concernant /home/test/etc/passwd et /home/test/etc/group, je les ai bien :

```
T-bow-Dlx test # cat /home/test/etc/passwd

root:x:0:0:root:/root:/bin/bash

test:x:1003:1003::/home/test/./test/home/:/bin/bash

T-bow-Dlx test # cat /home/test/etc/group

root:x:0:root

test:x:1003:

```

Par contre, l'histoire de l'exécutable compilé statiquement m'a effectivement échappé. Il se pourrait que ça soit cela.

Mais ça m'embête beaucoup et çe me fait douter, pour 3 raisons :

1/ je ne sais pas compiler statiquement...  :Crying or Very sad:  donc je ne peux pas essayer....

2/ quand je chroot à partir d'un liveCD Knoppix sur mon environnement Gentoo, ça fonctionne, et pourtant, ce sont les mêmes exécutables qui me posent aujourd'hui problème, compilés tels quels (c'est à dire dynamiquement, liées à des librairies).Et là, indépendemment de OpenSSH, un chroot lancé à la main ne marche déjà pas.

3/ toujours indépendemment de OpenSSH qui parle effectivement de shell compilé en statique, quand j'essaye d'exécuter tout seul la commande /home/test/bin/bash, ça ne marche pas. Pourtant, cet exécutable est lié à des librairies qui existent dans /lib (et dupliquées de toute façon dans /home/test/lib)

La commande chroot bute sur le même problème : impossible de lancer /bin/bash (enfin, /home/test/bin/bash)

De plus, un ldd et un strace sur /bin/bash me dit que je n'ai oublié aucunes librairies (et les droits sont OK). Elles sont toutes dupliquées dans /home/test/lib, sauf linux-gate.so.1, mais tu m'as apporté une brillante réponse !  :Wink: 

Alors, pour pouvoir avanver (rapidement) :

- Comment je peux compiler bash statiquement ? (on ne sait jamais)

- Est-ce quelqu'un pourrait essayer de faire sur son PC :

```
mkdir /home/test

mkdir /home/test/bin

cp /bin/bash /home/test/bin/bash

```

Vérifier les droits, et exécuter /home/test/bin/bash pour voir si chez lui ça marche ou pas ?

(parce que chez moi, déjà ça, ça marche pas....donc forcément, le chroot a déjà du plomb dans l'aile)

Je suis certain que la solution sera trouvée quand on aura trouvé comment exécuter la copie de /bin/bash !

----------

## _Seth_

 *Quote:*   

> - Comment je peux compiler bash statiquement ? (on ne sait jamais) 

 

Aie, je pensais qu'on pouvait lui passer le flag static pendant la compil mais bash ne possède pas de tel flag. Donc pour la compil' en static je sèche un peu...

```
# equery hasuse static

[ Searching for USE flag static in all categories among: ]

 * installed packages

[I--] [  ] sys-libs/libcap-1.10-r5 (0)

[I--] [  ] media-gfx/graphviz-2.8-r2 (0)

[I--] [ ~] net-libs/libsoup-2.2.96 (2.2)

[I--] [ ~] sys-boot/grub-0.97-r3 (0)

[I--] [M ] x11-themes/gtk-engines-2.6.6 (2)

[I--] [  ] gnome-base/libgnomecanvas-2.14.0 (0)

[I--] [ ~] gnome-base/libgnome-2.16.0 (0)

[I--] [ ~] app-admin/syslog-ng-1.6.11 (0)

[I--] [  ] gnome-extra/libgsf-1.14.0 (0)

[I--] [ ~] sys-process/lsof-4.77 (0)

[I--] [ ~] app-arch/gzip-1.3.5-r10 (0)

[I--] [  ] app-arch/bzip2-1.0.3-r6 (0)

[I--] [ ~] app-arch/tar-1.15.92-r1 (0)

[I--] [  ] sys-fs/e2fsprogs-1.39 (0)

[I--] [  ] sys-fs/reiser4progs-1.0.5 (0)

[I--] [  ] dev-libs/boost-1.33.1 (1)

[I--] [  ] media-libs/libsamplerate-0.1.2 (0)

[I--] [  ] app-crypt/mit-krb5-1.4.3-r3 (0)

[I--] [ ~] app-crypt/gnupg-1.4.5-r2 (0)

[I--] [ ~] sys-apps/texinfo-4.8-r4 (0)

[I--] [  ] sys-apps/baselayout-1.12.5-r2 (0)

[I--] [ ~] sys-apps/sed-4.1.5 (0)

[I--] [ ~] sys-apps/util-linux-2.12r-r4 (0)

[I--] [ ~] sys-apps/findutils-4.3.1-r1 (0)

[I--] [ ~] sys-apps/net-tools-1.60-r12 (0)

[I--] [  ] sys-apps/diffutils-2.8.7-r1 (0)

[I--] [  ] sys-apps/sysvinit-2.86-r5 (0)

[I--] [ ~] sys-apps/grep-2.5.1a-r1 (0)

[I--] [ ~] sys-apps/debianutils-2.17.1 (0)

[I--] [ ~] sys-apps/busybox-1.2.1 (0)

[I--] [ ~] sys-apps/coreutils-6.3 (0)

[I--] [ ~] sys-devel/make-3.81 (0)

[I--] [ ~] sys-devel/patch-2.5.9-r1 (0)

[I--] [  ] sys-devel/flex-2.5.33-r1 (0)

[I--] [ ~] sys-devel/bc-1.06.95 (0)

[I--] [ ~] sys-devel/bison-2.2 (0)

[I--] [ ~] net-misc/openssh-4.4_p1-r4 (0)

[I--] [  ] net-misc/wget-1.10.2 (0)

[I--] [ ~] net-misc/dhcpcd-2.0.8-r3 (0)

[I--] [  ] net-misc/iputils-021109-r3 (0)

[I--] [  ] net-misc/rsync-2.6.8-r2 (0)

```

----------

## _Seth_

Pour la deuxième question :

```
 / # mkdir /home/test

 / # mkdir /home/test/bin

 / # cp /bin/bash /home/test/bin/

 / # ls home/test/bin/

total 745K

-rwxr-xr-x 1 root root 742K oct 21 12:27 bash*

 / # ./home/test/bin/bash

 / #                          
```

Donc oui, j'arrive bien à lancer la copie de bash dans /home/test/bin/   :Confused: 

----------

## DuF

```
localhost ~ # mkdir /home/test

localhost ~ # mkdir /home/test/bin

localhost ~ # cp /bin/bash /home/test/bin/bash 

localhost ~ # /home/test/bin/bash 

localhost ~ # 
```

Donc pas de souci chez moi pour effectuer cette opération.

[EDIT]Un peu grillé par _Seth_  :Wink: [/EDIT]

----------

## l_arbalette

Bon. Bien grâce à vos 2 expériences, on est sûr que c'est censé marcher.

Il y a donc un problème plus profond sur mon PC...

Je n'ai plus qu'à mettre un cierge pour qu'un développeur passe dans le coin ? parce qu'en ce qui me concerne, je sèche complètement (et à moins que je ne sache pas m'en servir, Google aussi)

----------

## l_arbalette

 *_Seth_ wrote:*   

> Aie, je pensais qu'on pouvait lui passer le flag static pendant la compil mais bash ne possède pas de tel flag. Donc pour la compil' en static je sèche un peu...

 

Il me semble que l'on peut passer (par les LDFLAGS ?) un paramètre -static à gcc. Mais je n'en suis pas sûr, et de toute façon, compte tenu que ça marche chez vous, c'est clairement pas ça. Donc je ne vais pas tenter le diable !

----------

## l_arbalette

ça y est  : j'ai trouvé !!!

La partition dans laquelle il y a mon home, et sur laquelle je veux faire le chroot, était montée par défaut avec l'option noexec.

J'ai modifié mon /etc/fstab en mettant l'option exec

Et ça marche. /bin/bash peut maintenant s'exécuter. Et le chrootage de mes users SSH fonctionne (c'était bien l'exécution de /bin/bash qui bloquait tout). C'est nickel !

Merci pour votre aide.   :Wink: 

----------

## DuF

Bah content que ça fonctionne même si nous n'avons pas fait grand chose  :Smile: 

----------

## l_arbalette

 *DuF wrote:*   

> Bah content que ça fonctionne même si nous n'avons pas fait grand chose 

 

Détrompes toi : ton aide a été fort précieuse, parce que si je n'avais pas eu la confirmation que la copie de /bin/bash à un autre endroit était exécutable (comme c'est le cas chez toi), je n'aurais pas continué à chercher des pistes expliquant cette "bizarrerie".

Et du coup, ça explique aussi d'autres petits problèmes que j'ai rencontré en compilant des programmes que j'écris en ce moment pour apprendre à manier QT et le C++, et que je n'arrivais pas à exécuter, sauf à les déplacer dans /bin/

Donc tu vois ! ça résoud plein de problème !

----------

## DuF

Content alors d'avoir pu être utile. Je vais d'ailleurs avouer qu'au début je l'ai fait simplement pour essayer que tu ne sois pas tout seul sur le fil de discussion car je ne pensais pas pouvoir être utile...  :Wink: 

----------

