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]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.inise 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]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]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]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]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).

    Ejemplo de login

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

    Ejemplo de elección de materia

  • 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).

    Ejemplo de edición de logros e indicadores

  • 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.

    Ejemplo de valoración



[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.