# 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 y puede descifrar los mensajes que reciba de la misma.

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

Un usuario con el rol de administrador, podrá realizar diversas operaciones desde la interfaz de SIVeL: administrar usuarios, modificar tablas básicas (con opciones de algunos de los campos de la ficha). Desde su cuenta en el sistema operativo podrá: sacar copias de respaldo manualmente, programar copias automáticas y recuperar copias de respaldo (en la misma base o en otra nueva). También consideramos que debe realizar otras labores con el sistema operativo y la infraestructura de red como: actualizar SIVeL y la distribución adJ del sistema operativo cuando se publiquen nuevas versiones (cada 6 meses); auditar seguridad del servidor y solucionar problemas en caso de fallas. 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 de las tablas básicas, sino agregar los que necesite su organización y deshabilitar (poniendo una fecha de deshabilitación) los registros que no requiera. 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.

- La tabla `Presuntos Responsables` describe una jerarquía de estructuras, por ejemplo Paramilitares incluye AUC, ACCU, AUTODEFENSAS DEL CASANARE, etc; como puede visualizar al ingresar a esta tabla básica.

  Al ingresar o editar un presunto responsable se debe especificar si es subestructura de otro presunto responsable. En el marco conceptual por defecto los presuntos responsable que no son subestructura son: POLO ESTATAL, POLO INSURGENTE, OTROS y SIN INFORMACIÓN. Los demás presuntos responsables se clasifican como subestructuras de estos o de otros que a su vez descienden de estos. No deben generarse ciclos al especificar subestructuras --por ejemplo que un presunto responsable A sea subestructura de B y B

### Usuarios

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

SIVeL 1.1 es multisitio es decir en el mismo directorio de fuentes pueden configurarse diversas instancias de SIVeL cada una con su base de datos. Esto facilita la actualización de las fuentes.

Como las operaciones que se presentan a continuación deben realizarse desde una terminal con un interprete de comandos, recomendamos que lea al respecto (ver por ejemplo ) y que conozca la ubicación de las fuentes de SIVeL y del sitio o sitios que maneje. Por ejemplo en adJ las fuentes de SIVeL estarán en `/var/www/htdocs/sivel`, el sitio por defecto será `sitios/sivel` (o con ruta completa `/var/www/htdocs/sivel/sitios/sivel`).

### Copias de respaldo y restauración

Hay varias herramientas relacionadas con copias de respaldo que el administrador ejecuta desde una terminal en el directorio de un sitio (digamos `sitios/sivel`):

`../../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 OpenBSD adJ está cifrado.

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

`../../bin/respaldo.sh`

  Almacena volcado junto con los de última semana y opcionalmente lo copia de forma segura (con `ssh`) a otro(s) computador(es).

  Las copias de envíe manténgalas en directorios cifrados 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.miong.org:copiascifradas/`. 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/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/htdocs/sivel/sitios/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` o con `bin/copiadvd.sh`. Antes de efectuar este procedimiento saque un volcado de la base que tenga.

Otras herramientas que respaldan todas las bases de todos los sitios configurados y que se ejecutan desde el directorio con fuentes de SIVeL (por defecto `/var/www/htdocs/sivel` son:

bin/resptodositio.sh

  Realiza las operaciones de respaldo de cada uno de los sitios (es decir ejecuta `../../bin/respaldo.sh` desde cada uno de los sitios configurados).

`../../bin/copiacd.sh` o `../../bin/copiadvd.sh`

  Que quema un CD o un DVD con el contenedor cifrado (por defecto `/var/resbase.img` o el que se especifique en la variable `IMAGENRLOCAL` de `confv.empty` y por tanto `confv.sh`). El archivo de comandos bin/importacd.sh permite recuperar uno de los volcados almacenados en una copia de respaldo generada con esta herramienta.

#### Procedimiento de volcado en detalle

Si no tiene una instalación de adJ estándar ajuste variables relacionadas con volcados en el archivo `conf.php` de su sitio, en particular la variable `rlocal` que debe indicar 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/htdocs/sivel/sitios/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.

#### Procedimiento de restauración a partir de una copia en CD

1. Saque una copia de respaldo de la base del sitio donde restaurará. Por ejemplo empleando rutas y sitio por defecto:

       cd /var/www/htdocs/sivel/sitios/sivel
       ../../bin/pgdump.sh

   Ponga el CD o el DVD con la copia de respaldo generada con `bin/copiacd.sh` o con `bin/copiadvd.sh`.

2. Ubiquese en el directorio del sitio en el que restaurará la base y ejecute importacd. Por ejemplo empleando las rutas y sitios por defecto:

       cd /var/www/htdocs/sivel/sitios/sivel
       ../../bin/importacd.sh

3. Siga las instrucciones y cuando le presente los volcados disponibles eliga el más reciente cuyo tamaño no sea 0.

4. Pruebe los datos que restauró.

#### Configuración de respaldo automático diario

Se recomienda que configure ejecución diaria de `bin/resptodositio.sh`. Esto se hace por defecto en OpenBSD adJ con una tarea cron a las 12:00M.

Si desea verificar la tarea cron o configurarla en un sistema tipo Unix, desde la cuenta que administra SIVeL en una terminal ejecute:

    crontab -e

Esto le permitirá editar un archivo al cual debe añadir una línea, guardarlo y salir. La línea es:

    0 12 * * * cd /var/www/htdocs/sivel/ ; sudo rm /tmp/respaldo-*; ./bin/resptodositio.sh > /tmp/respaldo-stdout 2> /tmp/respaldo-stderr

que indica ejecución de 3 ordenes todos los días del mes a las 12:00M. Es recomendable que pruebe las 3 ordenes programadas ejecutando desde la línea de comandos y como el usuario al cual programa la tarea:

    cd /var/www/htdocs/sivel/
    sudo rm /tmp/respaldo-*
    ./bin/resptodositio.sh > /tmp/respaldo-stdout 2> /tmp/respaldo-stderr

Tras ejecutarlas deben crearse volcados en `/var/www/resbase` y transmitirse volcados si lo configuró. Si no opera como esperaba revise los archivos `/tmp/respaldo-stdout` y `/tmp/respaldo-stderr`.

### 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.miong.org`. 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 cifrada), por ejemplo `/var/www/resbase`.

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

       cd /var/www/htdocs/sivel/sitios/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/htdocs/sivel/sitios/sivel
       ../../bin/pgdump.sh
       ../../bin/pubweb.sh

