PEC3 Sistema Operativo GNU/Linux basico

Page 1

Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

ENUNCIADOS:

PARTE A.Cuestión 1: –

¿Para qué sirve el archivo /etc/services?

Es un archivo en texto plano que sirve para mapear los nombres de servicios con el puerto asignado y protocolo que se usa, este archivo lo usan los programas de red para obtener el puerto a partir del nombre del servicio y viceversa, también se pueden configurar alias para los servicios, su estructura es: <servicio>

<puerto>/<protocolo>

<alias>

Donde protocolo puede ser tcp o udp y el alias es opcional.

En el archivo /etc/services configurad un servicio llamado pec3 (cuidado con las mayúsculas) para el protocolo tcp para que trabaje con el puerto número 65000. ¿Como quedaría la linea correspondiente del archivo /etc/services?

pec3 –

65000/tcp

¿Qué aparece en pantalla, tanto en la sesión con el proceso servidor como en la del cliente? ¿Creéis que ha funcionado correctamente? SERVIDOR

caliope@caliope:~$ bin/servidor_pec3 pec3: Escuchando puerto del servicio = 65000 Mensaje recibido del cliente: Prueba de la PEC3

CLIENTE caliope@caliope:~$ bin/cliente_pec3 localhost "Prueba de la PEC3" Debug: localhost Direccion IP de localhost = 127.0.0.1 El mensaje que se envía al servidor es: Prueba de la PEC3 pec3: Puerto del servicio = 65000 La respuesta del servidor ha sido: Hola cliente!.Tu mensaje ha sido: Prueba de la PEC3 Cerrando conexion y finalizando

Si creo que haya funcionado correctamente. Cuestión 2: –

¿Cómo se controla qué servicios se deben iniciar al pasar el sistema a un determinado runlevel?

Para cada runlevel o nivel de ejecución existe un subdirectorio dentro del directorio etc, el nombre de estos subdirectorios es rcX.d donde la X corresponde al nivel de ejecución, por ejemplo: el directorio /etc/rc3.d/ contiene los scripts que arrancan o detienen los servicios que se desean ejecutar en el runlevel 3. –

¿Qué archivos de GNU/Linux se deben configurar y en qué directorios se encuentran


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

para conseguir esto? Dentro de la carpeta /etc/init.d/ están los scripts para iniciar o detener los demonios instalados en el sistema, para configurar que el demonioX se ejecute en el runlevel X es necesario hacer dos enlaces simbólicos así: # ln -s /etc/init.d/demonioX /etc/rcX.d/S##demonioX # ln -s /etc/init.d/demonioX /etc/rcX.d/K##demonioX Donde el enlace que comienza con “S”, de “Start”, es el que inicia el demonio y ## se debe cambiar por un numero entre 00 y 99 para indicar el orden en que se debe iniciar el programa, ya que puede ser necesario para que nuestro programa se ejecute correctamente haber iniciado antes otro demonio; igualmente el otro enlace se ejecutará para detener el demonio en el orden adecuado, por esta razón el enlace comienza con “K” de “Kill”. –

Configurad vuestro sistema para que inicie/pare el proceso servidor, redirigiendo la salida por pantalla al archivo /tmp/servidor_pec3.log, al arrancar/parar el sistema en runlevel 3. Describid los pasos que habéis hecho para conseguirlo y listad los archivos de configuración que hayáis creado/tocado.

