instalar mongodb y php en ubuntu 16 - · pdf fileinstalar mongodb y php en ubuntu 16.04 en...

7

Upload: trankiet

Post on 30-Jan-2018

242 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache
Page 2: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache

Instalar MongoDB y PHP en Ubuntu16.04En este artículo veremos cómo instalar la base de datos NoSQL MongoDB3.4, la configuración inicial básica de seguridad que hay que hacer y lainstalación del soporte de MongoDB para PHP 7, todo ello sobre Ubuntu16.04. Este artículo servirá de base para uno posterior en el querealizaremos algunos ataques de inyección "de libro" sobre este gestor.

Para realizar la instalación inicial me baso en el siguiente procedimiento y posteriormente enla documentación oficial de mongodb.

1. Instalación inicial de MongoDBLa versión de MongoDB que viene en la distribución (la 2.6) está fuera de soporte delfabricante, por ello realizaremos la instalación de la última versión estable utilizando losrepositorios oficiales de MongoDB.

En general soy enemigo de usar directamente repositorios PPA, si tuviéramosmuchas máquinas con esta instalación convendría crear nuestro propiorepositorio y migrar los paquetes del PPA al nuestro.

Agrego las keys

root@mongodb:~# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv0C49F3730359A14518585931BC711F9BA15703C6Executing: /tmp/tmp.PAVRA2r96X/gpg.1.sh --keyserverhkp://keyserver.ubuntu.com:80--recv0C49F3730359A14518585931BC711F9BA15703C6gpg: solicitando clave A15703C6 de hkp servidor keyserver.ubuntu.comgpg: clave A15703C6: clave pública "MongoDB 3.4 Release Signing Key<[email protected]>" importadagpg: Cantidad total procesada: 1gpg: importadas: 1 (RSA: 1)

www.luisguillen.com

1

Page 3: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache

Agrego el repositorio fuente y lo instalo

root@mongodb:~# echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" >/etc/apt/sources.list.d/mongodb-org-3.4.listroot@mongodb:~# apt-get update && apt-get install mongodb-org  ....Añadiendo el usuario del sistema `mongodb' (UID 111) ...Añadiendo un nuevo usuario `mongodb' (UID 111) con grupo `nogroup' ...No se crea el directorio personal `/home/mongodb'.Añadiendo el grupo `mongodb' (GID 117) ...Hecho.Añadiendo al usuario `mongodb' al grupo `mongodb' ...Adding user mongodb to group mongodbHecho.Configurando mongodb-org-mongos (3.4.10) ...Configurando mongodb-org-tools (3.4.10) ...Configurando mongodb-org (3.4.10) ...

Habilitamos e iniciamos el servicio

root@mongodb:~# systemctl enable mongodCreated symlink from /etc/systemd/system/multi-user.target.wants/mongod.serviceto /lib/systemd/system/mongod.service.root@mongodb:~# systemctl start mongod

2. Configuración de usuario administradoren MongoDBCon esto ya está instalado, pero por defecto cualquier proceso que se ejecute en el lamáquina tendrá acceso completo al gestor de base de datos mediante el socket tcp. Esto esun grave problema de seguridad (en las primeras versiones se escuchaba en todas lasinterfaces). Por ello crearemos un usuario administrador y habilitaremos la autenticación.

Sustituye el nombre de tu usuario administrador y tu password.

www.luisguillen.com

2

Page 4: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache

Creamos el usuario admin en mongo

luisadm@mongodb:~$ mongoMongoDB shell version v3.4.10connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.10Welcome to the MongoDB shell.> use adminswitched to db admin> db.createUser(... {... user: "luisadm",... pwd: "12345",... roles: [ { role: "userAdminAnyDatabase", db: "admin"} ]... }... )Successfully added user: {  "user" : "luisadm",  "roles" : [  {  "role" : "userAdminAnyDatabase",  "db" : "admin"  }  ]}> quit()

Habilitamos la autenticación editando /etc/mongodb.conf

security:  authorization: "enabled"

Reiniciamos el servicio

root@mongodb:~# systemctl restart mongod

www.luisguillen.com

3

Page 5: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache

Comprobamos que funciona conectándonos como administradores

