View previous topic :: View next topic |
Author |
Message |
slick Bodhisattva
Joined: 20 Apr 2003 Posts: 3495
|
Posted: Thu Sep 16, 2004 3:33 pm Post subject: squid im chroot |
|
|
Update: 08.02.05
Nachdem ich jetzt eine ganze Weile gesucht habe wie man squid chrootet hier meine Lösung. Diese hat keinen Anspruch auf Vollständigkeit, schon garnicht vollständige Sicherheit, sie soll eher als Ausgangspunkt für eigene Versuche gelten. Das gentoolkit muß hierfür installiert sein.
chroot-Verzeichnis anlegen
Code: |
ERROR_LANG="English" # siehe /usr/lib/squid/errors
CHROOT_DIR="/squidroot"
for a in `qpkg -l -nc squid | grep -v "^www-proxy/squid-" | grep -v "^CONTENTS:" `; do
b=`dirname $a`
mkdir -p ${CHROOT_DIR}/$b
cp -pv $a ${CHROOT_DIR}/$b
done
for a in `ldd /usr/sbin/squid | cut -d ">" -f 2 | cut -d "(" -f 1` ; do
b=`dirname $a`
mkdir -p ${CHROOT_DIR}/$b
cp -p $a ${CHROOT_DIR}/$b
done
cp -p /lib/libnss_* ${CHROOT_DIR}/lib/
cat /etc/passwd | grep "^root" > ${CHROOT_DIR}/etc/passwd
cat /etc/passwd | grep "^squid" >> ${CHROOT_DIR}/etc/passwd
cat /etc/group | grep "^root" > ${CHROOT_DIR}/etc/group
cat /etc/group | grep "^squid" >> ${CHROOT_DIR}/etc/group
# errorlanguage
mv ${CHROOT_DIR}/usr/lib/squid/errors/${ERROR_LANG} ${CHROOT_DIR}/etc/squid/errors
rm -rf ${CHROOT_DIR}/usr/lib/squid/errors
cp -p /etc/squid/* ${CHROOT_DIR}/etc/squid
mkdir ${CHROOT_DIR}/dev
cp -a /dev/null ${CHROOT_DIR}/dev/
cp -a /dev/tty ${CHROOT_DIR}/dev/
cp -p /etc/hosts ${CHROOT_DIR}/etc
cp -p /etc/ld.so.cache ${CHROOT_DIR}/etc
cp -p /etc/localtime ${CHROOT_DIR}/etc
cp -p /etc/nsswitch.conf ${CHROOT_DIR}/etc
cp -p /etc/resolv.conf ${CHROOT_DIR}/etc
mkdir -p ${CHROOT_DIR}/var/log/squid
chown squid: ${CHROOT_DIR}/var/log/squid/
mkdir -p ${CHROOT_DIR}/var/run
mkdir -p ${CHROOT_DIR}/var/cache/squid
chown squid: ${CHROOT_DIR}/var/cache/squid
|
Als nächstes sollte man das Cache-Verzeichnis im chroot initialisieren
Code: | chroot ${CHROOT_DIR} /usr/sbin/squid -z |
Dann passend dazu das modifizierte init-script (ohne Check/Initializierung vom Cache-Verzeichnis)
/etc/init.d/squid
Code: |
#!/sbin/runscript
# modified squid-script for chroot the squid
CHROOT_DIR="/squidroot"
opts="${opts} reload"
depend() {
need net
}
# Try to increase the # of filedescriptors we can open.
maxfds() {
[ -n "$SQUID_MAXFD" ] || return
[ -f /proc/sys/fs/file-max ] || return 0
[ $SQUID_MAXFD -le 8192 ] || SQUID_MAXFD=8192
global_file_max=`cat /proc/sys/fs/file-max`
minimal_file_max=$(($SQUID_MAXFD + 4096))
if [ "$global_file_max" -lt $minimal_file_max ]
then
echo $minimal_file_max > /proc/sys/fs/file-max
fi
ulimit -n $SQUID_MAXFD
}
start() {
maxfds
ebegin "Starting squid (chroot)"
start-stop-daemon --quiet --start --exec /usr/bin/chroot \
--pidfile /var/run/squid.pid -- ${CHROOT_DIR} /usr/sbin/squid ${SQUID_OPTS} < /dev/null
sleep 1
eend $?
}
stop() {
ebegin "Stopping squid (chroot)"
PID=`cat ${CHROOT_DIR}/var/run/squid.pid 2>/dev/null`
start-stop-daemon --stop --quiet --pidfile ${CHROOT_DIR}/var/run/squid.pid
# Now we have to wait until squid has _really_ stopped.
sleep 2
if test -n "$PID" && kill -0 $PID 2>/dev/null
then
einfon "Waiting ."
cnt=0
while kill -0 $PID 2>/dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 60 ]
then
# Waited 120 seconds now. Fail.
eend 1 "Failed."
break
fi
sleep 2
echo -n "."
done
echo -n "done."
eend 0
else
eend 0
fi
}
reload() {
ebegin "Reloading squid (chroot)"
/usr/bin/chroot ${CHROOT_DIR} /usr/sbin/squid -k reconfigure
eend $?
}
|
Nicht vergessen sei auch eine Anpassung von /etc/cron.weekly/squid.cron welche beim mergen von squid installliert wird:
/etc/cron.weekly/squid.cron
Code: |
#!/bin/sh
CHROOT_DIR="/squidroot"
test -e ${CHROOT_DIR}/var/run/squid.pid && \
test -n "`cat ${CHROOT_DIR}/var/run/squid.pid|xargs ps -p|grep squid`" && \
chroot ${CHROOT_DIR} /usr/sbin/squid -k rotate
|
Der Autor würde auch einen symbolischen Link von /etc/squid nach ${CHROOT_DIR}/etc/squid empfehlen.
Läuft der Host mit dynamischen IPs (und wechselnden Nameservern) sollte in der /etc/ppp/ip-up die jeweils aktuelle /etc/resolv.conf nach ${CHROOT_DIR}/etc/ kopiert werden.
Teilweise geklaut aus http://www.debiansec.com/linux/services/webproxy.html
Bitte Feedback! |
|
Back to top |
|
|
Raimund n00b
Joined: 22 Mar 2003 Posts: 20
|
Posted: Sun Nov 20, 2005 8:45 am Post subject: |
|
|
Das ist UNSICHER, da Squid auf diese Weise seine Root-Privilegien nicht komplett abgibt (saved UID ist root); wenn ein Angreifer es schafft, Code innerhalb des Squid-Prozesses auszuführen, ist er mit einem Syscall root und mit zwei weiteren aus dem chroot-Käfig ausgebrochen.
Deshalb besser die chroot-Funktion von Squid selbst benutzen, dann muß man auch nicht 1000 Dateien umkopieren, was nur Arbeit macht, wenn es Updates gibt:
Code: | # TAG: chroot
# Use this to have Squid do a chroot() while initializing. This
# also causes Squid to fully drop root privileges after
# initializing.
|
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|