Lo primero que hay que hacer es elaborar un script que se encargue de arrancar y detener el servicio como tal, ubicándolo en el directorio /etc/init.d/, para lo cual cada distribución tiene su forma particular de hacerlo, en el caso de Debian y sus derivados trae un script de modelo al que se le modifican algunas líneas: /etc/init.d/skeleton. Realmente intente usar el script plantilla que ofrece Debian en /etc/skeleton pero no funcionaba a mi completa satisfacción teniendo en cuenta que: 1. Si se modificaba el script corriegiendo las variables para hacer funcionar servidor_pec3, y cambiar especialmente la linea 53 agregando > /tmp/servidor_pec3.log, se obtenía lo pedido pero el demonio no pasaba a ejecutarse en background manteniendo esa terminal ocupada. Realmente no lo probé iniciando la máquina para verificar si este pequeño detalle detenía el arranque total del equipo. 2. Se intentó usar las opciones --background y --make-pidfile del comando start-stopdaemon, obteniendo excelentes resultados siempre y cuando no intentara registrar las respuestas del servidor en el archivo /tmep/servidor_pec3.log; investigando encontré que por defecto cuando se utiliza la opción de --background tanto la salida estándar como la de errores es redireccionada a /dev/null, ver http://bugs.gentoo.org/show_bug.cgi?id=138409 donde incluso se ofrece un parche para agregar la funcionalidad de redireccionar STDOUT y STDERR a archivos así se utilice la opción de background. Por cuestiones de tiempo no probé esta opción pero es bastante interesante. 3. Finalmente decidí realizar mi propio script:


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

#! /bin/sh . /lib/lsb/init-functions NOMBRE=servidor_pec3 PROGRAMA=/home/caliope/bin/$NOMBRE LOG=/tmp/$NOMBRE.log do_start() { pgrep $NOMBRE > /dev/null [ "$?" = 0 ] && return 1 $PROGRAMA > $LOG & RETVAL="$?" return $RETVAL } do_stop() { pkill $NOMBRE return "$?" } case "$1" in start) log_daemon_msg "Iniciando servidor" "$NOMBRE" do_start case "$?" in 0) log_end_msg 0 ;; 1) log_action_cont_msg "El servidor ya esta iniciado"; log_end_msg 1 ;; *) log_end_msg 1 ;; esac ;; stop) log_daemon_msg "Deteniendo servidor" "$NOMBRE" do_stop case "$?" in 0) log_end_msg 0 ;; *) log_end_msg 1 ;; esac ;; *) echo "Usage: $0 {start|stop}" >&2 exit 3 ;; esac :


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

Por ultimo para que arranque en el runlevel 3 y se detenga en los demás es necesario hacer una serie de enlaces a este script como se explico en la respuestas a la anterior pregunta, sin embargo Debian (en este caso Ubuntu que es el que se está usando para el taller) dispone del comando update-rc.d que automatiza la creación de estos enlaces y finalmente muestra que es lo que ha realizado: caliope@caliope:~$ sudo update-rc.d pec3 start 99 3 . stop 01 1 2 4 5 6 . Adding system startup for /etc/init.d/pec3 ... /etc/rc1.d/K01pec3 -> ../init.d/pec3 /etc/rc2.d/K01pec3 -> ../init.d/pec3 /etc/rc4.d/K01pec3 -> ../init.d/pec3 /etc/rc5.d/K01pec3 -> ../init.d/pec3 /etc/rc6.d/K01pec3 -> ../init.d/pec3 /etc/rc3.d/S99pec3 -> ../init.d/pec3 Cuestión 3: –

Hemos olvidado la contraseña de root. Estrategias para recuperar el control de la máquina (Knoppix, rescueCD, etc).

Existen varias formas, supongamos un primer escenario donde grub no tiene contraseña o la conocemos, en este caso el procedimiento consiste en arrancar el equipo en modo de mantenimiento y cambiar el password o eliminarlo del archivo de contraseñas, para lo cual se puede seguir el siguiente procedimiento: 1. 2. 3. 4. 5.

