Trucs:Chrooter un utilisateur (ssh, terminal, console, etc...)
Aller à la navigation
Aller à la recherche
Prae<prae@lea-linux.org>
- Préparation de l'utilisateur et son Home :
- Création de l'utilisateur :
# adduser <login>
- 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# cp /bin/bash /home/<login>/bin/
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/bin/bash
est dépendant de/lib/libncurses.so.5
,/lib/libdl.so.2
,/lib/libc.so.6
et de/lib/ld-linux.so.2
.
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 :
# ldd /bin/bash | awk '{ print "cp "$3" /home/<login>/lib/" }' | bash
ATTENTION : N'oubliez pas de remplacer <login> par le bon login...
Le répertoiredev
devrait notamment servir à stocker les devices.
Notamment le plus important :/dev/null
, mais celui ci n'est pas indispensable. Si vous souhaitez quand même créer ce device, faites comme ceci :# mknod /home/<login>/dev/null c 1 3 -m 666
Voici l'arborescence après coup :
- Manuellement :
- Création de l'utilisateur :
/home/<login>
;
|
|-- bin
| |
| `-- bash
|
|-- dev
| |
| `-- null
|
`-- lib
|
|-- ld-linux.so.2
|-- libc.so.6
|-- libdl.so.2
`-- libncurses.so.5
- Modification du
/etc/passwd
Editez le fichier/etc/passwd
(ou bien votre serveur central, cf: LDAP) et modifiez les informations "shell" par :/bin/chrootuser
Exemple :
Avant :chroot:x:1003:1003:,,,:/home/chroot:/bin/bash
Après :chroot:x:1003:1003:,,,:/home/chroot:/bin/chrootuser
Mais qu'est ce programmechrootuser
?
Tout simplement un script bash avec quelques commandes.
- Modification du
- 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/bin/chrootuser
Et mettez ses droits en exécution pour tous mais en écriture que pour le root :# chmod 755 /bin/chrootuser
Copiez maintenant le programme /usr/sbin/chroot en le nommant par exemple /usr/sbin/chroot_suid, et attribuez lui des droits SUID, comme cela :chmod 4755 /usr/sbin/chroot_suid
.
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
Idée originale : Anne