Tomcat (chroot)
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Sujet | Isolation de Tomcat dans un chroot |
| Statut | Procédure non testée |
| Voir aussi | Tomcat · Tomcat (sécurisation) |
Procédure indicative (non testée) pour chrooter une instance Tomcat : construire une arborescence minimale contenant la JRE et ses dépendances, puis y enfermer le service.
Construire l'arborescence chroot
CHROOT_DIR="/tomcat_chroot/tomcat_chroot_gen"
cd $CHROOT_DIR
mkdir -p lib lib64 etc tmp dev usr
chmod 755 etc dev usr
chmod 1777 tmp
cp -a /etc/hosts etc/hosts
# JRE
mkdir -p usr/java
cp -a /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/ usr/java
# dépendances de java (lister avec ldd)
ldd /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
cp -p /lib64/libpthread.so.0 lib64/
cp -p /lib64/libz.so.1 lib64/
cp -p /lib64/libdl.so.2 lib64/
cp -p /lib64/libc.so.6 lib64/
cp -p /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/lib/amd64/jli/libjli.so lib64/
cp -p /lib64/libm.so.6 lib64/
cp -p /lib64/libnsl.so.1 lib64/
Périphériques, /proc et résolution DNS :
mkdir -p ${CHROOT_DIR}/dev/pts
cd /dev
./MAKEDEV -d ${CHROOT_DIR}/dev null random urandom zero loop log console
cp MAKEDEV ${CHROOT_DIR}/dev
cp -a /dev/shm ${CHROOT_DIR}/dev
mkdir -p ${CHROOT_DIR}/proc
mount -t proc proc ${CHROOT_DIR}/proc
cp -a /etc/hosts /etc/resolv.conf /etc/nsswitch.conf ${CHROOT_DIR}/etc/
cp -p /lib64/libresolv.so.2 ${CHROOT_DIR}/lib64/
cp -p /lib64/libnss_dns.so.2 ${CHROOT_DIR}/lib64/
cp -p /lib64/libnss_files.so.2 ${CHROOT_DIR}/lib64/
Shell et binaires utilitaires :
cd ${CHROOT_DIR}
mkdir -p bin usr/bin
cp /bin/bash bin/
ln -s /bin/bash bin/sh
cp -p /lib64/ld-linux-x86-64.so.2 lib64/
cp -p /lib64/libtinfo.so.5 lib64/
cp -p /bin/uname /bin/basename /bin/touch ${CHROOT_DIR}/bin/
cp -p /usr/bin/dirname ${CHROOT_DIR}/usr/bin/
ln -s ${CHROOT_DIR}/usr/java/jre-1.7.0-openjdk.x86_64/bin/java usr/bin/java
# entrer dans le chroot
chroot ${CHROOT_DIR} /bin/bash
Script d'init pour Tomcat chrooté
#!/bin/ksh
CHROOT_DIR="/tomcat_chroot/tomcat_chroot_gen"
PROG="`basename $0`"
case "$1" in
start)
echo -n "Starting $PROG: "
mkdir -p ${CHROOT_DIR}/proc
mount -t proc proc ${CHROOT_DIR}/proc > /dev/null 2>&1
chroot ${CHROOT_DIR} /bin/bash -c "set -a ; . $APP_ENV ; $TOMCAT_SCRIPT start" > /dev/null 2>&1
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "[OK]" || echo "[FAILED]"
;;
stop)
echo -n "Stopping $PROG: "
chroot ${CHROOT_DIR} /bin/bash -c "set -a ; . $APP_ENV ; $TOMCAT_SCRIPT stop" > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
sleep 3
umount ${CHROOT_DIR}/proc > /dev/null 2>&1
echo "[OK]"
else
echo "[FAILED]"
fi
;;
*)
echo "Usage : $0 {start|stop}"
exit 1
;;
esac