Iniciar el equipo normalmente hasta el menú de grub. Escoger uno de los kernel con los que deseemos arrancar teclear “e” Agregar single, enter. Dar “b” para iniciar Ya estamos habilitados como root en modo mantenimiento o single, desde aca se pueden hacer dos cosas: a) Simplemente cambiar la contraseña con el comando passwd, o b) Editar el archivo /etc/shadow, ubicarse en la linea que comienza con root y eliminar los caracteres entre los primeros y los segundos “:”. 6. Reiniciar el equipo en el caso de a) con el nuevo password y en el caso de b) no pedirá password y cambiar la contraseña con el comando passwd. El procedimiento anterior lo he probado con Centos, inclusive con clave de root seteada, y ha funcionado, he tratado de hacer la prueba con Debian y Ubuntu, pero en el caso de Ubuntu me ha funcionado siempre y cuando no haya seteado la contraseña de root, porque si se ha colocado este password cuando se trata de hacer este procedimiento requiere la clave que precisamente se está tratando de recuperar, lo cual obviamente es mas seguro pero hace este procedimiento inútil; igual sucede con Debian que durante la instalación solicita la contraseña para root. En este caso se puede utilizar el siguiente método similar al anterior: 1. Iniciar el equipo normalmente hasta el menú de grub. 2. Escoger uno de los kernel con los que deseemos arrancar teclear “e”


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

3. 4. 5. 6.

Agregar init=/bin/bash, enter. Dar “b” para iniciar Digitar: mount -o remount,rw / De esta forma se entra en una terminal con lo mínimo montado, editar el archivo /etc/shadow, ubicarse en la linea que comienza con root y eliminar los caracteres entre los primeros y los segundos “:”. 7. Reiniciar el equipo no pedirá password para root y cambiar la contraseña con el comando passwd. Puede ser necesario en este caso montar la partición del disco donde está ubicado vi o el editor de su preferencia, ya que si está en otra partición aparte de la raíz el sistema no montará las otras particiones razón por la cual no encontrará el comando. Esto me sucedió pues tengo la carpeta /usr en otra partición. En otro escenario se puede dar que se configuró una contraseña para Grub y también se haya olvidado, para este caso se puede usar un live-cd o un CD de instalación, la idea en lineas generales es la misma montar el disco donde está el archivo /etc/shadow y eliminar la contraseña o cambiarla con el comando passwd, para lograrlo se pueden seguir estos pasos, en este caso uso el CD de instalación de Ubuntu Desktop 8.10 : 1. Iniciar el equipo con el CD. 2. Habilitarse como root con el comando sudo -s 3. Montar la partición donde esta la raiz del sistema, en el caso particular que me ocupa: mount /dev/sda5 /media 4. Utilizar el comando chroot /media 5. Usar el comando passwd o editar el archivo /etc/shadow para cambiar o eliminar el password. 6. Reiniciar el equipo. Aparte de estas formas se me ocurre además sacar el disco duro e instalarlo en otro equipo. –

Ahora la situación es inversa a la anterior. Queremos proteger el sistema de las técnicas anteriores para que no se pueda entrar sin conocer la contraseña de root. (grub-password, impedir el acceso por consola, etc).

Como se pudo ver en el ítem anterior la mejor forma de asegurar un equipo para que no se pueda entrar sin conocer la contraseña de root es prácticamente impedir el acceso físico a él, porque de todas maneras el password de root se puede saltar como se vio anteriormente, el password de grub también y el password del bios se puede resetear también. Cuestión 4: –

Instalad el paquete sshd y explicad su composición y funcionamiento. El paquete sshd es el software servidor que permite conectarse de forma segura a un equipo a través de una red de datos, lo consigue utilizando encripción de datos,


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

pertenece a un grupo de programas o suite que implementa el protocolo SSH y son:

sshd

Es el servidor y permite el acceso remoto a la maquina donde está instalado.

ssh

Es el software cliente que permite abrir una sesión estilo telnet en una máquina.

scp

Sirve para copiar archivos de una máquina a otra

sftp

Es cliente similar a ftp en funcionalidad pero la transferencia de datos e hace de forma segura.

ssh-keygen

Una herramienta para inspeccionar y generar claves RSA y DSA que son usadas para la autenticación del cliente o usuario.

– –

ssh-agent ssh-add

