# Administración

- Añade y elimina registros a tablas básicas.

- Puede hacer volcados de la base de datos y sacar copias de forma segura.

- Configura consulta web pública y retroalimentación por correo, así como desencriptar los mensajes que se reciban.

- Puede copiar los datos públicos de una instalación de SIVeL a otra.

El rol de administrador desde la interfaz de SIVeL podrá especificar usuarios, modificar tablas básicas (con opciones de algunos de los campos de la ficha); y desde su cuenta en el sistema operativo podrá crear nuevos usuarios, sacar copias de respaldo manualmente, programar copias automáticas y recuperar copias de respaldo (en la misma base o en otra nueva); actualizar SIVeL y la distribución adJ del sistema operativo cuando se publiquen nuevas versiones (cada 6 meses); auditar seguridad del servidor y responder en caso de fallas; así mismo podrá manejar la base de datos subyacente a SIVeL en SQL. Consideramos que también es importante para el administrador sugerir mejoras a la infraestructura tecnológica (ver ) de su organización, capacitar y dar soporte a los usuarios y en general consideramos que debe ayudar a garantizar que la base esté disponible permanentemente sólo para los usuarios autorizados de la organización.

En la interfaz web un usuario que no tenga el rol de Administrador no podrá ingresar a modificar tablas básicas ni a manejar usuarios.

## Labores administrativas desde la interfaz web

### Tablas básicas

Pueden configurarse las tablas presentadas en la siguiente figura:

Tablas Básicas

Al elegir una de las tablas, verá los registros que tiene y podrá bien crear uno nuevo (con el enlace `Nuevo` al final de los registros) o bien elegir un registro para actualizarlo o para eliminarlo. La siguiente figura ejemplifica los registros de las Fuentes Frecuentes.

Edición de la tabla básica Fuentes Frecuentes

Para no perder compatibilidad entre su instalación de SIVeL y la de otras organizaciones, pero a la vez para permitirle personalizar el sistema a sus necesidades de sistematización de información, sugerimos no cambiar ni eliminar los registros por defecto de las tablas básicas, sino agregar los que necesite su organización. En la siguiente figura se presenta el formulario para añadir una nueva fuente frecuente:

Nueva Fuente Frecuente

Cada entrada (i.e registro) de una tabla básica tiene una llave, que puede constar de uno o más datos (i.e campos) del registro. Al actualizar tablas básicas tenga en cuenta que no pueden modificarse las llaves. Por ejemplo en una categoría ya ingresada no es posible modificar supracategoría o fecha de violencia. Si requiere actualizar una llave en un registro, debe primero eliminarlo de la tabla básica y después volverlo a añadir haciendo los cambios apropiados.

En general si añade datos a una tabla cuya llave sea un dato numérico, no necesitará elegir un número para la llave pues el sistema lo hará automáticamente.

En general la información de cada tabla básica es autoexplicativa, algunas que pueden requerir aclaración adicional son:

- Categoría: No se numeran automáticamente para que cada organización pueda proponer su codificación. El campo "Contada también como Categoría" permite indicar que categorías se replican, para excluirlas de requerirse en conteos (ver ). Por ejemplo toda ejecución extrajudicial por persecución política (A10) también es un Homicidio Intencional a Persona Protegida (D701) por lo que en el registro A10 de la tabla Categoría el campo "Contada también como Categoría" debe ser 701.

- En la tabla `Clase` tenga en cuenta que no es posible actualizar el municipio ---porque hace parte de la llave primaria. Si le resulta indispensable modificarlo, elimine primero el registro y añado uno nuevo con los datos corregidos.

### Usuarios y Roles

Esta opción del menú presenta el listado de usuarios de la base (como se presenta en la figura)

Usuarios

Podrá añadir nuevos usuarios y sus contraseñas (como se presenta en la siguiente figura), o cambiar datos, rol y contraseñas de usuarios ya existentes.

Nuevo Usuario

## Labores administrativas desde el interprete de comandos

### Copias de respaldo y restauración

Hay varias herramientas relacionadas con copias de respaldo:

`bin/pgdump.sh`

  Saca volcado de la base (i.e un volcado es un archivo con instrucciones SQL para reconstruir la base completa), lo almacena junto con los del último mes en el directorio de respaldo configurado --por defecto es `/var/www/resbase` que en adJ está encriptado.

  Los volcados generados con `bin/pgdump.sh` incluyen las fuentes de información. Debe mantenerlos encriptados y con permisos que no permitan lectura por parte de usuarios que no administren.

`bin/respaldo.sh`

  Almacena volcado con los de última semana y opcionalmente lo copia de forma segura (con `ssh`) a otros computadores.

  Las copias de envíe manténgalas en directorios encriptados en los computadores donde lleguen.

  Especifique cada computador destino y usuario en la variable `$rremotos` separandolos con espacio, por ejemplo un sólo destino sería `jaime@miservidor.cc.cc:copiasencriptadas/`. Para que pueda hacer automático el copiado, genere un par de llaves RSA sin clave con `ssh-keygen`, configure la llave privada en la variable `$llave` y agregue la llave pública en el archivo `~/.ssh/authorized_keys` de la cuenta a la que enviará las copias.

