Introducción 1 SISTEMA OPERATIVO Y ENTORNO DE DESARROLLO Conceptos previos Definición y funciones de los sistemas operativos. Tipos de SO Multiproceso, Multitarea, Multiusuario Funciones - Simplificar el desarrollo de programas y el acceso a hardware - Administrar eficientemente los recursos (Memoria 1º y 2º, procesador, impresora) Sistema GNU/Linux Unix es un sistema operativo desarrollado entorno 1970 por los laboratorios Bell de AT&T. Para su construcción se definió el lenguaje C. Al usar lenguaje de alto nivel en vez de ensamblador, se convirtió en us S.O. fácilmente portable a diferentes tipos arquitecturas de hardware, por lo que existen versiones de Unix para casi todos los tipos de ordenadores, desde PC hasta estaciones de trabajo y superordenadores. Pronto fue ofrecido a universidades y centro de investigación como un sistema abierto. Esto permitía acceder al código fuente, mejorar y crear nuevas versiones. Se desarrollaron distintas versiones: UNIX System V, UNIX BSD, SunOS, HP-UX, AIX, Xenix, SCO UNIX, por distintos fabricantes sobre distintas arquitecturas. Para evitar la incompatibilidad entre ellas se definieron distintos estándar siendo el más conocido el X/OPEN. A principios de los 90 un estudiante de Finlandia: Linus Touvars empezó a construir una versión totalmente libre del sistema operativo UNIX, a él se unieron en pocos años cientos de programadores que trabajando a través de Internet, junto al la fundación FSF ( Fundación por el software Libre ) crearon el sistema GNU/Linux. Linux está produciendo según algunos una autentica revolución informática al ser el primer sistema operativo totalmente abierto, completo, seguro y eficiente, que soporta la mayor parte de servicios de red y encima gratuito. Hoy constituye una seria amenaza al monopolio que representa Microsoft sobre todo en entornos de servidores de red. Problemas: Faltan aplicaciones de gestión y paquetes ofimáticos conocidos ( Ya existen OpenOffice y Staroffice) Puede resultar difícil para usuarios noveles. Resistencia al cambio de los usuarios Competencia de un producto libre frente al gigante Microsoft Distribuciones Las distribuciones son una agrupación de software donde se reúne: un kernel, un conjunto de aplicaciones compiladas y listas para instalar, agrupadas en paquetes y un conjunto de herramientas de instalación y administración que son lo más característico de cada distribución. La selección de estos paquetes, en el número de programas incluidos y el proceso de instalación marcan la diferencia entre cada distribuciones. Las distribuciones más extendidas son las siguientes: 1. Debian: la más estable con diferencia. Un poco más difícil de configurar por la estructura de paquetes .deb. Sin embargo es la que mejor tiene resueltas las dependencias y la relación entre paquetes. Introducción 2 2. RedHat: con herramientas gráficas de configuración y sencilla de configurar. Formato de paquetes .rpm. Uno de los distribuciones más difundidas en EEUU. 3. SuSe: distribución alemana de buen prestigio. Muy gráfica. Herramienta Yast para configuración del sistema muy buena e intuitiva. 4. Mandrake: Distribución francesa basada en Redhat, con numerosas herramientas y asistentes que facilitan su instalación, configuración y manejo. Existen otras muchas distribuciones ( +150), ya que es relativamente fácil diseñar un distribución propia a base de descargar distintas herramientas, paquetes y utilidades disponibles libremente en Internet. En España se han desarrollado varias las distribuciones comerciales como ESware o Hispafuentes. Por otra parte diversas administraciones autonómicas han desarrollado su propia distribución como es el caso de la pionera GNU/LinEX, realizada por la Junta de Extremadura o la más reciente distribución MAX de la Comunidad de Madrid. Otra versión de Unix totalmente libre pero que no usa el núcleo de Linux es el sistema FreeBSD desarrollada por la Universidad de Berckeley. Introducción 3 GESTIÓN DE USUARIOS GNU/Linux es multiusuario: permite la existencia simultánea de distintos usuarios en el mismo sistema, los cuales tienen identidad, privilegios, y configuraciones independientes. Cada proceso que corre posee los derechos y permisos del usuario que lo mandó ejecutar. El control de usuarios y los permisos definidos en todos los archivos del sistema son el pilar de la seguridad de cualquier sistema Unix. Linux es multiusuario a nivel de kernel. Todo usuario ha de pertenecer a uno o varios grupos, lo que le atribuye ciertos privilegios generales dentro del sistema. Se define un usuario que tiene privilegios para hacer todo: root, (el superusuario) cuya finalidad es la administración. Todos recursos del sistema: ficheros, directorios, procesos, dispositivos, etc. van a pertenecer a un usuario y un grupo. Tipos de usuarios: - El superusuario: root Usuario especiales: proceso de administración, demonios, servicios especiales lp, sync, sutdown, nobody, wwwrun, no asociados a terminales, sin shell ni directorio de trabajo. Usuarios normales Ficheros de configuración: - Todos los usuarios están definidos en el fichero de texto: /etc/passwd Cuenta: El nombre del usuario en el sistema. No debe contener letras mayúsculas. contraseña: La contraseña cifrada del usuario o un asterisco(inhabilitada). UID El número del ID de usuario. GID El número del ID de grupo primario para este usuario. GECOS Este campo es opcional y sólo se usa para propósitos de información. Directorio El directorio base del usuario ($HOME). intérprete El programa que se debe ejecutar cuando el usuario se conecta ( shell) Ej.- usuario:x:501:100:USUARIO DE PRUEBA:/home/usuario:/bin/bash Nota: Si borramos la x, el usuario deja de tener contraseña, si ponemos un asterisco, impedimos a ese usuario entrar. No se suele utilizar /etc/passwd para almacenar las contraseñas reales sino el archivo /etc/shadow que sólo lo puede leer root (Permite fijar la duración de la claves y las cuentas). Contenidos del fichero /etc/shadow - Login, - la clave encriptada, (Distintos algoritmos según el nivel de seguridad requerido DES, MD5) Introducción - Fechas en formato de días desde 1970 - Fecha de último cambio de la clave - Fecha cuando la cuenta se deshabilita - Días antes de la clave deba ser cambiada - Días después que la clave tiene que ser cambiada - Días después que la clave termina se deshabilita la cuenta 4 Cuando tenemos varios equipos y servidores, y queremos que exista una gestión centralizada, de tal forma que los usuarios y contraseñas se controlen desde un único servidor debemos configurar los servicios: NIS o LDAP (Protocolo de Directorio activo) Los grupos de usuarios se definen en el fichero /etc/group Suelen estar definidos distintos grupos de usuarios que comparten información. Un usuario puede tener su su propio grupo, es la opción por omisión en muchas distribuciones. Un usuario puede pertenecer a varios grupos, aunque no simultáneamente. Debe cambiar de un grupo a otro para actuar según los permisos de cada grupo. (Comando: newgrp) Formato de archivo /etc/group nombre_grupo:contraseña:GID:lista_usuarios Estos ficheros se pueden modificar directamente por root, pero es mejor utilizar los comandos del sistema (useradd, userdel, usermod, groupadd, groupdel) o incluso programas específicos de administración: linuxConf, Yast, webmin, sysadm, etc. Proceso de crear un usuario manualmente: a) Editar /etc/passwd, asignar una contraseña b) Crear directorio /home/nuevoUsu, c) Copiar ficheros de inicio de cada usuario .profile, .bashrc, etc d) Cambiar el propietario del fichero /home/nuevoUsu y los ficheros para que pertenezcan al nuevo usuario. Delegación de tareas Es habitual que en un sistema informático existan varios usuarios que realizan tareas de administración, por ejemplo copias de seguridad, alta de usuarios, parada y arranque de un determinado servicios, etc. Para evitar que estos usuarios tengan que entrar en el sistema como superusuario (root) existen varios métodos que permiten delegar trabajos con mayor seguridad, sin necesidad de conocer la clave de root. Sólo debemos conectarnos como superusuario cuando sea estrictamente necesario. A) Conectarse como usuario normal y con el comando su, obtener los privilegios de root temporalmente. Problema. Se debe conocer la contraseña de root: $su password:****** # B) Fijar los permisos de ejecución setuid y setgid. Problema: No se limita la ejecución a ningún usuario o grupo Introducción $chmod +s fichero 5 C) Crear un grupo especial de administradores al los que se les da permiso sobre determinados recursos del sistema. Problema: Laborioso y difícil de centralizar Comandos: - chgrp: Cambia el grupo de un fichero - groupadd: Crea un grupo de usuarios - newgrp: Cambia el grupo actual del usuario, si pertenece a dicho grupo D) Mediante la utilidad sudo. Es el método más completo, permitiendo el registro de todas las operaciones que se realizan con esta utilidad. $sudo <comando> Utiliza el fichero de configuración /etc/sudores con el siguiente formato: #Username root pepe luis maria hostname=command ALL=ALL Atenea=ALL ALL=/usr/bin/useradd venus=/usr/local/bin/mibackup Sistema de permisos En Unix todos los archivos pertenecen a un usuario (propietario) y a un grupo, que puede suele ser el del propietario. A su vez se definen permisos de lectura, escritura y ejecución por separado para el propietario, el grupo y el resto de usuarios, que tendrán significados distintos según el tipo de archivo considerado. Los p Para un archivo normal: r: lectura. w: se puede modificar, escribir en el. x: se puede ejecutar. Es necesario para binarios y scripts Para un directorio: r: se puede ver (listar) su contenido. w: se puede escribir (crear o borrar archivos) en el directorio. x: permite explorar en el directorio y acceder a otros subdirectorios Introducción 6 Cuando en la parte del propietario en vez de haber una x hay una s (setuid) significa que los usuarios (que no sean el propietario) que puedan ejecutar el fichero lo harán como si fuesen el propietario, con los mismos permisos. Esto modifica solo el identificador de usuario efectivo del proceso lanzado, con lo que el kernel sigue conociendo quien a ejecutado el programa. Con el grupo sucede una situación análoga (setgid). Existe otro permiso especial identificado con una t ( strick bit / bit pegajoso) que se utiliza para que un programa se quede residente en memoria para que no se cargue y descargue a disco al utilizarse muy frecuentemente. Este permiso está en desuso ya que la utilización de librerías compartidas y el aumento de la memoria RAM lo hacen innecesario. Estructura de archivos de GNU/Linux GNU/Linux como cualquier sistema Unix tiene un sistema de archivos organizado jerárquicamente. Todos los directorios cuelgan del directorio raíz “/” formando un árbol. Es importante resaltar que no existen unidades de disco (a: c: d:) como en Windows; el resto de particiones de disco, disquetes, cdrom, cintas, sistemas de archivos en red son montadas (incluidas) en directorios del árbol de forma transparente al usuario Aunque hay varios estándares podemos encontrar distintas organizaciones según la versión de UNIX/ Linux con la que trabajemos. . El raiz “/” es donde se monta la partición principal del sistema que contiene el sistema operativo. (Comandos mount y umount ) La estructura está muy definida, de tal forma que los directorios están distribuidos según funcionalidades y contenido: bin: archivos binarios de administración y tareas básicas necesarios durante el arranque. boot: imágenes del kernel, sector de arranque, mapa de sistema del kernel, etc dev: directorio de dispositivos lógicos. Son archivos que representan a los distintos dispositivos, tanto del hardware como virtuales. Representan una interfaz entre el hardware y las aplicaciones ofrecido por el kernel. No ocupan espacio en disco. Nombre /dev/hda /dev/hdb2 /dev/fd0 /dev/cdrom /dev/rmt /dev/tty /dev/ttyS0 /dev/lp /dev/sd1 Dispositivo asociado Primer disco duro EIDE 2º Partición del segundo disco duro Primera disketera CR-ROM Unidad de cinta (remove tape) Terminal ( Pantalla del usuario) Puerto serie (COM1) Puerto paralelo (LPT1) Disco duro SCSI Introducción 7 etc: guarda la mayor parte de los archivos de configuración del sistema y de numerosas las aplicaciones. Estos archivos de configuración suelen ser simples archivos de texto ( ascii o ficheros plano) que podemos modificar con cualquier editor de texto ( Ej.- vi ) home: se encuentran los directorios propios de cada usuario. ( Ej.- /home/alberto lib: directorio de librerías básicas (de C) del sistema, requeridas por casi la totalidad de las aplicaciones. lost+found: directorio empleado por el sistema de archivos ext2 para guardar los inodos que resultan defectuosos tras un chequeo. proc: este directorio contiene diversos pseudo-archivos que guardan una imagen de la información del control que tiene del núcleo como: procesos, ficheros abiertos, uso de memoria, etc. sbin: binarios del sistema, programas sólo accesibles por el superusuario tmp: archivos temporales generados por aplicaciones corriendo y que son eliminados al terminar éstas, o por tareas programadas con éste fin. usr: incluye los binarios de aplicaciones, librerías para desarrollo, todas las herramientas gráficas, etc. Es el más amplio. /usr/X11R6 Contiene los programas para ejecutar X Window. /usr/bin Programas de uso general /usr/doc Documentación general del sistema. /usr/etc Ficheros de configuración generales. /usr/include Ficheros de cabecera de C/C++ (.h). /usr/info Ficheros de información de GNU. /usr/lib Librerías generales de los programas. /usr/man Manuales accesibles con el comando man /usr/share Documentación y tutoriales sobre apliaciones /usr/sbin Programas de administración del sistema. /usr/src Código fuente de programas. var: archivos que varían de forma con el tiempo: colas de corre e impresión, logs del sistema, archivos de bloqueo (locks), etc. /var/log - Registro de operaciones del sistema /var/spool – Lista de trabajos a imprimir mmt: Directorio de montaje estándar de dispositivos de almacenamiento extraíbles como CD-ROM, disquetes, DVD o particiones de windows ( FAT, NTFS) Otros directorios: /media : Directorios de montaje de Suse donde accede dispositivos de almacenamiento como CDROM, diskete, disco-USB /srv : Directorios de datos de servicios del sistema como www, correo o ftp /opt : Directorio utilizado en la instalación de algunas grandes aplicaciones: OpenOffice / StarOffice, netscape, etc Introducción REPASO DE COMANDOS UNIX 8 Para muchos usuarios acostumbrados a los entornos gráficos de ventanas, la introducción de comandos le resulta dificultosa y poco atractiva. Aunque los entornos gráficos para UNIX y GNU/Linux como KDE y GNOME montados sobre X-Windows permiten realizar gran parte de las operaciones visualmente, un administrador de sistemas debe conocer los comandos poder realizar una gestión completa y eficaz. Repaso de Comandos básicos Control de usuarios: who, w, su, script ,useradd , passwd, usermod, userdel, groupadd, groupmod, groupdel. Comunicación entre usuarios: write, wall, talk, mesg, mail, new Manejo de ficheros: chmod, umask, cd, pwd, ls, cp,pr, mv, rm, mkdir, cat, tail, less, more, ln, chown, touch, file,wc,stat Edición, Búsqueda y modificación de ficheros: find, grep,pr, fgrep,cut,sort,paste,uniq,join,comm,diff,tr,tee,vi,ed, Control de procesos: at, ps, kill, nohup, nice, top,fg Gestión de la red: telnet, ssh, scp, ftp, netstat, ping, ifconfig, traceroute, route, scp Otros date, cal, bc, lp, awk, man, help, apropos , gcc, whereis, perl Sistema de ayuda en GNU/Linux. La mayor parte de la ayuda sobre comandos y aplicaciones se accede mediante la orden man, otros comandos útiles son: info, help, whereis, apropos y which, whatis. Las aplicaciones y servicios suelen ofrecen información adicional en el directorios /usr/share, siendo Internet un lugar donde encontrar la más completa y detallada información. Principales capítulos de man: (1) Comando de usuario (2) Llamadas al sistema (3) Funciones de librería (4) Ficheros especiales y dispositivos (5) Formatos de ficheros (6) Juegos (7) Misceláneos (8) Administración Introducción 9 ARRANQUE Y PARADA DE S.O. LINUX Secuencia de arranque: • • • • • • • • Arranque hardware de la BIOS Se carga el primer sector del Disco Duro, Floppy o CDROM (Master Boot Record MBR) Se carga el programa gestor de arranque Linux (LILO) Linux Loader o Grup, BootMagic, etc Comprueba en que partición del sistema está instalado el Linux y arranca por defecto el S.O. Linux Se monta la partición raíz del sistema de ficheros (/) Se carga y se inicializa el kernel almacenado en el directorio /boot Se muestra los distintos dispositivos que reconoce el núcleo Se ejecuta el programa init según se indique en el fichero de configuración /etc/inittab Todos los mensajes que genera el kernel al arrancar se guardan en un archivo dentro del directorio /var/log/mesg , se pueden ver con dmesg | more – Arranque del Init El proceso Init, es el padre de todos los procesos del sistema, se encarga de arrancar todas las tareas de mantenimiento, control de la red, impresión, chequear el sistemas de ficheros, planificación de tarea, servidor de X-Windows, etc, así como los procesos getty en cada una de las terminas que esperan que se conecten los usuarios Init permite distintos niveles (run-level) de ejecución 0º 1º 2º 3º 4º 5º 6º Parada del sistema (halt) Monousuario (labores de administración) Multiusuario sin acceso a la red Multiusuario con acceso a la red sin X-windows No suele estar configurado Multiusuario con acceso a la red con X-windows Reinicio (reboot) Podemos cambiar sobre la marcha el estado del sistema invocando init <nivel>, con lo que terminarían o arrancarían los procesos necesarios definidos en cada nivel. Introducción 10 Toda la información sobre el modo de arranque y las tareas asociadas a él se encuentran definidas en el archivo /etc/inittab # # /etc/inittab # # The default runlevel is defined here id:5:initdefault: # First script to be executed, if not booting in emergency (-b) mode si::bootwait:/etc/init.d/boot # /etc/init.d/rc takes care of runlevel handling # # runlevel 0 is System halt (Do not use this for initdefault!) # runlevel 1 is Single user mode # runlevel 2 is Local multiuser without remote network (e.g. NFS) # runlevel 3 is Full multiuser with network # runlevel 4 is Not used # runlevel 5 is Full multiuser with network and xdm # runlevel 6 is System reboot (Do not use this for initdefault!) # l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 #l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # what to do when CTRL-ALT-DEL is pressed ca::ctrlaltdel: /sbin/shutdown -r now # what to do when power fails/returns pf::powerwait:/etc/init.d/powerfail start pn::powerfailnow:/etc/init.d/powerfail now #pn::powerfail:/etc/init.d/powerfail now po::powerokwait:/etc/init.d/powerfail stop # for ARGO UPS sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING # getty-programs for the normal runlevels # <id>:<runlevels>:<action>:<process> # The "id" field MUST be the same as the last # characters of the device (after "tty"). 1:2345:respawn:/sbin/mingetty --noclear tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # #S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102 # end of /etc/inittab Introducción 11 La sintaxis de cada línea es la siguiente Identificador: nivel: modo de arranque: comando a arrancar Ej.13:3:wait:/etc/rc.d/rc 3 Posibles modo : respawn once wait boot bootwait sysinit powerfail initdefault ctrlaltdel Rearranca el proceso si termina Se arranca una sola vez Espera que termine antes de arrancar otro proceso Se arranca durante el inicio del sistema, se ignora el nivel Combinación de los dos anteriores modo Se arranca en el inicio antes que cualquier modo boot Se arranca si se detecta una caída de potencia eléctrica (Conexión con SAI) Nivel de arranque predefinido Orden a ejecutar el producirse la interrupción de teclado al pulsar simultáneamente <ctrl.><alt><Supr> Una información muy importante es la línea que contiene initdefault, pues indica el modo de ejecución por omisión id:3:initdefault: Los directorios rc Son ficheros con las ordenes que se ejecutan en cada nivel de arranque se almancena en los directorios/etc/rc.d/rc0.d, /etc/rc.d/rc1.d, rc2.d, rc3.d,rc5.d, rc6.d … En cada nivel se realiza el arranque y parada de determinados servicios, demonios y procesos básicos definido en dicho nivel Todos los posibles servicios a arrancar o parar se encuentran en el directorio de servicios /etc/init.d Contenido del directorio: /etc/init.d alsasound apache atalk atd autofs bgpd cron cups dhcpd fam fbset gpm hotplug hwscan inetd inn ipxmount ipxrip ircd isdn kbd kdc ksysguar dd ldap mailman mrtd mysql named network nfs nfslock nfsserver nmb nscd ntop nwe portmap postfix quota quotad random raw rsyncd sane setserial single skeleton slurpd smb smbfs smpppd snmpd squid sshd syslog winbind wwwoffle xdm xfs xntpd yiff ypbind yppassw dd ypserv ypxfrd zebra Introducción 12 En cada directorio rcX.d se indica si un servicio debe ser arrancado o parada según la siguiente codificación: K o S (Kill o start) + Número de orden de la parada o el arranque + servicio Contenido del directorio: /etc/rc2.d K06atd K06cron K07smpppd K08hwscan K09splash K10alsasound K10fbset K14smbfs K16hotplug K17syslog K18network K22isdn K22random S01isdn S01random S05network S06syslog S07hotplug S09smbfs S13alsasound S13fbset S14kbd S14splash S15hwscan S16smpppd S17atd S17cron Ej.- K18network - Se termina le servicio network en el orden 18. Para mantener este sistema de archivos y niveles, casi todas las distribuciones incluyen varias herramientas visuales que facilitan el trabajo al administrador Cada servicio se encuentra definido en /etc/init.d y se puede arrancar y detener individualmente. Ej.- apache se puede arrancar individualmente mediante su propio comando: /etc/init.d/apache start Otras opciones comunes son: stop, restart, status Un archivo importante es el rc.local, es el último comando a ejecutar una vez inicializado todos los servicios. Sirve para que el administrador incluya tareas especificas. Entrada de un usuario al sistema. El proceso init arranca el proceso getty que los terminales configurados (local, red, mediante módem) Muestra un mensaje de invitación a entrar al sistema almacenado en los ficheros: /etc/logmessage o /etc/ident /etc/sigue, según la versión. Cuando el usuario ha pulsado una tecla llama a proceso login que controla la entrada al sistema solicitando nombre y contraseña, se comprueba que coincide con la almacenada consultado /etc/passwd y /etc/shadow Pantalla de login Se muestra el mensaje del día fichero de texto /etc/motd (message of the day) Se comprueba si tiene correo consultado /usr/spool/mail/$USER, se arranca la shell indicada en /etc/passwd con los archivos de configuración generales y propios de usuario .bash_profile .bashrc Detener el sistema Introducción 13 Mediante el comando init 0 o 6, o bien utilizando comandos específicos de superusuario como: halt, reboot o shutdown. La orden shutdown, es la más flexible pues permite planificar el momento de parada del sistema, avisando a los usuarios previamente Ej.- shutdown now Un comando importante antes de detener urgentemente el sistema es el programa sync que vuelca toda la información de los buffer del sistema de ficheros a disco. ACCESO AL SISTEMA Modos de conexión: Local : terminal texto (getty – login) terminal gráfica (X- Windows - xdm ) Remoto: red local red extensa (Internet) --- Protocolos de conexión remota: telnet, rlogin, ssh Proceso de acceso: Login: cuenta del usuario password: contraseña $ <- Prompt Indicador del interprete de comandos (Configurable) Ordenador usuario directorio actual [servidor @a01 ejemplos ]$ Ordenes Internas – Comandos del propia shell Ej.- cd, pwd Externas – comandos almacenados (PATH) Ej.- find Sintaxis básica: $ orden <paramétros/argumentos> <ficheros/directorios> - modo de trabajo/ opción fichero a trabajar Ej $ls $ls –l $ls -l /home Salir del sistemas exit o <Ctrl> D