6. Interfaz PHP para profesores
Anterior | Capítulo 3. Registro de progreso en un colegio colombiano | Siguiente

## 6. Interfaz PHP para profesores

De seguir las sugerencias presentadas en este capítulo (en cuanto a información mínima por almacenar, estructura de directorios, identificadores y permisos) y de contar con servidor Apache y PHP en el mismo computador donde está la información, será posible que los profesores ingresen valoraciones durante cada periodo con un navegador y una interfaz sencilla.

En el momento de este escrito esta interfaz cuenta con dos mecanismos posibles de autenticación: (1) empleando un archivo propio de usuarios y claves o (2) empleando mecanismos de autenticación del sistema operativo. De resultarle posible sugerimos el que emplee la autenticación del sistema porque le permite conservar el esquema de permisos que sugerimos (ver Sección 3.2, “Permisos”).

Además de los mecanismos mencionados (que asignan una clave a cada profesor) sugerimos emplear autenticación básica de Apache para ingresar al directorio de la interfaz con un usuario y una clave conocida sólo por todos los profesores.

### 6.1. Preparación

#### 6.1.1. Preparación del sistema, de Apache y de PHP

Puede mejorar seguridad en el directorio donde instalará la interfaz usando archivos `.htaccess` (hay uno en el directorio donde instale la interfaz y otro en el subdirectorio `auth`). Para usarlos debe permitir a Apache sobrecargar algunos parámetros para el directorio donde instale la interfaz y para el subdirectorio `auth`. Además sugerimos emplear autenticación básica (con un usuario y una clave conocida por todos los profesores) y eventualmente restringir uso por IP. Para lograr estos propósitos verifique que en el archivo de configuración de Apache en la sección que corresponde al directorio en donde estará la interfaz PHP (digamos `/var/www/ssl/sigue`) diga:

    <Directory /var/www/ssl/sigue/>
       AllowOverride Options AuthConfig Limit
    </Directory>

y de requerirlo que en la sección donde se carguen módulos se cargue el módulo de autenticación, por ejemplo:

    LoadModule auth_module /usr/lib/apache/1.3/mod_auth.so

El archivo `.htaccess` que se distribuye implementa autenticación básica, para esto emplea el archivo de claves `auth/sigue` que se distribuye sólo con el usuario `sigue` con clave `sigue`

| Aviso
Si va a emplear autenticación básica para el directorio donde estará la interfaz PHP, recuerde cambiar el usuario y la clave periódicamente (con `htpasswd`) e informar a todos los profesores.

En el archivo de configuración de Apache verifique que también se emplee `index.php` en la directiva `DirectoryIndex`.

Con respecto a PHP se requiere haber instalado soporte para XML. En `php.ini`se sugiere en general desactivar `register_globals` ---aunque esto también lo hará el archivo `.htaccess` que se instala junto con la interfaz--- y aumentar tiempos máximos de ejecución y para ingreso de datos por ejemplo:

    max_execution_time = 900
    max_input_time = 900

Recuerde reiniciar Apache después de modificar el archivo de configuración de este servidor o el de PHP.

##### 6.1.1.1. Preparación de la interfaz PHP

Con el script sigue-intcol.sh instale los archivos de la interfaz PHP en un directorio que pueda accederse con un navegador.

| Aviso
Se recomienda que el directorio en el que se instale la interfaz PHP sea servido con SSL y además cuente con autenticación básica.

Por ejemplo si los datos del colegio están en `/var/nuestra-escuela`, el propietario y grupo del proceso con el que corre Apache es `www:www` y desea instalar la interfaz en el directorio `/var/www/ssl/sigue` ejecute:

    cd /var/www/ssl
    sigue-intcol.sh sigue "www:www" /var/nuestra-escuela

El script `sigue-intcol.sh` creará el directorio, compilará un programa de autenticación y de ejecutarse desde la cuenta root, establecerá permisos seguros[9]. Si su sistema no es soportado se empleará un archivo de claves propios como método de autenticación, aunque eventualmente usted mismo podrá ejecutar otra regla del Makefile para emplear otro método de autenticación como se explica en las siguientes secciones (o tal vez un método nuevo, escrito para su caso particular)[10].

