moodle.jpg

Hoy recibí por correo 8 anuncios de seguridad de Moodle, incluyendo 3 vulnerabilidades graves, por ende llegó el momento de planificar una actualización urgente.

Este artículo describe paso a paso cómo actualizar, casi totalmente desde línea de comandos y siguiendo la documentación oficial, un sitio Moodle instalado mediante una copia con git.

No hace falta que lo mencione pero voy a hacerlo de todos modos: antes de hacer cualquier modificación hacer un backup fresco, tanto de los archivos del sitio como de la base de datos.

Antes de comenzar, comprobar qué versión se encuentra instalada actualmente, y qué rama se está utilizando:

root@moodle:~# cd /var/www/moodle
root@moodle:/var/www/moodle# grep "\$release" version.php
$release  = '2.7.3+ (Build: 20141224)'; // Human-friendly version name
root@moodle:/var/www/moodle# git branch
  MOODLE_26_STABLE
* MOODLE_27_STABLE
  master

Se observa que la versión actual es la 2.7.3+ y se está utilizando la rama MOODLE_27_STABLE.

¿Olvidé mencionar que es necesario hacer un backup?

Para actualizar Moodle se debe poner el sitio en mantenimiento. Esto significa que, durante la actualización, los usuarios no podrán utilizarlo. Para ello es necesario ejecutar el siguiente script PHP como el usuario con el que corre el servidor Web (en este caso Apache, que en Debian y derivados corre como el usuario "www-data" por defecto):