4. Pruebe el nuevo sitio. También puede realizar algunas operaciones de verificación como contar cantidad de registros en cada tabla en fuente y en destino (ver siguiente sección).

### Otras operaciones con la Base de Datos

Puede administrar usuarios desde la línea de comandos en el directorio de un sitio con:

`../../bin/agus.sh`

  Para agregar un usuario. Al ejecutarlo podrá ingresar toda la información requerida.

`../../bin/elimus.sh juan`

  Para eliminar el usuario `juan`.

Si olvida la clave de un usuario puede eliminarlo y volver a crearlo o ingresara a la interfaz SQL y modificar el condensado SHA256 con la clave (ver ejemplo más adelante).

Para contar los registros de las tablas de la base empleada por su sitio:

    cd /var/www/htdocs/sivel/sitios/sivel
    ../../bin/cuenta.sh

Puede familiarizarse más con la estructura de la base de datos documentanda en este manual y explorarla con comandos SQL (con cuidado) desde una interfaz interactiva plana que inicia desde el directorio de su sitio con:

    cd /var/www/htdocs/sivel/sitios/sivel
    ../../bin/psql.sh

Por ejemplo para examinar las cuentas y condensados SHA de claves ejecute allí:

    SELECT id_usuario, password FROM usuario;

Si por ejemplo olvida la clave del usuario `juan` puede ponerle la clave `noolvidar` así:

    UPDATE usuario SET password='1e6d8c848f4c51b9e01e5512ac4ae413de3e1840';

Desde esa interfaz puede realizar otras operaciones SQL como borrar, un ejemplo para eliminar acciones bélicas se incluye en un archivo de comandos que puede ejecutar así:

    cd /var/www/htdocs/sivel/sitios/sivel
    ../../bin/elim-belicas.sh

Ese archivo de comandos a su vez emplea `bin/elimcomun.sh`, que facilita eliminar los casos incluidos en una vista.

### 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á cifrada 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 cifrado. Especificada en el archivo `conf.sh` de su sitio como `PALABRA_SITIO`.

  Cambie una sola vez la llave de cifrado que se distribuye con SIVeL.

- Cuenta de correo que recibirá la información cifrada. Especificada en el archivo `conf.sh` del sitio en la 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/cifrado`, y si la llave de cifrado fuera la cadena ``La llave`', podría descifrarse y guardarse en el archivo `/tmp/descif` con:

    openssl bf -nosalt -d -in /tmp/cifrado -out /tmp/descif -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/cifrado` y después descifrarse 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/htdocs/sivel`, se emplearía así:

    cd /var/www/htdocs/sivel
    php herram/hex2bin.php < /tmp/hex > /tmp/cifrado

### Configuración de un nuevo sitio

Dado que SIVeL 1.1 es multisitio es posible sobre una misma instalación de fuentes, configurar diversos sitios cada uno con su URL, autenticación y base de datos únicos.

Para agregar un nuevo sitio (digamos `sivelmb`) en una términal ubiquese en las fuentes de SIVeL ejecutando:

    cd /var/www/htdocs/sivel/sitios
    ./nuevo.sh sivelmb

