Een gebruiker chrooten bij het inloggen
Sjoerd's user-chroot-HOWTO 29-10-2001
Inleiding
Noot: "root" betekent hier soms de superuser en soms de hoogste directory in het bestandssysteem.
Chroot staat voor change root en hier wordt met root bedoeld de root van het filesystem. Chroot maakt dus een bepaalde directory tot de root directory. Dat is vaak handig uit veiligheidsoogpunt. Je wilt gebruikers van buitenaf geen toegang geven tot je hele harde schijf, alleen maar tot één directory. Het wordt dus vaak voor FTP en andere programma's die bestanden delen gebruikt.
Ik kwam tot deze HOWTO omdat ik een FTP server niet als root, maar wel in een chroot-omgeving wilde laten draaien. Een normale gebruiker kan niet chrooten, dat moet de root voor hem doen. Nu is er een slimme manier om een gewone gebruiker toch in een chroot-omgeving te stoppen. Elke gebruiker logt namelijk in met behulp van het login programma, welke als root draait. De truc is dus dit programma over te halen een chroot te doen naar een bepaalde directory, meestal de homedirectory van de gebruiker.
Deze HOWTO legt uit hoe je je systeem moet configureren zodat een gebruiker of een aantal gebruikers in een chroot-omgeving komen zodra ze ingelogd zijn. Mogelijke toepassingen hiervan zijn FTP, onveilige programma's, shell access.
Zie ook:
- Chroot manual page
- Chroot BIND HOWTO
- How to set up a chroot environment with RedHat Linux 6.2
- Possible chroot break FIX
- Breaking out of a chroot() padded cell
- Answer Guy 30: Breaking out of the chroot() jail
Configuratie
Je moet twee dingen instellen:
- /etc/passwd
- een chroot directory
/etc/passwd instellen
ftp:x:604:604:FTP,,,:/pub/ftp/:*het gaat hier om het sterretje aan het einde, wat login verteld om te chrooten naar deze directory (hier /pub/ftp) en een nieuwe login sessie te starten.
Noot: Er worden dus twee login sessies gestart en de gebruiker wordt dus ook twee keer om zijn wachtwoord gevraagd. Ik stel voor dat je hier iets aan doet.
Zie ook:
De chroot directory instellen
Links zijn groen, dirs zijn blauw.
- bin/bash
- bin/login
- dev/
- etc/group
- etc/pam.conf
- etc/pam.d/
- etc/passwd
- etc/shadow
- lib/ld-2.2.4.so
- lib/ld-linux.so.2
- lib/libc-2.2.4.so
- lib/libc.so.6
- lib/libcrypt-2.2.4.so
- lib/libcrypt.so.1
- lib/libdl-2.2.4.so
- lib/libdl.so.2
- lib/libhistory.so.4.2
- lib/libhistory.so.4
- lib/libncurses.so.5.2
- lib/libncurses.so.5
- lib/libpam.so.0.72
- lib/libpam.so.0
- lib/libpam_misc.so.0.72
- lib/libpam_misc.so.0
- lib/libreadline.so.4.2
- lib/libreadline.so.4
Je hebt een login en een shell nodig: /bin/bash en /bin/login. Deze
programma's hebben weer libraries nodig. Met het programma
ldd
kan je er achter komen welke libraries dat zijn. Je moet ze vervolgens naar
de lib directory kopieeren.
Login heeft ook de pam-configuratiebestanden en wat bestanden in de /dev
directory nodig. Ik heb niet alle bestanden in de dev directory, alleen
zero, null en het resultaat van
/dev/MAKEDEV console.
De links in de lib directory vond ik ook in mijn (gewone) /lib directory.
Je kan je root directory testen met:
- chroot . /bin/bash
- chroot . /bin/login
Zie ook: