Domingo, 23 de Setembro de 2007
MySQL chrooted
Uma coisa que eu costumo fazer sempre nos servidores que instalo é "chrootar" o MySQL e aplicar-lhe alguns truques (que ficam para outro artigo) para o tornar o mais seguro possível.
Vou assumir um MySQL instalado tal como
neste artigo que escrevi anteriormente e a funcionar perfeitamente. Para o verificar, executar:
# mysql -p
Para tudo estar bem, deve aparecer o seguinte:
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)mysql> quit;
Adiante para o chroot...
É necessário criar a seguinte estrutura de directórios:
# mkdir -p /chroot/mysql/dev
# mkdir -p /chroot/mysql/etc
# mkdir -p /chroot/mysql/tmp
# mkdir -p /chroot/mysql/var/tmp
# mkdir -p /chroot/mysql/usr/local/mysql/libexec
# mkdir -p /chroot/mysql/usr/local/mysql/share/mysql/english
Os direitos de acesso a estes directórios devem ser os seguintes:
# chown -R root:sys /chroot/mysql
# chmod -R 755 /chroot/mysql
# chmod 1777 /chroot/mysql/tmp
Agora, têm que ser copiados alguns ficheiros para esta estrutura de directórios:
# cp /usr/local/mysql/libexec/mysqld
/chroot/mysql/usr/local/mysql/libexec/
# cp /usr/local/mysql/share/mysql/english/errmsg.sys
/chroot/mysql/usr/local/mysql/share/mysql/english/
# cp /etc/hosts /chroot/mysql/etc/
# cp /etc/host.conf /chroot/mysql/etc/
# cp /etc/resolv.conf /chroot/mysql/etc/
# cp /etc/group /chroot/mysql/etc/
# cp /etc/master.passwd /chroot/mysql/etc/passwords
# cp /etc/my.cnf /chroot/mysql/etc/
Dos ficheiros /chroot/mysql/etc/passwords e /chroot/mysql/etc/group,
removem-se todas as linhas, excepto as respeitantes ao MySQL.
Tem que ser criado um device file especial para o /dev/null:
# mknod /chroot/mysql/dev/null c 2 2
# chown root:sys /chroot/mysql/dev/null
# chmod 666 /chroot/mysql/dev/null
E copiar a base de dados dos previlégios do MySQL:
# cp -R /usr/local/mysql/var/ /chroot/mysql/usr/local/mysql/var
# chown -R mysql:mysql /chroot/mysql/usr/local/mysql/var
O MySQL está pronto a ser executado num ambiente chrooted:
# chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &
Bem, quando tiver pachorra, escrevo um artigo sobre como correr o Apache também em ambiente chrooted e como integrar com o PHP e o MySQL de modo a fazer um todo coerente.
A ouvir: Yet Another Movie, Pink Floyd
YouTube: http://www.youtube.com/watch?v=Ep9RTAmH5Rw
Os comentários são da exclusiva resonsabilidade dos seus autores.
Mário Gamito, 2004 - 2007
Todos os direitos reservados.