Tema 6: Seguridad en los Sistemas Operativos

En los sistemas operativos, lo habitual es en primer lugar pedir un password.
Los passwords se pueden almacenar tal i como se entregan o cifrados (lo normal y razonable), y lo que se hace para comprobarlos es cifrar el que se introduce para intentar acceder y comprobar que el resultado coincide con lo que hay almacenado.

En los sistemas Unix, para cifrar los passwords su usa DES, y el funcionamiento es coger el dato "0" y se cifra, usando como clave la password introducida. Hoy en dia este no es el funcionamiento, ya que solo usando el "0" era facil de encontrar la clave, y lo que se hace es usar dos caracteres aleatorios en lugar del cero, y se almacenan junto al password,

Una vez dentro del sistema, hay otros casos de seguridad, para empezar hay que distinguir entre sistemas monotarea, multitarea, monousuario y multiusuario, siendo los multitarea y multiusuario los mas peligrosos, ya que hay que separar los datos de cada usuario, al igual que los procesos de cada uno, y separar de todos estos los del sistema operativo.
Para separar al sistema operativo se suelen utilizar dos metodos, uno es darle al sistema operativo un espacio en la memoria reservado para el, donde no puede acceder nadie, y la otra solución (mejor que la anterior) es la paginación, que consiste en reservar la memoria por paginas, y si no se indica lo contrario, cada programa tiene sus paginas, ademas separadas como lectura, escritura, ejecución, no codigo...

Para proteger el sistema de ficheros, existen algunos esquemas, en los que siempre se busca la versatilidad, importando menos el coste.
ACL (Access Control List): Lo tienen algunos sistemas operativos y sirve para dar permisos a unas personas determinadas.

Permisos (en Unix): Pueden tener distinto significado entre directorios y ficheros:
-Directorios:
    r -> Permiso para Listar
    w -> Modificar => Borrar (a menos que dentro tenga un fichero en el que no tenemos permiso para borrarlo)
    x -> Formar parte del path
    t -> Cada persona solo puede trabajar con sus ficheros

-Ficheros:
    r -> Permiso para Leer
    w -> Permiso para Escribir
    x -> Para Ejecutar
    t -> Text

Tambien existe el  bit "s" y sirve para que pueda correr un proceso como si fuese de un usuario distinto al que que realmente lo lanza.

rwsr-s--x        pepe        canibales
                           juan         usuario

Tenemos el fichero de pepe con los permisos indicados, y llega juan, como tiene permisos de ejecución lo puede ejecutar, pero a causa del bit s, en la tabla de procesos aparecerá que lo está ejecutanto pepe del grupo canibales (un ejemplo de esto es la ejecución de passwd, que en realidad se ejecuta como root, para poder escribir en el fichero de passwords).

El bit "s" tiene los efectos comentados, pero en realidad el sistema sabe quien lo está ejecutando realmente, para saberlo utiliza unas variables que tienen los procesos de forma que:

Si tenemos al usuario 501 del grupo 100 y ejecuta un fichero del root en el que existe el permiso "s":

                        Normal                Suid (s)
 UID                  501                       501
 GID                  100                       100
EUID                 501                         0
EGID                 100                         0

(La E de EUID y EGID significa efectivo)
De esta forma se sabe si lo está ejecutando realmente el root o un usuario. Estos permisos tienen el peligro que si se habre un shell así te conviertes en root, y aunque realment no lo eres ni tienes los mismos privilegios, al arrancar con el EUID y el EGID del root se pueden cambiar con un simple programa, del tipo:  {   setreuid(0,0);
                                                                                                                                          execv("/bin/bash"...); ...}

Tambien se pueden utilizar algunos comandos para evitar posibles "fallos" en la ejecución, como por ejemplo:
    ulimit -c 0             ->   Con esto se evita que se escriban los core
    ulimit -v 40000     ->   Ningun programa puede usar mas de 40 Mby en RAM, si se pasa se cierra.
    ulimit -t 20            ->   No se permite que ningun proceso ocupe mas de 20 segundos de procesador.

Copias de Seguridad

El objetivo es alcanzar la integridad y la disponibilidad de los datos, y aparecen porque los sistemas de almacenamiento pueden estropearse y al copiarlos se reduce la probabilidad que se estropeen todas las copias que se tengan de los datos.
Los datos pueden estropearse por rotura fisica del dispositivo que los contiene o por una mala utilización de los datos, que puede ser tanto un borrado accidental como introducir datos incorrectos.

Cuando se restaura una copia de seguridad, hay que volver a hacer todo lo que se haya hecho desde que se hizo la copia has que se estropeó, y para evitar esto lo que se puede hacer es realizar copias de seguridad en tiempo real, es decir, guardar los datos en varios lugares a la vez, así es muy dificil que se estropeen todos, pero tiene el inconveniente que si se borra en un lugar, se borra en todos, por lo que este sistema solo protege de las roturas del medio fisico, si el fallo esta en los datos hay que restaurar una copia de seguridad periodica y volver a introducir los datos hasta el momento del fallo.

Las copias de seguridad pueden hacerse globales, que es cuando se copia todo el disco duro. Este tipo de copias tiene el inconveniente que el tamaño puede aumentar mucho, y podemos quedarnos sin "medios" para copiar tanta información, ya que las cintas o los dispositivos que se usen para guardar la copia tienen un tamaño limitado. Para evitar este problema de tamaño, lo que puede hacerse son copias, solamente, de los datos que se han modificado, y periodicamente una copia global.

Uno de los programas mas conocidos para realizar copias de seguridad es el tar, que realiza la copia directamente sobre la unidad de cinta por defecto:

    tar c   ->  Crear
    tar x   ->  Extraer
    tar t    ->  Testear

Tambien se pueden introducir parametros para poder hacer la copia donde le digamos, y no sobre la unidad de cinta por defecto, siendo tan simple como decirle: tar cf fichero_destino.