Tomcat (chroot)

De wiki.nexiat.fr
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

Voir aussi