`bin/copiacd.sh`

  Que quema un CD con el contenedor encriptado (por defecto `/var/resbase.img`) del directorio de respaldos.

`bin/restaura.sh`

  Que permite restaurar un volcado SQL de la base de datos. Por ejemplo si el volcado está ubicado en `/mnt/usb/volcado.sql` para incluirlo en la base basta:

      cd /var/www/users/sivel
      bin/restaura.sh /mnt/usb/volcado.sql

  El volcado puede estar comprimido con gzip.

  Los volcados generados con `bin/pgdump.sh` incluyen instrucciones para borrar las tablas existentes antes de insertar los registros volcados. Es decir al restaurarlos borran la información que hubiera en la base.

  Es posible editar los volcados antes de restaurarlos, para eso deben descomprimirse antes, por ejemplo:

      cp /var/www/resbase/sivel-dump-22.sql.gz /tmp/volcado.sql.gz
      gzip -d /tmp/volcado.sql.gz

  Si requiere editar un volcado para eliminar las líneas que borran las tablas (i.e las de la forma `DROP TABLE`) puede emplear:

      grep -v "DROP TABLE" /tmp/volcado.sql > /tmp/volcadosindrops.sql

  Para ver brevemente las diferencias entre 2 volcados puede emplear:

      diff /tmp/volcado.sql /tmp/volcadosindrops.sql | less

`bin/importacd.sh`

  Que intenta restaurar la base de datos de un volcado posiblemente incluido en un CD quemado con `bin/copiacd.sh`. Antes de efectuar este procedimiento saque un volcado de la base que tenga.

Se recomienda que configure ejecución diaria de `bin/respaldo.sh`. En adJ esto se hace con una tarea cron diaría a las 12:00M

#### Procedimiento de volcado en detalle

Si no tiene una instalación de adJ estándar ajuste variables relacionadas con volcados en `aut/conf.php`, en particular la variable `rlocal` que debe tener el directorio en el que quedarán los volcados generados con `bin/pgdump.sh`.

Para sacar un volcado comprimido de la base, desde un interprete de comandos:

    $ cd /var/www/users/sivel
    $ bin/pgdump.sh

Al ejecutarlo se generará un archivo de la forma `/var/www/resbase/sivel-dump-08.sql.gz`, en lugar de `/var/www/resbase/` el directorio que haya configurado y en lugar de `08` el día del mes.

### Publicación web

Suponemos que tiene una segunda instalación de SIVeL --preferiblemente en un computador diferente al de la base principal-- para consulta pública por el web de los datos públicos (i.e sin fuentes). Para actualizar esa segunda instalación debe:

1. En la instalación fuente asegúrese de configurar computador destino en la variable `$maquinaweb`, por ejemplo `miservidor.cc.cc`. El usuario destino en `$usuarioact` y el directorio donde quedará un volcado en el destino (la información que llegará a este directorio no incluye fuentes por lo que no requiere estar encriptado), por ejemplo `/var/www/resbase`.

2. En la instalación fuente como usuario administrador de SIVeL ejecute:

       cd /var/www/users/sivel
       bin/actweb.sh

   Este script generará un volcado, del cual eliminará las fuentes y enviará el volcado resultante con `scp` al destino configurado con un nombre de la forma `web-sf-sinf-22.sql.gz`.

3. Ingrese al servidor destino y ejecute:

       cd /var/www/users/sivel
       bin/pgdump.sh
       bin/pubweb.sh

### Retroalimentación por correo desde Consulta Web

La información complementada por un usuario en el formulario que se ve tras oprimir el botón 'Comente Caso', será encriptada y enviada a una cuenta de correo.

Hay 3 aspectos por configurar:

- Ubicación del programa `openssl`. Que típicamente será ubicado por el script `bin/prep-chroot.sh` en el directorio `/var/www/usr/sbin/` y autodetectado o especificado en el momento de la configuración con `conf.sh`

- Llave de encripción. Especificada en el archivo `aut/conf.sh` como `PALABRA_SITIO`.

  Cambie la llave de encripción que se distribuye con SIVeL.

- Cuenta de correo que recibirá la información encriptada. Especificada en el archivo `aut/conf.sh` variable `receptor_correo`.

En la cuenta configurada se recibirán dos correos por cada retroalimentación, ambos con el mismo mensaje pero el primero lo incluye en el cuerpo del mensaje en hexadecimal, mientras que el segundo lo incluye en binario como adjunto.

El adjunto puede guardarse en un archivo, digamos `/tmp/encriptado`, y si la llave de encripción fuera la cadena `La llave`, podría desencriptarse y guardarse en el archivo `/tmp/desenc` con:

    openssl bf -nosalt -d -in /tmp/encri -out /tmp/desenc -k "La llave"

El mensaje en hexadecimal primero tendría que salvarse en un archivo, digamos `/tmp/hex`, pasarse a binario, digamos al archivo `/tmp/encriptado` y después desencriptarse como se explicó en el párrafo anterior. Para convertir de hexadecimal a binario podría emplear el script `herram/hex2bin.php` distribuido con las fuentes de SIVeL, que de estar ubicadas en `/var/www/users/sivel`, se emplearía así:

    cd /var/www/users/sivel
    php herram/hex2bin.php < /tmp/hex > /tmp/encriptado