Sistemas Operativos
ISC. Luis Gerardo Robledo Chávez
Linux ► El
kernel ó núcleo de linux se puede definir como el corazón de este sistema operativo. Es el encargado de que el software y el hardware de tu ordenador puedan trabajar juntos. ► Las funciones más importantes del mismo, aunque no las únicas, son: ► istración de la memoria para todos los programas y procesos en ejecución.
Linux ►istración
del tiempo de procesador que los programas y procesos en ejecución utilizan. ►Es el encargado de que podamos acceder a los periféricos/elementos de nuestro ordenador de una manera cómoda.
Linux ► ►
►
►
Hasta que empezó el desarrollo de la serie 2.6 del núcleo, existieron dos tipos de versiones del núcleo: Versión de produccion: La version de produccion, era la version estable hasta el momento. Esta version era el resultado final de las versiones de desarrollo o experimentales. Cuando el equipo de desarrollo del núcleo experimental, decidia que tenia un núclo estable y con la suficiente calidad, se lanzaba una nueva versión de producción ó estable. Esta versión era la que se debia utilizar para un uso normal del sistema, ya que eran las versiones consideradas más estables y libres de fallos en el momento de su lanzamiento. Versión de desarrollo: Esta versión era experimental y era la que utilizaban los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos solian ser inestables y no se debian usar sin saber lo que se hacia.
Linux ►
Como interpretar los numeros de las versiones de las series por debajo de la 2.6: Las versiones del núcleo se numeraban con 3 numeros, de la siguiente forma: AA.BB.CC AA: Indicaba la serie/versión principal del núcleo. Solo han existido la 1 y 2. Este número cambiaba cuando la manera de funcionamiento del kernel habia sufrido un cambio muy importante. BB: Indicaba si la versión era de desarrollo ó de producción. Un número impar, significaba que era de desarrollo, uno par, que era de producción. CC: Indicaba nuevas revisiones dentro de una versión, en las que lo único que se habia modificado eran fallos de programación.
Linux ► Unos
ejemplos nos ayudaran a entenderlo mejor:
► ej1:
versión del núcleo 2.4.0: Núcleo de la serie 2 (AA=2), versión de producción 4 (BB=4 par), primera versión de la serie 2.4 (CC=0) ► ej2: versión del núcleo 2.4.1: Núcleo de la serie 2, versión 4, en el que se han corregido errores de programación presentes en la version 2.4.0 (CC=1) ► ej3: versión del núcleo 2.5.0: versión 0 del núcleo de desarrollo 2.5.
Linux ►
Con la serie 2.6 del núcleo, el sistema de numeración asi como el modelo de desarrollo han cambiado. Las versiones han pasado a numerarse con 4 digitos y no existen versiones de produccion y desarrollo.
►
Las versiones del núcleo se numeran hoy en dia con 4 digitos, de la siguiente forma: AA.BB.CC.DD. AA: Indica la serie/versión principal del núcleo. BB: Indica la revision principal del núcleo. Numeros pares e impares no tienen ningun significado hoy en dia. CC: Indica nuevas revisiones menores del núcleo. Cambia cuando nuevas caracteristicas y drivers som soportados. DD: Este digito cambia cuando se corrigen fallos de programación o fallos de seguridad dentro de una revisión.
Linux ► Hoy
en dia se suele usar el nucleo distribuido con la distribucion que el utiliza. Son las distribuciones las encargadas de distribuir núcleos estables a sus as y estos nucleos se basan en el núcleo ("vanilla") distribuido por Linux Torvalds y el equipo de programadores del núcleo. ► Dónde conseguir el núcleo
El núcleo denominado "vanilla" (sin alteraciones y suministrado por Linux Torvalds) se puede bajar de un gran número de servidores en internet pero el sitio oficial es http://www.kernel.org/.
Linux ►
► ► ► ► ► ►
En este enlace tienes la lista internacional oficial de servidores espejos, de donde es posible bajarse cualquier versión del núcleo (última y antiguas). A continuación tienes una tabla resumen con las ultimas versiones del kernel: Ultima version estable del kernel: 2.6.22.1 Ultima version alpha de la serie 2.6: 2.6.23-rc1 Ultima version estable de la serie 2.4: 2.4.34.6 Ultima version alpha de la serie 2.4: 2.4.35-rc1 Ultima version estable de la serie 2.2: 2.2.26 Ultima version alpha de la serie 2.2: 2.2.27-rc2 Ultima actualizacion 23/07/2007 08:51:00
La historia del sistema operativo Unix A finales de los 60's, en 1969, nació UNIX, SO que trataremos más adelante, y es la base de muchos de los SO's de hoy en día, aunque muchos no lo itan.
La historia del sistema operativo ► Unix
como base de sistemas operativos Como dijimos antes, en 1969, algo maravilloso sucedió en el mundo de la informática: nació UNIX. En principio como un trabajo solitario de Ken Thompson, de Bell Labs, y luego en conjunto con Dennis Ritchie (quien junto a Brian Kerningan desarrollaron el lenguaje de programación C) y otros del Bell Labs que se fueron incorporando.
La historia del sistema operativo ► Ritchie
ya tenia experiencia dado que había trabajado en otro proyecto llamado MULTICS, el cual fue de gran influencia sobre el nuevo SO, como por ejemplo en la organización básica del sistema de archivos, la idea de un intérprete de comando (el shell) como un proceso de , etc.
La historia del sistema operativo ► La
primera versión de UNIX estaba hecha íntegramente en ensamblador. Esto se cambió con la versión posterior, que fue escrita en lenguaje C lo que lo hizo sumamente portable; así mismo también se le agrego una característica por demás de importante, la multiprogramación. Esto y la entrega de licencias gratuitas con fines educativos extendieron su uso, desarrollo y la investigación en las universidades.
La historia del sistema operativo ► El
uso de UNIX se fue ampliando a medida que se le fueron adicionando herramientas de software y entornos de programación, apoyo a protocolos de red Internet (T/IP), mejoras en el editor de texto (Vi), compiladores de C, PASCAL y LISP, mejora en el control de congestionamiento de redes y el rendimiento de T/IP.
La historia del sistema operativo ►Al
crecer la popularidad de UNIX, se a transportado a distintas plataformas de hardware (PC, MAC, ALPHA) y se han creado una gran cantidad de SO's UNIX y parecidos a UNIX (XENIX de Microsoft, AIX de IBM, SOLARIS de SunSoft).
Inicio de la máquina El SO linux tiene 7 niveles de arranque, los cuales indican la forma en que arrancará el sistema. Estos parámetros están definidos dentro del archivo /etc/inittab, que es un archivo de configuración donde se definen niveles que van desde 0 hasta 6 El programa runlevels o niveles de arranque es un software de configuración del sistema, el cual permite seleccionar un solo proceso de entre un grupo definidos dentro de inittab.
Inicio de la máquina Cuando el sistema arranca por primera vez, lo hace en el nivel 3 (modo multi) y con la interfaz en modo texto, o en el nivel 5 que también incluye el modo multi pero con la interfaz en modo gráfico. Los niveles para volver a arrancar y detener el equipo son el nivel 6 y el nivel 0 respectivamente. Estos niveles son estándar en la mayoría de las distribuciones LINUX. Detener o reiniciar el sistema el trabajo del
Inicio de la máquina La estructura del archivo /etc/inittab, que como muchos otros en Linux es de texto plano, entre los niveles están: 0 halt termina los procesos y apaga el sistema 1 Este nivel se emplea para el mantenimiento del sistema, solo root puede ingresar a este nivel. 2 En modo multi sin NFS, lo mismo que el nivel 3 cuando no se tiene red. 3 Este es el nivel que da soporte multi, con a la red
Inicio de la máquina 4 No tiene uso 5 Este es el modo en que se levanta Linux Red Hat con la interfaz gráfica configurada 6 este nivel se usa para reiniciar el sistema Se debe de ser muy cuidadoso al modificar el contenido de este archivo ya que si los parámetros son incorrectos, el sistema puede quedar inaccesible.
Instrucción telinit Una forma de detener o reiniciar el equipo es utilizando el comando telinit, se utiliza como parámetro un número entre el 0 y el 6 que corresponde al nivel de arranque del sistema linux que se desea elegir, por ejemplo, el siguiente comando solicita que se reinicie el equipo: [root@luis/root]# init 6
Instrucción telinit De lo contrario si lo que se quiere es apagar el sistema el comando requerido es: [root@luis/root]# init 0 Con lo que se consigue es que el sistema se detenga. La forma correcta de apagar un servidor es utilizando el comando shutdown. Este comando, a diferencia de otros como reboot y halt, permite que los procesos terminen de ejecutarse en forma adecuada.
Instrucciones Halt, shutdown y reboot Linux cuenta con varios comandos para reiniciar y detener el sistema. Cada comando manda llamar a un nivel específico de carga. Como ya se mencionó, estos niveles se encuentran definidos dentro del archivo /etc/inittab. Así, por ejemplo si se invoca al nivel 0, el sistema se apagará inmediatamente, en cambio si se llama al nivel 6 solo se reiniciará.
Instrucciones Halt, shutdown y reboot Los comandos más comunes para reiniciar y detener el equipo son reboot y halt, para ejecutar cualquiera de estos dos comandos basta con escribir en la linea de comandos. [root@luis/root]# reboot El comandoo reboot detiene los procesos y prepara el sistema para ser reiniciado Para detener el sistema se dispone del comando halt [root@luis/root]# halt
Instrucciones Halt, shutdown y reboot La sintaxis de shutdown es la siguiente • Shutdown opciones
La forma de apagar nuestro equipo con shutdown es la siguiente: [root@luis/root]# shutdown –h now Donde la –h Indica que se llame al nivel 0 con lo que el sistema se dará de baja Para reiniciar el equipo [root@luis/root]# shutdown –r now La –r llama al nivel 6 y reinicia el sistema
Instrucciones Halt, shutdown y reboot Es posible incluir un mensaje para los s cada vez que se reinicie o se apague el sistema [root@luis/root]# shutdown –r now “El servidor se apagará”
Como ya se mencionó la forma correcta de apagar un servidor es utilizando el comando shutdown. Este comando permite que los procesos terminen de ejecutarse en forma adecuada, se recomienda que antes de apagar el servidor se ejecute la instrucción sync, el cual sincronizará los discos y permitirá que los datos que no esten guardadoss en disco lo hagan y no exista errores en el disco duro del servidor cuando este arranque nuevamente.
Mantenimiento de claves de Altas, bajas y cambios de clave Para añadir cuentas de se emplea el comando add. Al crear una nueva cuenta el comando add agrega una línea a los archivos wd y shadow con información relacionada al nuevo . El archivo /etc/wd guarda los datos completos y las contraseñas de todos los s del sistema.
Mantenimiento de claves de El contenido de un archivo wd es similar al siguiente. root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: :x:3:4::/var/: apache:x:48:48:apache:/var/www:/bin/f alse
Mantenimiento de claves de Cada línea está formada por siete campos empezando con el nombre del , la contraseña, id, groupid, campo gecko, home del y el tipo de shell que le fue asignado. Los campos se separan entre si con dos puntos. Cada que es añadido al sistema debe tener un número único (-id) y debe pertenecer, por lo menos, a un grupo que por lo regular es el grupo del .
Mantenimiento de claves de Otro archivo que es modificado por add es el archivo shadow que es donde se guardan los s encriptados de todos los s. Aunque se mencionó anteriormente que en wd se cuenta con el campo de contraseñas, realmente no aparece el del , en su lugar se coloca una equis. Por el contrario, en shadow se coloca la cadena del encriptada por lo cual este archivo solo puede ser editado por root.
Mantenimiento de claves de Un archivo shadow tendrá una estructura similar a la siguiente. root: $1$iNlfWdvf$OwP/15:11691:0:99999: 7::: bin:*:11691:0:99999:7::: daemon:*:11691:0:99999:7::: :*:11691:0:99999:7::: apache:!!:11691:0:99999:7:::
Mantenimiento de claves de Al igual que wd, el archivo shadow tienen el mismo formato de siete columnas separadas por dos puntos. En el ejemplo anterior, el único que tiene es el root. Por cada nuevo del sistema, el comando add se encarga de generar una línea similar a las anteriores. La sintaxis de add es la siguiente: add opción nombre
Este comando cuenta con diferentes opciones aunque la mayoría de ellas se pueden omitir
Mantenimiento de claves de Grupo de s En este momento el único grupo que existe en el sistema es el grupo s. Red hat tiene su propia forma de manejar grupos, por lo regular cuando se crea un también se crea un grupo con el mismo nombre del , para crear un nuevo grupo necesitamos la ayuda del comando groupadd.
Mantenimiento de claves de Grupo de s La información acerca de los grupos la podemos encontrar dentro del archivo /etc/group, este archivo guarda un formato similar al de los anteriores. root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,
Mantenimiento de claves de En este archivo se almacenan todos los datos referente a los diferentes grupos el nombre del grupo, , gid o identificador de grupo divididos en cuatro columnas separadas por dos puntos, estos grupos al igual que los s deben tener un número único ningún grupo debe tener un mismo identificador o gid.
Mantenimiento de claves de Para eliminar un grupo basta con ejecutar el comando groupdel y el nombre del grupo a eliminar. [root@luis/root]# groupdel opción nombre
Contraseñas y permisos Muchas de las primeras distribuciones Linux almacenaban las contraseñas de los s en etc/wd, lo que no resultaba seguro, ya que /etc/wd es y debe ser legible. De ahí que cualquier pueda ver el contenido de etc/wd. Las contraseñas linux están encriptadas, de esta manera aunque etc/wd fuera público la contraseña era ilegible para cualquier curioso
Contraseñas y permisos La palabra criptografía tiene su orígen en dos antiguas palabras: kripto (encondido) y graphia (escritura). Por tanto, la criptografía es la ciencia de escribir de forma secreta. La base de datos de contraseñas es el archivo shadow que se encuentra en /etc, es un archivo especial que almacena no solo las contraseñas de los s sino también de indicadores de reglas especiales.
Contraseñas y permisos Desde varios puntos de vista, /etc/shadow se asemeja a /etc/wd. El archivo consta de un registro por línea y cada registro se divide en nueve campos separados por dos puntos. El nombre de La Contraseña El número de dias desde el 1 de enero de 1970, fecha en que se cambió la contraseña por ultima vez El número de días que quedan antes de que se permita al cambiar su contraseña. El número de días que quedan antes de que el tenga que cambiar su contraseña
Contraseñas y permisos El número de días de anticipación con que se avisa al de que pronto tendrá que cambiar su contraseña El número de días que quedan para que el cambie su contraseña antes de que su cuenta sea cancelada El número de días desde el 1 de enero de 1970, que la cuenta ha sido cancelada El último campo esta reservado.
Contraseñas y permisos Algúnas reglas que se deben tomar antes de asignar contraseñas. • El número de oficina, el teléfono de la oficina, el nombre del host y el de dominio están prohibidos. • Las contraseñas deben por lo menos de 8 a 10 caracteres de longitud • Las contraseñas deben mezclar mayusculas y minúsculas • El nombre y apellidos (al derecho y al reves) están prohibidos • El nombre de conexión (al derecho y al revés) están prohibidos
Contraseñas y permisos El cifrado es un componente vital de la seguridad, Sin embargo, por muy potente que sea nuestro cifrado, fallará si los s eligen contraseñas débiles. Los s perezosos, propensos a errores y olvidadizos, a menudo crean contraseñas a partir de los siguientes datos. • • • • • •
Fecha de nacimiento Nombres de los hijos Nombres de artistas Palabras de diccionario Secuencias numéricas como 90123 Palabras escritas al revés
Contraseñas y permisos A diferencia de otros sistemas operativos Linux cuenta con medidas para garantizar la seguridad tanto de archivos como de directorios, pertenezcan al sistema o a los s. Con linux si no se dispone de una cuenta para abrir una sesión, simplemente el sistema no permitirá la entrada. Además, cada archivo y directorio en linux esta asociado a un conjunto de permisos que determinan quienes tienen y que es lo que pueden hacer con ellos.
Contraseñas y permisos Estos permisos se establecen para indicar cual de las 3 categorías de s tienen derecho ha emplear un recurso: el dueño del recurso, los del grupo al que pertenece el dueño o cualquier otro que pertenezca al sistema. • Permisos de lectura: permite leer el contenido de un archivo, sin la posibilidad de modificarlo • Permisos de escritura: permite modificar el contenido de una archivo • Permisos de ejecución: permite que un archivo que contenga un programa pueda ser utilizado.
Contraseñas y permisos Linux cuenta con diferentes herramientas con las que se puede asignar y denegar permisos, cambiar de grupo y hasta de dueño a los directorios y archivos. Estas herramientas son muy útiles para la istración de los recursos del sistema y de las cuentas de los s. Entre ellas se cuenta con: • Chmod permite asignar permisos a directorios y archivos, por medio de una combinación de letras, que son asignados a diferentes categorías de s. Cada letra indica un permiso especial
Contraseñas y permisos • Chgrp permite asignar a directorios y archivos un grupo diferente al que les fue asignado cuando estos fueron creados. • Chown Cuando un archivo o directorio es creado, este le pertenece al que lo creó, se puede asignar un dueño diferente al original utilizando esta herramienta. Para linux, el propietario o dueño de un recurso es el que lo ha creado
Contraseñas y permisos Es común que los s se reunan en grupos de trabajo (s), por lo que el grupo es aquel al que pertenece el dueño. El dueño puede permitir que los de su grupo tenga a sus archivos. El dueño también puede conceder a todos los demás s que no pertenezcan a su grupo pero que tengan una cuenta en el sistema.
Contraseñas y permisos Linux identifica los permisos asociados a los archivos y directorios empleando nueve bits de seguridad, repartidos en tres grupos de tres bits cada uno. Cada conjunto de 3 bits identifica los permisos asignados a las diferentes categorías de . • El primer bit se emplea para indicar si se cuenta con permiso de lectura (0-no, 1-si). • El segundo señalará el permiso de escritura. • El tercero se destina el permiso de ejecución.
Contraseñas y permisos La información correspondiente a cada tipo de se presenta en el orden: dueño, grupo, otros. Se pueden conocer los permisos asociados a archivos y directorios empleando el comando ls –l. En el despliegue resultante, para cada archivo y directorio, aparecerá como primera columna la secuencia de permisos que tienen asignados.
Contraseñas y permisos Por ejemplo, el archivo misdatos tiene asignado el siguiente conjunto de permisos: [root@luis/root]# ls –l misdatos -rwxr-xr-x 1 root root 0 ago 5 12:42 misdatos
Contraseñas y permisos En la primer columna (-rwxr-xr-x) el primer
guión (-) indica que se trata de un archivo. Los símbolos rwx indican los permisos de para el dueño, los siguientes 3 (r-x) corresponden a los permisos de del grupo, finalmente, (r-x) señalan los permisos de de los otros. Cada permiso está identificado con una letra: No se cuenta con el permiso r se tiene permiso de lectura (read) w se dispone de permiso de escritura (write) x se autoriza la ejecución (execution)
-
Contraseñas y permisos Entonces el significado de (-rwxr-xr-x)
es que el dueño del archivo posee los 3 permisos, los de su grupo de trabajo tienen permiso de lectura y ejecución, al igual que el resto de los s. Con el comando chmod se pueden definir diferentes configuraciones de permisos, chmod tiene la siguiente sintaxis: Chmod permisos nombre-de-archivo
Contraseñas y permisos Se pueden especificar los permisos con dos métodos distintos: • •
1 utilizando símbolos de permiso (r,w,x) 2 Utilizando el equivalente octal de una máscara binaria. En el primer método, se asignan los permisos utilizando las letras para establecer los permisos de un archivo o directorio. Cualquiera de estos permisos pueden ser añadidos o suprimidos utilizando los símbolos + y -
Contraseñas y permisos En el siguiente ejemplo, el comando chmod añade el permiso de ejecución y suprime el permiso de escritura del archivo mio. [root@luis/root]# chmod +x-w mio También se emplean letras (u g o) para especificar la categoría de al que se conceden o retiran los permisos.
Contraseñas y permisos La letra de la categoria se antepone a los permisos de lectura, escritura y ejecución. Si no se utiliza ningún simbolo de categoria, se asume que se aplica a todas las categorias y los permisos que se especifican quedan establecidos para el dueño, el grupo y los demás. En el siguiente ejemplo, el comando chmod establece para el archivo mio los permisos de lectura y escritura, para el grupo. [root@luis/root]# chmod g+rw mio
Contraseñas y permisos El segundo método que se conoce como método absoluto, asigna los permisos en forma simultanea a todas las categorias de . Para ello, usa un valor octal equivalente al patrón binario que hace referencia a los permisos de cada categoría. Como es sabido, los números octales tienen una estructura de base ocho, y al ser traducción a binario, cada dígito octal se convierte en tres dígitos binarios. Tres dígitos octales se convierten en tres conjuntos de tres dígitos binarios cada uno (nueve bits en total), número exacto de permisos en un archivo.
Contraseñas y permisos Cada dígito octal se aplica a cada una de las categorías de s. El primer dígito octal se aplica a la categoría de propietario, el segundo al grupo y el tercero a los otros. Para definir el valor octal para cada , puede utilizarse la tabla siguiente, con la que el dígito octal corresponderá al grupo de 3 bits que indica la relación de permisos.
Contraseñas y permisos Octal
Binario 421 rwx
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
Contraseñas y permisos Por ejemplo, si a un se le concede permiso de lectura, pero no de escritura ni de ejecución, su conjunto binario será 100 y su dígito octal resulta 4. Si se conceden los tres permisos se tendrá el conjunto binario 111 y por ende el valor octal será 7. finalmente, si no se concede permiso alguno, la cadena binaria es 000 con lo que el valor octal es 0.
Contraseñas y permisos Finalmente, el número octal que se emplea para indicar los permisos en forma absoluta se forma reuniendo los tres dígitos octales en el orden ya descrito (dueño, grupo, otros). La siguiente tabla proporciona una interpretación de textual del significado de los distintos valores octales.
Contraseñas y permisos Octal
Binario 421 rwx
Descripción
0
000
Ningún permiso
1
001
Ejecución
2
010
Escritura
3
011
Escritura y lectura
4
100
Lectura
5
101
Lectura y ejecución
6
110
Lectura y escritura
7
111
Lectura, escritura y ejecución
Contraseñas y permisos Uso de Recursos • El debe proteger los recursos del sistema, asignándoles permisos adecuados. • Existen 3 tipos de permisos para los archivos – r lectura permite ver el contenido – w escritura permite modificar el contenido – x ejecución
permite ejecutar el contenido
Contraseñas y permisos Uso de Recursos • En el caso de los directorios, los permisos tienen un significado diferente: – r lectura permite ver los nombres de los archivos – w escritura Permite hacer cambios al directorio – x ejecución permite buscar o cambiarse en el directorio
Contraseñas y permisos Existen en linux archivos con permisos especiales, hay 2 tipos: • SGID (define el ID de grupo, 2000 octal) • SUID (define el ID de , 4000 octal)
Los programas con permisos de SGID y SUID son especiales, ya que los permisos de su propietario se respetan aun cuando los ejecuten otros .
Contraseñas y permisos Esto es si se define el valor root SUID en un programa, éste siempre se ejecutará como root, aunque lo utilice un normal • Los archivos SUID se pueden buscar con el siguiente comando – Find / .perm + 4000
A continuación se muestra una lista de cómo afectan estos permisos tanto a archivos como a los directorios
Contraseñas y permisos Comando
Mínimo permiso requerido En el archivo
En el directorio
ls dir
ninguno
r
ls –l dir
ninguno
rx
cd dir
-
x
ls
ninguno
rx
ls -l
ninguno
rx
pwd
-
x
ls archivo
ninguno
x
ls –l archivo
ninguno
x
cat archivo
r
x
cat >> archivo
w
x
archivo
x (si es binario)
x
rx ( si es script)
x
ninguno
wx
rm archivo
Monitoreo del sistema Un proceso es un programa que se encuentra corriendo dentro del servidor, cada proceso tiene un tiempo de vida que va desde el momento en que presionamos la tecla de enter hasta que termina la ejecución del proceso. Todos los procesos tienen un dueño, este dueño es el quien invocó el proceso desde el interprete de comandos, de tal forma que ningún otro puede afectar las tareas que ese esta realizando, debido a que no son dueños del proceso que se esta realizando.
Monitoreo del sistema Cuando nosotros iniciamos una sesión dentro del servidor en realidad estamos ejecutando una copia del interprete de comandos que tenemos por default, a esta copia del interprete se le asigna un número el cual esta asociado al proceso en ejecución, por cada sesión que nosotros iniciemos se va a ejecutar una nueva copia del shell asignándole un nuevo número de identificación para este proceso.
Monitoreo del sistema Es importante recalcar que todo proceso tiene una dependencia del shell principal del sistema, en nuestro caso como s todos los procesos que generemos van a depender de la copia del shell que nosotros estamos ejecutando.
Monitoreo del sistema Instrucción top La instrucción top muestra los procesos que se encuentran actualmente en ejecución así como información sobre los mismos, como la memoria que utilizan y el tiempo de U que consumen. La ventaja que tiene el top sobre otras instrucciones es que muestra en una lista en tiempo real e interactivo los procesos que actualmente están activos Para salir de top, pulsamos la tecla q.
Monitoreo del sistema Podemos utilizar comandos para interactuar con top entre los que se incluyen Comando
Descripción
Barra espaciadora
Actualiza la pantalla
h
Muestra la ayuda de top
k
Mata un proceso
n
Cambie el número de procesos que se listan Ordena por
u M
Ordena por memoria utilizada
P
Ordena por la cantidad de U que se utiliza
Monitoreo del sistema Instrucción ps La instrucción ps permite ver los procesos que se están ejecutando desde nuestra sesión abierta, y que se encuentra en uso en este momento, muestra un listado de los procesos en formato corto. Esta instrucción también puede ser acompañada por algunas opciones de esta forma podemos obtener información más detallada de los procesos que están corriendo en el servidor.
Monitoreo del sistema Por ejemplo, si acompañamos al comando ps con la opción –u y el nombre de algún [root@luis/root]# ps –u luis
Ahora con la opción –f, se mostrará un listado de todos los procesos que esta ejecutando un , aunque se encuentre trabajando en varias sesiones, por lo que se mostrarán todos sus procesos [root@luis/root]# ps –f
Monitoreo del sistema Entrega un listado de los procesos que se están ejecutando en nuestra sesión, muestra los procesos en formato largo, donde podemos ver la dependencia de los procesos por el UID, PID y el PPID. El UID es el identificador del dueño del proceso. • El PID es el número del identificador del proceso en ejecución. • El PPID es el identificador del proceso padre del proceso en ejecución.
Monitoreo del sistema Con la opción –e muestra un listado en formato sencillo de todos los procesos ejecutándose en el servidor. [root@luis/root]# ps –e
También podemos juntar varias opciones para mostrar todos los procesos ejecutándose en el servidor en formato largo. [root@luis/root]# ps –fea
Monitoreo del sistema Los procesos pueden encontrarse en diferente estado dependiendo de la atención que estén teniendo en un momento específico. • Z Zombie, cuando un proceso corre en forma independiente , incluso del shell o del proceso que lo invocó. • R en ejecución, se encuentra en la U • T Stopped o detenido • S Sleeping durmiendo en espera de recibir una solicitud para iniciar su trabajo. • D Dormido sin interrupción posible, normalmente relacionado con entrada/salida.
Monitoreo del sistema Bitácoras del sistema Durante el arranque del sistema, el kernel envía a la consola mensajes del proceso de arranque, algunos de los mensajes que el kernel envía se listan a continuación: • • • • • •
Identificación del kernel Información de memoria y U Información de hardware detectado Información de particiones y chequeos. Inicialización de la red. Información de los módulos que se cargan. Para ver los mensajes de la última secuencia de inicio podemos usar el comando dmesg [root@luis/root]# dmesg
Monitoreo del sistema Además de los mensajes del kernel, se generan otros mensajes, que son registrados a través del sistema syslog Esos mensajes pueden encontrarse en archivos que se guardan en el directorio /var/log, tales como el archivo messages. En el directorio /var/log aparecen una serie de archivos que guardan los registros de cada uno de los servicios que el sistema esta ejecutando, tales como apache, samba,nfs, impresión, etc.
Realización de respaldos Qué se debe respaldar? • Archivos de • Bases de datos del sistema • Directorios del sistema que sean especialmente importantes o que han sido modificados
Tipos de respaldo Día cero. Cuando se adquiere un equipo nuevo se respalda la información Respaldos completos. Un día especificado se realiza el respaldo de todo el equipo Respaldos incrementales . Se respalda a través del último respaldo que se realizó.
Realización de respaldos Recomendaciones para respaldos • Determina la periodicidad de respaldo de acuerdo a los datos que estén respaldando • Respaldar periódicamente los directorios del sistema también • Normalmente los respaldos completos e incrementales se utilizan conjuntamente • Realizar de vez en cuando un respaldo de todos los archivos y directorios en el disco. • Usar un conjunto “rotatorio” de cintas • Hacer pruebas periódicas de recuperación de los resplados • Llevar un control de archivos y directorios que se encuentren en cintas.
Realización de respaldos Cuanto tiempo se debe conservar las cintas? • Dependerá de la información que esté almacenada en ellas. Algunas deben ser conservadas una semana, otras un mes, otras varios años y algúnas quizás siempre. • Tar – Permite hacer respaldos de muchas maneras diferentes. Su nombre significa Tape Archiver, pero uno de sus usos más comunes actualmente es el manejo de archivos de disco
Realización de respaldos Normalmente se combina con algún programa de compresión/descompresión de datos (commpress, gzip, etc) para disminuir el espacio ocupado por los archivos. Se utiliza para distribuir programas de dominio público, pues permite incluir todos los archivos necesarios en un solo “archivo de distribución”Tar Sintaxis tar llave [argumentos ] archivo | directorios [ . ..]
Realización de respaldos Tar Sintaxis tar llave [argumentos ] archivo | directorios [ . . . ] Llave – debe contener alguna de las siguientes funciones C Crear un respaldo X extraer archivo de un respaldo T Listar los archivos de un respaldo R Añadir archivos al final del respaldo (no siempre funcional) Opciones más utilizadas: vProporcionar información de lo que se está haciendo (verbose) f file Utilizar el archivo específico en vez de la unidad de cinta de default para hacer el respaldo. Se usa para hacer respaldos en un archivo en disco o en dispositivos alternos. Se puede utilizar – para especificar la entrada o salida estándar
Realización de respaldos En tar los argumentos no se ponen inmediatamente después de su letra correspondiente, sino que todas las letras se agrupan en un solo bloque y después se tienen que poner todos los argumentos en el orden correcto. En vez de utilizar tar –c –v- b 20 –f /dev/rmt8 Se usa tar –cvbf 20 /dev/rmt8
Realización de respaldos En tar los argumentos no se ponen inmediatamente después de su letra correspondiente, sino que todas las letras se agrupan en un solo bloque y después se tienen que poner todos los argumentos en el orden correcto. En vez de utilizar tar –c –v- b 20 –f /dev/rmt8 Se usa tar –cvbf 20 /dev/rmt8
Realización de respaldos Ejemplos • Crear un respaldo en la cinta de default del directorio actual y todos sus subdirectorios – tar c .
• Crear el archivo backup.tar que contenga los directorios usr, etc y bin del directorio actual – tar cvf backup.tar ./usr . /etc ./bin
• Crear un respaldo del directorio actual en la salida estándar, que es pasado al gzip para que lo comprima, y el resultado es puesto en el archivo respaldo.tar.gz – tar cvf - . | gzip > ../respaldo.tar.gz
• Algunas formas equivalentes de crear un duplicado perfecto del directorio actual en el directorio tmp/udp – tar cvf - . | ( cd /tmp/dup; tar xvf - ) – tar cvf - . | tar xvCf /tmp/dup -
Realización de respaldos Se recomienda no usar rutas absolutas
• Tar no puede cambiar la ruta de un archivo al momento de recuperarlo. Por ejemplo, si un respaldo se realizó con el siguiente comando: – tar cv /usr/s/jqz
• Al momento de recuperarlo, tar va a recuperar los archivos con exactamente la misma ruta, de manera que si /usr/z/jqz ya existía, sus archivos serán reemplazados por los del respaldo. • La solución únicamente utilizar rutas relativas al momento de crear un respaldo con tar. Por ejemplo, en vez del comando anterior se usa. – Cd /usr/s – tar cv ./jqz
Con lo cual el respaldo se podrá recuperar al directorio jqz debajo del directorio actual, sin importar cuál sea
Realización de respaldos DUMP Permite realizar respaldos de sistemas de archivos, ya sea completo o incrementales. Maneja nueve de respaldo incremental. Lleva un registro de cuándo se hizo el último respaldo de cada sistema de archivos, y en que nivel. Cuando se solicita un respaldo incremental, se respaldan todos los archivos que hayan sido modificados desde la última fecha en que se realizó un respaldo de un nivel menor Sintaxis Dump opciones [argumentos] filesystem
Realización de respaldos Sintaxis Dump opciones [argumentos] filesystem Opciones 0-9
Indica el nivel de respaldo a realizar. 0 es un respaldo completo, y 1 – 9 indican respaldos incrementales. En el archivo/etc/dumpdates se almacenan las fechas en las que se realizó el último respaldo de cada sistema de archivos y en que nivel. f file Permite que el respaldo se realice en algún archivo que no sea el dispositivo de cinta estándar. Se puede usar – para especificar la salida estándar. u Actualizar el archivo /etc/dumpdates en caso de que el respaldo termine exitosamente.
Realización de respaldos Ejemplos • Realiza un respaldo completo del sistema de archivos /dev/rz2h – Dump 0 /dev/rz2h
• Realiza un respaldo en nivel 3 en la unidad de cinta rmt8 del sistema de archivos /usr/s (en este caso se da la ruta del sistema de archivos). Este comando respaldará todos los archivos que hayan sido modificados desde la última vez que se realizó un respaldo de nivel 2 (o menor) de /usr/s – Dump 3f /dev/rmt8 //s
Configuración y mantenimiento del uso de la red Para configurar los dispositivos de red que están instalados en el servidor se puede hacer de cuatro formas • Utilizando una herramienta en modo texto • Utilizando una herramienta desde la interfaz gráfica • Por medio de un servidor DH • Manualmente
Configuración y mantenimiento del uso de la red Se necesita conocer algunos datos como son • • • • • •
Dirección IP Nombre del host Nombre del dominio Mascara de red Puerta de enlace Servidor de nombre de dominio
Configuración y mantenimiento del uso de la red La herramienta netconfig preguntará uno de los parámetros antes mencionados, sólo se debe escribir los datos correctos y oprimir enter para continuar con la configuración hasta terminar con ella Por lo regular las herramientas de configuración se encargan de reiniciar los dispositivos apropiados para habilitarlos con la nueva configuración, sin embargo también lo podemos hacer manualmente con la instrucción [root@luis/root]# /etc/init.d/network restart
Configuración y mantenimiento del uso de la red La herramienta netconfig preguntará uno de los parámetros antes mencionados, sólo se debe escribir los datos correctos y oprimir enter para continuar con la configuración hasta terminar con ella Por lo regular las herramientas de configuración se encargan de reiniciar los dispositivos apropiados para habilitarlos con la nueva configuración, sin embargo también lo podemos hacer manualmente con la instrucción [root@luis/root]# /etc/init.d/network restart
2.1 Dirección IP Una dirección IP (Protocol Internet) o IP Address, también llamada número de IP o dirección de Internet, es un forma de encontrar computadoras en Internet, es un número único, global y standarizado. Cuando se desea conectar a otra computadora, transferir archivos o enviar un e-mail, primero se debe conocer quien es la otra computadora, es decir su dirección ("Address"). La dirección IP es un identificador para una PC en particular en una red, todas las computadoras que desean conectarse a Internet deben estar de acuerdo en usar el mismo esquema de direcciones para establecer una comunicación.
2.1Dirección IP Cada dirección de IP consta de 4 secciones separados por puntos, donde cada rango puede variar de 0 a 255. Ejemplo: 120.42.5.7 Cual sección de dirección de IP representa la red y cual representa la computadora dependerá de que clase de dirección de IP fue asignada a la red. El InterNIC, bajo la autoridad del Internet Assigned Numbers Authorithy (IANA), asigna las porciones de red de la dirección IP a los Proveedores de Servicios en Internet, estos a su vez asignan al host la porción de dirección IP a las PC’s dentro de su red local.
2.1 Dirección IP
Las clases de direcciones IP dependen del tamaño de la red (es decir el número de host que la red puede soportar): •Una dirección de IP es única. •Dos computadoras no pueden tener asignada el mismo número de IP. •La dirección IP es global y standarizada.
2.2 Clases
Hay cinco formas de direcciones de IP: Clase A: puede representar hasta 126 redes distintas. 1.0.0.0 - 126.0.0.0 Clase B: 127.0.0.0 - 191.255.000 Clase C: 192.0.0.0 - 223.255.255.0 Clase D: 224.0.0.0 - 240.0.0.0 Clase E: Está reservada para uso futuro 241.0.0.0 - 248.0.0.0
2.2 Clases
Por ejemplo: la dirección: 120.42.5.7 su representación binaria es: 01111000 00101010 00000101 00000111, es una dirección de Clase A, donde la red está representada por 120 y el Host por 42.5.7.
2.3 Domain Names Es un camino para identificar y ubicar computadoras conectadas a Internet, son computadoras especiales, que miran el nombre de dominio y lo convierten a una dirección IP, de esta manera los datos pueden ser ruteados a su destino en Internet. El nombre del dominio resulta para la mayoría de las personas mucho más fácil de recordar que una dirección de IP.
2.3 Domain Names Un domain name contiene dos o más componentes separados por puntos. Algunos ejemplos de domain names son: - internic.net - nasa.gov - unlp.edu Sobre un dominio se pueden crear "subdominios", por ejemplo: una gran empresa puede crear subdominios para cada oficina regional. Supongamos que la empresa XYZ tiene un dominio que se llama: xyz.com y crea subdominios para sus sucursales: la dirección ppp.buenosaires.xyz.com se puede interpretar como un host llamado ppp, en la oficina de Buenos Aires de la compañía XYZ.
2.3 Domain Names No todos los dominios deben tener un host y un subdominio, pero un mismo dominio puede tener asignado muchos subdominios. La última porción de un dominio describe el tipo de organización de que se trata: .COM , entidades comerciales. .EDU, colegios y universidades. .NET, proveedores, organizaciones directamente involucradas a operaciones en Internet o centros de información sobre redes. .ORG, son organizaciones que no están comprendidas en las categorías anteriores. .GOV, organismos gubernamentales. .MIL, unidades militares de EE.UU. .CODIGO DE PAIS, dos letras de abreviación para un país en particular. Por ejemplo: para Argentina "ar" o "es" para España .WEB, actividades relacionadas con Internet. .FIRM, negocios o firmas .SHOP, comprar y vender a través de Internet.
SEGURIDAD EN SISTEMAS OPERATIVOS
Introducción ►
Antes de comenzar con sistemas operativos específicos, es necesario primero entender la estructura y funcionamiento de un sistema operativo
►
El sistema operativo desempeña básicamente dos funciones no relacionadas: Sistema Operativo como Máquina extendida Sistema Operativo como de recursos
Máquina Extendida ►
Para controlar un dispositivo, por ejemplo el floppy es necesario tener en consideración:
Lectura y escritura de datos Movimiento del brazo del disco Giro del motor Formateo de las pistas Reiniciar y Recalibrar el dispositivo Etc.
►
El conjunto de programas que esconde la “verdad” del hardware es el sistema operativo
►
Al se le presenta como una abstracción (maquina virtual)
de Recursos ► El
SO también provee un control ordenado para las aplicaciones que compiten por el procesador, la memoria y los dispositivos de E/S
► La
istración de recursos incluye la multiplexación de los mismos en dos maneras: En tiempo: Diferentes programas toman turno para utilizar los recursos (multiproceso) En espacio: En lugar de tomar turnos los programas toman una parte del recurso, p. ej. varios procesos en memoria
Procesos (1) ►
Proceso: Es básicamente un programa en ejecución
►
El proceso puede ser ejecutado simultáneamente con otros procesos
►
El sistema operativo lleva el control de los procesos que están siendo ejecutados, pasándoles el control de acuerdo a una serie de reglas preestablecidas y de las cuales depende el rendimiento del equipo
Procesos (2) ► Un
proceso puede estar en uno de los siguientes tres estados: corriendo, detenido y listo para correr
► El
proceso que está corriendo puede llegar a un punto en el que una operación de entrada y salida lo deje bloqueado
► Oportunidad
ideal para que el sistema operativo le de el control a otro proceso
Procesos (3) ►
Una vez que la operación ha terminado, el sistema operativo debe marcar ese proceso como “listo para correr” y meterlo en la cola de procesos que están esperando su oportunidad
►
Si un proceso ha consumido ya demasiado tiempo de procesador sin dar oportunidad a otros procesos, el sistema operativo lo interrumpe colocándolo en la cola de procesos como un proceso listo para correr y le da el control a otro proceso
Procesos (4) ► Transiciones
válidas
Corriendo -> detenido Corriendo -> listo para correr Detenido -> listo para correr Listo para correr -> corriendo ► Nótese
que no existen las transiciones
detenido -> corriendo corriendo -> detenido
Comunicación entre procesos (IPC) ► Actualmente
se usan mucho procesos que están íntimamente relacionados con otros mientras corren P. Ej. la salida de un proceso es la entrada para otro # ls -l | grep *.c
► Como
consecuencia de IPC tenemos las “condiciones de competencia”
Condiciones de Competencia (1) ►
Procesos que están trabajando juntos pueden compartir un medio de almacenamiento común del cual pueden leer o escribir cada uno de ellos
►
El medio de almacenamiento compartido puede estar en la memoria principal o en un archivo
►
Esto puede ocasionar que un proceso B escriba en el medio que fue escrito anteriormente por un proceso A, sobrescribiendo los datos, p. ej. El spooler de impresión
Condiciones de Competencia (2) ►
Otro ejemplo puede ser el algoritmo del productor y el consumidor: Se necesita establecer un almacén intermedio en el que el programa productor deposite los caracteres que va generando y de dónde el programa consumidor los va tomando para procesar
►
Productor con mayor velocidad Eventualmente el almacén se llenará
►
Consumidor sea más rápido Almacén vacío
►
Ambas velocidades sean iguales En la práctica no se da
►
Las velocidades con frecuencia cambian en el tiempo
Condiciones de Competencia (3) ► Productor:
Produce un dato y colócalo en el almacén Si es el primer dato en el almacén, despierta al consumidor y ve a producir más datos Si es el último dato en el almacén (almacén lleno) vete a dormir ► Consumidor:
Toma un dato del almacén Si queda el almacén vacío, procesa el dato y vete a dormir Si era el último dato del almacén (almacén lleno), despierta al productor y procesa el dato
Condiciones de Competencia (4) ► Conflictos:
Un dato en el almacén El consumidor toma el dato Mientras está procesándolo el productor mete un dato nuevo al almacén intermedio y manda una señal de “despertar” al consumidor La señal se pierde
Condiciones de Competencia (5) Cuando el consumidor termine de procesar el dato, se irá a dormir en espera de una señal que lo despierte Dicha señal nunca llegará El productor seguirá hasta que se llene y se vaya a dormir Ambos procesos están dormidos sin posibilidad de despertar
Buffer Overflow (1) ► Muchos
sistemas operativos y programas de sistema son escritos en lenguaje C
► El
compilador de C no hace verificación del tamaño límite de un array en tiempo de ejecución
► Por
ejemplo el siguiente fragmento de código no es verificado:
Buffer Overflow (2) char c[1024]; for (int i=0; i<=12000; i++) c[ i ]=i;
► El
resultado es que algunos bytes de memoria (10,976) se sobrescribirán, posiblemente con consecuencias desastrosas
Trap doors (1) ►
Este problema es creado con la inserción de código en el sistema, para “brincarse” alguna verificación normal
►
Normalmente se deja una puerta trasera para poder acceder al sistema en siguientes ocasiones pasando desapercibido
►
Por ejemplo, se puede agregar código al del sistema para permitir que cualquier ingresando el name “zzzz” pueda accesar al sistema sin importar el
Trap doors (2) ►
Un pseudocódigo de ejemplo para el de un sistema es el siguiente: while (TRUE) { printf(“: ”); get_string(name); printf(“: ”); get_string(); enable_enchoing(); v = check_valididty(name, ); if (v) break; }
Trap doors (3) ►
La puerta trasera cambiará el código como sigue: while (TRUE) { printf(“: ”); get_string(name); printf(“: ”); get_string(); enable_enchoing(); v = check_valididty(name, ); if (v || !strcmp(name, “zzzz”)) break; }
Normas de seguridad de sistemas operativos ► Hacemos
uso de normas o estándares
► Saber
exactamente que tenemos y qué podemos esperar de lo que tenemos
► Interoperar
sistemas heterogéneos
Cómo almacenar la información Especificaciones eléctricas de los modems Protocolo necesario para que un programa cliente solicite una página de Web Etc.
Origen de las normas (1) ► La
inmensa mayoría de los aspectos de la computación están normados a detalle
► Organizaciones
► Son
como ANSI, IEEE, CCITT
estándares “de facto”, como el Word y el Excell
Origen de las normas (2) ► Las
normas en seguridad de computadoras y sistemas operativos no provienen de las organizaciones ni fabricantes
► Militares
norteamericanos
► Esfuerzos
normas
civiles por generar unas nuevas
Norma fundamental ► “Trusted
(TCSEC)
► Más
computer system evaluation criteria”
conocido como el “libro naranja”
“Rainbow series” ► Publicado
el 15 de agosto de 1983
Principios básicos que no cambian
Niveles de seguridad (1) División D: Protección mínima ► División C: Protección discrecional ►
Clase C1: Protección de seguridad discrecional Clase C2: Protección por controlado ►
División B: Protección obligatoria Clase B1: Protección por seguridad etiquetada Clase B2: Protección estructurada Clase B3: Dominios de seguridad
►
División A: Protección verificada
Niveles de seguridad (2) ► Lo
más seguro es la división A
► Prácticamente
sin seguridad: división D
► Los
cambios importantes en el nivel de seguridad se dan entre divisiones
► Entre
las clases de una misma división las diferencias son menores Fácil pasar de un sistema C1 a uno C2 Pasar de un C2 a un B1 es sumamente difícil
Características generales ► Divisiones
A y B tienen seguridad por diseño
► División
C es posible lograr algunos resultados con software añadido
► En
cada clase progresivamente más segura se incorporan todos los elementos de las clases inferiores
Usos principales ► Comparar
el nivel de seguridad ofrecido por diferentes equipos y sistemas operativos
► Determinar
qué clase de seguridad necesitamos para diferentes necesidades Guía para la selección y aplicación de las clases del libro naranja • “Libro amarillo”
SEGURIDAD EN LINUX
Agenda ►
Instalación Segura
►
Seguridad Física
►
Seguridad Local
►
Cuentas de y de Root
Seguridad en el Sistema de Archivos
Seguridad en las Contraseñas
Seguridad en el Kernel
Seguridad en la Red
Instalación Segura (1) ►
Primeramente se debe identificar el sistema que se desea instalar
►
Es decir, ¿un servidor?, ¿estación de trabajo con red permanente?, ¿estación de trabajo sin red?, etc.
►
Se debe tener conocimiento del hardware con el que cuenta dicho equipo
►
Contestando las siguientes preguntas:
Instalación Segura (2) ►
¿Qué clase de discos duros tiene (IDE y/o SCSI)?
►
¿De qué tamaño es la memoria RAM?
►
¿Qué tipo de mouse tiene (PS/2, Microsoft, etc.)?
►
¿De qué manufactura y modelo es la tarjeta de video?
► ►
¿Cuánta memoria de video tiene? ¿Que tipo de monitor tiene (modelo y manufac.)?
Instalación Segura (3) ►
Si va a estar conectado a la red, especificar lo siguiente:
Dirección IP
Mascara de Red
Dirección del Gateway
Dirección del DNS
El Nombre del Dominio que se tendrá
El nombre del Host
El tipo de tarjetas de red (manufactura y modelo)
El número de tarjetas de red (manufactura y modelo)
Instalación Segura (4) ►
Siempre seleccionar instalación personalizada
►
Crear particiones separadas para proporcionar un buen desempeño, estabilidad y seguridad
►
El particionamiento mínimo recomendado es el siguiente:
Instalación Segura (5)
/boot Almacena imágenes del kernel <swap> Doble de la memoria RAM (MemoriaVirtual) / Partición de Root (Raíz) /usr Almacena programas binarios /var Almacena las bitacoras (logs) /home Almacena el espacio para los s /tmp Almacena archivos temporales /chroot Si se desea instalar programas en un directorio root independiente (ej. DNS,Apache)
El tamaño de las particiones depende directamente del tamaño del disco duro y del tipo de servidor
Instalación Segura (6) ►
¿Que ventajas tiene el hacer particionamiento al disco? Protección contra ataques de denegación de servicio Protección contra programas SUID Inicialización del sistema rápido Fácil istración de respaldos y actualizaciones Mejor control de sistemas de archivos montados
Instalación Segura (7) ►
Configurar el equipo eliminando los servicios innecesarios
Quitar la selección de todos los paquetes, para hacer una selección individual
Para la configuración de un servidor no es necesario el ambiente gráfico (XFree86)
Desinstalar programas innecesarios después de la instalación ( /etc/rc.d/init.d )
Seguridad Física (1) ►
La seguridad física es la primera medida que se debe tener en cuenta
►
Contraseña de arranque en la BIOS
►
Contraseñas por defecto en la BIOS:
AWARD_SW, AWARD_PW Biostar, BIOS AMI!SW1, AMI?SW1 Award, hewittrand, lkwpeter
Seguridad Física (2) ►
Linux proporciona:
►
Arranque seguro Bloqueo de terminales
El arranque seguro se establece mediante el gestor de arranque como: lilo (Linux loader) o grub (GRand Unified Bootloader) /etc/lilo.conf /etc/grub.conf image=/boot/vmlinuz--version title imagen = --md5 restricted lock
Seguridad Física (3) ► El
bloqueo de terminales se hace mediante los programas vlock y xlock
► xlock
es un programa que bloquea la terminal en modo gráfico
► vlock
permite bloquear alguna o todas las consolas con las que se esté trabajando
Seguridad Local – Cuentas de y de root (1) ►
istración de las cuentas de : Contar con los privilegios mínimos necesarios en sus cuentas Verificar cuándo y dónde iniciaron la sesión Asegurarse de borrar las cuentas inactivas (comando last) No asignar el mismo identificador de (UID) a varios s Asignar los mismos UID a los s en todos los sistemas que utilicen Bloquear cuentas del sistema que no se utilicen (nobody, uu, games, etc.) Cuando sea necesario utilizar shell restringido (osh) Evitar la creación de cuentas grupales
Seguridad Local – Cuentas de y de root (2) ►
La cuenta de root es la más buscada por los hackers, debido a que tiene el total del sistema
►
Algunas recomendaciones en la utilización de esta cuenta son: Antes de ejecutar comandos destructivos ( rm –f foo*.bak ) verificar primero que realmente es el archivo que se desea borrar (ls foo*.bak) Proporcionar un alias a los s para los comandos destructivos ( $alias rm =´rm -i´ ) Verificar la variable de ambiente PATH ( /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin )
Seguridad Local – Cuentas de y de root (3) Nunca incluir el directorio actual en esta variable ( . ) No utilizar r, rsh, rexec (r-utilities) Nunca crear un archivo .rhosts para root Definir las terminales en donde se puede conectar root ( /etc/securetty ) Para cuentas remotas utilizar canales seguros, por ejemplo SSH Preferentemente iniciar sesión como normal y después utilizar el comando su - si es necesario Utilizar la herramienta sudo (super do) para repartir las tareas del del sistema
Seguridad Local – Sistema de Archivos (1) ►
Se debe evitar que los s ejecuten programas SUID/SGID desde su directorio $ vi /etc/fstab LABEL=/ / ext3 defaults 11 none /dev/pts devpts gid=5,mode=620 00 LABEL=/home /home ext3 nosuid,noexec,nodev 12 none /proc proc defaults 00 none /dev/shm tmpfs defaults 00 LABEL=/var /var ext3 nosuid,noexec,nodev 12 /dev/hda1 swap swap defaults 00 /dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 00
Seguridad Local – Sistema de Archivos (2) ► Los
programas SUID pueden provocar una puerta trasera
► Por
tal motivo es necesario buscar regularmente programas SUID/SGID en el sistema y mantener un registro de lo que son root# find / -type f \( -perm -04000 -o -perm -02000 \) -print
Seguridad Local – Sistema de Archivos (3) ►
Es importante asegurar que los archivos del sistemas no están disponibles a la edición casual por y grupos que no deberían
►
El control de en Unix está separado por tres categorías: propietario, grupo y todo el mundo, por ejemplo: brw-rw-r-- 1 root floppy lectura, escritura y ejecución para el propietario (root) lectura y escritura para el grupo (floppy) lectura para todos los demás s
Seguridad Local – Sistema de Archivos (4) Se debe configurar umask para la creación de archivos ► Los valores más comunes son 022, 027 y 077, que se ejecutan sobre la base 666 $ umask 077 ►
666 666 666 022 027 077 644 640 600
rw-r--r-- rw-r---- rw----► La cuenta de root debe estar muy restringida (077), sólo debe dar permiso explícitamente
Seguridad Local – Sistema de Archivos (5) ►
Existen archivos que son escribibles por todo el mundo, en particular algunos archivos del sistema
►
Se necesita buscar tales archivos y asegurarse de por qué son escribibles root# find / -perm -2 ! -type l -ls NOTA: Hay algunos archivos que deben ser escribibles por todos (/dev), si se les quitan los permisos puede afectar el funcionamiento normal del sistema
Seguridad Local – Sistema de Archivos (6) ► Los
archivos sin propietario o sin grupo pueden ser un indicio de que algún intruso a accedido al sistema root# find / -no -o -nogroup -print
► También
es necesario buscar archivos .rhost
root# find /home -name .rhosts -print
Seguridad Local – Sistema de Archivos (7) ► Otra
medida de seguridad es poner cuotas de los recursos del sistema
► Cuotas
en el sistema de archivos, ya que por defecto viene ilimitado
► Configurar
cuotas de Memoria, procesos y archivos core:
Seguridad Local – Sistema de Archivos (8) /etc/security/limits.conf #Core Files Size @s hard core 0 #Process Number @s hard nproc 50 # Memory in kb @s hard rss 5000 Nota: Los archivos core son generados cuando un programa falla, por lo que contienen información para reparar el problema (gdb, es el debugger normalmente utilizado)
Seguridad Local – Sistema de Archivos (9) ► Otra
medida de protección para los sistemas de archivos es con el establecimiento de bitácoras
► Las
bitacoras que contienen información de conexión de todos los s del sistema son: /var/log/wtmp y /var/run/utmp
Seguridad Local – Sistema de Archivos (10) ►
Se debe mantener su integridad, porque puede utilizarse para saber cuándo y desde dónde ha entrado un (o intruso) al sistema
►
Se recomienda configurarlos con permisos 644
►
Existe otra facilidad para impedir modificaciones en los archivos del sistema: bit inmutable
►
Este bit inmutable también impide la creación de enlaces simbólicos al archivo
Seguridad Local – Sistema de Archivos (11) ► Sólo ► El
root puede agregar o eliminar este atributo
comando es como sigue:
Agregar atributo root# chattr +i nombre_del_archivo Eliminar atributo root# chattr –i nombre_del_archivo
Seguridad Local – Sistema de Archivos (12) ►
Otro peligro potencial para los sistemas de archivos de Linux son los llamados caballos de troya
►
Para evitar en lo posible este código malicioso es recomendable lo siguiente: Asegurarse que el software que se descargue provenga de un sitio confiable Linux proporciona verificadores de integridad MD5 por medio de md5sum y firmas digitales por medio de gpg Verificar la integridad del código que se ejecuta como software del sistema (Tripwire)
Seguridad Local – Seguridad en las Contraseñas (1) ► La
forma principal de autenticación y control de es por medio de contraseñas
► Normalmente
los s seleccionan contraseñas débiles, es decir, palabras fáciles de memorizar
► Por
lo cual son fácilmente atacables mediante fuerza bruta o ataque por diccionario
Seguridad Local – Seguridad en las Contraseñas (2) ► Las
contraseñas débiles son el primer punto en el que se centran los atacantes para obtener al sistema
► Se
deben proteger el archivo de s (/etc/wd) del sistema poniéndolo bajo la sombra (/etc/shadow)
► Esto
evita que un atacante se robe la tabla de s y ejecute Crack o Jhon the Ripper
Seguridad Local – Seguridad en las Contraseñas (3) ►
Otro punto importante son las contraseñas que viajan por la red
►
El uso de protocolos tales como telnet o ftp, autentican al mediante una contraseña, pero esta contraseña viaja en claro
►
Por este motivo se debe tener en consideración la utilización de protocolos criptográficos, como los que se mencionan en la sección “Seguirdad en la Red”
Seguridad Local - Seguridad en el Kernel (1) ► Es
importante que el kernel no sea comprometido, ya que controla la interconexión de la computadora
► El
kernel debe mantenerse actualizado, con liberaciones estables (www.kernel.org) como 2.4.18 no utilizar versiones en desarrollo 2.5.x
► Una
ves que se Instala el sistema es recomendable recompilar el kernel
► La
configuración con respecto a la seguridad es la siguiente:
Seguridad Local - Seguridad en el Kernel (2) ►
Prompt for development [CONFIG_EXPERIMENTAL] Utilizar componentes nuevos y no probados es muy peligroso para una gateway seguro
►
Enable loadable module , kernel module loader [CONFIG_MODULES CONFIG_KMOD] Permite trabajar con módulos y carga módulos de forma dinámica, respectivamente . Previene rootkits (knark)
►
Set version information on all module symbols [CONFIG_MODVERSIONS] Provee una verificación para prevenir cargar modulos compilados en diferentes kernels
Seguridad Local - Seguridad en el Kernel (3) ►
Packet socket [CONFIG_PACKET] Proporciona herramientas tal como tdump que se comunica directamente con el hardware de red, sobrepasando los protocolos del kernel. (deshabilitar en gateways de producción)
►
Network paket filtering [CONFIG_NETFILTER] Configura un firewall (iptables), reemplazando ipchains
►
Soket filtering [CONFIG_FILTER] Configura una interface de filtrado viejo. Se recomienda instalar netfilter
Seguridad Local - Seguridad en el Kernel (4) ►
IP: Kernel level autoconfiguration [CONFIG_IP_PNP] Permite la configuración automática de direcciones IP de dispositivos y de la tabla de ruteo mientras “bootea” el kernel
►
IP:Syn cookie [CONFIG_SYN_COOKIES] Protección contra inundación de SYN, ataque de denegación de servicio (DoS)
►
IP:Netfilter configuration Provee configuración personalizada de
Seguridad Local - Seguridad en el Kernel (5) ►
Existen dispositivos de bloque y carácter como ayuda para la creación de números pseudoaleatorios y son los siguientes: /dev/random Entropía de alta calidad, generada al medir los tiempos entre interrupciones, a disco o tiempos de pulsaciones de teclas /dev/urandom Crea un HAS de la entropía de /dev/random utilizando SHA
►
Estos dispositivos son útiles para la generación de llaves de cifrado, por ejemplo PGP, SSH y
Seguridad en la Red (1) ► Comprometer
la seguridad en la red es más frecuente que comprometer la seguridad física o local
► Primeramente
es necesario analizar cuales son los servicios que se necesitan ofrecer
► Desactivar
los servicios que no se van a ofrecer o inclusive desinstalarlos
Seguridad en la Red (2) ►
Desde el /etc/xinet.d (RH) se pueden ver los servicios que se están ofreciendo y deshabilitarlos o habilitarlos en su defecto
►
Los servicios que no están basados en xinetd se pueden ver, activar y/o desactivar con: # chkconfig --list
►
El nivel de ejecución por default es el 3 (en RH) /etc/rc.d/rc3.d Los servicios que comiencen con K no inicializan Los servicios que comiencen con S si inicializan
Seguridad en la Red (3)
SSL para algoritmos
Protocolo desarrollado por Netscape proteger el web mediante diversos criptográficos
SSH seguros
Protocolo que implementa telnet y ftp utilizando llave pública
S/MIME asegurar Internet
Protocolo desarrollado por RSA para correo electrónico y otros mensajes de
Kerberos por el MIT
Método de auteticación desarrollado
Seguridad en la Red (4) ►
LIDS Implementa un monitor de referencia por medio de un HIDS y ACL
►
Snort
►
Nessus Auditor de sistemas
►
Nmap
►
PGP Creado por Phill Zimmerman para proteger el correo electrónico principalmente
Detector de intrusos NIDS
Escaneador de puertos