CHROOT

Une autre doc pour chrooté un utilisateur sur n'importe quelle distri : http://www.lea-linux.org/documentations/index.php/Admin-admin_env-chroot

#!/bin/bash

# On vérifie que le nom de l'utilisateur souhaité est bien passé en paramêtre
if [ "$#" != 1 ];
then
	echo "Usage : $0 <login>"
	exit 255;
fi

# Nom d'utilisateur
LOGIN=$1
# Groupe attribué à l'utilisateur
GROUP=chroot
# Répertoire par défaut des shell chrootés
dir=/home/chroot
script_login_chroot=/bin/chrootshell

echo -e "#!/bin/bash\nexec -c /usr/sbin/chroot $HOME /bin/bash" >> $script_login_chroot

chmod +x $script_login_chroot

#On rajoute le shellau shells connus
if [ `grep $script_login_chroot /etc/shells | wc -l` -lt 1 ] ; then 
	echo $script_login_chroot >> /etc/shells
fi

# Utilitaires
OUTILB="bash cat grep awk sed ls ln socat"

mkdir -p "$dir"

echo "-- Création du groupe \"${GROUP}\""
groupadd "${GROUP}" > /dev/null 2>&1

echo "-- Création de l'utilisateur \"${LOGIN}\""
useradd \
-c "Utilisateur en espace restreint" \
-d "$dir/${LOGIN}" \
-g "${GROUP}" \
-s "$script_login_chroot" \
"${LOGIN}"

echo "-- Son mot de passe : "
passwd "${LOGIN}" > /dev/null

echo "-- Création de l'arborescence de son Répertoire personnel --"
mkdir -p $dir/${LOGIN}/dev/

# Mise en place des droits sur les répertoires
cd $dir
chmod -R 700 ${LOGIN}

# Copie des programmes et de leurs librairies
for I in $OUTILB;
do
	bin=`which $I`
	mkdir -p "`dirname $dir/$LOGIN/$bin`" && cp -aL "$bin" "$dir/$LOGIN/$bin"
	# Pour chaque programme, on recherche les librairies correspondantes.
	# On termine en demandant l'exécution par bash des lignes renvoyées par awk
	for lib in `ldd $bin | awk  '{ print $3 }' | grep ^/` `ldd $bin | awk  '{ print $1 }' | grep ^/`
	do
		mkdir -p `dirname $dir/$LOGIN/$lib` && cp -aL "$lib" "$dir/$LOGIN/$lib"
	done
done

# Création de l'espace /dev
mknod $dir/${LOGIN}/dev/null c 1 3 -m 666
chown -R "${LOGIN}:${GROUP}" $dir/${LOGIN}

# Fin de la création du compte utilisateur.
echo ">> Utilisateur \"${LOGIN}\" créée et emprisonné"

chmod u+s `which chroot`

Debian / Ubuntu

Nous allons voir comment créer un chroot, afin de “cloisonner” un peu l’environnement de l’utilisateur par rapport au système.

Les packages nécessaires :

sudo apt-get install debootstrap chroot

Tout d’abord il nous faut un répertoire d’accueil pour notre nouveau système. Personellement je l’ai mis dans /data pour bien tout concentrer sur la même partition.

mkdir /data/chroot-ssh

Ensuite nous allons utiliser debootstrap. C’est un outils extrèmement pratique pour créer des chroots.

Attention aux utilisateurs de kernels patchés avec grsec. Vous risquez de rencontrer des difficultés à créer votre chroot. Le plus simple est de le faire depuis une autre machine puis de transférer le contenu du chroot.

Si vous souhaitez créer un chroot debian stable :

debootstrap etch /data/chroot-ssh/ http://ftp.fr.debian.org/debian

Si vous souhaitez créer un chroot debian testing :

debootstrap lenny /data/chroot-ssh/ http://ftp.fr.debian.org/debian

Tout un processus se déroule, il télécharge tous les éléments nécessaire à la création du chroot.

Une fois que vous avez le message comme quoi tout s’est bien passé, il est nécessaire de monter certaines partitions indispensable :

mount -o bind /dev /data/chroot-ssh/dev
mount -o bind /proc /data/chroot-ssh/proc

Et si vous utilisez vhffs-fs :

mount -o bind /chemin/vers/montage/fuse /data/chroot-ssh/home

N’oubliez pas de modifier /etc/fstab en conséquence en rajoutant :

/dev /data/chroot-ssh/dev none rw,bind 0 0
/proc /data/chroot-ssh/proc none rw,bind 0 0
/chemin/vers/montage/fuse /data/chroot-ssh/home none rw,bind

Ensuite vous pouvez entrer dans votre nouveau chroot :

chroot /data/chroot-ssh/ /bin/bash

La première chose à faire est de configurer les locales

dpkg-reconfigure locales

puis le fuseau horaire

dpkg-reconfigure tzdata

Une fois tout ça fait, il faut au moins lancer dans votre chroot syslogd

/etc/init.d/sysklogd start

Vous voilà donc avec un système vierge, totalement isolé du reste. On y installe des applis, on le met à jour comme une vraie machine. Il vous faut donc installer ssh pour continuer.

Attention avant d’installer ssh que celui-ci ne rentre pas en conflit avec celui que vous utilisez pour vous connecter sur le serveur. Il vous faut choisir un port distinct pour chaque ssh !

Pour installer ssh dans votre chroot, rien de plus simple :

apt-get install ssh

Enfin, pour que les utilisateurs soient reconnus, n’oubliez pas de les déclarer, en utilisant nss ou par la methoque que vous avez déjà choisi. Si vous utilisez libnssSQLite, vous devez regénérer les fichiers (hors chroot, bien entendu) avec l’option –force-homedir /home et mettre les fichiers générés dans /data/chroot-ssh/var/db