Hace unas semanas hablábamos de hacer una instalación de Owncloud en nuestro servidor para proporcionar servicios de almacenamiento para el hogar o para una pequeña empresa. Aunque esa guía estaba bien para redes privadas, cuando salimos a Internet hay que tomar algunas precauciones y hacer que nuestro servidor, así como el servicio que proporcionamos sea seguro.
Parte de este post serán recomendaciones de seguridad generales para un entorno LAMP y no son propias de Owncloud.
Comunicación segura
Si hemos instalado Owncloud en un servidor de Internet, hay que tener cuidado con el cifrado. Es cierto que hace tres años o así, los clientes de escritorio y móvil, de los cuales hablaré en la próxima entrega no se llevaban del todo bien con HTTP S. Y eso era un gran problema, ya que, aunque nuestro servidor estuviera muy bien protegido, si alguien interceptaba nuestras comunicaciones con él podría ver nuestros datos.
Pero en la actualidad, al menos, en mis últimas pruebas, no he encontrado ningún problema en el ámbito de la seguridad con Owncloud, es más, recomiendo encarecidamente utilizarlo.
Para más información sobre HTTPS podéis visitar este post. Aunque para este caso, ya que hablamos de un Owncloud doméstico o para una pequeña empresa, utilizaremos un certificado autofirmado.
Para generar el certificado autofirmado, basta con seguir estas instrucciones. Los certificados (certificado y clave de nuestra web y certificado de autoridad, o cadena de certificados) los copiaremos para el ejemplo en /home/cloud/www/owncloud.miservidor.com/certs y si queremos más seguridad dentro de nuestro servidor, todos esos archivos tendrán permiso de lectura para root, es decir, tanto el grupo, como otros usuarios, no tendrán acceso al contenido de los archivos.
Finalmente, nuestro VirtualHost de Apache quedará así (he cogido la configuración del post de hace unas semanas):
Con esto, estamos evitando que se pueda entrar por HTTP, redireccionando a un protocolo seguro. Estamos también estableciendo un nivel de seguridad intermedio (ver este post para más info) y habilitando algunas configuraciones que incrementarán la seguridad de nuestro sitio.
Además, en la configuración de Owncloud en config/config.php podemos definir la opción:
Otras configuraciones de seguridad
Para completar la configuración de seguridad, en config/config.php habilitaremos lo siguiente (como antes, no voy a poner el archivo completo, sólo las claves que interesan, tendremos que buscarlas, y si no están añadirlas:
Por otro lado, en Apache, es conveniente eliminiar la información del servidor web expuesta al usuario. Es decir, Apache, se identifica cuando envía una web, y eso puede ser explotado por un usuario malintencionado que conozca la versión y alguna vulnerabilidad de dicha versión. Para ello debemos incluir en apache (esta configuración suele estar en /etc/apache2/httpd.conf , /etc/apache2/apache2.conf , /etc/apache2/conf.d/security o algún archivo cercano):
Ahora debemos hacer que no salga la versión de PHP, para ello, debemos establecer en nuestro php.ini (buscad dentro de /etc/php/ aunque puede estar en otro sitio dependiendo de nuestra instalación ):
Caché
Al ser un sistema que hace muchas peticiones a base de datos y genera mucha información, es necesario agilizar todo el proceso de obtención de datos. Por tanto, Owncloud implementa un sistema de caché que nosotros podemos configurar. El objetivo es agilizar el acceso a objetos de uso común. Aunque se pueden configurar varios motores, yo he optado por Redis, el cuál me ha dado muy buen rendimiento y podemos utilizarlo en un servidor aparte, lo que nos beneficia a la hora de distribuir nuestra aplicación en varios equipos.
Lo primero deberá ser instalar el módulo de redis para php así como el servidor redis (en muchas distribuciones suele venir el paquete). Y una vez tenemos el demonio de redis en ejecución (debe estar como un servicio de sistema), añadiremos con config/config.php lo siguiente:
Experiencia de usuario
Para que los usuarios estén más cómodos con la aplicación podemos introducir lo siguiente en config/config.php:
Así evitamos que se pierdan las sesiones (session_keepalive) cuando la ventana del navegador lleva mucho tiempo abierta, y por otro lado vaciamos la papelera de archivos eliminados cada 60 días. La tercera opción (asset-pipeline.enabled), hace que los archivos CSS y Javascript se sirvan como ficheros estáticos, y no pasen por los scripts de Owncloud, de esta forma, al ser gestionados directamente por Apache se sirven más rápido.
Tareas periódicas
Owncloud, debe realizar varias tareas de limpieza y procesamiento de datos a menudo, o tal vez envío de e-mails, gestión de caducidad de links, etc. Esas tareas pueden realizarse cada vez que un usuario visualiza cualquier página de Owncloud, aunque se recomienda que se realicen de fondo, sin que los usuarios tengan nada que ver, por lo que es muy recomendable configurar tareas programadas en nuestro sistema (cron jobs).
Podemos hacer que se ejecuten cada 15 minutos, aunque las tareas se pueden demorar hasta una hora, pero no es plan de ajustar mucho el tiempo y si tenemos muchos usuarios y muchos archivos, deberemos juntar más en el tiempo la ejecución de estas tareas. Si tenemos activada la búsqueda Full Text Search, el servidor debe ser bastante potente, ya que tendrá que entrar en todos los archivos y leer dentro y esto puede provocar que se pisen las ejecuciones programadas.
Para añadir la tarea programada, ésta debe ejecutarse con el mismo usuario que tiene permiso la web para acceder. Aunque he intentado darle otro usuario y un grupo común, al final he optado por crear un crontab para el usuario www-data (el que utiliza Apache), e incluir la siguiente línea:
Para editar el crontab del usuario www-data podemos, si disponemos de sudo:
$ sudo -u www-data crontab -e
Plugins útiles
Todos estos plugins los podemos encontrar en el repositorio oficial, aunque algunos son experimentales y debemos habilitar esta opción en el selector de aplicaciones (como administradores):
- Deleted Files: Permite a los usuarios restaurar ficheros borrados. Es como una papelera de reciclaje. Eso sí, tu puedes borrar los archivos en tu equipo local, o en tu móvil, el archivo aparecerá borrado, pero desde el entorno web podrás recuperarlo.
- Documents: Aunque está muy verde, nos permite editar documentos ofimáticos (LibreOffice/OpenOffice/Word) de forma sencilla (sólo se pueden utilizar algunos estilos, e introducir notas) y de manera colaborativa o lo que es lo mismo: varios usuarios del sistema pueden estar al mismo tiempo editando el documento. ¡¡Está muy chulo!! Aunque hay que usarlo con cuidado.
- Versions: Nos permite restaurar versiones antiguas de un mismo fichero en el servidor. Muy útil cuando dos personas están trabajando en sus ordenadores con un mismo documento, y lo suben casi a la vez. Como sólo la última versión prevalece podemos cambiar en cualquier momento para ver la versión anterior.
- Files Move: Permite mover ficheros, incluso arrastrando y soltando desde la interfaz.
- Delete Confirmation: Muestra un diálogo de confirmación antes de borrar un archivo.
- Piwik Tracking: Monitoriza los usuarios que entran a la interfaz de Owncloud con Piwik. Es necesario tener éste último instalado también, ya sea en el mismo servidor o en otro lado, pero accesible.
- OwnNote: Un gestor de notas. Muy sencillo, pero nos puede servir para un apaño
- Bookmarks: Gestor de marcadores en la nube. Nos permite poner un botón en nuestro navegador a través del cual añadiremos la página que estamos visitando actualmente a una lista "para ver luego"
- Contacts y Calendar: Permiten tener un calendario y una agenda de contactos (tipo calendarios y contactos de Google) almacenadas en tu propio servidor y que podemos sincronizar con nuestros clientes de correo, teléfonos móviles, o mirar desde la web. Está muy bien introducir un teléfono desde el móvil, y luego escribir más detalles desde la página web, añadir una foto al contacto y luego poder verlo todo desde el teléfono.
Documentos de MS. Word
Aunque no es uno de los puntos fuertes, a partir de la versión 8 podemos visualizar documentos de MS. Word (docx, doc). La compatibilidad no es la mejor y no soporta todos los tipos de elementos que tiene este formato, pero nos puede sacar de un apuro.
Para poder utilizar los documentos de Word desde Owncloud, necesitamos tener openoffice o libreoffice instalado en el servidor (no hace falta tenerlo entero, ya que en un servidor no vamos a tener entorno gráfico. En distribuciones como Debian, hay un paquete llamado "libreoffice-core" que instala los elementos básicos de la suite ofimática.
Para ejecutar libreoffice como servicio, debemos hacerlo con la siguiente orden:
De este modo, podemos configurar dentro de Owncloud el soporte de documentos de MS. Word a través de LibreOffice. Personalmente, tengo la instalación de LibreOffice en un servidor externo, por lo que en la configuración he puesto la IP de ese servidor (tenemos que asegurarnos de que el firewall del servidor tenga abierto el puerto 16080).
(La IP del servidor parece sacada de un capítulo de CSI, es para no poner la IP de mi servidor).
Cloud federado
Más que una configuración, específica, si tenemos esta opción activada, por un lado permitiremos a los usuarios de este servidor compartir archivos con otros servidores de Owncloud.
Por ejemplo, si tengo un amigo que tiene también su propio servidor, puedo compartir un archivo con él si pongo: usuario@owncloud.miamigo.com (por ejemplo). Y lo mismo puede pasar si mi amigo quiere compartir archivos conmigo. Ya se pelean los servidores de Owncloud ellos solos, copiando archivos de uno a otro para que todo sea lo más transparente posible.
Almacenamiento Externo
Owncloud, dado que tiene que estar instalado en uno de nuestros servidores, puede que necesite más espacio de almacenamiento. Éste puede salir de un servidor Amazon S3, un servidor FTP, un ordenador en la red local o incluso Dropbox. Lo podemos habilitar utilizando la aplicación External Storage.
Personalmente, es de las pocas cosas que no he probado, pero merece la pena mencionarlas, porque, por ejemplo, en Digital Ocean, donde tengo contratados algunos servidores no podemos enchufar discos duros, como se hace en Amazon, las máquinas vienen con un disco duro fijo, pero si sólo necesitamos almacenamiento podemos poner máquinas pequeñas en red, que vienen con 20Gb cada una y cuestan $5/mes y nos podrían servir de apoyo.
Fin
Estas son algunas recomendaciones, aplicaciones, y detalles de la configuración de Owncloud que he visto interesantes para poder montarte tu propio servidor en la nube, tanto para el hogar como para una pequeña empresa.
Muchas de estas cosas vienen en la documentación, pero quería dar un punto de vista más personal, un poco más breve en algunos aspectos y más extendida en otros.
Si tienes algún comentario, estoy deseando leerlo