Benjamin Gigon
- Préparation de l'utilisateur et son Home :
- Création de l'utilisateur :
- Préparation de son home :
# cd /home/<login>
# mkdir bin dev lib
Nous allons y copier le binaire "bash", qui se trouve dans /bin/bash
Ce programme est dynamique, donc nous allons déterminer ses dépendances de librairies
# ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0x40026000)
libdl.so.2 => /lib/libdl.so.2 (0x40064000)
libc.so.6 => /lib/libc.so.6 (0x40068000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Nous constatons que est dépendant de , , et de .
Nous allons les copier tout simplement dans l'arborescence chrootée :
- Manuellement :
# cd /home/<login>
# cp /lib/libncurses.so.5 ./lib/
# cp /lib/libdl.so.2 ./lib/
# cp /lib/libc.so.6 ./lib/
# cp /lib/ld-linux.so.2 ./lib/
- Automatiquement :
ATTENTION : N'oubliez pas de remplacer <login> par le bon login...
Le répertoire devrait notamment servir à stocker les devices.
Notamment le plus important : , mais celui ci n'est pas indispensable. Si vous souhaitez quand même créer ce device, faites comme ceci :
Voici l'arborescence après coup :
;
|
|-- bin
| |
| `-- bash
|
|-- dev
| |
| `-- null
|
`-- lib
|
|-- ld-linux.so.2
|-- libc.so.6
|-- libdl.so.2
`-- libncurses.so.5
- Modification du
Editez le fichier (ou bien votre serveur central, cf: LDAP) et modifiez les informations "shell" par :
Exemple :
Avant :
Après :
Mais qu'est ce programme ?
Tout simplement un script bash avec quelques commandes.
- Création du programme Wrapper
Dans un fichier shell, mettez ceci :
#!/bin/bash
exec -c /usr/sbin/chroot_suid /home/$USER /bin/bash
Pour ma part, je l'ai enregistré dans
Et mettez ses droits en exécution pour tous mais en écriture que pour le root :
Copiez maintenant le programme /usr/sbin/chroot en le nommant par exemple /usr/sbin/chroot_suid, et attribuez lui des droits SUID, comme cela : .
Sitôt terminé, vous pouvez vous connecter :)
- Premiers essais
Notre première connection SSH :)
# ssh <login>@localhost
<login>@localhost's password: <password>
Linux #1 ven jan 17 22:00:45 CET 2003 i686 unknown
bash-2.05a$
Si vous remarquez bien, aucune commande n'est disponible (hormis commande interne bash). Si vous souhaitez rajouter ces programmes, vous faites comme pour "bash", en copiant les programmes et les librairies dépendantes.
- Automatiser tout ceci :
Voici un script qui automatise tout cela :
#!/bin/bash
if [ "$#" != 1 ];
then
echo "Usage : $0 <login>"
exit 255;
fi
LOGIN=$1
GROUP=chroot
echo "-- Création du groupe \"${GROUP}\""
groupadd "${GROUP}" > /dev/null 2>&1
echo "-- Création de l'utilisateur \"${LOGIN}\""
useradd \
-c "User chrooted" \
-d "/home/${LOGIN}/" \
-g "${GROUP}" \
-s "/bin/chrootuser" \
"${LOGIN}"
echo "-- Son mot de passe : "
passwd "${LOGIN}" > /dev/null
echo "-- Création de l'arborescence de son homedir"
mkdir /home/${LOGIN}/ \
/home/${LOGIN}/bin/ \
/home/${LOGIN}/lib/ \
/home/${LOGIN}/dev/
chmod 700 \
/home/${LOGIN}/ \
/home/${LOGIN}/bin/ \
/home/${LOGIN}/lib/ \
/home/${LOGIN}/dev/
cp /bin/bash /home/${LOGIN}/bin/bash
ldd /bin/bash | awk -v "LOGIN=$LOGIN" '{ print "cp "$3" /home/"LOGIN"/lib/" }' | bash
mknod /home/${LOGIN}/dev/null c 1 3 -m 666
chown -R "${LOGIN}:${GROUP}" /home/${LOGIN}
echo ">> Utilisateur \"${LOGIN}\" chrooté"
echo "-- Création du programme /bin/chrootuser"
cat < /bin/chrootuser
#!/bin/bash
exec -c /usr/sbin/chroot /home/\$USER /bin/bash
EOF
chmod 555 /bin/chrootuser
Important: Pensez à rajouter /bin/chrootuser dans /etc/shells.
Sinon vous ne pourrez pas vous logguer
Idée originale : Anne