Introducción a los Sistemas Operativos, Ing. Informática, UPV/EHU
Proyecto P09. Las propiedades de protección de los ficheros¶
Ya conocemos las características de la E/S en Linux y el manejo del sistema de ficheros. El hecho de que en Linux toda la E/S gire en torno a la abstracción de fichero proporciona a las aplicaciones una forma de tratar la E/S con independencia del dispositivo, un rasgo fundamental para simplificar la programación. Sin embargo, para abordar el desarrollo de aplicaciones interactivas de todo tipo sobre Linux, nos falta resolver algún detalle que ha quedado pendiente precisamente como consecuencia de la generalización extrema del concepto de E/S en Linux.
Actividad A09.1 ¿Qué hace a un fichero ejecutable?¶
Ya sabemos desde hace tiempo que en Linux hay ficheros que se pueden ejecutar, y ficheros que no se pueden ejecutar. ¿Cómo los distingue Linux? Ya sabemos que, a diferencia de Windows, la extensión de los ficheros no es un atributo, sino simplemente parte del nombre. Llamar a un fichero Linux mi_programa.EXE no lo convierte en ejecutable. Por el contrario, podríamos ejecutar uno llamado mi_programa.TXT sí así lo especificamos al compilar con gcc.
Qué hay que hacer¶
- Algo podemos averiguar si hacemos un
` ls –l `
de un directorio con ejecutables. ¿Qué es lo que determina que un fichero sea ejecutable? Discutidlo en el grupo. - Y ahora, ¿Cómo se consigue que un fichero sea ejecutable? Desde luego, el gcc puede crear ficheros ejecutables, pero, ¿Cómo les otorga ese atributo? Por ejemplo, a veces es útil crear un nuevo comando, como el que ejecuta la siguiente secuencia.
cd ../..
echo “Directorio abuelo:”
ls .
Podemos crear un fichero con este contenido, con nombre ` abuelo `
e intentar ejecutarlo… ¿Cuál es el resultado? Por supuesto,
tenemos esta alternativa:
sh abuelo
Pero lo que pretendemos es ejecutar simplemente:
./abuelo
- Explora en la bibliografía y en el man cómo podemos conseguir convertir a abuelo en ejecutable y trata de hacerlo. ¿Qué comando debemos usar?
- El profesor recogerá las propuestas y aclarará algunos matices al respecto. Anota las conclusiones en el cuaderno. (Esta tarea se explicará en clase por el profesor)
(Esta actividad se explicará en clase por el profesor)
Dedicación¶
En clase dedicaremos 30 minutos a esta actividad.
Entregables¶
Ninguno
Evaluación¶
En una actividad de evaluación posterior.
Actividad A09.2 Más sobre permisos. Los usuarios y sus derechos¶
Qué hay que hacer¶
- De nuevo, ejecuta un ls –l . Podrás identificar más permisos que el de ejecución. En grupo, y con ayuda de la información contenida en el man sobre el comando chmod, tratad de determinar cuáles son esos permisos. Anotad tanto lo que hayáis podido identificar como las dudas y aspectos que no hayáis entendido.
- El profesor recogerá las aportaciones y dudas de los grupos para aclararlas y construir el modelo de protección que usa Linux, como sistema multiusuario que es.
- Anota las conclusiones en el cuaderno, que podrás usar para preparar una actividad de evaluación posterior.
(Esta actividad se explicará en clase por el profesor)
Dedicación¶
En clase dedicaremos 30 minutos a esta actividad.
Tiempo estimado a dedicar fuera de clase: 15 minutos.
Entregables¶
Ninguno
Evaluación¶
En una actividad de evaluación posterior.
Actividad A09.3 ¿Cómo regalo un fichero a mi compañero?¶
Qué hay que hacer¶
- Discutid en grupo las diferentes formas de “regalar” un fichero a otro compañero, usuario del servidor dif-linuxserver, sin utilizar ningún medio externo (email, memoria usb…). Elaborad una lista con las propuestas, indicando, para cada caso, los mecanismos de Linux a usar y los inconvenientes que pueda tener.
- El profesor recogerá las aportaciones. Se analizarán según el ámbito de uso y sus condiciones. El profesor podrá proponer nuevas formas.
- Anota las conclusiones en el cuaderno, que podrás usar para preparar una actividad de evaluación posterior.(Esta tarea se explicará en clase por el profesor)
(Esta actividad se explicará en clase por el profesor)
Dedicación¶
En clase dedicaremos 30 minutos a esta actividad.
Entregables¶
Ninguno
Evaluación¶
En una actividad de evaluación posterior.
Actividad A09.4 ¿Cómo es que puedo modificar el /etc/passwd si no tengo permisos para ello?¶
Qué hay que hacer¶
- En la primera clase cambiaste la contraseña de tu cuenta Linux con el comando passwd. Como dice man, este comando actualiza la base de datos de usuarios del sistema, /etc/passwd. Ejecuta:
ls -l /etc/passwd
Fíjate en los permisos asociados a este fichero, y en concreto qué derechos de acceso tienen los usuarios normales del sistema, como tú. Sin embargo, al ejecutar el comando passwd conseguiste modificar este fichero. Evidentemente, necesitamos precisar un poco más el modelo de protección de Linux. En grupo, y con ayuda de Internet y la bibliografía sobre Linux, tratad de identificar qué mecanismo usa Linux para conseguir esto. Explorad también a partir de la llamada getuid().
- El profesor recogerá las aportaciones y dudas de los grupos para aclararlas y extender el modelo de protección de Linux.
- Anota las conclusiones en el cuaderno, que podrás usar para preparar una actividad de evaluación posterior.
(Esta actividad se explicará en clase por el profesor)
Dedicación¶
En clase dedicaremos 30 minutos a esta actividad.
Entregables¶
Ninguno
Evaluación¶
En una actividad de evaluación posterior.
Actividad A09.5 Un aprendiz de hacker¶
En la actividad anterior hemos conocido el mecanismo de Linux para que un usuario pueda acceder a los recursos de otro usuario (eventualmente el superusuario) con los derechos de acceso de este último. Pensad ahora en el siguiente escenario:
(a)Un usuario copia el /bin/sh a su cuenta;
(b)Mediante el comando chmod, activa el bit set-user-ID;
(c)Mediante chown, cambia el propietario del fichero a root.
Ahora, este usuario puede ejecutar el nuevo shell con permisos de root y acceder indiscriminadamente a todos los recursos del sistema…
Qué hay que hacer¶
- Comprobad si Linux nos permite realizar los pasos (a), (b) y (c). ¿Realmente podemos conseguir adueñarnos del sistema?
- El profesor recogerá las aportaciones de los grupos y explicará un mecanismo adicional de protección en Linux.
- Anota las conclusiones en el cuaderno, que podrás usar para preparar una actividad de evaluación posterior.
(Esta actividad se explicará en clase por el profesor)
Dedicación¶
En clase dedicaremos 30 minutos a esta actividad.
Entregables¶
Ninguno
Evaluación¶
En una actividad de evaluación posterior.
Actividad A09.6 Construcción de una herramienta para la gestión de derechos de acceso.¶
Se nos plantea la construcción de una utilidad, acceso, con un funcionamiento análogo al comando chmod de Linux, aunque más sencilla e intuitiva para el usuario. En vez de hacer que el usuario tenga que manejar los patrones de dominios y permisos de Linux, se definen 3 niveles estándar de protección con permisos predefinidos (privado, restringido y público), de forma que el usuario especifica el nivel requerido y acceso adapta los permisos según la forma predefinida. La especificación completa se adjunta en man acceso.
Qué hay que hacer¶
- En el grupo, explorad las interfaces que ofrece el sistema operativo para construir la herramienta.
- Cada grupo elabora una lista de casos de uso/prueba más adecuados para poder verificar el correcto funcionamiento de la aplicación.
- Cada grupo desarrolla la utilidad utilizando las interfaces acordadas, y las integra en el código del programa.
- Verificad su funcionamiento y, en caso necesario, corregid la implementación hasta que su comportamiento sea el establecido en la especificación.
(Esta actividad se explicará en clase por el profesor)
Documentación¶
En los documentos Material P09 y Resumen E/S Linux se encuentra parte del material utilizado en clase por el profesor.
Dedicación¶
En clase dedicaremos 5 minutos a esta actividad.
Tiempo estimado a dedicar fuera de clase: 2 horas y media.
Entregables¶
Ninguno. En este curso académico no se requiere ninguna entrega de esta actividad
Evaluación¶
La actividad se evalúa en una actividad de evaluación posterior.
Actividad A09.7 OPCIONAL. Actualizar la utilidad mypackzip para que gestione los permisos¶
Se propone ampliar funcionalidad de la utilidad mypackzip para que gestione los permisos de los ficheros. La idea es que al añadir los archivos, guarde los permisos de los archivos y al extraer los recupere tal y como estaban.
Qué hay que hacer¶
- Completad (o añadid nuevas) las especificaciones de la aplicación mypackzip con nuevos requisitos que nos permitan trabajar con los permisos
- Elaborad los documentos de verificación con los casos de prueba que consideréis necesarios.
- Programad los cambios en las diferentes funciones y verificad su funcionamiento actualizando los correspondientes documentos de verificación.
Dedicación¶
En clase dedicaremos media hora a este proyecto.
Tiempo estimado a dedicar fuera de clase: 2 horas.
Entregables¶
El grupo deberá entregar los siguientes documentos:
- Código fuente y ejecutable del proyecto (formato .tar.gz).
- Documentos de especificación y verificación en formato pdf.
Evaluación¶
El código desarrollado en estas dos utilidades lo reutilizarás para construir el proyecto de E/S. por tanto, su evaluación se realizará en una actividad de evaluación posterior.
No obstante, puedes revisar los criterios que se utilizarán para evaluar este código en el proyecto.
Los criterios de evaluación son los siguientes:
- Que el código desarrollado sea razonablemente eficiente y esté expresado de forma clara y estructurada. En el apartado CEval 8 se describe el criterio de evaluación del código.
- Que la utilidad cumpla los requisitos funcionales de la especificación. En el apartado CEval 8 se describe el criterio de evaluación.
- Calidad de la verificación a través del documento de verificación. En el apartado CEval 9 se describe el criterio de evaluación.
No olvides rellenar la encuesta de dedicación de este proyecto. (Encuesta de Dedicación.)