4.1. Socket en la jaula de Apache
Una vez instale mysql-server cree el directorio en el cual ubicará el socket, digamos:
mkdir /var/www/var/run/mysql/
chown _mysql:_mysql /var/www/var/run/mysql/
chmod a+w /var/www/var/run/mysql/
chmod +t /var/www/var/run/mysql/
y después inicie MySQL indicando la ruta del socket con la opción --socket, por ejemplo para que el cambio se efectúe en cada inicio, edite /etc/rc.conf.local para agregar:
mysqld_flags="--socket=/var/www/var/run/mysql/mysql.sock"
e inicie desde /etc/rc.local con:
pgrep mysqld > /dev/null
if [ "$?" != 0 -a X"${mysqld_flags}" != X"NO" -a \
-x /usr/local/bin/mysqld_safe ]; then
echo -n ' mysqld '
/usr/local/bin/mysqld_safe ${mysqld_flags} &
fi
Sus aplicaciones PHP pueden entonces conectarse con:
$dbhost = "localhost";
$dbuname = "miusuario";
$dbpass = "miclave";
mysql_connect($dbhost, $dbuname, $dbpass);
Tenga en cuenta también que otros binarios de MySQL también requerirán la opción --socket=/var/www/var/run/mysql/mysql.sock al ejecutarse por ejemplo:
# mysqldump --socket=/var/www/var/run/mysql/mysql.sock
\-p --all-databases
4.2. Corriendo MySQL chroot
Asumimos un servidor apache corriendo chroot en /var/www/ Nos proponemos instalar chroot en /var/www/ el servidor mysql.
He tomado como base el documento [SecMySQL] Este fue mi punto de partida, pero sobre la marcha hubo que añadirle cosas a este procedimiento. A continuación traduzco la parte pertinente y escribo las modificaciones en naranja.
Nota: Este procedimiento surgió para Mauricio Rivera a través de un método de ensayo y error con base en documento que explicaba como instalar el servidor mysql en un freebsd. Después de varias pruebas logré correr el servidor mysql y conectarlo a traves de apache, seguramente la configuración no es la única ni la óptima pero fue una que me funcionó.
4.2.1. Volviendo chroot el servidor
El primer paso para volver seguro a MySQL es preparar el ambiente de cambio de directorio, ambiente en el cual el servidor MySQL irá a correr. En nuestro caso /var/www/ era el chroot.
Como en artículos previos, el sistema operativo elegido es FreeBSD 4.7. Sin embargo, los métodos presentados deberán de poder aplicarse en la mayoría de sistemas UNIX modernos.
4.2.3. 3.2 Preparar el ambiente chroot
En orden a preparar el ambiente chroot, debemos crear la siguiente estructura de directorios:
mkdir -p /var/www/dev
mkdir -p /var/www/etc
mkdir -p /var/www/tmp
mkdir -p /var/www/var/tmp
mkdir -p /var/www/usr/local/mysql/libexec
mkdir -p /var/www/usr/local/share/mysql/english
mkdir -p /var/www/var/run/mysql
mkdir -p /var/www/var/mysql/
4.2.4. Establecer derechos de acceso
The access rights to the above directories should be set as follows:
chown -R root.daemon /var/www/
chmod -R 755 /var/www/
chmod 1777 /var/www/tmp
4.2.5. Crear estructura del directorio
A continuación, los siguientes archivos han sido copiados en la nueva estructura de directorio:
cp /usr/local/libexec/mysqld
/var/www/usr/local/mysql/libexec/
cp /usr/local/share/mysql/english/errmsg.sys
/var/www/mysql/usr/local/share/mysql/english/
cp /etc/hosts /var/www/etc/
cp /etc/host* /var/www/etc/
cp /etc/resolv.conf /var/www/etc/
grep mysql /etc/group > /var/www/etc/group
grep mysql /etc/master.passwd > /var/www/etc/master.passwords
grep mysql /etc/passwd > /var/www/etc/passwd
4.2.6. Filtrar archivos de passwords y grupos
De los archivos: /var/www/etc/passwords y /var/www/etc/group debemos eliminar todas las líneas excepto las de la cuenta de mysql (este es _mysql). Esto ya se preparo con el grep anteriro. Luego, debemos construir la base de datos de contraseñas:
cd /var/www/etc
pwd_mkdb -d /var/www/mysql/etc passwords
rm -rf /var/www/etc/master.passwd
4.2.7. Consideraciones especiales
Igual que en el caso del servidor Apache, debemos crear un archivo de dispositivo especial /dev/null:
ls -al /dev/null
crw-rw-rw- 1 root sys 2, 2 Jun 21 18:31 /dev/null
mknod /var/www/dev/null c 2 2
chown root.sys /var/www/dev/null
chmod 666 /var/wwww/dev/null
Debemos de copiar la base de datos mysql, la cual contiene tablas creadas durante la instalacion de MySQL:
cp -R /var/mysql/* /var/www/var/mysql/
chown -R _mysql._mysql /var/www/var/mysql/
4.2.8. Corriendo el servidor
Ejecutamos la orden:
mysqld_safe --user=_mysql --chroot=/var/www --datadir=/var/mysql &
Comprobamos que el servidor MySQL ese corriendo:
ps -aux|grep -i mysql
Corremos el cliente mysql, tenemos decirle que use un diferente socket:
mysql -S /var/www/var/run/mysql/mysql.sock
aseguramos el acceso al servidor mysql con una clave:
mysqladmin -S /var/www/var/run/mysql/mysql.sock password 'clave_secreta'
Hacemos que el servidor mysql arranque cada vez que arranque el servidor, agregamos la anterior linea al final del archivo /etc/rc.local:
mysqladmin -S /var/www/var/run/mysql/mysql.sock password 'clave_secreta'
4.2.9. Habilitando php en el servidor apache
Instalar paquete principal de PHP:
pkg_add php4-core-4.3.5RC3.tgz
Crear directorios donde iran las librerias de php para apache:
mkdir -p /chroot/usr/local/lib/php
Copiar la libreria libphp4.so al directorio correspondiente en el /chroot:
cp -p /usr/local/lib/php/libphp4.so /chroot/usr/local/lib/php/
4.2.10. Habilitando mysql con php en el servidor apache
Instalar paquete php4-mysql-4.3.5RC3:
pkg_add php4-mysql-4.3.5RC3.tgz
Nota: A modo de prueba copié ciertas librerias mysql a chroot, que pueden necesitar en el chroot:
mkdir -p /chroot/usr/local/lib/mysql/
cp -p /usr/local/lib/mysql/* /chroot/usr/local/lib/mysql/