Finalmente edite el archivo `auth/confcol.php` y además de verificar la información existente cambie el valor de la variable `PALABRA_SITIO` con una palabra secreta[11].

Si al emplear uno de los métodos de autenticación que se describen a continuación tiene problemas, revise la bitacora de errores de Apache, pues allí quedan los mensajes de error que producen los programas de autenticación.

##### 6.1.1.2. Autenticación con archivo de claves propio

Cada profesor debe tener un login (referenciado en el archivo de datos del profesor) y una clave. Esta información debe registrarse en un archivo, el cual puede crearse después de instalar la interfaz PHP (como se explica en la siguiente sección) con el nombre `auth/usuarios`. Para crearlo y manejarlo emplee la herramienta htpasswd distribuida con Apache.

Para que todos los profesores puedan escribir en los archivos estos deben tener permisos que dejen escribir al usuario bajo el cual corra Apache.

| Aviso
Este método de autenticación no es tan seguro, porque requiere debilitar el esquema de permisos de los datos del colegio. De ser posible emplee autenticación del sistema operativo junto con el esquema de permisos que hemos sugerido.

Puede compilar desde el directorio `auth` con

    make METODO=claves-propias

recuerde modificar la variable `AUTHPGM` del archivo `auth/confcol.php` para que quede:

    $GLOBALS['AUTHPGM']="auth/claves-propias";

##### 6.1.1.3. Autenticación del sistema operativo

En el momento de este escrito sólo se soporta autenticación local con OpenBSD y con archivo de claves Shadow (como en Linux Debian).

El servidor web no debe correr con chroot para tener acceso a los archivos de claves del sistema (en el caso de OpenBSD esto se desactiva con `httpd_flags="-u"` en `/etc/rc.conf.local`). Para que el servidor web pueda leer los datos del colegio debe agregar el usuario bajo el cual corre el servidor al grupo `profesor`. Por ejemplo en OpenBSD el archivo `/var/www/conf/httpd.conf` debe modificarse para que incluya[12]:

    	User www
    	Group www

Después el usuario bajo el cual corre el servidor se agrega al grupo `profesor` (por ejemplo editando `/etc/group`).

| Aviso
Verifique en los archivos de configuración de Apache, que este no permitirá ver directorios de lectura exclusiva para el grupo `profesor`.

Dado que la autenticación debe hacerse con un programa con suid root (por ejemplo en el caso de OpenBSD `auth/openbsd-local`), verifique que el directorio donde quedará la interfaz pueda ejecutar programas suid root (por ejemplo que entre las opciones para montarlo en `/etc/fstab` no esté `nosuid`).

Puede compilar desde el directorio `auth` bien con

    make METODO=openbsd-local

o bien con

    make METODO=shadow-local

recuerde establecer el que eliga en la variable `AUTHPGM` del archivo `auth/confcol.php`

##### 6.1.1.4. Autenticación con directorio LDAP

Si el colegio cuenta con un servidor LDAP que incluya información para autenticar puede emplear este mecanismo de autenticación. Puede consultar como configurar uno en http://dhobsd.pasosdejesus.org/?id=Autenticaci%F3n+con+OpenLDAP

Con respecto al servidor web, tenga en cuenta las mismas recomendaciones del caso anterior Sección 6.1.1.3, “Autenticación del sistema operativo”

Copie la plantilla `auth/cmdldap.h.plantilla` en `auth/cmdldap.h` y modifiquela para que tenga:

- El URI del servidor LDAP.

- El DN de la organización.

- El DN de las personas de la organización.

Por defecto la autenticación LDAP empleará como filtro `(&(objectclass=posixAccount)(uid=`login`))`, pero si este no es un filtro apropiado para su caso modifiquelo en las fuentes de `cmdldap.c`.

Finalmente compile desde el directorio `auth` con:

    make METODO=cmdldap

y establezca la variable `AUTHPGM` del archivo `auth/confcol.php` para que quede:

    $GLOBALS['AUTHPGM']="auth/cmdldap";

##### 6.1.1.5. Deshabilitar autenticación para efectuar pruebas

Posiblemente el/la administrador(a) requiere ingresar como un profesor para verificar funcionamiento de la interfaz PHP. En tal caso puede compilar el método `sinclaves`:

    make sinclave

