Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
squid im chroot
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
slick
Bodhisattva
Bodhisattva


Joined: 20 Apr 2003
Posts: 3488

PostPosted: Thu Sep 16, 2004 3:33 pm    Post subject: squid im chroot Reply with quote

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
View user's profile Send private message
Raimund
n00b
n00b


Joined: 22 Mar 2003
Posts: 20

PostPosted: Sun Nov 20, 2005 8:45 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Page 1 of 1

 
Jump to:  
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