2. INTRODUCCIÓN
Unix fue creado en 1969 por Dennis Ritchie y Ken Thompson, el sistema
operativo originario fue el sistema Multics, los laboratorios Bell fue la primera
organización que utilizo el sistema unix, sus primeras versiones fueron
desarrolladas en código maquina pero a partir de la tercera versión se realizo en
C, creado para este motivo.
3. OBJETIVOS DE UNIX
• Asegurar la portabilidad de los desarrollos, eliminando así la
dependencia de los sistemas propietarios.
• Permitir a fabricantes independientes de software la oferta de
productos en este entorno, eso aumenta la oferta de productos y
los precios son mas bajos.
• Proteger la inversión realizada en aplicaciones.
4. CLASIFICACIÓN
POR SU VISIÓN INTERNA
• Estructura monolítica, por lo tanto el kernel
contenido en este sistema fue programado de
forma secuencial.
• El kernel interactúa directamente con el hardware,
y proporciona servicios a los programas de capas
superiores, de forma que las peculiaridades del
hardware permanecen ocultas.
5. POR LOS SERVICIOS QUE OFRECE
Multiusuario
Multitarea
Portable
SO de tiempo compartido
6. POR SU VISIÓN EXTERNA
• UNIX es un sistema operativo de red
• Tiene algunas características de sistema distribuido
7. ORGANIZACIÓN FÍSICA
En UNIX los bloques de control de
archivos tienen bloques de
indexación directa, de uno, dos y
hasta de tres niveles de indexación.
Esto permite representar archivos
muy grandes.
8. ORGANIZACIÓN FÍSICA
• El control del espacio libre en el disco se mantiene mediante una
lista ligada de bloques disponibles. Cada bloque contiene
la dirección en disco del siguiente bloque en la cadena. El espacio
restante contiene las direcciones de grupos de bloques del disco
que se encuentren libres. De esta forma, con una operación de
E/S, el sistema obtiene un conjunto de bloques libres y un
apuntador para conseguir más.
9. ALGORITMOS DE PLANIFICACIÓN
El módulo de planificación (scheduler) asigna el uso de la CPU a los
procesos. Un proceso (A) se ejecutará hasta que voluntariamente
ceda el uso de la CPU. En ese momento, el planificador seleccionará
para ejecutar al proceso de mayor prioridad de planificación que se
encuentre listo para ser ejecutado. El proceso (A) volverá a ser
ejecutado cuando sea el proceso de mayor prioridad de planificación
listo para ejecución.
10. ALGORITMOS DE PLANIFIACION
• La clase de tiempo compartido es la clase por defecto para un proceso. En ella las
prioridades de los procesos se cambian dinámicamente. Se utiliza un algoritmo de
planificación de tipo round robin para los procesos con la misma prioridad. Además
utiliza una tabla de parámetro de distribución para controlar las prioridades de los
procesos y sus cuantums. El cuantum dado a un proceso depende de su prioridad de
planificación. La tabla de parámetros define el cuantum para cada prioridad. Por
defecto, cuanto menor es la prioridad de un proceso mayor es su cuantum. Esto
puede parecer una contradicción pero su explicación es que puesto que los procesos
de baja prioridad no se ejecutan muy a menudo es justo darles un cuantum mayor
cuando son ejecutados.
11. SOLUCIÓN A PROBLEMAS DE
CONCURRENCIA
UNIX es esencialmente un sistema de tiempo compartido, lo que significa que
permite a varios procesos ejecutarse concurrentemente. En un sistema con un
único procesador, la concurrencia no es más que una ilusión, puesto que en
realidad solamente se puede estar ejecutando un único proceso en un instante de
tiempo dado.
Mecanismos de Concurrencia en UNIX
Pipes (encaminadores)
Mensajes
Memoria compartida
Semáforos
Señales (signals)
12. MENSAJES
• Conjunto de bytes con un tipo asociado, proporciona las llamadas al sistema msgsnd y
msgrcv.
• Usa una cola de mensajes por proceso, y funciona como un buzón.
• El emisor especifica el tipo de mensaje que envía, este puede ser un criterio de selección por
el receptor. El receptor puede recuperar el mensaje en orden o por su tipo.
• El proceso se bloquea cuando trata de enviar un mensaje a una cola llena.
• Un proceso también se bloquea si se intenta leer un mensaje de una cola vacía.
• Si un proceso intenta leer un mensaje de un cierto tipo y no es posible debido a que no está
presente ningún mensaje de este tipo, el proceso no se bloquea.
13. SEMÁFOROS
• Las llamadas al sistema de semáforos en UNIX System V son una
generalización de las funciones semWait y semSignal, se pueden
realizar varias operaciones simultáneamente y las operaciones de
incremento y decremento pueden corresponder con valores mayores.
• El núcleo realiza todas las operaciones solicitadas atómicamente;
ningún otro proceso puede acceder al semáforo hasta que se hayan
completado todas las operaciones.
14. SEMÁFOROS
El semáforo consta de los siguientes elementos:
• El valor actual del semáforo
• El identificador del último proceso que opero con el semáforo
• El número de procesos en espera de que el valor del semáforo sea mayor que
su valor actual
• El número de procesos en espera de que el valor del semáforo sea cero
• Asociado con el semáforo están las colas de los procesos bloqueados en ese
semáforo.
15. SEMÁFOROS
Los semáforos se crean realmente como conjuntos, constando cada
conjunto de semáforos de uno o más semáforos. Hay una llamada al
sistema semct1 que permite que todos los valores de los semáforos
del conjunto se fijen al mismo tiempo. Además hay una llamada al
sistema sem_op que toma como argumento una lista de operaciones
de semáforo, cada una definida sobre uno de los semáforos de un
conjunto. Cuando se realiza esta llamada, el núcleo lleva a cabo
sucesivamente las operaciones indicadas. Por cada operación, la
función real se especifica mediante el valor sem_op, existiendo las
siguientes posibilidades:
16. SEMÁFOROS
• sem_op > 0
• Incrementa el valor del semáforo y despierta a todos los procesos en
espera de que el valor del semáforo se incremente.
• sem_op == 0
• Kernel verifica el valor del semáforo
• Semáforo == 0
• El núcleo continua con las otras operaciones.
• Semáforo != 0
• El núcleo incrementa el numero de procesos en espera de que el
semáforo tenga el valor de 0 y suspende al proceso para que espere
por el evento de que el valor del semáforo se haga igual a 0.
17. SEMÁFOROS
• Si sem_op <= -1 y sem_op valor absoluto < semáforo
• El núcleo asigna (un numero negativo) al valor del semáforo.
• Si el resultado es 0, el núcleo despierta a todos los procesos en espera de
que el semáforo tome ese valor.
• Si sem_op <=-1 y sem_op valor absoluto > numero de semáforo
• El núcleo suspende al proceso en espera del evento del valor del semáforo
para que se incremente.
• Esta generalización de los semáforos proporciona una considerable
flexibilidad para realizar la sincronización y coordinación de procesos.
18. ADMINISTRACIÓN DE MEMORIA
• Debido a que unix pretende ser independiente de la máquina, su esquema de gestión de memoria
variara de un sistema a otro. En las primeras versiones, unix utilizaba particionamiento variable sin
ningún esquema de memoria virtual. Las implantaciones actuales de unix utilizan la memoria virtual
paginada.
• Para la memoria virtual paginada, unix utiliza varias estructuras de datos que, con pequeñas diferencias,
son independientes de la maquina:
• Tabla de páginas: Habitualmente, habrá una tabla de páginas por proceso, con una entrada por
cada página de memoria virtual de dicho proceso.
• Descriptor de bloques de disco: Asociado a cada página del proceso hay una entrada en esta tabla
que indica la copia en disco de la página virtual.
• Tabla de datos de los marcos de página: Describe cada marco de memoria real y se indexa por
medio de un numero marco. El algoritmo de reemplazo usa esta tabla.
• Tabla de utilización de swap: Existe una tabla de uso de swap por cada dispositivo de intercambio,
con una entrada por cada página de dicho dispositivo.
19. PRINCIPIOS DE SW DE E/S
Unix divide el sistema de entrada y salida en dos sistemas:
• El sistema de “Entrada y salida por bloques”
• El sistema “Entrada y salida por caracteres”
• Cada dispositivo físico se identifica mediante un numero de dispositivo menor, un
numero de dispositivos mayor y una clase, ya sea de bloque o de caracteres.
• Cada clase tiene una tabla de configuración que contiene un arreglo de puntos de
entrada a los controladores de dispositivos. Esta tabla es la única conexión entre el
código del sistema y los controladores de dispositivos; además, es una característica
importante de Unix, ya que permite a los programadores del sistema crear con
rapidez nuevos controladores de dispositivos para aceptar diferentes sistemas de
configuración.
20. Clase
Carácter
Bloque
Numero mayor
de dispositivo
Numero mayor
de dispositivo
Líneas de
comunicación
Cinta de
papel
Numero menor
de dispositivo
Numero menor
de dispositivo
Numero menor
de dispositivo
PT1
LP1
CL1
CL2
CL3
PT2
Impresora de
líneas
LP2
Unidad de
disco
Unidad de cinta
magnética
Numero menor
de dispositivo
Numero menor
de dispositivo
DD1 DD2 DD3 DD4 DD5
TPD1
TPD2
21. PRINCIPIOS DE SW DE E/S
• El número mayor de dispositivo se utiliza como un índice para el arreglo, a fin
de tener acceso al código apropiado de cierto controlador de dispositivo.
• El número menor de dispositivo se pasa al controlador de dispositivo como
argumento y sirve para tener acceso a uno de varios dispositivos físicos
idénticos.
• Según indica el nombre, el sistema por bloques se utiliza para dispositivos
que se pueden tratar como una secuencia de bloques de 512 bytes. Esto
permite al administrador de los dispositivos utilizar la técnica del buffer para
reducir el tráfico de entrada y salida. Unix contiene de 10 a 70 buffers para
entradas y salidas, y la información relacionada con ellos se conserva en una
lista.
22. SEGURIDAD
Unix no se diseñó para ser seguro [Ritchie, 1986], a finales de los 80 se convirtió
en el primer sistema operativo en alcanzar niveles de seguridad casi militares
[Hecht, 1988] [Serlin, 1991].
Casi todas las actividades realizadas en un sistema Unix son susceptibles de ser,
en mayor o menor medida, monitorizadas.
Problema [Instalación por defecto de Unix]
• Cuentas sin passwords o passwords por defecto
• Servicios abiertos
• Sistemas de ficheros susceptibles de ser compartidos.
23. SEGURIDAD
• Protección de memoria
• Control de acceso a ficheros
• Protección del uso de los recursos del sistema.
• El acceso al sistema se realiza a través de una cuenta.
• Nombre de usuario
• Contraseña
24. FAUNA INFORMÁTICA EN LINUX
• Virus: Fragmento de código que se inserta en programa ejecutable, cuando el
programa es ejecutado, el se ejecuta también. Los virus se almacenan en
memoria , que infectan cualquier fichero que se ejecute en el sistema.
• Gusanos: Programas que se reproducen copiándose de un ordenador a otro a
través de la red
25. PUERTAS TRASERAS
Mecanismos implantados en los programas por los desarrolladores, que
permiten a éstos realizar acciones determinadas sin tener que pasar por
determinadas secciones del programa, como procesos de autenticación,
mecanismos de seguridad, etc. Se suelen utilizar preferentemente en tareas de
depuración.
Un caso que ilustra esto último es el agujero de seguridad que suponía la opción
de depuración del programa sendmail, del cual se aprovechó el gusano de
Internet.
26. PUERTAS TRASERAS
• Muchas veces la existencia de puertas traseras está provocada por el despiste
de los desarrolladores, que olvidan eliminarlas de sus programas, aunque
otras veces las dejan ahí intencionadamente para conseguir de una manera
sencilla el acceso al sistema mediante la ejecución de una determinada
secuencia de eventos, una secuencia de pulsaciones de teclado o un nombre
de usuario secreto. De igual manera, los piratas, una vez que han conseguido
acceso a un sistema, suelen crear puertas traseras que les permitan volver a
entrar en el sistema, por ejemplo añadiendo una entrada en el fichero
/etc/passwd.
27. ¿CÓMO ENCUENTRA UN PIRATA LAS
CONTRASEÑAS?
Las contraseñas se almacenadas en el fichero /etc/passwd. Pero
estas contraseñas no se encuentran almacenadas tal cual, sino que
se utilizan para cifrar un bloque de bits mediante una función
llamada crypt (), cuyo resultado se almacena en dicho fichero. Si un
pirata consigue hacerse con una copia del fichero /etc/passwd no
tendrá conoci-miento de las contraseñas de los usuarios del sistema,
pero puede utilizar diversas técnicas para adivinarlas.
28. ¿CÓMO ENCUENTRA UN PIRATA LAS
CONTRASEÑAS?
Ataque con diccionario, que consiste en cifrar todas las
palabras de un diccionario y ver si el resultado obtenido
coincide con la clave cifrada de algún usuario.
Se utiliza esta técnica porque no es posible obtener la
contraseña de un usuario a partir de la cadena cifrada que
se almacena en el fichero /etc/passwd.
29. ¿CÓMO ENCUENTRA UN PIRATA LAS
CONTRASEÑAS?
Utiliza un adivinador de contraseñas. Lo normal en un principio es
que el pirata ponga en marcha el adivinador de contraseñas con un
diccionario formado por una serie de palabras que muchos usuarios
utilizan como contraseña, como, por ejemplo, los nombres de
entrada de todos usuarios del sistema, palabras de uso común,
marcas, nombres de persona, etc., así como variaciones de todas
ellas.
30. EL FICHERO /ETC/PASSWD
El fichero /etc/passwd se utiliza para identificar a los usuarios que
pertenecen al sistema. Este fichero está estructurado de forma que cada
línea representa a un único usuario, y cada una de estas líneas se encuentra
organizada en siete campos separados por ‘:’ .
1.
2.
3.
4.
5.
6.
7.
Nombre de usuario o login
Contraseña cifrada
Identificador de usuario o UID
Identificador de grupo o GID
Información sobre el usuario
Directorio de entrada o home
Shell
login:password:UID:GID:GECOS:home:shell
31. EL SUPERUSUARIO
El más importante de todos los usuarios del sistema es, por supuesto, root. El
usuario root se caracteriza porque tiene como UID el número 0, al cual el
sistema trata de manera diferente.
El superusuario tiene un control casi completo sobre todo el sistema.
Puede saltarse todos los mecanismos de seguridad del sistema y acceder a
todos sus recursos.
Por estos motivos, el hecho de la existencia de un superusuario supone uno de
los mayores problemas de seguridad de los sistemas UNIX.
32. PRECAUCIONES A TENER EN CUENTA AL
ACCEDER AL SISTEMA COMO ROOT
La misión principal del root es evadir, en determinadas ocasiones, las protecciones
que poseen los sistemas UNIX. Su uso debería restringirse a ocasiones especiales,
muy puntuales y en las que su uso sea la única alternativa posible.
El uso de buenas contraseñas, comprobar los permisos de los ficheros e implantar
mecanismos que permitan detectar entradas no autorizadas en las cuentas de los
usuarios, son excelentes medidas de seguridad que cualquier usuario podría
utilizar para asegurar aún más su cuenta.
33. PRECAUCIONES A TENER EN CUENTA AL
ACCEDER AL SISTEMA COMO ROOT
El superusuario es el usuario más importante del sistema, y por eso
es siempre el principal objetivo de cualquier pirata informático. El
superusuario, además de todas las medidas de seguridad que pueda
tomar un usuario normal, debería tomar otras muchas, como
acceder al sistema sólo desde un terminal seguro y sólo en aquellos
casos en los que sea estrictamente necesario.