Práctica 3: Procesos en UNIX. Credenciales
Añadir al shell de la práctica anterior las siguientes funciones de manejo de las credenciales. (Nótese que deben seguir siendo operativos los comandos de las prácticas anteriores)
#getuid Credencial Real 15466 ->infaaa00 Credencial Efectiva 0 ->root #
Información detallada de las llamadas al sistema y las funciones de la librería debe obternerse con man (setuid, getuid, getpwent, wait...).
Para que un proceso de un usuario distinto del root pueda ejecutar con éxito la llamada setuid es necesario que ejecute un fichero propiedad de otro usuario que tenga activado el bit setuid, lo cual se consigue poniéndole a dicho fichero los permisos 04755. Criterios de seguridad aconsejan que no puedan crearse ficheros setuid en sistemas de ficheros exportados por NFS, de ahi que no pueden crearse ficheros setuid en los directorios HOME de los usuarios. Hay que crearlos en un directorio local de la máquina donde se trabaja. El único directorio local de las maquinas castro donde los usuarios normales tienen permiso de escritura es /tmp. Por tanto para poder comprobar el uso de dichos comandos del shell es necesario algo como lo mostrado a continuación (suponiendo que el usuario es infaaa00)
%gcc p3.c %mkdir /tmp/infaaa00 %cp a.out /tmp/infaaa00 %chmod 755 /tmp/infaaa00 %chmod 4755 /tmp/infaaa00/a.out
Ahora el compañero de prácticas de infaaa00 entraría en la máquina (por ejemplo usando telnet) y haciendo
cd /tmp/inaaa00 ./a.outpodría comprobar como funciona el cambio de credenciales.
Conviene borrar el fichero a.out al terminar las pruebas (y/o usar alguna protección adicional) pues ese shell DA ACCESO a nuestra cuenta
FORMA DE ENTREGA Igual que en prácticas anteriores
FECHA DE ENTREGA VIERNES 14 MAYO 2004