« Trucs:Chrooter un utilisateur (ssh, terminal, console, etc...) » : différence entre les versions
Aller à la navigation
Aller à la recherche
(balises code) |
Aucun résumé des modifications |
||
Ligne 1 : | Ligne 1 : | ||
= Chrooter un utilisateur (ssh, terminal, console, etc...) = | |||
<div class="leapar">Benjamin Gigon</div> | <div class="leapar">Benjamin Gigon</div> | ||
Ligne 32 : | Ligne 34 : | ||
Idée originale : Anne | Idée originale : Anne | ||
[[Catégorie: | [[Catégorie:Trucs Administration systeme]] |
Version du 24 mars 2016 à 15:57
Chrooter un utilisateur (ssh, terminal, console, etc...)
Benjamin Gigon
- 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/" }' | bashATTENTION : N'oubliez pas de remplacer <login> par le bon login...
Le répertoire dev 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 programme chrootuser ?
Tout simplement un script bash avec quelques commandes.
- Modification du /etc/passwd
- 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
Important: Pensez à rajouter /bin/chrootuser dans /etc/shells.
Sinon vous ne pourrez pas vous logguer
Idée originale : Anne