Download e instalação do Squid
O
Squid poderá ser baixado na página de downloads do site oficial do projeto:
# cd /usr/local/src
# wget http://mirrors.ccs.neu.edu/Squid/squid-3.2.0.14.tar.gz
# tar zxvf squid-3.2.0.14.tar.gz
# cd squid-3.2.0.14
# ./configure
# make
# make install
Preparando o ambiente para execução em modo chroot
Preparando o ambiente para execução em modo chroot
# cd /usr/local/squid
# ls
Ao entrarmos no diretório criado pela instalação do Squid e listar o seu conteúdo, poderemos ver que foi criada uma estrutura de diretórios semelhante a que temos na raiz de nosso sistema:
bin/ etc/ include/ lib/ libexec/ sbin/ share/ var/
Porém dentro destas pastas estão contidos apenas arquivos ligados ao Squid, dos quais seu funcionamento é dependente. Como principais, temos o executável do Squid que encontra-se no diretório "sbin", seus arquivos de configuração que encontram-se no diretório "etc" e seus arquivos de cache e log no diretório "var".
O primeiro passo para realizarmos a configuração do sistema raiz no qual será executado o Squid será a descoberta das bibliotecas compartilhadas utilizadas pelo software. Para isso iremos recorrer ao programa "ldd", o que irá nos listar todas as bibliotecas utilizadas pelo executável "squid" localizado na pasta "sbin".
Após, estas bibliotecas serão copiadas para dentro da estrutura de diretórios criada pela instalação do Squid, exatamente da mesmo forma como estão em nosso sistema raiz padrão.
# ldd sbin/squid
A saída seria:
linux-gate.so.1 => (0xffffe000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb77a0000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xb776d000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb767d000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7664000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb764c000)
librt.so.1 => /lib/librt.so.1 (0xb7643000)
libltdl.so.7 => /usr/lib/libltdl.so.7 (0xb763b000)
libdl.so.2 => /lib/libdl.so.2 (0xb7637000)
libm.so.6 => /lib/libm.so.6 (0xb7611000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb75f4000)
libc.so.6 => /lib/libc.so.6 (0xb7490000)
/lib/ld-linux.so.2 (0xb77d2000)
Antes de iniciar a cópia das bibliotecas, precisaremos criar a estrutura "usr/lib", para que possamos copiar algumas das bibliotecas mostradas acima, mantendo seu padrão estrutural.
# mkdir -p usr/lib
Obs.: As bibliotecas serão copiadas com exceção de linux-gate.so.1, por não tratar-se de um arquivo.
# cp /lib/libpthread.so.0 lib/
# cp /lib/libcrypt.so.1 lib/
# cp /usr/lib/libstdc++.so.6 usr/lib/
# cp /lib/libnsl.so.1 lib/
# cp /lib/libresolv.so.2 lib/
# cp /lib/librt.so.1 lib/
# cp /usr/lib/libltdl.so.7
# cp /usr/lib/libltdl.so.7 usr/lib/
# cp /lib/libdl.so.2 lib/
# cp /lib/libm.so.6 lib/
# cp /usr/lib/libgcc_s.so.1 usr/lib/
# cp /lib/libc.so.6 lib/
# cp /lib/ld-linux.so.2 lib/
Para execução do Squid usaremos o usuários e grupo de nome "squid". Os quais deverão ser criados no sistema, preferencialmente sem shell de execução.
# useradd -s /bin/false squid
Além das bibliotecas, mais alguns arquivos terão que ser copiados de nosso sistema padrão para o ambiente chroot onde será executado o Squid. Entre eles teremos os arquivos /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow e /etc/resolv.conf. Mantendo também a mesma estrutura da raiz padrão do sistema.
# cp /etc/passwd etc/
# cp /etc/shadow etc/
# cp /etc/group etc/
# cp /etc/gshadow etc/
# cp /etc/resolv.conf etc/
O mais importante, será editarmos estes quatro arquivos deixando-os apenas com as informações ligadas ao usuário e grupo squid. Pois é apenas o que será necessário para execução da aplicação.
# vim etc/passwd
squid:x:1001:1001::/home/squid:/bin/false
# vim etc/shadow
squid:!:15329:0:99999:7:::
# vim etc/group
squid:x:1001:
# vim etc/gshadow
squid:!::
Para que o usuário e grupo squid sejam realmente reconhecidos como válidos dentro do ambiente chroot, será necessário copiáramos as bibliotecas do Name Service Switch (NSS) para dentro de nossa estrutura.
# cp /lib/libnss_* lib/
Também é utilizado pelo Squid o dispositivo nulo dev/null e o dispositivo de memória compartilhada dev/shm.
Os quais poderão ser criados da seguinte maneira:
Criaremos a pasta dev dentro de /usr/local/squid e montaremos o sistema de arquivos /dev dentro desta pasta:
# mkdir dev
# mount -o bind /dev dev/