Y podrá configurar este método de autenticación (que acepta cualquier clave) cambiando `auth/confcol.php` para que la variable `AUTHPGM` sea:

    $GLOBALS['AUTHPGM']="auth/sinclaves";

| Aviso
Este método permite acceso a cualquier profesor, con cualquier clave. Es sólo para probar la interfaz, habilite un método de autenticación real (como los descritos en las secciones anteriores) tan pronto complete sus pruebas. Asegurese también de no permitir cambios no autorizados a `auth/confcol.php` ni en general a las fuentes de `sigue` quitando permiso de escritura a todos los usuarios excepto el administrador.

### 6.2. Uso de la interfaz

#### 6.2.1. Uso por parte del administrador

Los estados de la interfaz dependen del cronograma, de la fecha y de las variables `VALORAR` y `ACTIVA` del archivo `auth/confcol.php`. El cronograma y la fecha del computador determinarán el periodo actual. `VALORAR` indica si pueden o no hacerse valoraciones del periodo actual. `ACTIVA` indica si la interfaz es utilizable o no por profesores.

Al principio de un periodo la variable `VALORAR` debe ser `false`, mientras que `ACTIVA` debe ser `true`, para que los profesores puedan editar logros e indicadores del periodo y futuros pero que NO puedan modificar valoraciones, al llegar a cierta fecha del periodo conocida por profesores y administrador, no se aceptarán más ediciones a logros e indicadores. El administrador desactivará temporal y rápidamente la interfaz (asignando `false` a `ACTIVA`) para ejecutar `iniperiodo` (ver Sección 4.3, “Administración de valoraciones”).

Una vez se completé la ejecución de `iniperiodo` (la cual prepara todos los archivos de progreso de estudiantes), el administrador pondrá la variable `VALORAR` en `true` y activará la interfaz PHP para que los profesores puedan ingresar las valoraciones del periodo.

Una vez se cumpla el tiempo de ingresar valoraciones y de efectuar recuperaciones, el administrador pondrá la variable `VALORAR` en `false`, dejando así todo listo para comenzar el siguiente periodo y para poder imprimir reportes del periodo concluido.

#### 6.2.2. Uso por parte de profesores

Cuando la interfaz esté habilitada por el administrador, los profesores podrán ingresar con su clave para: (1) Editar logros e indicadores futuros o del periodo actual al comienzo del periodo, (2) cuando sea el momento acordado podrán tanto valorar indicadores y logros del periodo como recuperar indicadores pendientes (i.e indicadores con valoración `I`).

- Cada profesor podrá entrar a la interfaz empleando su clave (de acuerdo al método de autenticación implementado por el administrador, bien la clave en el sistema o bien la clave particular para esta interfaz).

- Podrá elegir la materia y el curso que desea editar (sólo entre las que dicta).

- Podrá añadir o eliminar indicadores y logros de uno o más periodos, así como referencias a indicadores en algún periodo (si un indicador es no recuperable pueden agregarse referencias a este en más de un periodo).

- En el caso de valoraciones del periodo actual, podrá ingresar valoraciones de cada indicador y número de fallas de cada estudiante y eventuales observaciones (que se acumularan con observaciones que otros profesores hagan ---por consistencia de la información final, puede ser buena política que sólo en una asignatura como disciplina o convivencia se ingresen las observaciones). En el caso de recuperaciones podrá también elegir el periodo que desea editar y modificar sólo las valoraciones pendientes.

[9] Note que si usa autenticación del sistema, el programa de autenticación debe correr con suid de root para poder escribir en los archivos de los profesores en el directorio de datos. Hemos procurado hacerlo seguro, por favor reporte eventuales fallas en nuestro seguidor público de fallas de seguridad.

[10] Por ejemplo para compilar el programa que autentica con base en el archivo de claves propias:

    	cd /var/www/ssl/sigue/auth
    	make claves-propias

[11] La palabra secreta que configure será empleada para encriptar algo de la información de la sesión PHP.

[12] En el caso de Linux Debian el usuario es `www-data` y el grupo es `www-data`.

Anterior | Subir | Siguiente
5. Generación de reportes | Inicio | Apéndice A. Créditos