Herramientas para autenticarse de manera mas fácil, manteniendo las claves listas para no tener que volver a introducir la frase de acceso cada ves que utilice la calve.

ssh-keyscan

Para escanear una lista de clientes y recolectar sus claves públicas.

Buscad información sobre las estrategias de encriptación basadas en clave pública y clave privada, y comentad el uso que hace ssh. Existen dos clases de estrategias criptográficas: –

Clave Privada: También conocida como clave secreta o simetrica, consiste en el uso de la misma clave tanto para cifrar como descifrar los datos, este sistema es sencillo y liviano, tanto matematíca como computacionalmente, pero tiene la desventaja que las personas que se van intercambiar la información debe de conocer de antemano la clave, en este punto es donde se presenta la vulnerabilidad del sistema ya que dependiendo como se pongan de acuerdo los extremos de la comunicación en cuanto a la clave si en este punto otra persona llega a conocerla clave pierde toda la seguridad del sistema. En lineas generales funciona como lo muestra la gráfica 1.

Gráfico Nº 1. –

Clave Pública: También conocida como asimétrica,para evitar el problema anterior, este sistema se basa en el manejo de dos claves una pública y otra privada, para enviar un mensaje cifrado el emisor consigue la clave pública del receptor y la usa para encriptar el mensaje, el recptor para descifrar el mesaje usa su clave privada.


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

Como desventaja este sistema usa claves mas grandes y una matematica compleja con mayor carga computacional.En lineas generales funciona como lo muestra la gráfica 2.

Cómo es mas seguro el uso de clave publica pero mas costoso, SSH lo usa para intercambiar la clave que se va a usar para cifrar los datos de la sesión, esto se conoce como criptografía híbrida, específicamente el uso se muestra en la gráfica 3.

Gráfica Nº 3. Cuestión 5: –

Realizad un script que cuente cuántos archivos de texto contienen un cadena de texto que se pasa al script por parámetro dentro el directorio actual (hace falta incluir el código del script en la respuesta). #!/bin/bash


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

contador=0 #Se verifica que tenga por lo menos un parametro de lo contrario sale con error if [ $# -le 0 ] then echo "Debe suminsitrar una cadena de texto como patron de busqeda" exit 1 fi #Si tiene mas de un parametro se muestra un mensaje de advertencia if [ $# -gt 1 ] then echo "Se ha suministrado mas de un parametro se usara como patron de busqueda: $1" fi for archivo in `find . -type f` #Partiendo desde el directorio actual se recorren do # los archivos que se encuentran if [ -a "$archivo" ] #en todos los subdirectorios then encontrados=`cat $archivo | grep -c "$1"` if [ $encontrados -gt 0 ] then (($contador++)) fi fi done echo "Se han encontrado $contador que contienen la cadena $1 En el desarrollo de este script he encontrado un problema que no pude solucionar, cuando un archivo dentro de su nombre tiene espacios en blanco el ciclo for trata por separado cada segmento del nombre del archivo produciendo cadenas que realmente no son archivos. –

Cread un script que sume todos los números pasados como argumento (hace falta incluir el código del script en la respuesta). #!/bin/bash resultado=0 until [ -z $1 ] do ((resultado=$resultado+$1)) shift done echo $resultado

PARTE B.–

El núcleo.


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

El núcleo o Kernel es el corazón del sistema GNU/Linux, realmente es únicamente el núcleo el que se llama Linux, desde el principio fue desarrollado bajo el estándar POSIX lo que le permitió integrarse completamente con el software del proyecto GNU que no contaba con el kernel de un sistema operativo y así nació lo que hoy conocemos como GNU/Linux pero casi mayoritariamente simplemente Linux. El núcleo fue comenzado a desarrollar por un estudiante universitario de Finlandia, Linus Torvalds, cuyo objetivo inicial era experimentar y llegar a tener un sistema operativo similar a Unix que funcionara sobre equipos 386, como dato curioso está la afirmación de Linus en el sentido que de haber sabido que ya existian los BSD no hubiera comenzado a escribir Linux, hitos históricos: – – – – – – – – – – – – – – –