a continuación agregue un punto de entrada en el servidor web, por ejemplo para ingresar desde el servidor con la URL `https://127.0.0.1/sivelmb/`, si las fuentes de SIVeL están en `/var/www/htdocs/sivel` agregué a la sección de Alias de `/var/www/conf/httpd.conf`. Puede editar el archivo de configuracion con:

    sudo xfw /var/www/conf/httpd.conf

Busque la palabra "Alias" y agregue:

    Alias /sivelmb/ "/var/www/htdocs/sivel"

y reinicie el servidor web desde una terminal con:

    sudo apachectl stop
    sudo sh /etc/rc.local

Después cree un enlace que permita redireccionar a su nuevo sitio, para determinar el nombre del enlace convierta los símbolos '/' del URL a '_' y páselo a mayúsculas o aún más sencillo intente ingresar al URL donde debe ver un mensaje que incluirá instrucciones para crear el enlace. Para este ejemplo desde el directorio `sitios` ejecute:

    ln -s sivelmb 127.0.0.1_SIVELMB

## Servicios web

Permiten a otras aplicaciones web, emplear SIVeL.

### Consulta

La consulta web puede emplearse sin autenticación aunque en tal caso cuenta con menos filtros de búsqueda y puede tener restricciones (fecha mínima, fecha máxima y cantidad de resultados, ver ).

Suponiendo que opera un SIVeL para consulta pública en &URL-BASE;/consulta_web.php, puede solicitar una consulta sin filtros de búsqueda y que muestre todos los campos en formato de tabla en:

    &URL-BASE;/consulta_web.php?_qf_consultaWeb_consulta=Consulta&mostrar=tabla&caso_memo=1&caso_fecha=1&m_ubicacion=1&m_victimas=1&m_presponsables=1&m_tipificacion=1

Puede elegir menos campos poniendo 0 en lugar de 1 en los que no requiera o no poniendolos, por ejemplo para ver sólo las fechas, agregue a la dirección base:

    consulta_web.php?_qf_consultaWeb_consulta=Consulta&mostrar=tabla&caso_fecha=1

Los filtros de búsqueda se agregan a lo anterior como se ejemplifica a continuación:

Titulo del caso es 5:

      			titulo=5

Fecha inicial es 1.Ene.2007

      			fini[d]=1&fini[M]=1&fini[Y]=2007

Fecha final es 1.Ene.2008

      			fini[d]=1&fini[M]=1&fini[Y]=2008

Departamento Santander (codigo 68 en DIVIPOLA):

      			id_departamento=68

Municipio Barrancabermeja de Santander (código 81 en DIVIPOLA):

      			id_departamento=68&id_municipio=81

Cabecera municipal Barrancabermeja (centro poblado con código 0 en el municipio Barrancabermeja):

      			id_departamento=68&id_municipio=81&id_clase=0

  Los datos geograficos están disponibles en Internet (busque DIVIPOLA) o en SQL en las fuentes de SIVeL en el archivo `datos-geo-col.sql`.

Sólo ejecuciones extrajudiciales por persecución política (tipo de violencia Derechos Humanos A, supracategoría: Persecución política 1, Categoría: ejecución extrajudicial: 10):

      			clasificacion[0]=A:1:10

  El marco conceptual puede consultarlo en , o en SQL está en las fuentes de SIVeL en el archivo `datos_caso.sql`

Ejecuciones por persecución o por intolerancia social:

      			clasificacion[0]=A:1:10&clasificacion[1]=A:2:20

Presunto responsable Policia:

      			presponsable=7

  Los códigos los puede revisar desde Adminstración->Tablas Básicas o en el archivo `datos-caso.sql`

Sector Social campesino:

      			ssocial=1

  Puede ver los código en Tablas Básicas o en el archivo `datos-implicado.sql`

Nombre o apellido de la víctima incluyen cadena Orielao:

      			nomvic=Orielao

Con respecto a la forma de presentación de la información pueden emplearse las siguientes variables:

`ordenar`

  Puede ser `localizacion` o `fecha`

`mostrar`

  Puede ser `tabla`, `revista` o `csv`. Para procesamiento automático seguramente preferirá CSV (valores separados por comas).

`m_varlineas`

  Puede ser 0 o 1 si se quiere la descripción de cada caso en tabla o no.

`m_tex`

  0, 1 para indicar si dese algunos detalles de la presentación en TeX.

`caso_memo`

  0, 1 para indicar inclusión de la descripción de cada caso.

`caso_fecha`

  0, 1 para indicar inclusión de la fecha de cada caso.

`m_ubicacion`

  0, 1 para indicar inclusión de la localización geográfica.

`m_victima`

  0, 1 para indicar inclusión de víctimas.

`m_presponsable`

  0, 1 para indicar inclusión de presuntos responsables.

`m_tipificacion`

  0, 1 para indicar inclusión de categoría(s) de violencia.