root@moodle:/var/www/moodle# sudo -u www-data /usr/bin/php admin/cli/maintenance.php --enable
== Modo de mantenimiento (https://moodle.linuxito.com/catedras) ==
Su sitio está actualmente en modo de mantenimiento CLI, no se permiten accesos web .

Inmediatamente es posible comenzar con la actualización de archivos de Moodle, lo cual consiste en actualizar la copia local del repositorio mediante un git pull:

root@moodle:/var/www/moodle# git pull
remote: Counting objects: 19594, done.
remote: Compressing objects: 100% (5151/5151), done.
remote: Total 15716 (delta 11697), reused 14056 (delta 10167)
Receiving objects: 100% (15716/15716), 2.94 MiB | 1.03 MiB/s, done.
Resolving deltas: 100% (11697/11697), completed with 1544 local objects.
From git://git.moodle.org/moodle
   ab3effc..c228f82  MOODLE_27_STABLE -> origin/MOODLE_27_STABLE
   25b43f7..5c17205  MOODLE_26_STABLE -> origin/MOODLE_26_STABLE
   97cf440..79dfb73  MOODLE_28_STABLE -> origin/MOODLE_28_STABLE
   d87bcfb..06122e4  master     -> origin/master
 * [new tag]         v2.6.10    -> v2.6.10
From git://git.moodle.org/moodle
 * [new tag]         v2.6.7     -> v2.6.7
 * [new tag]         v2.6.8     -> v2.6.8
 * [new tag]         v2.6.9     -> v2.6.9
 * [new tag]         v2.7.4     -> v2.7.4
 * [new tag]         v2.7.5     -> v2.7.5
 * [new tag]         v2.7.6     -> v2.7.6
 * [new tag]         v2.7.7     -> v2.7.7
 * [new tag]         v2.8.2     -> v2.8.2
 * [new tag]         v2.8.3     -> v2.8.3
 * [new tag]         v2.8.4     -> v2.8.4
 * [new tag]         v2.8.5     -> v2.8.5
Updating ab3effc..c228f82
error: Your local changes to the following files would be overwritten by merge:
        lib/phpmailer/moodle_phpmailer.php
Please, commit your changes or stash them before you can merge.
Aborting

En caso de conflictos durante el merge, tomar las medidas necesarias (por ejemplo renombrar o eliminar los archivos conflictivos):

root@moodle:/var/www/moodle# mv lib/phpmailer/moodle_phpmailer.php lib/phpmailer/moodle_phpmailer.php.bckp

Notar que al actualizar se detectan los nuevos tags, que identifican a las diferentes versiones de cada release de Moodle.

Luego de resolver los conflictos, el proceso de merge fluirá correctamente. Dependiendo de cuándo hayan actualizado por última vez, y cuántas versiones hayan pasado, la lista de archivos puede ser bastante grande:

root@moodle:/var/www/moodle# git pull
Updating ab3effc..c228f82
Fast-forward
 admin/category.php                                                  |    3 +-
 admin/roles/classes/existing_role_holders.php                       |   19 +-
 admin/roles/usersroles.php                                          |    2 +-
 admin/search.php                                                    |    4 +-
 admin/settings.php                                                  |    1 -

[...]

 user/view.php                                                       |   28 +-
 version.php                                                         |    4 +-
 463 files changed, 13007 insertions(+), 4542 deletions(-)
 create mode 100644 admin/tool/task/tests/behat/manage_tasks.feature
 create mode 100644 admin/tool/task/tests/form_test.php
 create mode 100644 admin/tool/xmldb/styles_bootstrapbase.css

[...]

 create mode 100644 repository/url/tests/lib_test.php
 create mode 100644 user/tests/behat/view_full_profile.feature

Como se han creado nuevos archivos, será necesario ajustar los permisos adecuadamente. Esto dependerá del esquema de usuarios y permisos que utilicemos en el servidor. Seguramente sea necesario ejecutar chown (para cambiar owner y group), chmod (para cambiar permisos) y setfacl (para configurar o modificar ACLs).

El siguiente paso consiste en ejecutar el script admin/cli/upgrade.php para proceder con la creación del archivo de configuración y actualización de la base de datos:

root@moodle:/var/www/moodle# sudo -u moodle /usr/bin/php admin/cli/upgrade.php
== Actualizando la base de datos de Moodle desde la versión 2.7.3+ (Build: 20141128) (2014051203.03) a 2.7.7+ (Build: 20150313) (2014051207.01) ==

Sus archivos Moodle han sido modificados, y usted está a punto de
actualizar automáticamente su servidor a esta versión:

 2.7.7+ (BUILD: 20150313) (2014051207.01)

 Una vez que haga esto, no podrá volver atrás.

Por favor, note que este proceso puede costar bastante tiempo.

 ¿Está seguro de que quiere actualizar este servidor a esta versión?
escriba s (sí) o n (no)

Pero antes de proceder, debe garantizarse que el usuario de base de datos con el que se conecta Moodle tenga privilegios suficientes para crear y/o modificar tablas en la base de Moodle. De nuevo, esto depende mucho de qué motor de bases de datos se utilice. Por ejemplo, si se utiliza Postgres, será necesario dar temporalmente privilegios de superusuario. En el servidor de bases de datos, cambiar al usuario administrador de Postgres y conectarse a la base de datos de Moodle. Luego, suponiendo que el usuario con el que se conecta el sitio Moodle es "umoodle", ejecutar el comando SQL alter user umoodle superuser:

root@db34:~# su - dba
dba@moodle:~$ psql -d dbmoodle
psql (9.4.1)
Type "help" for help.

moodle=# alter user umoodle superuser;
ALTER ROLE

Proceder con la actualización:

 ¿Está seguro de que quiere actualizar este servidor a esta versión?
escriba s (sí) o n (no)
-->Utilidad de importación de idioma: es
++ El paquete de idioma es está al día ++
-->Sistema
++ Éxito ++
-->mod_assign
++ Éxito ++
-->mod_lesson
++ Éxito ++
-->filter_mathjaxloader
++ Éxito ++
Actualización de comando de línea finalizado con éxito.

Al finalizar la misma, quitar los privilegios de superusuario al usuario con el que se conecta Moodle y cerrar la sesión:

moodle=# alter user umoodle nosuperuser;
ALTER ROLE
moodle=# \q
dba@db34:~$ exit
root@db34:~#

Ahora, verificar si la versión que ha quedado instalada es la que se esperaba:

root@moodle:/var/www/moodle# grep "\$release" version.php 
$release  = '2.7.7+ (Build: 20150313)'; // Human-friendly version name

Si todo está bien, es posible desactivar el modo de mantenimiento para volver a activar el sitio:

root@moodle:/var/www/moodle# sudo -u moodle /usr/bin/php admin/cli/maintenance.php --disable 
== Modo de mantenimiento (https://moodle.linuxito.com/catedras) ==
El modo de mantenimiento está desactivado y el sitio vuelve a funcionar con normalidad

Verificar el funcionamiento del sitio. En caso de errores, probablemente sean causa de permisos incorrectos en el directorio "moodledata". Corregir los permisos y verificar nuevamente:

root@moodle:/var/www/moodle# cd ..
root@moodle:/var/www# chown -R www-data:www-data moodledata

Como último paso, actualizar todos los plugins desde la página "My home > Site administration > Plugins > Plugins overview", utilizando el botón "Check for available updates":

 

Referencias: Moodle 2.7 docs - Upgrading | Moodle 2.7 docs - Maintenance mode | Moodle 2.7 docs - Git for Administrators | git-branch

Fuente: linuxito

¿Quién está en línea?

Hay 2988 invitados y ningún miembro en línea