Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Deutsche Dokumentation
  • Search

squid im chroot

Dokumentation, Tipps und Tricks.
Post Reply
  • Print view
Advanced search
2 posts • Page 1 of 1
Author
Message
slick
Bodhisattva
Bodhisattva
User avatar
Posts: 3495
Joined: Sun Apr 20, 2003 11:44 am

squid im chroot

  • Quote

Post by slick » Thu Sep 16, 2004 3:33 pm

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: Select all

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: Select all

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: Select all

#!/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: Select all

#!/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!
Top
Raimund
n00b
n00b
Posts: 20
Joined: Sat Mar 22, 2003 3:46 pm

  • Quote

Post by Raimund » Sun Nov 20, 2005 8:45 am

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: Select all

#  TAG: chroot
#       Use this to have Squid do a chroot() while initializing.  This
#       also causes Squid to fully drop root privileges after
#       initializing.
Top
Post Reply
  • Print view

2 posts • Page 1 of 1

Return to “Deutsche Dokumentation”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic