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