Abril Agosto Septiembre Octubre Diciembre ? Enero Marzo Marzo Marzo Marzo Mayo Junio Enero Diciembre

– –

Enero Diciembre

1991 1991 1991 1991 1991 1992 1992 1992 1994 1995 1996 1996 1999 1999 2003

Linus Torvalds comieza a escribir Linux. Publica su trabajo en lista de correo e invita a unirse. Versión 0.01 Versión 0.02 Versión 0.11 primera en ser autoalbergada. Adopta la GPL. Se crea grupo de noticias alt.os.linux Se cambia el grupo a comp.os.linux. Versión 0.95 primera en ser capaz de ejecutar X. Versión 1.0.0 Versión 1.2.0 Linus Torvalds adopta al pingüino Tux como mascota. Versión 2.0.0 Versión 2.2.0 Se publicaron parches de IBM Mainframe para 2.2.13 permitiendo ser usado en ordenadores corporativos. 2001 Versión 2.4.0 Versión 2.6.0

Respecto a su parte técnica se puede afirmar que en cuanto a su arquitectura es un kernel monolítico, en contraposición a los microkernel que planteaban una filosofía de diseño innovadora y con mayores ventajas, lo que valió una famosa discusión entre el profesor Andrew Tanenbaum y Linus Torvalds; funciona en modo protegido 386 y es multitarea, multiusuario y está portado a gran cantidad de plataformas, mas de veinte: x86, AMD, ARM, PPC, SPARC, MIPS, dispositivos portátiles etc. Se mantienen dos ramas de desarrollo la estable y la de desarrollo o inestable, estas se diferencia en el número de la versión el cual está dado desde la versión 2.6 en le formato de cuatro números separados por puntos, donde el primero es la versión , el segundo la subversión e indica además si es par que es una versión estable y si es impar es una en desarrollo, el siguiente numero indica una revisión mayor y el último un cambio por la detección de un error grave que exige una arreglo inmediato. En la actualidad el kernel supera los ocho millones de lineas de código fuente en 23.810 archivos en contraste con las 8413 lineas de código en 88 archivos de la versión 0.02, desarrollado por mas de 1000 personas en todo el mundo de los cuales entre 70% y 95% trabajan para empresas que patrocinan linux, poniendo en duda el


Sistema operativo GNU/Linux básico Plan Evaluación Continuada N° 3 Jorge Alberto Arocha Muñoz

mito que los programadores lo hacen sin recibir retribución alguna. En un estudio realizado por la Linux Foundation estima un valor de U$1,4 millones el costo del desorrollo del kernel de Linux. –

Patentes y formatos privativos versus conocimiento libre y estándares abiertos. Respecto a este tema se podría confundir ambas cosas, patentes versus conocimiento libre y formatos privativos versus estándares abiertos, porque parten de unas mismas premisas filosóficas pero la realidad es que tienen significados y alcances distintos: –

Patente versus conocimiento libre: El quid del asunto radica en que siendo las patentes el reconocimiento de una autoridad hacia una inventor sobre su invento y la garantía de la explotación del mismo, hasta que punto se puede extender este concepto a la generación de conocimiento? Se puede patentar una formula matemática? , además de los problemas éticos como los que plantean las patentes genéticas, es lícito patentar el uso de plantas medicinales que las tribus indígenas llevan usando ancestralmente?

Bibliografía : http://www.diphuelva.es/contenido_basico.asp?idContenido=777 https://www.linuxfoundation.org/publications/linuxkerneldevelopment.php http://es.wikipedia.org/wiki/Linux_(núcleo) http://www.linux-foundation.org/weblogs/press/2008/10/21/linux-foundation-publishesstudy-estimating-the-value-of-linux/


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.