luisadm@mongodb:~$ mongo -u luisadm -p --authenticationDatabase adminMongoDB shell version v3.4.10Enter password:connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.10> show dbsadmin 0.000GBlocal 0.000GB

3. Instalación de PHP con soporte deMongoDBYa tenemos la base de datos configurada con un usuario administrador. Ahora tenemos queinstalar el servidor web, el entorno PHP y las librerías necesarias para conectarnos a la basede datos.

Soy enemigo de instalar cosas "a pelo", la instalación vía pecl estáautomatizada pero se encuentra fuera del sistema de paquetería. Por ello, enservidores en producción convendría crear el paquete deb en una máquina dedesarrollo y utilizar nuestro repositorio.

Instalamos apache + php + dependencias compilación

root@mongodb:~# apt-get install libapache2-mod-phproot@mongodb:~# apt-get install php-dev pkg-config php-pear unzip composer

www.luisguillen.com

4

Page 6: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache

Instalamos los bindings de mongo usando pecl

root@mongodb:~# pecl install mongodbdownloading mongodb-1.3.4.tgz ...Starting to download mongodb-1.3.4.tgz (848,798 bytes)......done: 848,798 bytes412 source files, buildingrunning: phpizeConfiguring for:PHP Api Version: 20151012Zend Module Api No: 20151012Zend Extension Api No: 320151012  .....Build process completed successfullyInstalling '/usr/lib/php/20151012/mongodb.so'install ok: channel://pecl.php.net/mongodb-1.3.4configuration option "php_ini" is not set to php.ini locationYou should add "extension=mongodb.so" to php.ini

Habilitamos la extensión en apache y en cli

root@mongodb:~# echo "extension=mongodb.so" > /etc/php/7.0/mods-available/mongodb.iniroot@mongodb:~# cd /etc/php/7.0/apache2/conf.d/root@mongodb:/etc/php/7.0/apache2/conf.d# ln -s /etc/php/7.0/mods-available/mongodb.ini 20-mongodb.iniroot@mongodb:/etc/php/7.0/apache2/conf.d# cd /etc/php/7.0/cli/conf.d/root@mongodb:/etc/php/7.0/cli/conf.d# ln -s /etc/php/7.0/mods-available/mongodb.ini 20-mongodb.iniroot@mongodb:/etc/php/7.0/cli/conf.d# systemctl restart apache2

Ya tenemos el intérprete de php y los bindings a mongo. Sin embargo, estos bindings no sonutilizados directamente, en su lugar se ha de utilizar un wrapper en PHP que proporciona unaAPI soportada oficialmente por el fabricante. Para su utilización, vamos a instalar esta API enla carpeta en la que vamos a desarrollar la aplicación. Para ello:

www.luisguillen.com

5

Page 7: Instalar MongoDB y PHP en Ubuntu 16 - · PDF fileInstalar MongoDB y PHP en Ubuntu 16.04 En este artículo veremos cómo instalar la base de datos NoSQL MongoDB ... Instalamos apache

Instalando API PHP de mongo

root@mongodb:~# mkdir -p /var/www/html/mongodbroot@mongodb:~# chown luisadm /var/www/html/mongodb/root@mongodb:~# exitluisadm@mongodb:~$ cd /var/www/html/mongodb/luisadm@mongodb:/var/www/html/mongodb$ composer require mongodb/mongodbUsing version ^1.2 for mongodb/mongodb./composer.json has been updatedLoading composer repositories with package informationUpdating dependencies (including require-dev)  - Installing mongodb/mongodb (1.2.0)  Downloading: 100%

Writing lock fileGenerating autoload files

Para comprobar que funciona simplemente crearemos un index.php que la incluya.

Contenido de un index.php de prueba

<?php

// incluyemos la librería composerrequire 'vendor/autoload.php';

$cliente = new MongoDB\Client("mongodb://localhost");

echo "Instancia correctamente un objeto de la clase!";

Navegamos y si vemos la frase "Instancia correctamente…" es que todo está ok.

Hasta aquí es todo por hoy, ya tenemos un servidor con apache+php+mongodb listo. En unartículo posterior veremos algunos ataques de inyección que pueden realizarse sobre estegestor. Mientras tanto… no te olvides de compartir si te ha sido de utilidad ;)

www.luisguillen.com

6