B2-T4 Linux PDF
Document Details
Uploaded by frsoal
Tags
Summary
This document provides an introduction to Linux architecture and various aspects of operating systems, including user and kernel spaces. It also details different Linux families and package managers. The document is about computer science and operating systems.
Full Transcript
1. Arquitectura Linux 1.1. Introducción Que es un SO: es un conjunto de programas que permite manejar la memoria, disco, medios de almacenamiento de información y los diferentes periféricos o recursos de la computadora, como son el teclado, el mouse, la /boot/grub/grub.cfgimpresora, la plac...
1. Arquitectura Linux 1.1. Introducción Que es un SO: es un conjunto de programas que permite manejar la memoria, disco, medios de almacenamiento de información y los diferentes periféricos o recursos de la computadora, como son el teclado, el mouse, la /boot/grub/grub.cfgimpresora, la placa de red, entre otros Linux es un Sistema operativo de código abierto, desarrollado por Linus Torvalds Usa Arquitectura monolítica: todo se gestiona desde el Kernel Ejemplo de NO monolítico: win NT Espacios: Espacio de usuarios: Este es el espacio de memoria reservado para las aplicaciones y los procesos en ejecución en el sistema ○ Es donde se ejecutan las aplicaciones y donde residen los datos y el código de nivel de usuario (Aplicaciones de usuario) ○ biblioteca libc: biblioteca estándar de C para sistemas operativos basados en Unix. También conocida como GNU C Library o glibc, proporciona funciones y rutinas básicas que son necesarias para el desarrollo de programas en lenguaje C ○ System Call Interface (SCI): es el mecanismo usado por una aplicación para solicitar un servicio al sistema operativo ○ Para hacer llamadas al espacio de Kernel Nota: Int = interrupción software (automáticamente la CPU para su ejecución y le da el control al kernel) A través de la interrupción int80h (código máquina) syscall: ofrece un mejor rendimiento y mayor flexibilidad Espacio de kernel: se refiere a una región de memoria reservada dentro de la memoria física del sistema, para el funcionamiento del núcleo o kernel del sistema. ○ El Kernel consta de dos partes principales: La sección de control de procesos (Gestión de procesos): asigna recursos, programas, procesos y atiende sus requerimientos de servicio. Control de dispositivos (Gestión de memoria): supervisa la transferencia de datos entre la memoria principal y los dispositivos periféricos ○ Modules LKM: Plugin para extender las capacidades del kernel en tiempo de ejecución insmod (para cargar un módulo) rmmod (para eliminar un módulo) modprobe(para administrar módulos del kernel del sistema operativo) Nota: fork, para crear un proceso 1.2. Familias Unix Familia Unix:(cada familia tiene su propio Kernel): SCO, HP-UX, IBM-AIX, BSD, Linux SCO (Santa Cruz) HP-UX IBM-AIX BSD ○ FreeBSD ○ MacOS X (.dmg) ○ Solaris SlackWare (paquetería.tgz) Gentoo (paquetería ebuilds) PuppyLinux ( paquetería Pet) Kali Arch Linux (paquetería PacMan Extensión pkg.tar.gz) Linux (nació con un Kernel abierto). Las distribuciones ○ Debian(.deb) → Ubuntu → mint paquetería: online: ○ [apt-* | apt *] (apt get, apt cache) offline (descargar paquete + instalación: dpkg -i java-1.6.o.deb aptitude/dselect/synaptic: son frontend para la instalación(no tiene por que ser gráfico) ○ RedHat (.rpm) paqueteria: online: antes se usaba yum (yum install java-1.6) y ahora dnf offline: rpm -Uvh java-1.6.0.rpm Fedora Centos → Rocky Linux Mandriva → Mageia ○ Suse Zypper: gestor de paquetes utilizado en distribuciones de Linux basadas en RPM Instalar paquete: Desinstalar paquetes ○ 1.3. Gestor de Paquetes Definición gestor de paquetes: herramienta de software que se utiliza para instalar, actualizar, configurar y desinstalar paquetes de software en un sistema operativo. Debian: aptitude: Aptitude es una interfaz para APT para distribuciones basadas en Debian. ○ Muestra una lista de paquetes de software y permite al usuario elegir de modo interactivo cuáles desea instalar o eliminar Synaptic: Synaptic es instalado por defecto en Debian en la versión de escritorio, es una herramienta gráfica para la gestión de paquetes basada en GTK+ y APT. Practicando en Debian → Ubuntu: fichero /etc/apt/sources.list: Fichero con URLs con los catálogos de todos lo paquetes/programas, con sus dependencias ○ apt-get: herramienta de línea de comandos utilizada en sistemas operativos basados en Debian, como Ubuntu y Debian mismo, para administrar paquetes ○ /apt-get (install|update|remove|clean) apt search apt install mc ○ se descarga paquetes de Debian. Fijarse en la terminación de los paquetes , que son.deb apt-cache sobre todo se utiliza para buscar programas pero también para obtener información de programas o paquetes que haya en los repositorios o que tengamos instalado en el ordenador. ○ dpkg: el administrador de paquetes base para distribuciones basadas en Debian. ○ Practicando en RedHat rpm: Administrador de paquetes base que se encuentra en las distribuciones basadas en Red Hat, como Red Hat Enterprise Linux, CentOS y Fedora. ○ Instalación offline: Descargar paquete “rpm” rpm - Uvh java-1.6.0.rpmn /etc/yum.repos.d: similar a sources.list de debian ( catálogo de paquetes con sus dependencias) Yum: un front-end para el sistema RPM, que se encuentra en las distribuciones basadas en Red Hat. ○ Está siendo substituido por “dnf” (Fedora y redHat Enterprise) 1.4. Shell Definición de Shell: Interfaz de usuario de línea de comandos que permite a los usuarios interactuar con el sistema operativo Unix o Unix-like mediante la introducción de comandos de texto. Tipos de shell: SH: Bourne Shell. Muy antigua con pocas capacidades BASH: Bourne Again SHell BSH TCSH KSH: Korn shell ZSH CSH: C shell TCSH: TC shell Ficheros de configuración Global al sistema: ○ /etc/profile: controla las variables predeterminadas de todo el sistema ○ ~/.bashrc y /etc/bashrc o /etc/bash.bashrc: son archivos shell script que nos permiten configurar Bash cuando se inicia una Shell bash (Bourne-again shell). Ejemplo: Permite crear alias de órdenes, definición de funciones, opciones de la Shell como la configuración del prompt, etc. ~ es HOME_DIR Ejemplo de.profile ○ Comando env: variables de entorno específicas para esa ejecución sin modificar el entorno global del sistema Nota: Otros campos de env: pwd: directorio en el que estamos En la variable OLDPWD, se almacena el directorio anterior donde se estaba → se llega a esta con el comando “cd -” PATH: define los directorios en los que el sistema busca los ejecutables de los comandos ingresados en la línea de comandos PATH=$PATH:/Directorio 1.5. Permisos Nota: Si en un directorio no tienes activo el x, no puedes hacer cd (change directory) Set UID, Set GID, StickyBit Set UID cae en el permiso de ejecución en la parte de usuario ○ para qué vale: Ejecuta este programa otro usuario como si fuera el owner ○ S: Si el fichero no tiene permiso de ejecución se le pone un S ○ s: Si el fichero tiene permiso de ejecución se le pone un s Set GID cae en el permiso de ejecución en la parte de grupo ○ para qué vale:Ejecuta este programa otro usuario como si fuera el grupo ○ S: Si el fichero no tiene permiso de ejecución se le pone un S ○ s: Si el fichero tiene permiso de ejecución se le pone un s Sticky Bit: aparece en la parte de otros en el permiso de ejecución ○ para que vale: Su objetivo es que solo el usuario creador pueda eliminar o renombrar un archivo en sistemas donde todos los usuarios tienen permisos de lectura y escritura ○ T: Si el fichero no tiene permiso de ejecución se le pone un T ○ t: Si el fichero tiene permiso de ejecución se le pone un t ○ A día de hoy no da error, pero linux ignora el sticky bit para los ficheros y solo aplica a los directorios ○ Nota: solo root y owner podrían borrarlo o renombrarlo ○ En el /tmp todo el mundo puede escribir. Solamente el propietario del fichero puede modificarlos umask: comando y una configuración que determina los permisos predeterminados que se asignarán a los nuevos archivos y directorios creados por un usuario. Permisos para ficheros por defecto: 666 Permisos por defecto para directorios: 777 Ejercicio cálculo de fichero dado un umask umask 0022 ¿Resultado del fichero? ACL: Permiten especificar permisos adicionales para usuarios y grupos específicos Dentro de “other” unos usuarios tengan unos permisos y otros tengan otro Cuando sobre un fichero he configurado una ACL aparece un + al hacer el ls -l Comandos sobre un fichero: ○ Nota: apt install acl ○ ○ setfacl -m u: También se puede hacer las ACLs con grupos, en vez de -u usar -g el fichero aparece con un + ○ getfacl ○ Para eliminar el acl setfacl -b ficheroacl 1.6. Enlaces: soft y hard soft - simbólico si borro ficheroacl, el enlace se ha roto, pero sigue existiendo ese enlace, aunque apunta a un fichero que no existe (Es como un acceso directo) ○ tienen un número de inodo diferente ○ los bloques de datos que tienen son diferentes aunque parezca que es el mismo hardlink: todos los enlaces son el mismo i-nodo. Comparten todo el contenido en ambos ficheros es el mismo. Tiene el mismo número de inodo ○ si borro ficheroacl, f1 sigue mostrando la información En la tabla hay un campo que se llama “número de hard links”, en el que controla cuantos hardlinks hay ○ Esta información se registra en el campo numero de hardlinks de los inodos. Mientras que tenga valor el inodo no se borra. NO se puede hacer el hard link entre sistemas de fichero directorios, particiones… diferentes. Cada uno tiene su propio sistema de inodos. ○ por ejemplo el inodo 1000 puede estar propio del disco1, y el disco 2 también puede tener su propio inodo 1000 1.7. Ficheros Definición: es una unidad básica de almacenamiento de datos que se utiliza para almacenar información en un dispositivo de almacenamiento, como un disco duro o una memoria flash. Un fichero puede contener cualquier tipo de información, como texto, imágenes, audio, video, programas ejecutables, etc. Definición i-nodo: estructura de datos utilizada por el sistema de archivos para almacenar metadatos de archivos en Unix y sistemas de archivos relacionados Existe un i-nodo por cada fichero. Información que se guarda en cada i-nodo En el i-nodo no está el nombre del fichero ○ touch: se creó para cambiar manualmente la fecha y hora de la última modificación y acceso de un archivo, pero también se utiliza muy a menudo para crear archivos nuevos ○ Si se le llama sin parámetros: Crea fichero. Sería como la opción touch -c ○ touch solo cambia la fecha de acceso ○ touch -m: cambia la fecha de modificación ○ mkdir (-p crea todos los subdirectorios necesarios) rmdir (-p entire tree) chgrp (cambiar el grupo owner. Sólo lo puede puede ejecutar root) chmod. Ejercicios prácticos ○ ○ chmod g+x fichero: da permisos de ejecución al grupo en el fichero ○ chmod g=rw fichero: fuerza a que el fichero tengo esos permisos, y quita lo que no sea necesario ○ chmod ugo+x: da permisos de ejecución a los 3 grupos ○ chmod ugo-x: quita permisos de ejecución a los 3 grupos ○ chmod +t | -t fichero: activar Sticky bit ○ chmod a+x fichero: el a(all) es una alias que representa a ugo ○ setuid: chmod u+s. Es asignable a ficheros ejecutables, y permite que cuando un usuario ejecute dicho fichero, el proceso adquiera los permisos del propietario del fichero ejecutado ○ setgid: chmod g+s f1.txt. Adquiere los privilegios del grupo asignado al fichero, también es asignable a directorios. ○ Sticky bit: chmod 1644 $fichero Nota: en /tmp tiene ese sticky bit, así solamente tu o root solamente podrá borrar los ficheros ○ Set gid: chmod 2644 $fichero ○ Set uid: chmod 4644 $fichero chown: Cambia los valores de owner y group ls ○ -a → muestra los ocultos ○ -l → listado largo ○ -F → añadir marca al final ○ -R → recursivo cp ○ -u → copia si el origen está más actualizado que el destino ○ -r → recursivo mv: mueve y renombra ( no existe el comando rename) ○ -i pregunta antes de sobreescribir rm ○ -i pregunta ○ -r recursivo touch ○ -a solo modifica la fecha de acceso ○ -m solo modifica la fecha de modificación ○ -c no crea ningún fichero tar: empaqueta /desempaqueta ( con opción z puede comprimir, pero necesita de otros paquetes) ○ tar cvfz $fichero.tgz $origen ○ tar xcfz $fichero.tgz cpio: para copiar archivos individuales, grupos de archivos o sistemas de archivos completos. Usado para hacer copias de seguridad ○ -i → extraer ○ -o → crear dd: copia de dispositivos de bajo nivel. ○ Genera un iso una unidad. ○ Copia a nivel de bytes ○ Copiar un archivo con un tamaño específico: creará un archivo llamado archivo.bin con un tamaño de 10 MB, lleno de bytes nulos. /dev/zero: no existe como unidad, sino que simplemente suelta 0s ○ Crear una imagen de un disco o partición Creará una imagen de disco del dispositivo /dev/sda y la guardará en un archivo llamado imagen_de_disco.img. Esto es útil para realizar copias de seguridad o para clonar discos tee: redirigir a fichero(s) y salida estándar a la vez ○ $prog| tee output.txt paste/join; cat concatena en vertical y paste en horizontal sort: sort -nr ○ -n por valor numérico ○ -r invierte el orden ○ -f da igual mayusculas que minúsculas find: url con ejemplos de find: https://www.ionos.es/digitalguide/servidores/configuracion/comando-linux-find/ gunzip -c $fichero.gz | cpio -i Copia remota de ficheros: rsync / rsyncd. Backup remoto tree whereis: se utiliza para localizar el archivo binario, el código fuente y la página de manual de un determinado comando type: permite saber si tenemos un comando instalado o no, localizarlo en el sistema de fichero y saber de que tipo es. split: permite dividir un archivo en varios de menor tamaño, el mismo crea una serie de archivos con la extensión y un correlativo del nombre del archivo original, pudiendo parametrizar el tamaño de los archivos resultantes. ○ x bytes ○ x lineas tr: se usa en Linux principalmente para traducir y eliminar caracteres. Puede usarse para convertir mayúsculas a minúsculas, apretar caracteres repetidos y borrar caracteres. uniq: elimina las líneas duplicadas nl: como el comando cat, pero te imprime el número de líneas ○ -b a → enumera también las vacías tail /head: ver las primeras/últimas líneas de un fichero ○ head -n fichero: contenido de las n primeras líneas de fichero more/less: muestra información paginada cut: corta en vertical ○ por bytes -b ○ por campos -f ○ por caracteres -c wc ○ -l → cuenta líneas ○ -w → cuenta palabras ○ -m → cuenta caracteres ○ -c → cuenta bytes sed: Permite realizar operaciones de búsqueda y reemplazo, inserción, eliminación y transformación de texto en archivos o en la salida estándar. No interactivo ○ ○ buscará "antiguo_texto" y lo reemplazará con "nuevo_texto" solo en las líneas 5 a 10 del archivo archivo.txt Expresiones regulares "regex" o "regexp", es una secuencia de caracteres que define un patrón de búsqueda en un texto. Revisar listado de expresiones: https://cheatography.com/davechild/cheat-sheets/regular-expressions/ + (1 ó mas) * ( 0 ó mas) ? (0 ó 1). cualquier caracter, \ escape ^ Inicio de línea pero solo 1 $fin de línea [a-z] Rango | opcional [^... ] No coinciden () agrupación {n} número de ocurrencias [:digit:] Digits [:alpha:] All letters Ejemplos en: https://regex101.com/ grep: para localizar o buscar si una cadena está dentro de otra egrep: soporta expresiones regulares fgrep: no permite expresiones regulares 1.8. Redirecciones Forma de controlar la entrada y salida de los comandos en la línea de comandos. Te permiten dirigir la entrada y salida estándar de un comando hacia o desde archivos u otros flujos de datos. Ejemplo: find. -type f -name "*.txt" -print0 | xargs -0 ls -l Un programa tiene 3 flujos entrada - stdin salida ○ std output ○ std error ○ tanto la salida estándar como la salida de error va al mismo sitio ○ lleva la salida de errores a un fichero 1.9. Gestión de usuarios Comandos para la gestión de usuarios useradd [-c comentario] [-d homedir] [-e expire] [-f inactive] [-g gid] [-G group1,...] [-m] [-p password] [-s shell] [-u uid] usuario userdel [-r] usuario usermod [-a] [-d homedir] [-e] [-f] [-g gid] [-G group1,...] [-l nuevonombreusuario] [-L] [-m] [-s shell] [-u uid] [-U] usuario passwd [-d] [-i num] [-l] [-n num] [-S] [-u] [-x num] [-w num] [usuario] chage [-d num] [-E num] [-I num] [-l] [-m num] [-M num] usuario ○ Gestión de la caducidad de las contraseñas de usuarios finger usuario ○ Información del usuario chfn [usuario] ○ Cambio de información del usuario (campo comentario o GECOS) chsh [-l] -s shell [usuario] ○ Cambio de shell pwck ○ Verificación de la integridad de la información en /etc/passwd y /etc/shadow 1.10. Gestión de grupos groupadd [-g gid] grupo groupdel grupo groupmod [-g gid] [-n nuevonombregrupo] grupo gpasswd [-a usuario] [-A usuario1,…] [-d usuario] [-r] grupo ○ Añade y elimina usuarios a un grupo groups usuario: Muestra los grupos a los que pertenece un usuario grpck: Verificación de la integridad de la información en /etc/group y /etc/gshadow 1.11. Sistemas de ficheros Es una estructura lógica utilizada por los sistemas operativos para organizar y gestionar la forma en que los datos son almacenados, nombrados, accedidos y modificados en dispositivos de almacenamiento, como discos duros, unidades flash, etc. NOTA: Journaling: es un tipo de sistema de archivos que utiliza un registro (journal) para realizar un seguimiento de los cambios que se están realizando en el sistema de archivos antes de llevarlos a cabo de manera definitiva. ○ Esto proporciona una capa adicional de protección y confiabilidad, ya que ayuda a recuperarse de posibles fallos o interrupciones de energía de manera más rápida y eficiente. Sistemas de ficheros ○ ext2 No Journaling 2TB/arch. 4TB/Part ext3 Si Journaling 2TB/arch. 4TB/Part ext4 Si Journaling 16TB/arch. 1EB/Part reiserFS Si Journaling Suse JFS Si Journaling XFS Si Journaling Red Hat 7 FAT msdos/windows vFAT (FAT 32) ISO 9660(CD) udf(DVD) nfs(red) cifs zfs Solaris brtclear ○ mkfs: para formatear una partición ○ nfs y cifs: Sistemas de ficheros de red ○ nfs: mecanismo para almacenar archivos en una red. Es un sistema de archivos distribuido que permite a los usuarios acceder a los archivos y directorios ubicados en sistemas remotos y tratar dichos archivos y directorios como si fueran locales. ○ SMB: protocolo cliente-servidor se encarga de gestionar el acceso a esos archivos o directorios CIFS: Common Internet File System. Forma parte del protocolo SMB y va a permitir conectar de forma remota múltiples plataformas, como pueden ser Windows, Linux o macOS Es una implementación particular de SMB por parte de Microsoft. ○ mount.cifs: Especifica el comando para montar recursos compartidos de red utilizando el protocolo CIFS. ○ //192.168.1.100/compartido: Especifica la ubicación del recurso compartido remoto ○ /mnt/compartido: Punto de montaje local ○ -o username=usuario,password=contraseña: SAMBA: implementa el protocolo SMB pero libre. Esto es lo que va a permitir a los clientes de Windows acceder a directorios, impresoras y archivos de Linux en un servidor Samba. mount / umount ○ ○ ○ para que el montaje sea permanente hay que modificar el fichero /etc/fstab (montajes permanentes) ○ ○ En el fichero /etc/mtab se registra cada montaje(montajes actuales). No son permanentes ○ Hay que ser root para montar los ficheros df: muestra el espacio ocupado/disponible (df -h ) du: muestra el espacio ocupado de un fichero/directorio ○ du. -sch fsck: check and repair lsof: lista los ficheros abiertos por un proceso ○ mkfs : para formatear una unidad en un cierto formato ○ lsblk en Unix y sistemas similares se utiliza para listar información sobre los dispositivos de almacenamiento y sus respectivas particiones. ○ , entre ellos no se puede hacer hard links VFS (Virtual File System): Capa de abstracción que reside entre las operaciones de sistema de archivos de nivel de usuario y el hardware o los sistemas de archivos reales en el nivel del núcleo del sistema operativo ○ 1.12. Librerías Definición librería: es un conjunto de funciones incluídas en un mismo archivo. Dichas funciones por lo general son utilizadas por una variedad de programas que, en vez de incorporarlas en su propio código (enlace estático), las llaman cuando es necesario (enlace dinámico-se cargan cuando se necesitan. Varias aplicaciones pueden usar la misma librería) si acaban en.so son shared object, que son como las dll en win Comando ldd : muestra las librerías de los shared de las que depende un determinado programa 1.13. Procesos Comandos internos del shell no generan proceso. Ejemplos history, set alias, echo, cd,pwd, exec, kill, umask ps: muestra procesos ○ top : lista interactiva. Muestra dinámicamente los procesos nice: set prioridad a un comando ○ la ejecución en linux va en función de prioridades ○ Tb existe en renice, para priorizar ya en memoria ○ solo root es capaz de dar valores negativos ○ -20 a +19, donde: ○ -20 indica la mayor prioridad posible ○ +19 indica la menor prioridad posible ○ por defecto 0 - kill: vale para enviar señales, no solamente para matar procesos ○ -9 → SIGKILL ○ ○ Ejemplo: cuando me desconecto de la terminal, unix manda mensaje SIGHUP(1) a los procesos, y todos los procesos terminan, lo van a abortar para que esto no pase, hay que usar nohup: nohup comando ○ Si lanzas el comando en segundo plano, comando &, al hacer logout se cancela el programa background: fg y bg fg significa "foreground" o "primer plano". ○ Se utiliza para llevar un trabajo que se está ejecutando en segundo plano al primer plano bg significa "background" o "segundo plano". Nota: Todo son procesos se crean con un fork() → system call A partir de la versión 2.6 del Kernel, ya es capaz de manejar threads 1.14. Logs El registro ha sido tradicionalmente manejado por 3 servicios principales dedicados: syslog syslog-ng (syslog new generation) rsyslog ("the rocket-fast system for log processing"): es el registro estándar oficial. El daemon se denomina rsyslogd Generalmente, todos los ficheros de logs del sistema se suelen almacenar en el directorio /var/log/. En Systemd, el servicio de registro se llama journal (su demonio, systemd-journald) y se ha convertido en el servicio de registro estándar. archivo de configuración es /etc/systemd/journald.conf Comandos journal journalctl → muestra todo en orden cronológico descendente journalctl -b → muestra todos los mensajes desde el arranque actual journalctl -k → muestra los logs del kernel journalctl _PID=5678 → muestra los logs del proceso con ID 5678 journalctl -p err → muestra los logs con prioridad error o superior journalctl -u nginx.service → muestra todos los logs del servicio nginx 1.15. Procesos Planificación cron:Cron es un demonio o servicio de Linux y Unix que permite ejecutar tareas, procesos, comandos y scripts en segundo plano de forma automática y periódica en la fecha y hora que nosotros queramos. ○ ○ Cada minuto Cron consulta las listas de tareas o tareas almacenadas en las siguientes ubicaciones /etc/crontab ( el comando crontab -e edita el crontab) /var/spool/cron/crontabs/*.* /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly Anacron: no es un demonio que esté corriendo constantemente en segundo plano. Anacron es un programa que complementa a Cron y se ejecuta de forma periódica a través de ○ Tareas programadas de cron ○ Scripts que se ejecutan en el momento de arrancar el equipo En el momento que es llamado, consulta en ○ /etc/anacrontab ○ /etc/cron.daily ○ /etc/cron.hourly ○ /etc/cron.monthly at: Tareas que se ejecuten una única vez 1.16. Boot Process BIOS/UEFI: tecnologías que controlan el hardware de tu ordenador cuando se inicia (Código inserto dentro de un chip de memoria no volátil en las placas base) Este firmware realiza pruebas de autodiagnóstico (POST) para verificar el hardware y luego busca el cargador de inicio (boot loader) en el dispositivo de almacenamiento primario, como el disco duro o el SSD. Arranca el MBR (Master Boot Record) / EFI (extensible Firmware interface) /UEFI, que se encargan de arrancar GRUB / LILO / Systemd-Boot Existen distintos gestores de arranque: LILO (Linux Loader) y GRUB (GRand Unified Bootloader). Fichero de configuración de GRUB: /boot/grub/grub.cfg Cargador de inicio (Boot Loader): El cargador de inicio (como GRUB, LILO o systemd-boot) se carga desde el dispositivo de almacenamiento primario en la memoria RAM. Su función principal es cargar el kernel del sistema operativo Linux en la memoria y luego transferir el control al kernel. Además crea un disco duro en la ram(initramfs) y carga las utilidades / driver mas importantes: Kernel Linux: Una vez que el kernel de Linux se carga en la memoria, se inicia el proceso de inicialización del kernel. El kernel realiza varias tareas críticas, como la detección y configuración de hardware, la inicialización de controladores de dispositivos, la gestión de memoria y la creación del primer proceso del espacio de usuario (init) Gestores de sistemas y de servicios SysVinit es el primer proceso en ejecución tras la carga del kernel y el que genera todos los demás procesos, se ejecuta como demonio de init y tiene PID 1. Systemd:(reemplazo de init) es el primer proceso del espacio de usuario que se inicia después de que el kernel ha terminado su inicialización. Es responsable de iniciar y gestionar otros procesos y servicios del sistema. ○ tiene como PID el 1 Servicios y Daemons: Una vez que init o systemd está en funcionamiento, se inician los servicios y daemons del sistema según la configuración definida en los scripts de inicio y las unidades systemd. Estos servicios pueden incluir, por ejemplo, el sistema de archivos, el gestor de red, el demonio del administrador de impresión, etc. 1.17. Arranque con SysInit Se ejecutan todos los daemons/shellscripts de /etc/rcS.d/ (configurado en /etc/inittab) necesarios para el sistema (carga del mapa de caracteres, carga de los módulos del núcleo, etc.). Ya arrancados los daemon, se entra en el nivel de ejecución configurado por defecto, parando e iniciando los daemons especificados en él. /etc/inittab indica al proceso de arranque, a qué runlevel se entrará, y definirá qué procesos se arrancarán de manera automática durante el proceso de arranque Cada nivel de ejecución tiene un directorio situado en /etc/rcX.d/ ( X es el número de nivel). Estos directorios tienen enlaces simbólicos a los shell scripts de los daemons situados en /etc/init.d/, que sirven para indicar al sistema si queremos iniciar o parar el daemon al que apuntan ○ /etc/init S → Iniciar K → parar Después de esta letra se pone un número de 2 cifras entre 00 y 99, que indica el orden de inicio o parada de estos Run Level: modo de inicio de Linux 0: cierre del sistema o apagado 1: single user. Solo permite la conexión del usuario root sin contraseña 2: modo multiusuario sin red 3: multiusuario con red. Se refiere a un inicio normal del sistema 4: En general es igual que es 3 5: Multiusuario con red y también arranca el sistema de X Windows 2-5: multiuser con X-windows 6: reiniciar el sistema Para cambiar de nivel: init Nota: comando runlevel, who -r: en que nivel estamos Nota Comandos para apagar/reiniciar halt: para el sistema. ○ -p apaga el sistema. ○ --reboot reinicia el sistema. reboot: reinicia el sistema. shutdown: apaga el sistema de forma controlada. ○ -h now apaga el sistema directamente. ○ -c cancela el apagado. ○ -r now reinicia el sistema ○ -h hours:minutes & planifica un apagado. poweroff: apaga el sistema de inmediato. service: Para poder gobernar arranca, parada y status de los servicios También se podría poner service status apache2 chkconfig: comando usado para activar y desactivar servicios con la opción -l → lista todos los servicios indicando su run level Nota: dmesg: Ofrece información sobre los mensajes del kernel que se generan durante el arranque del sistema y en tiempo de ejecución 1.18. Arranque con SystemD Utiliza un método para iniciar procesos y demonios en paralelo y así tener una gestión de inicio más rápida y limpia. Ventajas: Procesos de arranque más sencillos Reduce el tiempo de inicio del sistema.. El componente básico de systemd es la UNIT (unidad). UNIT: unidad es la estructura fundamental con la cual systemd maneja y controla los recursos y servicios del sistema operativo. Representadas por archivos de configuración y se encuentran en /usr/lib/systemd/system El concepto de runlevels ya sólo existe para la compatibilidad con System V. En systemd, los targets son el equivalente a los runlevels. Los targets/ servicios que deben ser gestionados por el sistema durante el arranque se ubican en /etc/systemd/system systemctl: es una herramienta de administración de servicios en sistemas Linux que utilizan el sistema de inicio systemd ○ systemctl [status|start|stop…] mysql Comandos relacionado con apagado, reinicio… systemctl reboot → apagado y reinicio systemctl poweroff → apagado systemctl suspend → suspensión systemctl hibernate → hibernación systemctl status → estado del sistema 1.19. Información del sistema El directorio /proc: proporciona una interfaz virtual al kernel(se carga en memoria) del sistema operativo y al estado de los procesos en ejecución. Contiene información sobre el hardware del sistema, los procesos en ejecución y otros datos relacionados con el funcionamiento del sistema. /proc/cpuinfo: información sobre la CPU del sistema, como el modelo, la velocidad y las características del procesador. /proc/meminfo: Proporciona información sobre el uso de la memoria del sistema, incluyendo la memoria total, la memoria libre y otros detalles relacionados con la memoria. /proc/loadavg: Muestra la carga promedio del sistema durante los últimos 1, 5 y 15 minutos. /proc/PID: Este subdirectorio contiene información sobre los procesos, como el estado, los recursos utilizados, los archivos abiertos y más. ○ Por ejemplo, /proc/1234 representa información sobre el proceso con PID 1234. /proc/sys: Contiene parámetros de configuración del kernel que se pueden modificar en tiempo de ejecución. Por ejemplo, /proc/sys/kernel contiene parámetros relacionados con el kernel, /proc/sys/fs contiene parámetros relacionados con el sistema de archivos, y así sucesivamente. /proc/net: Proporciona información sobre la configuración de red del sistema, como conexiones TCP y UDP, estadísticas de red y más. /proc/stat: proporciona información sobre varias estadísticas del sistema, incluidas las estadísticas del procesador, desde el último reinicio del sistema /proc/sys/kernel/osrelease y /proc/sys/kernel/ostype: similar a uname -a /proc/filesystem: información sobre los sistemas de archivos que están actualmente habilitados en el kernel /proc/ioports: proporciona información sobre los rangos de puertos de entrada/salida (I/O) que están actualmente asignados y en uso por dispositivos de hardware en el sistema. /proc/version: versión kernel /proc/uptime: tiempo en segundos que el sistema lleva encendido desde que se inició /proc/interrupts: muestra las interrupciones. /proc/swaps: mostrar ficheros swap Listado de comandos: arch: muestra la arquitectura de la máquina. uname ○ -m: muestra la arquitectura de la máquina (misma función arch). Por ejemplo, x86_64. ○ -n: muestra el nombre del host. ○ -r: muestra la versión del kernel usado. ○ -s: muestra el nombre del kernel usado. ○ -p: muestra la información del procesador. ○ -o: muestra el nombre del sistema operativo (GNU/Linux por ejemplo). ○ -a: muestra toda la información. dmidecode -q: muestra los componentes (hardware) del sistema. free: muestra información de memoria usada, libre, compartida, dedicada a buffers y dedicada a caché. ○ -h (human) Estándar lsb_release: Conjunto de estándares desarrollados para mejorar la compatibilidad entre diferentes distribuciones de Linux. ○ lsb_release -d: muestra la descripción de la distribución Linux. ○ lsb_release -r: muestra la versión de la distribución Linux. ○ lsb_release -i: muestra el nombre de la distribución Linux. ○ lsb_release -c: muestra el nombre en código de la distribución Linux. ○ lsb_release -a: muestra la descripción, versión y el nombre de la distribución Linux. uptime: muestra la hora actual y el tiempo que el sistema está en marcha sin interrupción, who -b que muestra la fecha y hora del último inicio del sistema. vmstat: estadísticas de memoria virtual, discos, procesos, CPU, E/S (paquete sysstat). 1.20. Red inetd: es un demonio en sistemas operativos Unix y Unix-like que gestiona servicios de red de bajo nivel. Su función principal es escuchar peticiones de conexión en puertos específicos de red y lanzar los servicios correspondientes para manejar esas conexiones ○ se inventó para levantar los servicios de red cuando alguien los invoque ○ /etc/inetd.conf [nombre_servicio tipo_protocolo socket_protocolo opciones_de_sistema_de_archivos programa_a_ejecutar] ○ /etc/inetd.conf: es el fichero de configuración para el demonio servidor inetd. Su función es la de almacenar la información relativa a lo que inetd debe hacer cuando recibe una petición de conexión a un servicio en particular ip - ifconfig muestra configuración de la red interna. Sirve para configurar la interfaz (ifconfig ya no se usa) ○ ○ para instalarlo apt install net-tools ping : envía paquetes ICMP ECHO-REQUEST al host ifup/ifdown:.Habilita / deshabilita una interfaz de red ○ Se basa en las definiciones de interfaz del fichero /etc/network/interfaces tcpdump: volcado de tráfico de red /etc/hosts: fichero con IP < -- >Nombre (Resolución Local). Como un DNS /etc/hostname: el nombre de la máquina, ejecutando uname -n, hostname dig: para realizar consultas avanzadas de resolución de nombres de dominio (DNS). Proporciona mas información que nslookup ○ herramienta de línea de comandos utilizada para realizar consultas DNS ○ nslookup: para realizar una petición de resolución de DNS ○ /etc/resolv.conf: funciona para la resolución de nombres dentro de una red determinada o hacia Internet. En el archivo se registran los servidores de nombres, dominios y host de búsqueda lookup. En este archivo se pueden registrar los servidores DNS de confianza ○ ○ ○ /etc/network/interfaces(Familia Debian): configuración de la tarjeta de red ○ ej: iface eth0 inet dhcp La máquina podría funcionar como router, ○ la orden route: para mostrar y manipular la tabla de enrutamiento del sistema. La tabla de enrutamiento es una lista de destinos de red y las rutas a través de las cuales los paquetes de datos deben ser enviados para llegar a esos destinos. ○ ○ route -n → es parecido a route traceroute: Camino que sigue una conexión con una IP destino ○ manda mensajes ICMP netstat → …( obsoleto, ahora ya se usa ss) ○ información sobre puertos abiertos Se ven los puertos por donde se está escuchando ○ El nuevo netstat sería ss Ficheros a tener en cuenta ○ /etc/hosts.conf: fichero de orden de como se van a hacer las resoluciones Este fichero ha sido substituido por nsswitch.conf ○ /etc/hosts:resolución de nombres locales ○ /etc/hostname ○ /etc/resolv.conf: donde está la configuración del dns. para controlar la resolución de nombres de host en direcciones IP utilizando el sistema de resolución de DNS 1.21. Scripting Comienzo típico de un script: #!/bin/sh ○ por defecta interpreta la shell que tenga definida, pero se puede forzar a que interprete cualquier otra #!/bin/sh $var: valor de var $(comando) ~`comando` → resultado de la ejecución de un comando if [-s /tmp/temp1 ] ~ if test -s /tmp/temp1 Línea de comandos ○ $@ = $* → lista completa de argumentos pasados al script. ○ $# → cuántas variables he puesto ○ $$ → Saca el pid del proceso ○ $0 → nombre del comando ○ ~ → HOME_DIR ○ cd → te lleva al HOME_DIR Nota: todos los proceso se crean con un fork 1.22. XWindows Comúnmente conocido como "X", es un sistema de ventanas que proporciona una infraestructura estándar y protocolos para la creación y gestión de interfaces gráficas de usuario (GUI) en sistemas Unix y Unix-like Servidor X (X Server):Responsable de manejar la pantalla, el teclado, el ratón y otros dispositivos de entrada y salida. Dibuja ventanas, iconos, menús y otros elementos gráficos en la pantalla, así como de recibir eventos de entrada del teclado y del ratón Clientes X (X Client): Son las aplicaciones que se ejecutan en el sistema y que interactúan con el servidor X. ○ Envían solicitudes al servidor X para dibujar y manipular objetos gráficos en la pantalla. Estas solicitudes pueden incluir crear ventanas, dibujar formas geométricas, mostrar texto, etc. La parte gráfica de linux necesita ○ gestores de escritorio : software que proporciona una interfaz gráfica de usuario (GUI) para interactuar con el sistema operativo y sus aplicaciones. KDE GNOME Mate Cinnamon Xfce Budgie Unity ○ Gestores de ventanas - es un componente del entorno de escritorio que controla la apariencia y el comportamiento de las ventanas de las aplicaciones que se ejecutan en el sistema FVWM Metacity Mutter KWin XFWM IceWM JWM Windows Maker Parte práctica: Comando para exportar un display: export DISPLAY=hostname:0.0 gedit 1.23. Printing System Protocolos utilizados para la impresión en redes de computadoras ○ IPP( puerto 631): protocolo de red estándar que permite a los usuarios enviar trabajos de impresión a impresoras en una red IP ○ LPD( puerto 515): protocolo de red utilizado para la impresión en redes Unix smb://user pass@SERVER/SHARE → Windows Comandos: ○ lpr: envía trabajos a imprimir ○ lpq: ver queue de impresión CUPS, acrónimo de "Common UNIX Printing System" (Sistema Común de Impresión UNIX), es un sistema de impresión modular y de código abierto diseñado para sistemas Unix 1.24. ** Seguridad - Gestiónde usuarios /etc/passwd: almacenar información sobre los usuarios del sistema /etc/shadow: almacena las contraseñas de las cuentas de usuario Nota: En la segunda vuelta veremos los campos de este fichero Práctica de cómo crear usuarios: useradd, groupadd: tiene que ser lanzado como root sudo useradd -c "Juan Gomez" -g users -G games -u 9002 -m -d /home/Juan -s /bin/bash juan ○ -m: crea el directorio $HOME ○ -g: grupo principal. -G: grupo secundario sudo usermod -aG sgx juan sudo userdel juan /etc/group: archivo de texto plano utilizado en sistemas Unix y Unix-like para almacenar información sobre los grupos del sistema sudo groupadd nuevogrupo sudo groupdel nuevogrupo Atención adduser: es un script que te pide parámetros 1.25. ** Seguridad - En Red IPtables: es una utilidad de línea de comandos en sistemas Linux que permite configurar las reglas del firewall en el kernel del sistema operativo ○ cortafuegos basado en reglas ○ Nota: Hay otra sección en la que se verá con mas detalle Fail2Ban: es una aplicación de software de código abierto diseñada para proteger servidores Linux de ataques de fuerza bruta y otros ataques de seguridad (DoS). ○ Funciona monitoreando los logs del sistema en busca de patrones específicos que indiquen intentos de acceso no autorizado y toma medidas para bloquear a los atacantes ○ Actúa cuando hay un comportamiento anómalo. Ejemplo: en un segundo 20 ataques de una IP. ○ Además funciona como IPS: sistema de detección ante intrusos SSH : un protocolo de red seguro que se utiliza para acceder de forma remota a sistemas Unix y Linux, así como a otros dispositivos de red (puerto 22) SFTP : ftp sobre ssh SCP: copia de ficheros remotos usando ssh 1.26. ** Seguridad - Gestión de recursos Cpu, memoria,i-nodos…. son un conjunto finito de recursos ulimit. El sistema operativo proporciona maneras de limitar la cantidad de recursos que se pueden utilizar. ○ Los límites se establecen para cada usuario, pero se aplican por separado a cada proceso que ejecute el usuario. cgroups:característica del kernel de Linux que permite limitar, priorizar y controlar los recursos de hardware, como CPU, memoria, E/S de disco y red, entre diferentes grupos de procesos. 1.27. Seguridad - Kernel Definición: es la parte central del sistema operativo que actúa como una capa de abstracción entre el hardware de la computadora y los programas que se ejecutan en ella. ○ Es responsable de gestionar los recursos del hardware, como la memoria, el procesador, los dispositivos de entrada/salida y el sistema de archivos. Módulo SELinux. Es cargable. Es un módulo de seguridad para el kernel Linux, implementado utilizando el framework del núcleo Linux Security Modules, que proporciona el mecanismo para implementar una políticas de control de acceso de tipo Control de acceso obligatorio (MAC) y control de acceso basado en roles(RBAC). 1.28. Seguridad sudo (abreviatura de "superuser do") es una utilidad en sistemas operativos basados en Unix (como Linux y macOS) que permite a los usuarios ejecutar comandos con los privilegios de otro usuario, generalmente el usuario "root" o superusuario. Fichero de configuración: /etc/sudoers Como editar el fichero /etc/sudores : sudo visudo Ejemplo: juan: El usuario al que se le da acceso. ALL: Se refiere a que puede ejecutar comandos en cualquier host. (ALL:ALL): Puede ejecutar comandos como cualquier usuario o grupo. ALL: Puede ejecutar cualquier comando 1.29. Hardware udev : administrador de dispositivos dinámico utilizado en sistemas operativos basados en Linux para administrar los dispositivos de hardware conectados al sistema Permite que el kernel y los programas del usuario interactúen de manera efectiva con el hardware del sistema Discos Duros fdisk : formatear partición ○ gparted: editor de particiones para el entorno de escritorio GNOME mkfs : crear partición mdadm: para crear un raid lsusb: para listar los dispositivos USB conectados a tu sistema. lspci: es un comando en sistemas Unix y Linux que se utiliza para listar todos los dispositivos PCI (Peripheral Component Interconnect) conectados a tu sistema. Proporciona información detallada sobre los componentes de hardware que están conectados a la placa madre del sistema a través del bus PCI. ○ imprime listas con información detallada sobre todos los Buses y dispositivos del sistema LVM: mecanismo para hacer más flexible el almacenamiento. 1.30. Directorios importantes a conocer en unix Listado de directorios