0% encontró este documento útil (0 votos)
40 vistas103 páginas

Curso Linux

El documento es un curso completo sobre SuseLinux que abarca desde la arquitectura del sistema operativo hasta la gestión de usuarios y redes. Incluye temas como llamadas al sistema, gestión de procesos, configuración de red, y herramientas de monitorización, así como la comparación de distribuciones de Linux. Además, se detallan aspectos técnicos como el modo kernel/usuario y la compilación de software.

Cargado por

SrHikari
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas103 páginas

Curso Linux

El documento es un curso completo sobre SuseLinux que abarca desde la arquitectura del sistema operativo hasta la gestión de usuarios y redes. Incluye temas como llamadas al sistema, gestión de procesos, configuración de red, y herramientas de monitorización, así como la comparación de distribuciones de Linux. Además, se detallan aspectos técnicos como el modo kernel/usuario y la compilación de software.

Cargado por

SrHikari
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Curso de SuseLinux

César Moreno Iglesias [email protected]

S.O. Linux , Partes, arquitectura.....................................................................................................4


Hal.......................................................................................................................................................... 4
Llamadas al sistema....................................................................................................................... 4
Modo Kernel/modo usuario.......................................................................................................6
Kernel................................................................................................................................................... 9
Modulos del kernel...................................................................................................................... 10
Comandos para módulos del kernel................................................................................10
Manejar módulos manualmente.......................................................................................11
Configuración............................................................................................................................ 11
Cargar módulos........................................................................................................................ 11
Drivers............................................................................................................................................... 12
Librerias........................................................................................................................................... 12
Las librerías compartidas en Linux, que son y como gestionarlas....................12
Tipos de librerías.....................................................................................................................13
Las librerías compartidas....................................................................................................13
Los nombres de las librerías compartidas...................................................................13
¿Dónde se encuentran dentro de la jerarquía de ficheros?..................................14
¿Que librerías tiene vinculadas un programa?...........................................................14
Añadiendo nuevas librerías................................................................................................14
El enlazador dinámico ld.so................................................................................................14
Dispositivos..................................................................................................................................... 15
Dispositivos orientados a bloques...................................................................................15
Dispositivos orientados a caracteres..............................................................................16
Dispositivos orientados a sockets....................................................................................16
Archivos de dispositivos virtuales...................................................................................16
Yast.......................................................................................................................................................... 17
Visión General................................................................................................................................ 17
Informacion del hardware........................................................................................................19
hwinfo........................................................................................................................................... 19
Otros comandos para HW....................................................................................................20
Filesystem Linux................................................................................................................................ 21
Jerarquia del sistema de ficheros..........................................................................................21
/proc.............................................................................................................................................. 21
Tipos de filesystem...................................................................................................................... 23
Journaling......................................................................................................................................... 24
Estructura clásica del sistema de ficheros........................................................................25
Tipos de ficheros...........................................................................................................................26
Permisos de los archivos...........................................................................................................28
SNAPPER.......................................................................................................................................... 29
RAID................................................................................................................................................... 29
Cabinas Almacenamiento Enterprise.......................................................................................32
LVM..................................................................................................................................................... 34
BTRFS................................................................................................................................................ 35
ZFS....................................................................................................................................................... 36
Paquetes Linux/Repositorios/Compilación Software......................................................36
Paquetes Linux.............................................................................................................................. 36
Zypper............................................................................................................................................... 36
Instalar Software/paquetes................................................................................................36
Curso de SuseLinux
César Moreno Iglesias [email protected]
Actualizaciones.........................................................................................................................37
Administrar Repositorios de Software..........................................................................38
Compilar software para la instalación de un programa/modulo...........................41
Pasos para compilar e instalar un programa con gcc...................................................41
Gestión de Usuarios/Grupos........................................................................................................43
Añadir usuarios/grupos............................................................................................................43
Quota.................................................................................................................................................. 44
Integración con Directorio Activo (LDAP)........................................................................46
Modulos PAM.............................................................................................................................47
Jaulas.................................................................................................................................................. 48
Su/sudo............................................................................................................................................. 49
Comando su................................................................................................................................ 49
Sudo users................................................................................................................................... 49
Paginas de manual............................................................................................................................ 50
Vim........................................................................................................................................................... 50
Logado.................................................................................................................................................... 51
RED.......................................................................................................................................................... 52
Conceptos básicos UDP / TCP.................................................................................................52
Configurar la red manualmente desde línea comandos..............................................53
Dejar la configuración persistente para el arranque....................................................54
NetworkManager.service'.........................................................................................................55
Wicked............................................................................................................................................... 55
Configurar HW interfaces......................................................................................................... 57
ntp....................................................................................................................................................... 57
Desde el punto de vista cliente..........................................................................................57
Desde el punto de vista del servidor...............................................................................57
NFS...................................................................................................................................................... 58
Como cliente.............................................................................................................................. 58
Como servidor...........................................................................................................................58
SAMBA............................................................................................................................................... 60
Como Server...............................................................................................................................60
Como cliente.............................................................................................................................. 60
SuseFirewall2/iptables..............................................................................................................61
Conceptos básicos................................................................................................................... 61
Tabla de sesiones.....................................................................................................................62
NAT de entrada/salida o Mascarading..........................................................................62
Posibles causa del drop.........................................................................................................63
FW con IDP/IPS........................................................................................................................63
Compilacion de Reglas.......................................................................................................... 64
SuseFirewall2/iptables.........................................................................................................65
https://en.opensuse.org/SuSEfirewall2............................................................................65
Por otro lado también nos brinda la posibilidad de meter reglas asociadas a las
zonas de una forma muy sencilla, por puertos o rangos udp o tcp, por
protocolos IP, por RPC (ya casi no se usa)........................................................................66
Iptables......................................................................................................................................... 70
SSH avanzado................................................................................................................................. 71
Procesos................................................................................................................................................ 73
Padre/hijo........................................................................................................................................ 73
Estados.............................................................................................................................................. 74
Curso de SuseLinux
César Moreno Iglesias [email protected]
Paginacion....................................................................................................................................... 75
Procesos multihebrados/paralelos......................................................................................75
Planifocador del kernel..............................................................................................................75
Cuantos Cpu/Yield/Nice.......................................................................................................76
Cgroups........................................................................................................................................ 76
Modo Kernel/Modo Usuario....................................................................................................76
Monitorizacion de CPU en multiprocesadores................................................................77
Monitorizacion de I/O discos..................................................................................................77
BackGround/Foreground......................................................................................................... 77
Comandos/herramientas de monitorización...................................................................78
top.................................................................................................................................................. 78
vmstat........................................................................................................................................... 78
sar e iostat...................................................................................................................................79
uptime........................................................................................................................................... 79
mpstat........................................................................................................................................... 79
Pidstat........................................................................................................................................... 79
lsof y strace.................................................................................................................................79
IPCs................................................................................................................................................ 80
Proceso de Arranque....................................................................................................................... 80
Servicios systemd......................................................................................................................... 80
Restart infinito o respawn........................................................................................................82
instantaneas.................................................................................................................................... 83
Dependencia entre unidades...................................................................................................83
Caso de Uso..................................................................................................................................... 83
Niveles de Ejecución/target.....................................................................................................84
UEFI vs BIOS................................................................................................................................... 85
GPT vs MBR..................................................................................................................................... 85
Secure Boot..................................................................................................................................... 90
Early launch antimalware....................................................................................................91
Trusted Execution........................................................................................................................ 91
TPM..................................................................................................................................................... 92
GRUB2............................................................................................................................................... 92
Supportconfig...................................................................................................................................... 95
Shell Script............................................................................................................................................ 99
Curso de SuseLinux
César Moreno Iglesias [email protected]

Comparativa de distribuciones
https://www.genbeta.com/linux/31-distribuciones-de-linux-para-elegir-bien-la-
que-mas-necesitas

debían .. dev///Ubuntu Apt


rpm <fedora,red hat, cenos,suse> rpm, yum, zypper, etc

S.O. Linux , Partes, arquitectura


Hal
Hardware Abstraction Layer .. A veces también hablan de ello como el
subsistema del kernel.

Es un conjunto de librerías,rutinas, etc, que abstraen el HW real, de las


invocaciones que pueda hacer un programador via llamadas al sistema para
desarrollar algo. De esta forma el mismo código, se ejecuta en plataformas
diferentes sobre hw realmente distinto..
El HAL esta entre el kernel real, que es dependiente del hw, y el software que va
encima del sistema operativo.

Llamadas al sistema

El software que va encima del S.O, se conmunica con el HW (dispositivos,


memoria, cpu,etc), mediante llamadas al sistema, y supone un API que usa el
programador para poder hacer uso de los recursos HW y Software que el Kernel
pone a su disposición..
Curso de SuseLinux
César Moreno Iglesias [email protected]

Ejemplos de llamadas al sistema



 Creación y control de procesos.
 Señales.
 Excepciones de punto flotante.
 Excepciones por violación de segmento.
 Excepciones por instrucción ilegal.
 Errores del bus.
 Temporizadores.
 Operaciones de ficheros y directorios (sobre cualquier fs montado).
 Tuberías (Pipes).
 Biblioteca C (Standard C).
 Instrucciones de entrada/salida y de control de dispositivo (ioctl).

 POSIX.1b, extensiones para tiempo real:


 Planificación (scheduling) con prioridad.
 Señales de tiempo real.
 Temporizadores.
 Semáforos.
 Intercambio de mensajes (message passing).
 Memoria compartida.
 Entrada/salida síncrona y asíncrona.
 Bloqueos de memoria.

 POSIX.1c, extensiones para hilos (threads):


 Creación, control y limpieza de hilos.
 Planificación (scheduling).
 Sincronización.
 Manejo de señales.
Curso de SuseLinux
César Moreno Iglesias [email protected]
Modo Kernel/modo usuario
GNU/Linux es un Sistema Operativo multitarea en el que van a convivir un gran
número de procesos. Es posible, bien por un fallo de programación o bien por un
intento malicioso, que alguno de esos procesos haga cosas que atenten contra la
estabilidad de todo el sistema. Por ello, con vistas a proteger esa estabilidad, el
núcleo o kernel del sistema funciona en un entorno totalmente diferente al resto
de programas. Se definen entonces dos modos de ejecución totalmente
separados: el modo kernel y el modo usuario.

Cada uno de estos modos de ejecución dispone de memoria y procedimientos


diferentes, por lo que un programa de usuario no podrá ser capaz de dañar al
núcleo.

Las syscalls o llamadas al sistema son el mecanismo por el cual los procesos y
aplicaciones de usuario acceden a los servicios del núcleo. Son la interfaz que
proporciona el núcleo para realizar desde el modo usuario las cosas que son
propias del modo kernel (como acceder a disco o utilizar una tarjeta de sonido).
La siguiente figura explica de forma gráfica cómo funciona la syscall read().

El modo usuario necesita acceder al disco para leer, para ello utiliza la syscall
read() utilizando la interfaz de llamadas al sistema. El núcleo atiende la petición
accediendo al hardware y devolviendo el resultado al proceso que inició la
petición. Este procedimiento me recuerda al comedor de un restaurante, en él
todos los clientes piden al camarero lo que desean, pero nunca entran en la
cocina. El camarero, después de pasar por la cocina, traerá el plato que cada
cliente haya pedido. Ningún comensal podría estropear la cocina, puesto que no
tiene acceso a ella.

Prácticamente todas las funciones que utilicemos desde el espacio de ejecución


de usuario necesitarán solicitar una petición al kernel mediante una syscall, esto
es, la ejecución de las aplicaciones de usuario se canaliza a través del sistema de
peticiones al sistema. Este hecho es importante a la hora de fijar controles y
registros en el sistema, ya que si utilizamos nuestras propias versiones de las
syscalls para ello, estaremos abarcando todas las aplicaciones y procesos del
espacio de ejecución de usuario. Imaginemos un “camarero” malicioso que
capturase todas las peticiones de todos los clientes y envenenase todos los platos
antes de servirlos... nuestro restaurante debería cuidarse muy bien de qué
personal contrata y nosotros deberemos ser cautelosos también a la hora de
cargar drivers o módulos en nuestro núcleo.

Para hacer uso de las llamadas al sistema desde el lenguaje de programación C,


los sistemas operativos que trabajan con el núcleo Linux ponen a disposición del
usuario varias funciones o procedimientos de librería que representan a las
llamadas del sistema.
Curso de SuseLinux
César Moreno Iglesias [email protected]

Llamadas al sistema para el control de procesos

Este tipo de llamadas al sistema permiten realizar "actividades" relacionadas con


los programas que están en espera para ejecución o que se están ejecutando, es
decir, cuando son un proceso; cada sistema operativo tiene sus formas de
invocar dichas llamadas, en el caso de los sistemas operativos bajo el núcleo
Linux estas se pueden invocar desde el Shell o interprete de comandos y desde el
lenguaje C.

Las llamadas más comunes de este tipo son:

1. fork( )

2. getpid( )

3. getppid( )

4. La familia de llamadas exec…(…)


Curso de SuseLinux
César Moreno Iglesias [email protected]

5. wait( )

6. waitpid(…)

7. exit(…)

8. system(…)

Llamadas al sistema para el control de señales

Las llamadas a sistema para el control de señales, son un tipo de llamada de


sistema que permite a un proceso establecer comunicación con otros procesos
que se están ejecutando en la máquina o para que el kernel se comunique con
ellos, como puede ser, informar sobre alguna condición, una solicitud de espera,
etc.

En tal comunicación el proceso puede ser emisor o receptor de la señal. Las


señales que se pueden producir dependen de la máquina y de los privilegios que
el proceso tenga.

Para la mayoria de aplicaciones grandes, se usan señales como forma de


controlar las tareas, podiendo asi teniendo aplicaciones en segundo plano o
corriendo provisionalmente.

En el caso de los sistemas operativos con núcleo Linux el listado de señales se


puede obtener con el comando kill y la opción -l, para la maquina usada en los
ejemplos, el listado de señales con su respectivo número son:

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL


5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
Curso de SuseLinux
César Moreno Iglesias [email protected]

55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6


59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

Las señales no tiene ninguna prioridad u orden para ser atendidas, es posible
ignorarlas (excepto SIGSTOP y SIGKILL) y si en algún momento llegan
simultáneamente varias señales del mismo tipo, solo se tendrá en cuenta una y
las demás se consideraran como si nunca hubieran llegado.

Kernel
Es un software que constituye una parte fundamental del S.O, se ejecuta en modo
privilegiado(kernel), es el principal responsable de facilitar a los distintos
programas el acceso SEGURO AL HARDWARE, o en forma básica, es el encargado
de gestionar recursos, a través de servicios de llamada al sistema. Como hay
muchos programas y el acceso al hardware es limitado, también se encarga de
decidir qué programa podrá usar un dispositivo de hardware y durante cuánto
tiempo. Los núcleos suelen implementar una serie de abstracciones del
hardware. Esto permite esconder la complejidad, y proporcionar una interfaz
limpia y uniforme al hardware subyacente, lo que facilita su uso programador

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.
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.

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
Curso de SuseLinux
César Moreno Iglesias [email protected]
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.

Uname –r
4.1.31-30 Version Principal:4 / RevisionPrincipalDelNucleo:1 (par/impar no
importa)/31 Revisiones Menores del nucleo /30 fallos seguridad, o
programación

La version del sistema operativo-distribuccion suele venir en

/etc/issue
/etc/issue.net
/etc/SuSe-release
/etc/os-release

Modulos del kernel


Modulos del kernel de Linux, son trozos de software del kernel, típicamente para
acceder a HW, pero también son modulos para ofrecer funcionalidad software
del kernel, que se pueden cargar dinámicamente o estáticamente. Si se cargan
estáticamente forma parte del propio kernel, si se cargan dinámicamente se
cargan bajo demanda

Comandos para módulos del kernel


Para mostrar los módulos del núcleo cargados actualmente:
$ lsmod
Para mostrar información sobre un módulo:
$ modinfo nombre_del_módulo
Para listar las opciones que se establecen para un módulo cargado:
$ systool -v -m nombre_del_módulo
Para mostrar la configuración completa de todos los módulos:
$ modprobe -c | less
Curso de SuseLinux
César Moreno Iglesias [email protected]
Para mostrar la configuración de un módulo en particular:
$ modprobe -c | grep nombre_del_módulo
Listar las dependencias de un módulo (o alias), incluido el propio
módulo:
$ modprobe --show-depends nombre_del_módulo

Manejar módulos manualmente


Los módulos del núcleo pueden ser manejados con las herramientas
proporcionadas por el paquete kmod. Estas herramientas pueden ser
utilizadas manualmente.
Para cargar un módulo:
# modprobe nombre_del_módulo
Para quitar/retirar un módulo:
# modprobe -r nombre_del_módulo
O, alternativamente:
# rmmod nombre_del_módulo

Configuración
Hoy en día, todos los módulos que necesitan ser cargados, son manejados
automáticamente por udev, por lo que si no quiere/necesita utilizar ningún
módulo ajeno al núcleo, no hay necesidad de ponerlos en algún archivo de
configuración para que se carguen en el arranque. Sin embargo, hay casos en que
es posible que desee cargar un módulo específico adicional durante el proceso de
arranque, o crear una lista negra de módulos (los cuales no se cargarán) para que
el equipo funcione correctamente.

Cargar módulos
Los módulos adicionales del kernel pueden ser cargados durante el arranque
configurándolos como una lista estática en los archivos residentes en
/etc/modules-load.d/. Cada archivo de configuración es nombrado siguiendo el
formato: /etc/modules-load.d/<programa>.conf. Los archivos de configuración
contienen simplemente una lista de los nombres de los módulos del núcleo a
cargar, separadas por saltos de líneas. Las líneas vacías y las líneas cuyo primer
carácter sea # o ; serán ignoradas.
/etc/modules-load.d/virtio-net.conf
# Carga virtio-net.ko al arranque
virtio-net
Consulte modules-load.d(5) para obtener más información.
Configurar opciones de los módulos
Para pasar un parámetro a un módulo puede usar un archivo de
configuración en la carpeta modprobe o utilizar la línea de órdenes del
núcleo.
Usar archivos en /etc/modprobe.d/
El directorio /etc/modprobe.d/ se puede utilizar para pasar la configuración de
los módulos a udev, el cual utilizará modprobe para manejar la carga de los
módulos durante el arranque del sistema. Puede crear un archivo de
configuración con cualquier nombre en aquel directorio, siempre que acaben con
la extensión .conf. La sintaxis es la siguiente:
Curso de SuseLinux
César Moreno Iglesias [email protected]
/etc/modprobe.d/miarchivo.conf
options nombredelmódulo nombredelparámetro=valordelparámetro
Por ejemplo:
/etc/modprobe.d/thinkfan.conf
# Thinkpads on, ésto permite que el demonio thinkfan controle la
velocidad del ventilador
options thinkpad_acpi fan_control=1

Nota: Si cualquiera de los módulos afectados se cargan durante el arranque


(desde el ramdisk de inicio), entonces tendrá que añadir el correspondiente
archivo .conf a FILES en mkinitcpio.conf, o usar el hook modconf, para que se
incluya en el ramdisk.
Usar la línea de órdenes de arranque del núcleo
Si el módulo está integrado en el núcleo también puede pasar opciones al módulo
a través de la línea de órdenes. Para todos los cargadores de arranque
(bootloader) más comunes la sintaxis correcta es:
nombredelmódulo.nombredelparámetro=valordelparámetro
por ejemplo:
thinkpad_acpi.fan_control=1
Simplemente añada esto a la línea de órdenes del núcleo de su gestor de
arranque

COMPARA CON WINDOWS..vs registro

Drivers
En Linux el concepto de driver es en si mismo un modulo. Tipicamente cuando se
tiene que hacer un driver para un dispositivo, lo que se hace es montar un
modulo que se carga en el kernel, que con llamadas Read/write/events
interactua con el dispositivo..
El kernel tiene generalmente ya a dia de hoy una lista de modulos/drivers
suficientemente amplia para reconocer el HW típico que podemos usar. Cuando
se va a hw más especifico, imaginad una GPU, una cámara X, una controladora X,
el fabricante suministrara un procemiento de instalación, que hacer funcionar
ese dispositivo en Linux. A veces será un modulo que se cargue en el proceso de
arrancada dinámicamente, otras veces tocará el bootloader,etc..

Librerias
Las librerías compartidas en Linux, que son y como gestionarlas

Una librería es un fichero que contiene un conjunto de funciones, escritas en un


lenguaje de programación, para ser utilizadas por un programa, de forma que si
un programa necesita usar estas funcionalidades puede acceder a la librería sin
tener que reescribir el código. La diferencia entre un programa y una librería
es mínima, la única diferencia es que una librería no se ejecuta de forma
autónoma ( no contiene el bloque de instrucción main ), pero por lo demás
funciona como un programa normal ( también puede requerir de otras librerías
para funcionar).
Curso de SuseLinux
César Moreno Iglesias [email protected]

Tipos de librerías

Existen dos tipos de librerías, las librerías compartidas o dinámicas y las


librerías estáticas. La diferencia entre ambas es que mientras en las librerías
compartidas el acceso es dinámico y se realiza en tiempo de ejecución, en las
estáticas las funcionalidades son enlazadas en tiempo de compilación y
sustituidas por la llamada en el fichero ejecutable final.

Un conjunto de funciones propuestas por una o varias librerías forma una API
( application programming Interface) y estas se pueden agrupar en un
framework que ofrece una solución completa para un dominio dado.

APIs y Frameworks

Las librerías compartidas

Las librerías compartidas se llaman Shared Objects y llevan el sufijo .so ( su


equivalente en Windows son las .dll ).
Como ya hemos mencionado, las librerías compartidas se vinculan a un
programa en tiempo de ejecución, permitiendo que el código de la librería se
cargue en memoria una única vez y pueda ser usado por varios programas, de
esta forma se consigue que el tamaño del código sea menor con su
correspondiente ahorro de espacio en memoria.
Ademas de esto con las librerías compartidas se cumple el principio de
modularidad ( programación modular o orientada a objetos ), de forma que si
necesitamos modificar alguna funcionalidad nos bastara con editar la librería
que la contiene, dejando el programa que las utiliza sin modificar.

Los nombres de las librerías compartidas


Curso de SuseLinux
César Moreno Iglesias [email protected]
Por convenio las librerías compartidas pueden tener varios tipos de nombre :
– El nombre usado por el enlazador (‘lib’ + nombre de la libreria + ‘.so’)
– Nombre completo (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + numero de
versión) // Link hacia la librería con el nombre real
– Nombre real (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + numero de versión + ‘.’ +
numero de subversión + ‘.’ + revisión ) // La revisión es opcional
Para el cambio de versiones hay que tener dos factores en cuenta, el numero de
la subversión se cambia cuando se realizan cambios en la librería y esta no
pierde compatibilidad con la version anterior, pero si se pierde compatibilidad
el cambio tiene que ser de versión y no de subversión. Gracias a este convenio
de nombres es posible que múltiples versiones de una librería compartida
coexistan en el sistema.

¿Dónde se encuentran dentro de la jerarquía de ficheros?

Las librerías compartidas se colocan en directorios denominados lib:


– /lib : Librerías de sistema, vitales
– /usr/lib : Librerías de usuario básicas, no se necesitan en el boot
– /usr/local/lib : Librerías que no forman parte de la distribución estándar
La librería mas importante del sistema es la de C. Todos los programas
compilados son vinculados a libc, por lo que mejor no borres esta libreria, a no
ser que quieras que el sistema deje de funcionar.

¿Que librerías tiene vinculadas un programa?

Gracias al comando ldd podemos conocer las librerías vinculadas a un programa.


Como parámetro tenemos que pasar la ubicación del programa.
Por ejemplo si queremos conocer las librerías asociadas al editor de texto Gedit
el comando seria el siguiente :
ldd /usr/bin/xterm
ldd /usr/sbin/sshd
El comando ldd también nos indicara si falta alguna librería asociada.
Nota: si no pone nada, detrás del número se pone revision y subversion.

Añadiendo nuevas librerías

Para añadir una nueva librería, tenemos que ubicarla en uno de los directorios
mencionados y después ejecutar el programa ldconfig. ldconfig se va a encargar
de dejar la librería accesible para el enlazador, creando los vínculos y caché
necesarios en el archivo /etc/ld.so.conf, y en los directorios de confianza (/lib
y /usr/lib).
Si se da el caso que la ubicación de la librería no es una de las estándares ( las
mencionadas ), sera necesario agregar el directorio a /etc/ld.so.conf.

El enlazador dinámico ld.so


Curso de SuseLinux
César Moreno Iglesias [email protected]
Ya hemos dicho que los ficheros binarios en Linux requieren un enlace dinámico
( a no ser que se opte por el enlace estático ), y de este enlace se encargan los
programas ld.so y ld-linux.so*. La misión de estos dos es encontrar y cargar las
bibliotecas compartidas requeridas por el programa en cuestión, preparar el
programa para ejecutarse y ejecutarlo. Para ello el binario en cuestión ofrece el
nombre de las bibliotecas que necesita y ld.so se encarga de buscarlas en las
siguientes ubicaciones :
– Las definidas a través de la variable de entorno LD_LIBRARY_PATH. Salvo
cuando el ejecutable tiene activo el bit setuid/setgid, en cuyo caso se ignora.
– Las definidas en el propio binario.
– En el fichero /etc/ld.so.cache, que contiene una lista compilada de bibliotecas
candidatas encontradas previamente en la ruta de bibliotecas ampliada.
– En la ruta predeterminada /lib, y despues en /usr/lib/. Si el binario fue
enlazado con la opción -znodeflib, se omite este paso.

La primera librería encontrada que cumpla la dependencia será la utilizada.


Hay que tener en cuenta que lo que el binario contiene no es una lista con los
enlaces a cada librería, sino una lista de rutas adicionales en las que buscar las
dependencias ( si las tiene ).

Dispositivos
Udev (Carga dinámicamente modulos, por el bus al que este conectado el
dispositivo). Sustituye a a devfs.
https://es.wikipedia.org/wiki/Udev
Un archivo de dispositivo archivo de dispositivo es un archivo especial
estandarizado en Filesystem Hierarchy Standard que se establece en el
directorio /dev en cuyos subdirectorios se establece un contacto con dispositivos
de la máquina, ya sean reales, como un disco duro, o virtuales, como /dev/null
Existen varios tipos de dispositivos:
c – character devices: dispositivos orientados a caracteres
b – block devices: dispositivos orientados a bloques
s – socket devices: dispositivos orientados a sockets

Dispositivos orientados a bloques


Dispositivos orientados a bloques transmiten datos en bloques (paquetes) y por
esa razón son usados a menudo para la transmisión paralela de datos. Estos
dispositivos utilizan el buffer de datos del sistema operativo.
Ejemplo de archivos de dispositivos orientados a bloques
Nombre del archivo Significado
fd0 1. disquetes
hda IDE-Disco duro ó IDE-CD-ROM-Lector conectado al 1. enchufe Master
hdb IDE-Disco duro ó IDE-CD-ROM-Lector conectado al 1. enchufe Slave
hda1 1. primera partición de disco del primer IDE-Disco duro
hda15 15. partición lógica del 1. disco duro IDE
ad0 IDE-Disco duro conectado al 1. enchufe Master (FreeBSD)
ad1 IDE-Disco duro conectado al 1. enchufe Slave (FreeBSD)
ad0s1 1. Slice del primer disco duro IDE (FreeBSD)
Curso de SuseLinux
César Moreno Iglesias [email protected]
ad0s15 15. Slice del primer disco duro IDE (FreeBSD)
ad0s1a 1. partición en el 1. Slice del 1. disco duro IDE (FreeBSD)
ad0s1b 2. Partición en el 1. Slice del 1. disco duro IDE (FreeBSD)
acd0 IDE-CD-ROM-Lector en el 1. enchufe Master (FreeBSD)
acd1 IDE-CD-ROM-Lector en el 1. enchufe Slave (FreeBSD)
sda SCSI-Disco duro (portátil), con el menor SCSI-ID (Linux)
sdb SCSI-Disco duro (portátil) con el siguiente SCSI-ID (Linux)
sda1 1. Partición del primer disco duro (portátil) SCSI
sda15 11. partición lógica del primer disco duro (portátil) SCSI
da0 Disco duro (portátil) SCSI, con la menor SCSI-ID (FreeBSD)
da1s2e 5. partición en el 2. slice del 2. disco duro (portátil) SCSI (FreeBSD)
scd0 1. lector SCSI-CD-ROM
cd0 1. lector SCSI-CD-ROM (FreeBSD)
cCtTdDsS en el C° controlador SCSI con la SCSI-ID=T, el D° disco duro y en él el S° Slic
cdrom Enlace simbólico al Lector de CD-ROM

Dispositivos orientados a caracteres


Dispositivos orientados a caracteres transmiten solo un Bit o solo un Byte a la
vez, es decir, utilizan la transmisión serial de datos, sin usar buffer.
Ejemplos de archivos de dispositivos orientados a caracteres
Nombre del archivo Significado
ttyS0 1. Puerto serie, antiguamente el teclado del Terminal
lp0 1. Puerto paralelo
lp1 2. puerto paralelo
ttyX Enlace simbólico para un Pseudoterminal
usbdev1.1 Archivo de dispositivo para aparatos con USB
mouse Enlace simbólico al ratón
La tarjeta de red, por ejemplo Ethernet, ISDN, no es contactada a través de
archivos de dispositivo, sino a través de TCP/IP, aunque existen archivos de
dispositivo para aplicaciones especiales como Netlink Device, D-Channel, etc.

Dispositivos orientados a sockets


Un socket de Internet no es un archivo de dispositivo, sino una forma
de comunicación entre procesos.
Ejemplos de dispositivos orientados a sockets
Nombre del archivo Significado
/dev/log Socket de syslog
/dev/gpmdata Socket de GPM-Mouse-Multiplexor
/dev/printer Socket para el protocolo de impresión en red de Berkeley
Archivos de dispositivos virtuales
Un caso especial son los archivos virtuales con los cuales no se comunica con un
dispositivo real.
Ejemplos para archivos de dispositivos virtuales
Nombre del archivo Significado
Curso de SuseLinux
César Moreno Iglesias [email protected]
/dev/null acepta entrada de datos sin producir respuesta
/dev/zero produce un flujo de ceros, cada uno de 8 bits, (en C: '\000')
/dev/random produce números aleatorios ó por lo menos secuencias pseudoaleatorias cripto
teclas pulsadas, etc, para generar el número.)
/dev/urandom produce secuencias pseudoaleatorias

/dev/shm (Muy util para los scritps para variables temporales, porque es
ramdisk, asi no machacamos la misma zona del disco todo el rato, a parte que es
más rápido)

Vease /proc/devices o lsdev

Yast
Visión General
El yast/yast2 es la herramienta de administración de Suse por autonomaxia.
YaST es la herramienta de instalación y configuración de openSUSE y la
distribución SUSE Linux Enterprise
Se puede arrancar en modo grafico, o desde texto. Esta herramiento incluso
comanda la instalación de Suse.
El propio Yast se va enriqueciendo con distintos modulos de configuración, que
te permiten darle más y más potencia a medida que suben las versiones.
http://yast.github.io/modules.html

Toda la configuración del sistema está básicamente contenida en


/etc/sysconfig, lógicamente también hay parte colgando de /etc.

Ejecución de Yast en modo de texto o en modo grafico, como se quiera.


Recomiendo modo grafico.

Ejercicio: Levantar sshd desde yast


Curso de SuseLinux
César Moreno Iglesias [email protected]
Curso de SuseLinux
César Moreno Iglesias [email protected]
Damos a OK, y ya tenemos el SSH levantado, tendremos luego que darlo de alta
en el firewall, lo podemos hacer con yast.

Informacion del hardware


hwinfo
#hwinfo
O desde el propio yast

Opciones especificas
 Listado Corto
#hwinfo - - short
 Preguntar por un subsitema completo
#hwinfo - - cpu
Posibles subsistemas son:
all, arch, bios, block, bluetooth, braille, bridge, camera, cdrom, chipcard, cpu, disk, dsl, dvb,
fingerprint, floppy, framebuffer, gfxcard, hub, ide, isapnp, isdn, joystick, keyboard, memory,
modem, monitor, mouse, netcard, network, partition, pci, pcmcia, pcmcia-ctrl, pppoe, printer,
redasd,reallyall, scanner, scsi, smp, sound, storage-ctrl, sys, tape, tv, uml, usb, usb-ctrl, vbe, wlan,
xen, zip
 Listar Raid de disco
Hwinfo - - listmd
Curso de SuseLinux
César Moreno Iglesias [email protected]
 --dump-db N
 Hace Dump de la base de datos del hw.
hwinfo --dump-db 1
esta /var/lib/hardware
 hwprobe
Podemos considerarlo como variable de entorno, que usaría hwinfo para
ejecutarse , de forma que nos vale para que intente probar/no usar cierto
tipo de hw,
Basicamente el sistema detecta lo que hay pinchado y en función de ello
carga drivers, y configura el hw para su uso. Con hwprobe podemos
indicar que carque algo que no detecto,o evitar que se cargue algo que da
problemas

Sintasis:
hwprobe=[+-]<device_class>:<vendor_id>:<device_id>[:<unix_device_file>]

- + Añade al final de la lista


- - Quita de la lista, remueve
- nada Añade el principio de la lista

- hwprobe=-braille,-modem (no busques ni modem,ni braille)


- hwprobe=+401:1274:5000 (añade al final de la lista tarjeta de sonido
ensonic)

Las opciones de Hwinfo de debug, o de save-config se utilizan con


hwprobe, para depurar alguna carga, y para que si carga bien el hardware
dejarlo persistente…

Otros comandos para HW


- dmesg (os da la salida del kernel que se ha logado en el syslog,
entonces sino se ha rotado el fichero veis todo lo que el kernel ha
arrancado y configurado durante el inicio del sistema)
- lshw (zypper in lshw)
Con esta salidas se ve todo mucho mas claro. lshw -short
- lspci (lista lo que esta pinchado a pci/pcie
- lsusb (lista lo que esta pinchado a usb)
- lsscsi
- lsdev (tira /proc/interrupts /proc/ioports /proc/dma
dma(acceso directo a memoria permite a los dispositivos acceder a
memoria sin pasar por la cpu, gracias al controlador de dma, hay distintos
canales de dma con distintas prioridades)..En buses PCI el Dmacontroler
esta en cada dispositivo porque toman el control y el arbitraje del bus
para las transferencias dma.
La transferencia DMA es básicamente copiar bloques de memoria entre la
memoria principal y el dispositivo.
ioports (son las direcciones de memoria que se usan para intercambiar
información con el resto del S.O.)
Curso de SuseLinux
César Moreno Iglesias [email protected]
irq (llamamos interrupciones de hardware a cambios de estado en
determinadas señales de control provocadas por dispositivos internos o
externos. Estos cambios provocarán interrupciones en la ejecución del
programa corriente y obligarán al procesador a ejecutar las rutinas de
programa asociadas).

Filesystem Linux
Jerarquia del sistema de ficheros

La foto anterior es el de la jerarquía estándar, luego las distribuciones añaden o


renombran quintan alguno concreto, por jemplo el /media suele ser el /mnt

/proc
Este es un directorio virtual que se crea nuevo tras el arranque por parte del
kernel, ahí en modo texto podemos ver información de dispositivos, hw,etc)
/proc/1
Un directorio con información acerca del proceso número 1.
Cada proceso tiene un directorio debajo de /proc cuyo nombre
es el número de identificación del proceso (PID).
/proc/cpuinfo
Información acerca del procesador: su tipo, marca, modelo,
rendimiento, etc.
/proc/devices
Curso de SuseLinux
César Moreno Iglesias [email protected]

Lista de controladores de dispositivos configurados dentro del


núcleo que está en ejecución.
/proc/dma
Muestra los canales DMA que están siendo utilizados.
/proc/filesystems
Lista los sistemas de archivos que están soportados por el
kernel.
/proc/interrupts
Muestra la interrupciones que están siendo utilizadas, y cuantas
de cada tipo ha habido.
/proc/ioports
Información de los puertos de E/S que se estén utilizando en
cada momento.
/proc/kcore
Es una imagen de la memoria física del sistema. Este archivo
tiene exactamente el mismo tamaño que la memoria física, pero
no existe en memoria como el resto de los archivos bajo /proc,
sino que se genera en el momento en que un programa accede a
este. (Recuerde: a menos que copie este archivo en otro lugar,
nada bajo /proc usa espacio en disco).
/proc/kmsg
Salida de los mensajes emitidos por el kernel. Estos también son
redirigidos hacia syslog.
/proc/ksyms
Tabla de símbolos para el kernel.
/proc/loadavg
El nivel medio de carga del sistema; tres indicadores
significativos sobre la carga de trabajo del sistema en cada
momento.
/proc/meminfo
Información acerca de la utilización de la memoria física y del
archivo de intercambio.
/proc/modules
Indica los módulos del núcleo que han sido cargados hasta el
momento.
/proc/net
Información acerca del estado de los protocolos de red.
/proc/self
Un enlace simbólico al directorio de proceso del programa que
esté observando a /proc. Cuando dos procesos observan a /proc,
Curso de SuseLinux
César Moreno Iglesias [email protected]

obtienen diferentes enlaces. Esto es principalmente una


conveniencia para que sea fácil para los programas acceder a su
directorio de procesos.
/proc/stat
Varias estadísticas acerca del sistema, tales como el número de
fallos de página que han tenido lugar desde el arranque del
sistema.
/proc/uptime
Indica el tiempo en segundos que el sistema lleva funcionando.
/proc/version
Indica la versión del núcleo

Tipos de filesystem
• Btrfs - También conocido como «Better FS», es un nuevo sistema de archivos con
potentes funciones, similares al excelente ZFS de Sun/Oracle. Estas incluyen la
creación de instantáneas, striping y mirroring multi-disco (RAID software sin mdadm),
sumas de comprobación, copias de seguridad incrementales, y compresión sobre la
marcha integrada, que pueden dar un significativo aumento de las prestaciones, así
como ahorrar espacio. A partir de enero de 2011, Btrfs es considerado inestable a
pesar de que se ha estado insertando en el kernel principal con un estado
experimental. Btrfs parece ser el futuro de los sistemas de archivos de GNU/Linux y
se ofrece como una opción para el sistema de archivos de root en todos las
instalaciones de las distribuciones más importantes.
• exFAT - Sistema de archivos de Microsoft optimizado para unidades flash. A
diferencia de NTFS, exFAT no puede preasignar espacio en disco para un archivo
con solo marcar el espacio arbitrariamente en el disco como «asignado». Al igual que
en FAT, cuando se crea un archivo de longitud conocida, exFAT debe llevar a cabo
una completa escritura física del mismo tamaño del archivo.
• ext2 - Second Extended Filesystem es un consolidado y maduro sistema de archivos
para GNU/Linux muy estable. Uno de sus inconvenientes es que no tiene apoyo para
el registro (journaling) (véase más abajo) o las barreras. La falta de registro por diario
(«journaling») puede traducirse en la pérdida de datos en caso de un corte de
corriente o fallo del sistema. También puede no ser conveniente para las particiones
root (/) y /home, porque las comprobaciones del sistema de archivos pueden tomar
mucho tiempo. Un sistema de archivos ext2 puede ser convertido a ext3.
• ext3 - Third Extended Filesystem es, esencialmente, el sistema de archivos ext2 pero
con el apoyo de journaling y la escritura de barreras. Es compatible con ext2, bien
probado, y extremadamente estable.
• ext4 - Fourth Extended Filesystem es un sistema de archivos nuevo que también es
compatible con ext2 y ext3. Proporciona apoyo para volúmenes con tamaños de
hasta 1 exabyte (es decir, 1.048.576 terabytes) y archivos con tamaños de hasta 16
terabytes. Aumenta el límite de los 32.000 subdirectorios de ext3 a 64.000. También
ofrece la capacidad de desfragmentación en línea.
• F2FS - Flash-Friendly File System es un sistema de archivos flash creado por Kim
Jaegeuk (Hangul: 김재극) de Samsung para el kernel del sistema operativo Linux. La
motivación para F2FS era construir un sistema de archivos que desde el principio
tuviese en cuenta las características de los dispositivos de almacenamiento basados
en memoria flash NAND (como los discos de estado sólido, eMMC, y tarjetas SD),
que han sido ampliamente utilizados en el en sistemas informáticos que van desde
dispositivos móviles a servidores.
• JFS - El Journaled File System de IBM fue el primer sistema de archivos en ofrecer
journaling, y ha sido empleado durante muchos años en el sistema operativo IBM
AIX® antes de ser portado a GNU/Linux. JFS demanda menos recursos de la CPU
Curso de SuseLinux
César Moreno Iglesias [email protected]
que cualquier otro disponible para los sistemas GNU/Linux. Es muy rápido en el
formato, montaje y comprobación del sistema de archivos (fsck). JFS ofrece óptimas
prestaciones en general, especialmente en conjunción con el planificador de I/O. No
es tan ampliamente soportado como los sistemas de archivos ext o ReiserFS, pero,
sin embargo, muy maduro y estable.
• NILFS2 - New Implementation of a Log-structured File System fue desarrollado por
NTT. Registra todos los datos en un formato continuo, a modo de un archivo de
registro, que experimenta solo añadidos y nunca se sobrescribe. Está diseñado para
reducir los tiempos de búsqueda y minimizar el tipo de pérdida de datos que se
produce después de un accidente con los convencionales sistemas de archivos de
Linux.
• NTFS - Sistema de archivos utilizado por Windows. NTFS contiene algunas mejoras
técnicas respecto a FAT y HPFS (High Performance File System), como el soporte
mejorado para los metadatos y el uso de estructuras de datos avanzadas para
mejorar el rendimiento, la confiabilidad y la utilización del espacio en disco, además
de extensiones adicionales, como las listas de control de acceso de seguridad (ACL)
y journaling del sistema de archivos.
• Reiser4 - Sucesor del sistema de archivos ReiserFS, desarrollado desde cero por
Namesys y patrocinado por DARPA y Linspire, utiliza B*-trees junto con el enfoque
del equilibrado del árbol de directorios, en el que los nodos poco poblados no se
fusionarán hasta que no se efectúe un nivelado del disco, o cuando la memoria esté
baja o se completa una operación. Este sistema también permite a Reiser4 crear
archivos y directorios sin tener que perder el tiempo y el espacio a través de bloques
fijos.
• ReiserFS - Sistema de archivos con journaling y altas prestaciones de Hans Reiser
(V3) que utiliza un método muy interesante de transferencia de datos basado en un
algoritmo creativo e innovador. ReiserFS es anunciado como muy rápido,
especialmente cuando se trata de muchos archivos pequeños. ReiserFS es rápido
en dar formato, sin embargo, comparativamente lento en el montaje. Muy maduro y
estable. ReiserFS (V3) no está siendo activamente desarrollado en este momento.
Generalmente considerado como una buena opción para /var.
• Swap - es el sistema de archivos utilizado para particiones de intercambio.
• VFAT - Virtual File Allocation Table es técnicamente sencillo y con el apoyo de
prácticamente todos los sistemas operativos existentes. Esto hace que sea un
formato útil para las tarjetas de memoria de estado sólido y una manera práctica para
compartir datos entre sistemas operativos. VFAT soporta nombres largos de
archivos.
• XFS - Primeros sistemas de archivos con journaling desarrollado originalmente por
Silicon Graphics para el sistema operativo IRIX y portado después a GNU/Linux.
Proporciona un rendimiento muy rápido en los archivos y sistemas de archivos
grandes y es muy rápido en el formato y montaje. Pruebas de benchmark
comparativa han demostrado que es más lento cuando trata con muchos archivos
pequeños. XFS es muy maduro y ofrece capacidad de desfragmentación en línea.
ZFS - Combinación de sistema de archivos y gestor de volumen lógicos diseñado por
Sun Microsystems. Las características de ZFS incluyen la protección contra la corrupción
de datos, soporte para grandes capacidades de almacenamiento, la integración de los
conceptos de sistema de archivos y la gestión de volúmenes, instantáneas y clones copy-on-
write, la comprobación continua de la integridad y reparación automática de los archivos,
RAID-Z y NFSv4 ACL nativos.

Journaling

Sistema de ficheros basado en transacciones , en registro.


Paso por paso, para modificar un sistema de archivos con journaling: se
bloquean las estructuras de datos, se escribe la modificación en el journal (y se
comprueba esta escritura), se escribe la modificación y se borra el journal
Curso de SuseLinux
César Moreno Iglesias [email protected]
Basicamente se tiene el registro la informacion necesaria para deshacer la
transaccion.
Si por casualidades del destino se nos va la luz es probable que, al apagarse la
máquina antes de terminar las transacciones, tengamos un sistema de archivos
incoherente (entradas en el índice que no apuntan a ningún archivo, etc). Era así
en sistemas de archivos como FAT32 o ext2.
Un sistema de archivos con journaling sólo tiene que volver atrás para volver a
tener un sistema de archivos coherente (en otras palabras, tiene que leer este
journal y deshacer los cambios)

Estructura clásica del sistema de ficheros


El sistema de ficheros de Linux consta de varias partes importantes:
- Superbloque
- Tabla de inodos
- Bloques de datos

El bloque de carga o bloque cero de cada sistema está reservado para


almacenar un programa que utiliza el sistema para gestionar el resto de las
partes del sistema de ficheros.

El superbloque o bloque uno contiene la información sobre el sistema de


ficheros. Contiene información acerca del tamaño de los sistemas de archivos, la
lista de bloques libres disponibles, índice del siguiente bloque libre en la lista de
los mismos, el tamaño, el total y la lista de los i-nodos, el índice del siguiente i-
nodo libre, los campos de bloqueo de elementos de las listas de bloques libres y
de i-nodos libres. Estos campos se emplean cuando se realiza una petición de
bloque o de i-nodo libre, también contiene el flag que sirve para indicar si el
superbloque ha sido modificado o no

La lista de inodos se encuentra a continuación del superbloque. Se carga en


memoria tras el arrnaque y en memoria se compone la table de inodos.
La tabla de inodos es el equivalente a las entradas de la FAT. Por cada fichero,
Linux tiene asociado un elemento en esta tabla que contiene un número
identifica la ubicación del archivo dentro del área de datos.

Cada inodo contiene información de un fichero o directorio. En concreto, en un


inodo se guarda la siguiente información:
El identificador de dispositivo del dispositivo que alberga al sistema de
archivos.
El número de inodo que identifica al archivo dentro del sistema de archivos.
Curso de SuseLinux
César Moreno Iglesias [email protected]
La longitud del archivo en bytes.
El identificador de usuario del creador o un propietario del archivo con
derechos diferenciados.
El identificador de grupo de un grupo de usuarios con derechos diferenciados.
El modo de acceso: capacidad de leer, escribir, y ejecutar el archivo por parte
del propietario, del grupo y de otros usuarios.
Las marcas de tiempo con las fechas de última modificación (mtime), acceso
(atime) y de alteración del propio inodo (ctime).
El área de datos ocupa el resto del disco y es equivalente a la zona de datos en
FAT. En esta zona, como su nombre indica, están almacenados los ficheros y
directorios de nuestro sistema.

Inodo
Curso de SuseLinux
César Moreno Iglesias [email protected]

Tipos de ficheros
1. Archivos ordinarios
2. Enlaces simbólicos o duros
Enlace simbolico (es un inodo que apunta al inodo real que describe el
archivo, es básicamente un puntero.)
#ln -s test enlace-a-test
Enlace duro (tiene una copia exacta del inodo que representa el archivo,
No puede hacerse contra un directorio, No puede hacerse entre distintos
sistemas de ficheros. Si borramos archivo original no se pierda la informacion)

Ejercicio

lrwxrwxrwx 1 root root 4 sep 25 13:28 enlaceSimbolicoAhola -> hola


-rw-r--r-- 2 root root 65 sep 25 13:28 hola
-rw-r--r-- 2 root root 65 sep 25 13:28 enlaceDuroAhola

3. Directorio
4. Archivos especiales /dev ..Todo dispostivo físico que se conecte a Linux
tiene su archivo asociado.
NOTA: Para saber el tipo de archivo que un archivo es, visto desde el punto de
vista de un mime/type
Comando file
linux-gv5n:/tmp # file -i enlaceDuroAhola
enlaceDuroAhola: text/plain; charset=us-ascii

Ventajas de los enlaces duros


Curso de SuseLinux
César Moreno Iglesias [email protected]
Seguramente existen más utilidades en las que los enlaces duros son
particularmente útiles. No obstante en mi caso se me ocurren las siguientes
aplicaciones.
Realizar copias de seguridad incrementales ahorrando espacio en disco
duro y un tiempo considerable ya que los enlaces duros permiten realizar una
copia de seguridad de un archivo sin realmente realizar la copia. De hecho el
archiconocido programa Time Machine utiliza hard links para realizar sus copias
incrementales de seguridad. Para ver como funciona el programa Time Machine
pueden consultar el siguiente enlace.
Cuando copiamos un archivo de gran tamaño de un sitio a otro tardamos una
cantidad importante de tiempo. Usando un enlace duro podemos evitar esta
espera y de paso ahorraremos espacio en nuestro disco duro.
El enlace duro es una muy buena opción para tener un archivo en varias
ubicaciones. Usando enlaces duros para este fin evita que se generen
enlaces simbólicos rotos. Si usamos enlaces simbólicos para disponer de un
archivo en varias ubicaciones, es posible que cuando se elimine el archivo
original nos olvidemos que en el pasado generamos enlaces simbólicos hacia este
archivo generándose enlaces rotos.
Los enlaces duros también nos pueden servidor para clasificar información
como por ejemplo fotografías. Así por ejemplo podemos clasificar fotos por la
gente que aparece en ellas, una vez organizadas las fotos podemos crear enlaces
duros de las fotos, y una vez creados los enlaces podemos organizar los enlaces
duros por otro tipo de clasificación diferente sin consumir espacio adicional
en nuestro disco duro.

Permisos de los archivos


ls Muestra los archivos en un directorio e información sobre los archivos.
chown Cambia la propiedad de un archivo.
chgrp Cambia la propiedad de grupo de un archivo.
chmod Cambia permisos en un archivo. Puede utilizar el modo
simbólico, que utiliza letras y símbolos, o el modo absoluto,
que utiliza números octales, para cambiar los permisos en un archivo.

Los permisos de archivo UNIX tradicionales pueden asignar propiedad a tres


clases de usuarios:

usuario: el propietario del archivo o directorio, que, normalmente, es el usuario


que creó el archivo. El propietario de un archivo puede decidir quién tiene
derecho a leer el archivo, escribir en el archivo (realizar cambios en él) o, si el
archivo es un comando, ejecutar el archivo.

grupo: los miembros de un grupo de usuarios.

otros: todos los demás usuarios que no son los propietarios del archivo y no son
miembros del grupo.
El propietario del archivo, normalmente, puede asignar o modificar permisos de
archive

Los usuarios del sistema los podemos ver haciendo /cat/passwd


Curso de SuseLinux
César Moreno Iglesias [email protected]
Los grupos del sistema los podemos ver hacienda /cat/group

Permisos son:
- r Lectura
- w Escritura
- x Ejecución
Formato del listado ls:

Modo Octal
1--x
2–w–
3 – wx
4 r- -
5 r-x
6 rw-
7 rwx

#chmod 777 hola


#chmod u-rwx hola
#chmod g+r hola

Permisos especiales: Setuid ,setgid y bit de permanencia


¡! Cuidado con estos flags que tienen connotaciones de seguridad!!
1. Setuid (esto permite por ejemplo que un ejecutable de root, como puede
ser el comando passwd, sea capaz de cambiar permisos de archivos
propietarios del root, como puede ser el /etc/passwd)
chmod +s /tmp/hola
chmod u+s /bin/su
chmod g+s /bin/su

2. Setgid (ídem que setuid pero para grupo. Cambia en tiempo de ejecución
al grupo efectivo del usuario, al grupo que tiene realmente el archivo)
Curso de SuseLinux
César Moreno Iglesias [email protected]
3. BitdePermanencia
Ejemplo el /tmp, todos los usarios pueden hacer lo que quieran en
el ,pues tiene una mascara 777, pero el bit de parmenencia evitar que sea
alterado los permisos de ese directorio, borrado, etc.
chmod +t /tmp/hola

Mask: Viene en el .profile, de cada usuario la mascara de permisos con la que se


crean por defecto los archivos

SNAPPER
Explicado en la pizarra con ejemplos

RAID
https://es.wikipedia.org/wiki/RAID

HOTSPARE.. Disco que se queda en la cabina sin uso preparado para saltar

Gestores de Volumenes por software (Veritas volumen manager,disksuit, LVM, o


por HW para hacer RAID
Curso de SuseLinux
César Moreno Iglesias [email protected]
Curso de SuseLinux
César Moreno Iglesias [email protected]
Curso de SuseLinux
César Moreno Iglesias [email protected]

Cabinas Almacenamiento Enterprise


1. Grandes Cantidades de Discos-Muchas bandejas
2. Sistema de Gestion Propio para crear lunes-monitorizacion etc,etc
3. Conecpto de Zoning
4. En el mundo de la virtualización se Meten tanto las MV, como el conjunto
de discos que utilizan
5. Algoritmo de movimiento dinámicos de datos entre discos de distintas
velocidad (ssd, 15.000 rpm, 10000 rpm)
6. Puertos para NAS y SAN
7. En las cabinas de cualquier tipo la escritura esta por defecto configurada
en MODO write-back, para hacer las escrituras sobre memoria RAM de la
cabina, de ahí la necesidad de las baterías.
Curso de SuseLinux
César Moreno Iglesias [email protected]
Curso de SuseLinux
César Moreno Iglesias [email protected]

LVM
Logical Volume Manager
Para entenderlo se explica todo en estas dos fotos
Curso de SuseLinux
César Moreno Iglesias [email protected]

Sin Raid
http://www.taringa.net/post/linux/18103832/Tutorial-sobre-LVM-en-GNU-Linux.html
Con Raid
Tipicamente mediante mdadm creamos un metadispositivo que ya tiene el raid, y
sobre el luego crearemos el physical volumen.
Ejemplo creamos con verbose output -Cv un metadispositvo , con Raid 1 –l1
sobre dos particiones
# mdadm -Cv /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1
http://www.taringa.net/post/linux/18103832/Tutorial-sobre-LVM-en-GNU-Linux.html

BTRFS
Con LVM por debajo
http://www.tecmint.com/create-btrfs-filesystem-in-linux/
Curso de SuseLinux
César Moreno Iglesias [email protected]
Sin LVM por debajo
https://www.howtoforge.com/a-beginners-guide-to-btrfs

ZFS
http://jjmora.es/zfs_aprendiendo_zfs_en_12_pasos/

Paquetes Linux/Repositorios/Compilación Software


Paquetes Linux
Instalar un paquete en Linux, típicamente es para instalar algún programa, o
alguna librería o modulos que nos permite tener una funcionalidad, acceder a un
hw, etc..
En el mundo Linux hay típicamente dos tipos de paquetes
Los .deb y los .rpm
En función de la distribución que usemos y de donde venga, pues usaremos unos
u otros..
.RPM (por ejemplo usados por Suse, Red-hat, Fedora, Cent-Os).. Deb pues Debian,
Ubuntu, Raspbian(rashberry)

El mundo de los paquetes existe la dependencia de paquetes, que


intrinsecamente lleva una dependencia de librerías, o versiones de librería.
Instalar un paquete, requiere previamente saber sus dependencias, para instalar
también los paquetes de los que depende.. Por eso y para esto cada distribución
tiene o evolucionado su propio software de gestión de paquetes, que nos ayuda a
instalar, desintalar y a gestionar los repositorios desde donde nos bajamos
software.

INSTALAR PAQUETES DE UN TIPO SOBRE DISTRIBUCIONES QUE USAN


OTRO TIPO
No se recomienda, eso no se hace , se pueden usar herramientas como “alien”,
conversores de paquetes, etc, para hay que estar muy desesperado.. A veces nos
podemos ver obligados si no tenemos los fuentes, por ejemplo de algún paquete
comercial.. Sino lo que se hace es BAJAR EL FUENTE, compilarlo , e instalarlo

Zypper
https://es.opensuse.org/Zypper#Vadem.C3.A9cum
Gestor de paquetes de Suse para software desde la línea de comandos que usa la
librería Libzypp.
En otras distribuciones su usa “yum”, por ejemplo CentOS/RedHat, o
directamente rpm , y apt por ejemplo RashBerry(Rashpian), o dpkg en Debian
si son paquetes .deb.

Instalar Software/paquetes
La configuración de zypper esta aqui/etc/zypp
 Buscar Paquetes
#zypper search mysql
 Instalar Paquetes
Curso de SuseLinux
César Moreno Iglesias [email protected]
#zypper in apache2
 Instalar los fuentes de un paquete
 #zypper si wget
/usr/src/packages/SOURCES
#zypper in yast*ftp* wildcars

 Borrar Paquetes
# zypper remove sqlite
 Actualizar Paquetes
zypper up # update all installed packages with newer
version as far as possible
zypper up libzypp zypper # update libzypp and zypper
zypper in sqlite3 # update sqlite3 or install it if not yet
installed
 Mostrar Informacion de Paquetes
info o if
#zypper info wget

#zypper info -t patch MozillaFirefox # muestra información del parche


'MozillaFirefox
 Instalar paquetes nuevos recomendados
install-new-recommends o inr
#zypper inr

Actualizaciones
Dos formas de hacer para tener el sistema al dia.
1. Mediante parches (orientados a tener estabilidad)
2. Mediante actualizaciones de paquetes (orientados a ganar
funcionalidad/estabilidad

 Listar parches necesarios


#zypper lp
 Aplicar parches necesarios
#zypper patch
 Listar parches disponibles (que no necesarios)
#zypper patches
 Instalar un parche especifico
Partimos del numero CVE o bugzilla
#zypper lp - -cve
Con el numero
#zypper patch - -cve= CVE-2016-5283

 Aplicar actualizaciones (aplica realmente los parches necesarios)


#zypper up
 Actualizar paquetes

Ejemplo:
zypper info -t patch package:MozillaFirefox
Cargando datos del repositorio...
Leyendo los paquetes instalados...

Información para package MozillaFirefox:


----------------------------------------
Repositorio: Main Update Repository
Nombre: MozillaFirefox
Versión: 49.0-33.1
Arquitectura: x86_64
Proveedor:openSUSE
Instalado: Sí
Estado: obsoleto (instalada la versión 48.0.1-30.6)
Curso de SuseLinux
César Moreno Iglesias [email protected]
Tamaño de instalación: 101,7 MiB
Resumen:Mozilla Firefox Web Browser
Descripción:
Mozilla Firefox is a standalone web browser, designed for standards
compliance and performance. Its functionality can be enhanced via a
plethora of extensions.
----Instalando la actualización del paquete
linux-gv5n:/tmp # zypper in package:MozillaFirefox
Cargando datos del repositorio...
Leyendo los paquetes instalados...
Resolviendo dependencias de paquete...

The following 9 NEW packages are going to be installed:


libavcodec57 libavutil55 libmp3lame0 libswresample2 libtwolame0 libvdpau1 libx264-148 libx265-87 libxvidcore4

The following 2 packages are going to be upgraded:


MozillaFirefox mozilla-nss

2 packages to upgrade, 9 new.


Tamaño total de descarga: 47,6 MiB. Ya en caché: 0 B. Después de la operación, se utilizarán 16,5 MiB adicionales.
¿Desea continuar? [s/n/? mostrar todas las opciones] (s):

Administrar Repositorios de Software


 Listar repositorios

 Sacar información de un repositorio


#zypper lr 4
Curso de SuseLinux
César Moreno Iglesias [email protected]

Prioridad, es donde busco primero??.. El mismo paquete estando en dos


repositorios distintos será bajado siempre del primero. ¡importante!..
Puede que la versión del paquete sea distinta y el nombre sea el mismo,
por tanto hay que saber o asegurar de donde bajamos.

 Agregar repositorio de software


addrepo o ar
Antes de que cualquier paquete pueda ser instalado se debe definir al menos un
repositorio. Para agregar un repositorio, se usa el comando addrepo
linux-gv5n:~ # zypper ar http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_42.1/ repo-packman
Añadiendo el repositorio repo-packman .............................................................................................................
[TERMINADO]
El repositorio repo-packman se ha añadido correctamente
Activado : Sí
Actualización automática : No
Comprobación GPG : Sí
Prioridad : 99
URI : http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Leap_42.1/

Otros Ejemplos:
zypper ar directorio/con/archivos/rpm local # agregar un directorio local con archivos rpm

 Refrescar Repositorios
Como los repositorios cambian en la nube, tenemos que enterarnos de esos
cambios para saber si podemos bajar algo nuevo, parchear algo, etc.. Ademas
para que las búsquedas sean rápidas cacheamos los metadatos de los
repositorios localmente.. Si un repositorios no lo tenemos en autorefresh, incluso
teniéndolo yo siempre hago un refresh previo de los repositorios de forma
manual
refresh o ref
Tras agregar un repositorio necesitamos Refrescarlo, para montar la meta
información y para confiar en él.
La primera vez que refrescamos, nos preguntara por actualizar la clave GPG..
Esto es como Confiar por primera vez en ese repositorio, para evitar ataques de
man in the middle, ese repositorio lo vinculas de alguna manera a la clave
publica del mismo de forma que todo lo que bajes de ahi, va montado-cifrado con
la clave privada del repositorio
Pulsamos tipicamente “a”
linux-gv5n:~ # zypper ref repo-packman
Recuperando los metadatos del repositorio repo-packman.
---------------------------------------------------------------------------------------------------[\]
Curso de SuseLinux
César Moreno Iglesias [email protected]
Se ha recibido una nueva clave de firma para el repositorio o paquete:

Repositorio: repo-packman
Nombre de la clave: PackMan Project (signing key) <[email protected]>
Huella digital de clave: F8875B88 0D518B6B 8C530D13 45A1D067 1ABD1AFB
Clave creada: mar 16 sep 2014 00:18:00 CEST
La clave caduca: vie 13 sep 2024 00:17:21 CEST
Nombre de rpm: gpg-pubkey-1abd1afb-54176598

¿Desea rechazar la clave, confiar en ella temporalmente o confiar en ella siempre? [r/t/a/? mostrar todas las
opciones] (r): a
Recuperando los metadatos del repositorio repo-packman. ...........................................................................................
[TERMINADO]
Construyendo el caché del repositorio repo-packman ................................................................................................
[TERMINADO]
Los repositorios especificados han sido actualizados.

Probad a mostrar de nuevo la info del repositorio de packman, veréis que el


autorefresco sigue estando a OFF
Para forzarlo que un directorio se refresque hacer:
zypper ref -f
Para forzar que un repositorio se autorefresque
zypper modifyrepo --refresh repo-packman

Ventaja del autorefresco, que siempre consultas información actualizada.


Desventaja la búsqueda de info en el repositorio es mas lenta, porque primero
refresca.

 Quitar un repositorio
removerepo o rr
#zypper rr repo-packman
 Modificar un repositorio
modifyrepo o mr
# zypper mr -d 6
Se ha inhabilitado correctamente el repositorio 'repo-debug'.

Habilitar el repositorio número 6:


# zypper mr -e 6
Se ha habilitado correctamente el repositorio 'repo-debug'.

Habilitar el auto refrescado y el cache de archivos rpm para el repositorio


'packman' y marcar su prioridad a 70:
# zypper mr -rk -p 70 packman
La actualización automática se ha habilitado para el repositorio repo-packman.
Se ha habilitado el almacenamiento en caché de los archivos RPM para el
repositorio repo-packman.
La prioridad del repositorio repo-packman se ha definido como 70.

 Servicios de los repositorios


Los servicios de repositorio sirven para manejar repositories. Libzypp
soporta el servicio de indice de repositories
Basicamente lo que nos permite un servicio de repositorio, es puesto que
tiene el indice de un conjunto de repositories, añadir el servicio, es
agregar simultaneamente los repositories que contiene ese servicio.
Curso de SuseLinux
César Moreno Iglesias [email protected]
Compilar software para la instalación de un programa/modulo
Tipicamente se usa siempre el compilador gcc. GCC es un conjunto de
compiladores creados por GNU que en un principio compilaba para el lenguaje C.
Actualmente soporta “front ends” para C, C++, Java, Ada, Objective C, Objective
C++
Las ventajas de usar GCC para compilar radican en la optimización del código
basado en el microprocesador propio, comprobación de errores, depuración y
optimización en las llamadas a subrutinas.

EN LINUX A DIFERENCIA DE WINDOWS NO NOS BAJAMOS UN PROGRAMA Y LO


INSTALAMOS (salvo que por ejemplo estuviera escrito en java, en perl, o algun
otro lenguaje interpretado)..SI EL PROGRAMA NO LO PODEMOS BAJAR COMO
UN PAQUETE DE UN REPOSITORIO, O QUEREMOS METER UNA VERSION
NUEVA QUE APORTA NUEVA FUNCIONALIDAD Y NUESTRA DISTRIBUCION NO
NOS DEJA ACCEDER A ELLA, TOCA BAJARSE EL PROGRAMA , COMPILARLO E
INSTALARLO

MUCHO CUIDADO DE EN PRODUCCIÓN INSTALAR BINARIOS QUE NO SE BAJEN


DIRECTAMENTE DE LOS REPOSITORIOS OFICIALES DE LA DISTRIBUCIÓN

Pasos para compilar e instalar un programa con gcc

Primero instalamos el compilador, para ello marcamos instalar compilador,


librerías de desarrollo, etc.. Suponiendo que esto está hecho.

1 Descarga el código fuente del programa o controlador desde


Internet o desde cualquier otro medio. Lo más probable es que esté en
forma de "tarball" y tenga una extensión de archivo de tipo .tar, .tar.bz2,
o .tar.gz. A veces , en vez de esto, utilizan un archivo .zip.

1 Descomprime el código que has descargado. Para los archivos .zip


utiliza el comando "unzip tuarchivo", y para los .tgz o .tar.gz utiliza el
comando "tar -zxvf tuarchivo". Para los .bz2 utiliza "tar -jxvf tuarchivo", o
extrae tus archivos a través de la interfaz gráfica

1 En la terminal, dirígete hacia el directorio que creaste recientemente (cd


nombreDelDirectorio).

1 Ejecuta el comando "./configure" para configurar el código fuente


automáticamente. Puedes utilizar los argumentos como "--prefix=" para
controlar la ubicación de la instalación. Esto comprueba que tengas las
librerías y las versiones apropiadas.
Curso de SuseLinux
César Moreno Iglesias [email protected]

1 Una vez realizada la configuración, ejecuta "make", el cual lleva a cabo la


compilación (puede demorarse desde unos pocos segundos hasta varias
horas). Se creará un ejecutable para el programa en el directorio bin,
dentro del directorio del código fuente.

1 Y finalmente instalamos. Una vez realizada la configuración, ejecuta


"make", el cual lleva a cabo la compilación (puede demorarse desde unos
pocos segundos hasta varias horas). Se creará un ejecutable para el
programa en el directorio bin, dentro del directorio del código fuente.

DONDE FALLA ESTO.. Si el configure esta bien hecho , debe fallar ahí, y
típicamente es por falta de una librería, o una versión de librería superior
que se necesita.. Otras veces falla, en la compilación, y de nuevo es por
una librería, porque a lo mejor se ha marcado una librería inferior a la que
Curso de SuseLinux
César Moreno Iglesias [email protected]
realmente se necesita, y en la compilación se invoca imaginaos a una
función que no existe..

Cuando esto ocurre, hay que averiguar que pasa, y típicamente bajar la
librería buena, y ya te toca liarla PARDA, porque hay que apañárselas para
meter la librería en local para que se detecte desde ahí el configure, o
meterla a nivel del sistema operativo, pero que encuentre primero la que
acabas de meter y no la que había antes,etc..

Gestión de Usuarios/Grupos

Añadir usuarios/grupos

- useradd -help
Modo de uso: useradd [opciones] USUARIO
useradd -D
useradd -D [opciones]

Opciones tipicas:
-b, --base-dir DIR_BASE directorio base para el directorio personal
de la nueva cuenta
-c, --comment COMENTARIO campo GECOS de la nueva cuenta
-d, --home-dir DIR_PERSONAL directorio personal de la nueva cuenta
-D, --defaults imprime o cambia la configuración
predeterminada de useradd
-e, --expiredate FECHA_CADUCIDAD fecha de caducidad de la nueva cuenta
-f, --inactive INACTIVO periodo de inactividad de la contraseña
de la nueva cuenta
-g, --gid GRUPO nombre o identificador del grupo primario de
la nueva cuenta
-G, --groups GRUPOS lista de grupos suplementarios de la nueva
cuenta
-h, --help muestra este mensaje de ayuda y termina
-m, --create-home crea el directorio personal del usuario
-M, --no-create-home no crea el directorio personal del usuario
-N, --no-user-group no crea un grupo con el mismo nombre que el
usuario
-o, --non-unique permite crear usuarios con identificadores
(UID) duplicados (no únicos)
-p, --password CONTRASEÑA contraseña cifrada de la nueva cuenta
-r, --system crea una cuenta del sistema
-R, --root CHROOT_DIR directory to chroot into
-s, --shell CONSOLA consola de acceso de la nueva cuenta
-u, --uid UID identificador del usuario de la nueva cuenta
-U, --user-group crea un grupo con el mismo nombre que el
usuario
-Z, --selinux-user USUARIO_SE utiliza el usuario indicado para el usuario
de SELinux

- groupadd
- usermod
- groups
- userdel
- groupdel

/etc/default/useradd
Aquí están los valores por defecto para la craecion de cuentas
NOTA: El usuario root tiene el uid=0, y group=0.. Lo que cuenta es el uid, asi
es que con que un usuario se le ponga el uid 0, ya es root.
Curso de SuseLinux
César Moreno Iglesias [email protected]

Ejemplos
- Crear grupo marketing
#groupadd marketing

Chequear group en fichero /etc/group


- Crear usuario Carlos, con directorio home, bash Shell, y grupo
marketing
#useradd -m -g marketing -s /bin/bash juan
#useradd -m -p "perro1234" juan
Chequear usuario en /etc/passwd y /etc/shadow
- Modificar Usuario cambiar de grupo
#usermod -g users juan
- Modificar Usuario para añadirle un grupo suplementario
- #usermod –G users,marketing juan
¡!!!Cuidado con esto que los grupos suplementarios no se ven en los
fichero standard /etc/passwd, /etc/shadow solo muestran el default
group!!
- Borramos usuario
userdel –r que borra directorio home y demás
userdel –f fuerza el borrado, pero cuidado porque también se carga el
grupo si el grupo se llama igual que el usuario
#userdel –r juan

USAR EL YAST ES RECOMENDABLE AUNQUE SEA SOLO POR VER LOS GRUPOS
ADICIONALES DE TODOS LOS USUARIOS

NOTA: LA CONTRASEÑA CON USERADD HAY QUE SUMINISTRARLA YA


ENCRIPTADA. PARA ESO TIPICAMENTE HAY QUE HACERSE UN SCRIPT POR
EJEMPLO EN PYTON/PERL QUE INVOQUE A LA FUNCION DE ENCRIPTACION DE
TURNO

#perl -e 'print crypt("ilovelinux", "salt"),"\n"'


#usermod –p sa3tHJ3/KuYvI jose

Sino directamente podemos cambiar las passwd, con el comando passwd,


hacemos passwd y el nombre del usuario. Con passwd hacemos la encriptación
con sha-512 . Con Crypt también con modificadores se puede elegir el algoritmo
de encriptación , DES,sha-251,etc., por ejemplo \$6\ implica sha-512
#passwd jose

Quota
1.-Instalamos quota
#zypper in quota

2.-Configuramos quotas en la partición home. Vamos al Yast en particionado y


sobre /dev/sda3 que es el home , editamos y metemos en las opciones del fstab
habilitar quotas
Curso de SuseLinux
César Moreno Iglesias [email protected]

3.- Tras confirmar los cambios vemos si esta corriendo el servicio de quotas.
#systemctl status quotaon
Curso de SuseLinux
César Moreno Iglesias [email protected]
Si no esta lo levantamos
#systemctl start quotaon

4.- Ya podemos asignar quotas a los usuarios

Integración con Directorio Activo (LDAP)


Suse Linux permite la integración con directorio activo/otros ldap de varias
formas.
Opcion 1: Mediante SSSD
https://help.ubuntu.com/lts/serverguide/sssd-ad.html

Tambien el yast te brinda una configuración grafica

Opcion 2: Mediante Samba


1 Lo importante es meter el nombre del dominio
2 Meter el usuario de bind y passwd (que nos lo da el administrador de
dominio)
3 Tipicamente la clase de objeto y el atributo no hace falta meterlo es el por
defecto
4. Y como la autenticación por defecto va con Kerberos, se pone como
servidor NTP al Domain Controler para que las horas sean idénticas, y los
tickets de kerberos no se vayan.
Curso de SuseLinux
César Moreno Iglesias [email protected]

 Metemos domio imaginad (acme.com)


 Se especificar si cada usuario cuando se logue es esta
maquina se le crea el home automáticamente
 Si se ajusta ssh también para que este integrado con DA
 Se meten los ntp server del DC
 Se le da OK, y nos pedirá

Modulos PAM
Comentar simplemente que los modulos de autenticación PAM, son unos
modulos que abstraen las AAA (autenticación, autorización y accounting) para
que podemos integrarnos con cualquier cosa. Imaginad, clave clásica, diferente
formas de cifrar clave, autenticación biométrica, de un solo uso, etc.. Es una
abstraccion
Curso de SuseLinux
César Moreno Iglesias [email protected]
Jaulas
Se basa en el comando Chroot
Chroot: es una operación que invoca un proceso, cambiando para este y sus hijos
el directorio raiz del sistema.
Ejemplo de hacer una Jaula…

1 mkdir /home/jaula

2 adduser enjaulado

3 Creamos la Jaula

chroot --userspec=${idusuario}:${idgrupo}
/usr/scr/jaula
el idusuario y grupo lo sacamos del /etc/passwd
“grep –i enjaulado /etc/passwd

Ejemplo: chroot --userspec=1002:1003 /usr/src/jaula/

Lo ponemos ahi en lugar del directorio de propio usuario por si hay que
meter otros usuarios que se aprovechen de la misma jaula. Dara error por
ejemplo porque no encuentra el /bin/bash.

4.. Nos dara un error porque en ese raiz no hay


binario para hacer nada, ni binarios ni liberias, y
hay que meterlas en la jaula..
Esto es un rollo, porque para cada cosas que queramos
meter hay que copiarla y sacar las librerias para
meterlas, hay que sacar las librerias necesias con ldd
• mkdir /usr/src/jaula/bin/
mkdir /usr/src/jaula/lib64/

linux-gv5n:~ # ldd /bin/bash


linux-vdso.so.1 (0x00007ffe36341000)
libreadline.so.6 => /lib64/libreadline.so.6 (0x00007efd585e8000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007efd583b3000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007efd581af000)
libc.so.6 => /lib64/libc.so.6 (0x00007efd57e07000)
/lib64/ld-linux-x86-64.so.2 (0x0000556b3d240000)
linux-gv5n:~ # ldd /bin/ls
linux-vdso.so.1 (0x00007ffdf0f0e000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6c9b3a1000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f6c9b19c000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f6c9af92000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6c9abea000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f6c9a984000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f6c9a77f000)
/lib64/ld-linux-x86-64.so.2 (0x0000561de6447000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f6c9a57a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6c9a35d000)

Copiamos todas las librerias, y ejecutamos de Nuevo el commando de chroot

http://bytelearning.blogspot.com.es/2015/06/como-crear-una-jaula-virtual-
con-chroot.html
Curso de SuseLinux
César Moreno Iglesias [email protected]
Su/sudo
Comando su
El comando "su" (Switch User, llamado (sin ser la buena connotación) "Super
User" ) permite abrir una sesión con el ID (ID identificante) de un otro usuario, o
de iniciar un shell de conexión con el nuevo ID.

#su pedro (nos pide contraseña , sigue en la misma carpeta donde estaba y no
recarga ni shell, ni environment)

#su – pedro (nos pide contraseña , pasa al home del usario pedro, recarga shell y
environment

Para salir se hace un #exit,, hay mas detalles pero no os cuento, porque son
malas practicas que por error podeis equivocaros y liarla.

Sudo users
Cuando tenemos usuarios que no son root, y queremos que sean capaces de
hacer tareas administrativas (crear usuarios, instalar software, podemos dar
esos privilegios mediante la modificación de este fichero /etc/sudoers)

Para editarlo usamos el comando visudo

 Por defecto es que cualquier usuario que conozca la contraseña de root


puede hacer un sudo y ejecutar cualquier comando reservado, imaginad
sudo reboot

Si queremos que solo los usuarios X puedan hacer sudo, hay que comentar
las dos líneas anteriores y dar permisos usuario por usuario (o grupo por
grupo)
 root ALL=(ALL) ALL indica que el usuario root puede ejecutar
desde todos los terminals , actuando como cualquier usuario del
sistema, y corriento todos los commandos
 Por tanto si queremos añadir un usuario ponemos por ejemplo
jose ALL=(ALL) ALL
 Si queremos prevenir que los usuarios ejecuten ciertos comandos pues
ponemos las lista de comandos con ¡.. Es decir o los comandos se lo
ponemos en lista blanca, o se los ponemos en lista negra, lo que más fácil
nos sea
 El grupo %wheel, es típicamente un grupo con privilegios de root, asi es
que añadir los usuarios al grupo %wheel y dar permisos de sudo puede
ser una buena practica.
%wheel ALL=(ALL) ALL

Ejemplos
 Habilitar a que el usuario pedro, solo pueda ejecutar un poweroff
Curso de SuseLinux
César Moreno Iglesias [email protected]
pedro ALL= /sbin/poweroff
user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

NOTA SE PUEDEN HACER COMBINACIONES DE TODO TIPO, CON O SIN PASSWD,


ALIAS DE COMANDOS, PERMISOS PARA GRUPOS, INTEGRACION CON USUARIOS
SUDO PARA LDAP,

Paginas de manual
#man comando

En ocasiones el mismo programa posee diversas secciones de manual, cuando


esto ocurre suele mostrar un mensaje indicando la sección, como man(1) y
man(7), o exit(1) y exit(3). Para acceder a estas secciones basta con indicarlo de
la siguiente forma:
# man 3 printf
Secciones:

Sección Descripción

1 Comandos Generales

2 Llamadas al sistema

3 Biblioteca C de funciones

4 Ficheros especiales (normalmente dispositivos, que se pueden encontrar en /dev) y drivers

5 Formatos de fichero y convenciones

6 Juegos y salvapantallas

7 Miscelánea

8 Comandos de administración del sistema y Demonios


En algunos sistemas están disponibles también las siguientes secciones:
Sección Descripción

0 Archivos de cabecera de la biblioteca estándar de C

9 Rutinas del Kernel

N Tcl/Tk

X X Window System

Vim
Upgrade de vi, siguen funcionando los comandos de vim con ventajas
1.- vim archivoEjemplo.txt
2.- pulsar “i” para escribir
3.- podemos usar las flechas para movernos líneas abajo, arriba
4.- Presionamos ESC, para salir del modo edición y pasar al modo comando
5.- pulsar “:q” para salir
6.- pulsar “:q!”, para forzar salir
7.- pulsar “:w” para guardar
8.- pulsar “:wq!” para salir y guardar
9.- pulsar “v” para pasar a modo visual
Curso de SuseLinux
César Moreno Iglesias [email protected]
10.-seleccionar línea con las flechas y pulsar “y”, ya lo tienes “en el
portapapeles”.. Si en lugar de pulsar “y” pulsamos “x” el texto se corta
11.-seleccionar con las flechas donde pegar y pulsar “p”
12.- Ir a la línea Y, desde comando “Esc :num_linea”

Otros:
Abrir fichero “:open file-name”
Insertar al final de línea “Esc y luego shift+A”
Borrar carácter por comando “Esc y luego x”
Borrar línea completa por comando “Esc y luego dd”
Buscar patrón “Esc / y luego patrón”.. Con “n” siguiente ocurriencia hacia
delante, con “N” siguiente ocurrencia hacia atrás
Sustitución global :%s/palabra1/palabra2/g reemplaza palabra1 por
palabra2 .. Sin la g final solo la primera ocurrencia.
Guardar fichero con otro nombre “:w newFilename.txt”
Deshacer el ultimo cambio “Esc y luego u”
Rehacer el ultmo cambio “Esc y luego control+R ____
Ir al principio del fichero gg
Ir al final del fichero G

Tutorial completo de VIM, aquí.


http://www.emezeta.com/articulos/manual-para-aprender-a-utilizar-vim

Alternativa: nano , instalarlo con “zypper in nano”

Logado
https://www.suse.com/documentation/sles11/book_sle_tuning/data/
sec_tuning_logfiles_logs.html

Si os fijais NO ESTA SYSLOG, si quereis este log hay que instalarlo desde zypper,
# zypper info syslogd

En su defecto, en lugar de syslog , en 13.2, esta el journalctl , que loga toda la


actividad de systemd , y es bastante potente porque permite el filtrado de la
información sin hacer grep.
Seguir los mensajes en tiempo real: journalctl –f

http://lamiradadelreplicante.com/2015/03/29/ver-los-logs-del-sistema-en-
linux-con-journalctl/
Curso de SuseLinux
César Moreno Iglesias [email protected]

RED
Conceptos básicos UDP / TCP

UDP User Datagrama Protocol


Es muy rápido pero no confiable, pues básicamente no confirma la entrega del
paquete desde el otro extremo, por tanto tampoco retrasmite si hay perdidas, ni
tiene una forma de controlar gestionar la velocidad de transmisión

TCP Transmision Control Protocol


1. Confirma la entrega de paquetes
2. Retransmite en caso de perdida
3. Tiene mecanismos para controlar el flujo, la velocidad con las que se
envían los paquetes para que ninguno de los dos extremos se sature
Curso de SuseLinux
César Moreno Iglesias [email protected]
Sobre esta base empezaremos a hablar de:
De la tabla de rutas:
1. ips asociados a interfaces de red físicos
2. ips asociados a interfaces de red virtuales
3. de la gestión de la tabla Arp, mac
4. de asignacion dinámica o estatica de ip (dhcp)
5. de servicios cliente/servidor que se monta sobre esta estructura NFS,
NTP,TELNET,FTP,SSH,DNS,etc

Configurar la red manualmente desde línea comandos


Lo primero es vamos a ver que tenemos configurado
Ver los interfaces
#ifconfig
# ip addr
#ip link show eth0
Comentese que se ve
Ver la tabla de rutas
#route
#netstat –r
#ip route
Comentese que se ve

Ver las sesiones todas con los puertos en numerico


# netstat –an
#ss -an
sesiones tcp con los puertos del demonio/servicio que los trabaja
#netstat –nt
#ss -nt
#netstat --udp --all
#ss –-udp –all

puertos de escucha tcp en estado listen


#netstat –ntl
#ss –ntl
#ss -tl

Ver el Pid asociado al socket


Estadisticas de Red
#netstat -ni

Ver información explicita de cada uno de los interfaces que salen en el


ifconfig
linux-gv5n:/etc/grub.d # cat /etc/sysconfig/network/ifcfg-eth0
BOOTPROTO='dhcp'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
Curso de SuseLinux
César Moreno Iglesias [email protected]
NAME=''
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
DHCLIENT_SET_DEFAULT_ROUTE='yes'
Comentese que se ve
Que DNS están configurados
#cat /etc/resolv.conf

# Generated by NetworkManager
search localdomain suse
nameserver 10.211.55.1
Lo del search local se puede quitar, es para que busque en nuestro dominio local
sin necesidad de cualificar todo
Comando nslookup para probar temas de resolución de dns.. Por otro lado el
servicio nscd lleva toda la parte de cache de dns, se le puede hacer un flush etc,
#nslookup
>www.ucm.es
Server: 10.211.55.1
Address: 10.211.55.1#53

Non-authoritative answer:
www.ucm.es canonical name = ucm.es.
Name: ucm.es
Address: 147.96.1.15

> set querytype=MX


> telefonica.com
Server: 10.211.55.1
Address: 10.211.55.1#53

Non-authoritative answer:
telefonica.com mail exchanger = 10 smtp.pro.telefonica.com.

#dig
dig www.ucm.es
dig telefónica.com MX
dig telefónica.com SOA
dig telefónica.com NS
dig @NameServer telefónica.com

Comentar el /etc/nsswitch.conf que da el orden de resolución , típicamente


“host” y luego “dns”, y por tanto si metemos una entrada en el archivo
/etc/hosts esta tiene prioridad y se resuelve directamente sin pasar por
encuestar al DNS

Tirar , levantar, ver el estado de un interfaz


#ifconfig eth0 down
#ifconfig eth0 up
#ip link set eth1 down
#ip link set eth1 up
Curso de SuseLinux
César Moreno Iglesias [email protected]
Pruebese entre medias un ifconfig para ver que desaparece.. Cuando lo
tiramos la Pila TCP no cambia, y si luego levantamos las conexiones se
mantienen

Levantar un interfaz virtual eth1


#ifconfig eth0:1 10.211.55.17
#ifconfig eth0:1 192.168.1.24/24

Usar el modulo dummy


#modprobe dummy
#ip link set name eth10 dev dummy0
#ip addr add 192.168.100.199/24 brd + dev eth10 label
eth10:0

Poner un ip a un interfaz determinado


#ip address add 10.211.55.17 dev eth0
Definir la mtu de un interfaz
#ip link set mtu 9000 dev eth0
#ifconfig eth0 mtu 900

Se puede probar a levantar y tirar el interfaz virtual


Anadir una ruta al sistema
Default GW
#route add default gw 192.168.1.1
De Host por un GW (quitar es idéntico pero con del en lugar de add)
linux-gv5n:~ # route add -host 10.12.4.3 gw 10.211.55.1
linux-gv5n:~ # netstat -nrv
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.211.55.1 0.0.0.0 UG 00 0 eth0
10.12.4.3 10.211.55.1 255.255.255.255 UGH 00 0 eth0
10.211.55.0 0.0.0.0 255.255.255.0 U 00 0 eth0

De net por un GW (quitar es idéntico con del)


inux-gv5n:~ # route add -net 10.12.5.0 netmask 255.255.255.0 gw
10.211.55.1
linux-gv5n:~ # netstat -nrv
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.211.55.1 0.0.0.0 UG 00 0 eth0
10.12.5.0 10.211.55.1 255.255.255.0 UG 00 0 eth0
10.211.55.0 0.0.0.0 255.255.255.0 U 00 0 eth0
Listar tabla arp
#arp –a
#ip neigh
Comandos típicos de arp, para borrar la tabla, meter mac estáticas, etc
Cambiar la dirección MAC de nuestro interfaz de RED
#ifconfig eth10 hw ether 00:22:22:ff:ff:ff
Curso de SuseLinux
César Moreno Iglesias [email protected]
Dejar la configuración persistente para el arranque
Ficheros de configuración implicados, están aqui
-Configuracion de cada interfaz
/etc/sysconfig/network/ifcfg-*
-Configuracion para rutas esteticas, en dos puntos , por un lado rutas
globales estaticas, y por otra rutas relacionados con el interfaz,
tipicamente el GW usado por el interfaz en cuestion
/etc/sysconfig/network/routes y /etc/sysconfig/network/ifroute-*

linux-gv5n:/etc/sysconfig/network # more routes


10.29.9.100 10.211.55.1 255.255.255.255 -
10.4.33.238 10.211.55.1 255.255.255.255 -
10.29.2.13 10.211.55.1 255.255.255.255 -
10.29.7.0 10.211.55.1 255.255.255.0 -

Ejemplo de configuracion de un Nuevo interfaz estatico


-Vamos a /etc/sysconfig/network/ifcfg-eth1
-Lo editamos y por ejemplo ponemos este contenido
BOOTPROTO='static'
BROADCAST='10.211.55.255'
IPADDR='10.211.55.18'
NETMASK='255.255.255.0'
NETWORK='10.211.55.0'
onboot='yes'

Todo esto que hemos hecho a Mano, se puede cargar y ver desde el YAST, y
modificar y volver a salvar
Abrese Yast y vease

Cuando se hacen cambios en los ficheros de configuración a mano, si se quieren


que se cojan los cambios, se puede hacer un “Netconfig update”

Mi consejo es tocar siempre todo desde el mismo lado, SIN MEZCLAR, es decir si
haceis las cosas a pelo todo a pelo, si haceis cosas desde YAST todo desde YAST..
No obstante YAST no os dara todas las opciones, con lo que os puede tocar
ponerlas a mano.

Existe también una herramienta-comando para definir de forma permanente


interfaces virtuales vconfig. , e incluso desde el YAST podríamos anadir una
interfaz virtual , que es anadir interfaz, y seleccionar VLAN

Para parar o arrancar la red


Systemctl start/stop network.service

NETCAT
https://www.solvetic.com/tutoriales/article/2873-como-utilizar-la-
herramienta-red-net
Curso de SuseLinux
César Moreno Iglesias [email protected]

Interface Tun/Tap
Interface son Software, no físicos, existen solo el kernel. No tienen un hw
especifico asociado. Entoces, lo que se consigue es típicamente pasar el trafico
que nos entra o nos sale de la tarjeta de red, por este interfaz, con el que ya
conseguimos hacer cosas, exploramos el paquete , cambiamos el contenido,etc

Tap trabaja a Nivel 2


Tup trabaja a Nivel 3

Interfaces Bond Interfaces


https://access.redhat.com/documentation/en-US/
Red_Hat_Enterprise_Virtualization/3.3/html/Installation_Guide/
Bonding_Modes.html
Activo-pasivo
Activo-activo en función del mac
Agregacion de interfaces para conseguir ancho de banda

Os recomiendo hacerlo por el entorno grafico, o con la herramienta de


administración de red de la distribución.

modprobe bonding

$ sudo ip link add bond0 type bond mode 802.3ad

$ sudo ip link set eth0 master bond0

$ sudo ip link set eth1 master bond0

auto bond0

iface bond0 inet static

address 192.168.1.150

netmask 255.255.255.0

gateway 192.168.1.1

dns-nameservers 192.168.1.1 8.8.8.8


Curso de SuseLinux
César Moreno Iglesias [email protected]

dns-search domain.local

slaves eth0 eth1

bond_mode 0

bond-miimon 100

bond_downdelay 200

bound_updelay 200

NetworkManager.service'
Es un gestor de red, que tiene en cuenta la movilidad y hace cosas automáticas,
por ejemplo si cambiamos de wifi..
En la 13.2, al menos en mi entorno de virtualización no funciona, asi es que
vamos a cambiar a Wicked, que no obstante es el gestor de red por defecto de
Suse Enterprise.

Wicked
Si la red la gestionamos desde Yast, nos da igual un gestor de red que otro,
porque no notamos nada..
El “malvado” software que gestiona la red, llamado asi porque nació de un
congreso de hacking
Seria equivalente a iproute2 que esta en RedHat o Debian.
En principio el beneficio de meter wicked como gestor de red, es su integración
con systemd, y la posibilidad de soportar directamente VLAN, bridging
(switch virtual conectar interfaces fisicos y virtuales sin que
ninguno sepa de la existencia del otro), bonding(cosas como
trunk de interfaces, H.A. de interfaces), tun, tap, (tun y tap son
interfaces virtuales del kernel, que se pueden usar para
atachear ahi un programa concreto) etc
Curso de SuseLinux
César Moreno Iglesias [email protected]

Vease el pdf de wicked del curso.


https://www.suse.com/documentation/sles-12/pdfdoc/
networking_with_wicked_in_suse_linux_enterprise_12_guide/
networking_with_wicked_in_suse_linux_enterprise_12_guide.pdf

Configurar HW interfaces
Podemos hacerlo con un paqute que se llama ethtool
Curso de SuseLinux
César Moreno Iglesias [email protected]
# zypper in ethtool
https://www.suse.com/communities/blog/hard-code-speed-and-duplex-
settings-nics/
ethtool –s eth0 duplex full speed 100 autoneg off

ntp
Desde el punto de vista cliente
Pos supuesto podemos configurar ntp desde yast, pero vamos a ver la
configuración de fichero para que nos valga para cualquier distribución.

El demonio-servicio que lleva ntp es el ntpd


#systemctl status ntp
Los ficheros de configuración que usan ntp, son /etc/ntp.conf y /etc/ntp.keys
El fichero de claves es para que os autentique el servidor de ntp, si esta
actividado la autenticación en el servidor.

Forzar la actualización de hora contra un servidor ntp


#ntpdate ServidorHora

Con systemd, mediante el comando timedatectl hacemos una gestión de la


configuración del tiempo
Por otro lado la herramienta ntpq , es un Shell que os deja encuestar y trabajar
con ntp, típicamente el comando mas utilizado es el ntpq –p
inux-gv5n:/etc # ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
+ntp.redimadrid. 193.147.107.33 2 u 86 128 377 4.963 119.319 123.589
*62-210-244-146. 37.187.56.220 3 u 64 256 377 32.458 -28.647 115.414

.
Con las primitivas de restrict que se ven en el fichero se puede controlar si nos
dejamos preguntar la hora, que nos dejamos preguntar y a quien , o también
restringimos a que clientes les dejamos conectarse.
El protocolo ntp es peligroso y se puede enjaular

Una explicación mas en detalle de las claves la tenemos aquí


http://es.galsys.co.uk/news/ntp-authentication-explained/

Desde el punto de vista del servidor


Se usa el mismo fichero porque un servidor ntp, puede ser y es un cliente de otro
servidor ntp de estrato superior…
https://echaleunvistazo.wordpress.com/2015/02/17/configurar-servidor-ntp-
en-ubuntu/

NFS
De NFS tenemos varias versiones, siendo la versión 4 de NFS , esto es NFSv4 la
mas moderna. Al ser la mas moderna, es la mas segura, la que trabaja con mas
protocolos de autenticación distintos, la que permite mecanismos de replicación
y alta disponibilidad,etc
Curso de SuseLinux
César Moreno Iglesias [email protected]
Los montajes donde veamos la palabra global, nos da una pista que nos vienen a
decir que hay una estructura configurada de forma que el cliente va a ir a uno u
otro servidor, asi tenemos la alta disponibilidad . GFS
DRBD podemos usarla para gestionar la replicación entre los servidores de NFS
que tengamos
Por otro lado se puede activar sobre el NFS escogido Parallel NFS que
incrementa significativamente las tasas de transferencia de los archivos.

Como cliente
Comentar comando mount, con o sin flags
#mount nos dice todo lo que esta montado en una maquina , tipos de fichero,
modo, etc
1. Manualmente
Con un comando mount
mount nombreServidor:/var/data /mnt/nfs/data
2. Metiendo la entrada en fstab
nfs.example.com:/data /local/path nfs rw,noauto
0 0
La entrada noauto es para que no mounte en la arrancada, luego ya nosotros
hacemos mount /local/path y se monta
NOTA: interesa montarlo automatico en la arrancada porque da problemas
3. Para que monte y se desmonte automáticamente sin que nos demos
cuenta, se usa el AUTOMAP, que lo que hace es que detecta que el usuario
a entrado al directorio y justo en ese momento monta el filesystem, para
después desmontarlo si pasa un tiempo

Como servidor
Hacemos un zypper install yast2-nfs-server, que se trae el modulo del yast para
NFS y además como tiene dependencia del NFS server, instala los modulos del
kernel para ser servidor de NFS
Curso de SuseLinux
César Moreno Iglesias [email protected]

SAMBA
Como Server

/etc/samba/smb.conf
https://www.samba.org/samba/docs/using_samba/ch06.html
Ejemplo sencillo de configuración como servidor
[global]
workgroup = METRAN
encrypt passwords = yes
wins support = yes
log level = 1
max log size = 1000
read only = no
[homes]
browsable = no
map archive = yes
[printers]
path = /var/tmp
printable = yes
min print space = 2000
[test]
browsable = yes
read only = yes
path = /usr/local/samba/tmp
Curso de SuseLinux
César Moreno Iglesias [email protected]
Montar en linux una share de windows que se exporta por
Netbios..

Como cliente

Se hace con el comando mount de toda la vida, suponiendo que los paquetes de
sambas están instalados
1. Hago un directorio donde montar el share, ejemplo
mkdir /windows/winshare
2. Monto
mount -t smbfs //winmachine/testshare /windows/winshare

3. Si quiero que al bootar la maquina se monte solo la meto en el /etc/fstab

Por otro lado la utilidad smbclient me ayuda a ver los recursos


compartidos de las maquinas
earth:~ # smbclient -L winmachine -U testuser
added interface ip=192.168.0.1 bcast=192.168.0.255 nmask=255.255.255.0
Password:
Anonymous login successful
Domain=[WORKGROUP] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]
Sharename Type Comment
--------- ---- -------
IPC$ IPC Remote-IPC
testshare Disk test-share
ADMIN$ Disk Remoteadmin
C$ Disk Standard share
Server Comment
--------- -------
WINMACHINE
Workgroup Master
--------- -------
WORKGROUP WINMACHINE

SuseFirewall2/iptables
Conceptos básicos
Meter sesión con el SYN tcp

Para el caso de TCP, se evalúan la regla únicamente en el establecimiento de la


sesión TCP , en el triple hand-shake, analizando los paquetes SYN. El resto de
paquetes pasan el firewall si machean con una sesión que el FW encuentra en su
tabla de sesiones, si esa sesión existe el paquete pasara, por el hecho de existir
esa comunicación TCP dentro de la tabla de sesiones del FW.
Curso de SuseLinux
César Moreno Iglesias [email protected]

Tabla de sesiones

La tabla de sesiones de un firewall es el listado de todas las sesiones establecidas


que han atravesado el firewall y que aun no han expirado por inactividad

Se mete una nueva sesión en la tabla de sesiones, cuando se ha negociado


correctamente el Triple-handshake, superándose la aprobación de la reglas
cargadas en el FW.

La sesión se matiene en la tabla de sesiones mientras exista actividad, esto es,


mientras los dos equipos a cada lado del FW intercambien paquetes

La sesión desaparece del FIREWALL cuando uno de los dos lados manda un FIN,
o bien porque el tiempo de inactividad de la sesión ha llegado a su final.
El tiempo expira si para una sesión establecida, lleva X seg sin pasar por allí
ningún paquete IP. En ese caso se expira la sesión y se borra dicha sesión de la
tabla de sesiones.

OJO con esto. Porque origina muchos problemas para protocolos específicos que
atraviesan un FW, por ejemplo el pool de conexiones que atraviesan un fw.
Curso de SuseLinux
César Moreno Iglesias [email protected]
Cuando uno de los dos extremos manda un FIN, el FW da un tiempo de gracia
para que llegue el FIN del otro extremo, sino llega LIQUIDA LA SESSION, y la
quita de la tabla de sesiones. Cuando esto ocurre , no siempre se MANDA un
RSET a los extremos, lo cual puede ser muy problemático.

NAT de entrada/salida o Mascarading

Posibles causa del drop


Dropear , tirar una sesión significa cortar la posibilidad de que una sesión nueva
se establezca entre dos equipos a cada lado del FW, o bien FINALIZAR una sesión
ESTABLECIDA Existe, que provoca que paquetes que vengan por esa sesión no
existente no puedan atravesar el firewall, y por tanto tenga que ser dropeados.

Posibles Causas

1. DROP por no cumplir ninguna de las reglas establecidas


2. DROP por Idle de sesión. Se borra sesión de tabla de sesiones por
inactividad, y no tiene porque avisarse a los extremos con un RSET
3. DROP por problemas de CPU-Memoria del FW. Ante la falta de recursos el
FW suele tirar las sesiones más viejas, menos activas
4. DROP por haber alcanzado el máximo numero de sesiones que el FW
puede gestionar
5. DROP por problemas de timing.. El FW tiene preconfigurado distintos
tiempos para el triple handshake, FIN, etc,etc… Si alguno de los extremos
se sale de los time-out definidos en el FW se puede hacer un DROP de la
sesión.
Curso de SuseLinux
César Moreno Iglesias [email protected]
6. DROP porque el FW crea que se trata de trafico malicioso, de algún tipo de
ATAQUE. Puede ser un ataque a nivel IP, a nivel TCP, o a nivel de la
aplicación.

-FW trabajando a nivel 5 – Se trata de que el fw haga un análisis de protocolo, o


que por ejemplo finalize las sesiones ssl, etc,etc

FW con IDP/IPS
Sistema de detección de Intruso. No es un FW, pero el FW puede traer el propio
software o trabajar de forma colaborativa con un IDS externo.
Basicamente lo que hace es el análisis pormenorizado del tráfico de red, el cual al
entrar al analizador es comparado con firmas de ataques conocidos, o
comportamientos sospechosos, como puede ser el escaneo de puertos, paquetes
malformados, etc. El IDS no sólo analiza qué tipo de tráfico es, sino que también
revisa el contenido y su comportamiento.

Si el IDS esta fuera del FW, se hace que el trafico lo atraviese haciendo que sea el
next-hop entre el router y el FW para el trafico entrante.

EL IDS se carga con firmas y patrones conococidos. Para reconecer ese trafico y
tirarlo si es necesario. Puede trabajar de forma cooperativa con un antivirus, que
al final lo que tiene es una carga de firmas.
Curso de SuseLinux
César Moreno Iglesias [email protected]

Compilacion de Reglas
El numero de reglas de FW necesarios para un CPD grande crece enormemente,
de forma que fácilmente llegamos a miles y miles de reglas. Estas reglas se hacen
inmanejables rápidamente. Para ello los interfaces del FW dan opciones gráficas
de configuración, de esta forma ocurre que

- Se pueden definir grupos de clientes


- Se pueden definir grupo de servidores
- Se pueden definir filtros sueltos
- Se pueden definir configuraciones de timing especificas
- Se pueden definir configuración de la gestión de sesiones especificas

Todo muy visual, de forma que luego se relacionan entre si los grupos, las reglas,
los filtros, las reglas de NAT,etc,etc.. Esto al final, implica que la regla que se carga
en el FW no se escribe directamente, sino que SE COMPILA, que es como decir,
que todo lo que he creado golpe de raton , que entiendo fácilmente , tiene que
salir el conjunto real de las reglas a cargar.. Esto es a lo que se denomina
compilación de reglas del FW

En un firewall personal de un PC, el conjunto de reglas es tan reducido, que


somos capaces con unas cuantas decenas de reglas de saber exactamente que
tiene nuestro FW, e incluso metiendo las reglas a mano no nos supone un
problema. En un FW de un CPD la cosa cambia porque los miles de reglas a
cargar nos requieren de un interfaz amigable, que entendamos, y que luego al
compilar genere las reglas reales.

SuseFirewall2/iptables
SuseFirewall2 es el firewall suse pero que va montado sobre iptables, porque
genera reglas en formato iptables.
Realmente es como un script , que en función de una configuración mas intuitiva
que le damos , termina generando las reglas de iptables.

https://en.opensuse.org/SuSEfirewall2

Para trabajar con el firewall Suse o bien


Editamos el archivo /etc/sysconfig/SuSEfirewall2 y luego llamamos a
/sbin/SuSEfirewall2

O trabajamos con Yast


Curso de SuseLinux
César Moreno Iglesias [email protected]

En este caso lo mejor es trabajar con Yast, aunque no tendremos todas las
opciones posibles desde el entorno de yast

El firewall trae tres zonas preconfiguradas, como casi todos los firewall de uso
domestico
 Zona Externa - Que tiene acceso a internet
 Zona Interna - Que es la zona de confianza
 Zona DMZ - Que es la zona donde ponemos servidores y entran
conexiones de internet

Se pueden definir nuevas zonas, anadimos zonas desde el fichero de


configuración no se ven en el entorno grafico … Con el editor de
configuración de yast se pueden tocar a mano la configuración o editar el
fichero

/usr/share/doc/packages/SuSEfirewall2/EXAMPLES.

Esta variable del fichero de configuración las define


FW_ZONES="gestion servicio"

Como en todos los firewall para cada una de las zonas, podemos poner los
servicios predefinidos.. Hay servicios que requieren de varias reglas o de
temporizadores especiales para que no expiren las sesiones
Curso de SuseLinux
César Moreno Iglesias [email protected]

Por otro lado también nos brinda la posibilidad de meter reglas asociadas a las
zonas de una forma muy sencilla, por puertos o rangos udp o tcp, por protocolos
IP, por RPC (ya casi no se usa)
Los protocolos IP que reconoce dice la documentación que son estos
http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml

Los puertos TCP / UDP para conocerlos típicamente nos fijamos en el


/etc/services

Masquerading
Anadir un dummy y ponerlo en zona interna y el eth0 en zona externa
NATeamos hacia el eth0 con la ip del eth0 todo el trafico de la LAN de dummy
con destino al puerto 80

En el mascarading, es decir en un NAT de salida, los servidores de la LAN se van a


poner como gw las patas de los firewall, entonces auqneu metamos estas reglas,
no va a funcionar y el trafico no va a salir por el firewall, ya que hay que habilitar
el routing
Hay que fijar el IP_FORWARD en este fichero a
/etc/sysconfig/sysctl a IP_FORWARD=yes.

Broadcast
Los Paquetes de broadcast son paquetes UDP, que no están orientados a
conexión
Curso de SuseLinux
César Moreno Iglesias [email protected]
Cuando paquetes de brodcast lleguen al firewall estos se van a tirar salvo que se
configure explícitamente algún servicio que los acepte

Pero además aunque se configure ese servicio , LAS RESPUESTA a esos paquetes
udp también se van a dropear salvo que explícitamente se configure en el
firewall.

Esto es por seguridad , los paquetes Broadcast van a toda una red, que puede ser
una LAN o una WLAN, y preguntan a todos los servidores de esa red, los cuales
podrían responder y tendríamos un ataque de DoS en todo regla, hay que ser
muy cuidadoso

Reglas a Pelo
Lo que podemos hacer siempre es por supuesto meter la regla a mano
Curso de SuseLinux
César Moreno Iglesias [email protected]
La parte de opciones de la regla es para hacer reglas mas complejas, desde reglas
que son para un usuario o grupo de usuarios, o hacer una regla que si machea la
primera salte a la siguiente, o que solo aplica si se trata de un paquete
fragmentado,limitación de conexiones,etc,
https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-iptables-
options-parameters.html

HBT
Nos sirve para limitar el ancho de banda para regular el trafico
No obstante a parte del firewall puede lanzarlo directamente en mi maquina
Se puede hacer sin necesidad de usar el Firewall.. Historicamente cbq te dejaba
hacerlos de una forma muy sencilla, asociando la velocidad de descarga o subida
de datos a un puerto tcp/udp
CBQ es Class Base Queueing ..
El HBT se puede hace cuando la herramienta tc (trafic control) y el iptables
trabajan de forma cooperativa

Basicamente lo que se hace es se crean la clases con la calidad de servicio que se


quiera, con unos bit-rates, y se le dice al firewall de suse, o iptables, que cuando
venga el paquete se clasifique, se marque por algún tipo de criterio, que se le
marque la clase de QoS.. Entonces ya como la pila se quedo configurada , pues
cuando el paquete pasa ya marcado el firewall el kernel ya sabe a la clase QoS a la
que pertenece y se le hace el control

http://www.alcancelibre.org/staticpages/index.php?page=distribucion-ancho-
banda-htb-iptables

Controlar el numero de sesiones por ip,nuevas sesiones por segundo,etc


Como susefirewall2 es un iptables, este control se realiza de forma nativa en
iptables, se le puede escecificar directamente que para una sesión en el SYN, o
por ejemplo en estado establecido cuanto le dejo

iptables -t filter -I INPUT -p tcp --syn --dport 80 -m connlimit \


--connlimit-above 150 -j DROP

tambien podriamos tomar decisiones en function del numero de sesiones


actualmente establecidas contra un Puerto X, es decir partiendo del estado de
las sesiones actual que control el fw y que estan establecidad decider tirar trafico

Ataques de Dos, port scanning ,etc,etc


De por si ya iptables de forma nativa puedes construirle reglas para evitar este
tipo de cosas

https://es.wikipedia.org/wiki/Ataque_de_denegación_de_servicio

Ping de la muerte (paquetes grandes)


Curso de SuseLinux
César Moreno Iglesias [email protected]
(Un FW siempre tiene anulado el PING, y el PING no se deja atravesar de forma
general un FW, quiere decir esto que aunque veamos que las patas del FW son
nuestro GW en la LAN, no tiene porque contestar al ping)

-Ataques por fragmentación de paquetes con desordenación-> Intención


colapsar el buffer-pila Tcp de la victima.

Connectar a iptables un IDP,IDS,IPS,antivirus,etc

Dos opciones :
 A lo bruto
Activo el log del firewall, que en un fichero de texto lo este actualizando
todo, con las conexiones que entran, ip, puertos , etc.
Con un script-programa alternativo analizo de forma constante ese log, y
en función de lo que encuetro tomo decisiones, desde mandar un mail, a
cortar el trafico para esa ip de forma automática,et
 A lo elegante
Conecto mediante algún interfaz virtual, o un interfaz TAP o algo de esto,
algún programa al que el firewall le reencamine el trafico..El firewall sabe
hacerlo porque es un interfaz virtual de red que esta en la misma maquina
.. Este programa , a su vez procesa el trafico y lo devuelve al fw que lo
reencamina hacia el destino que llevara el paquete . Ademas iptables por
defecto es capaz de reencaminar paquetes al espacio de usuario, los
paquetes en ese caso su estado se marca como QUEUED

Iptables
Tablas de Filtrado: INPUT, OUTPUT, FORWARD
Tipos de objetivos: ACCEPT/DROP/REJECT/QUEUE

DROP tira conexion sin informar de nada


REJECT informa via icmp de Puerto inalcanzable
Queue pasa el paquete al espacio de usuario, para que tome decisions (IDS,
antivirus,etc,etc)

Comandos basicos

-Borrar todas las reglas


iptables –F

-Mostrar las reglas cargadas

iptables -L –v

--- Ejemplo basico


# Set default policies for INPUT, FORWARD and OUTPUT chains
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
Curso de SuseLinux
César Moreno Iglesias [email protected]
iptables -P OUTPUT ACCEPT
#
# Set access for localhost
#
iptables -A INPUT -i lo -j ACCEPT
#
# Accept packets belonging to established and related connections
#
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# Save settings
#
/sbin/service iptables save
#
# List rules
#

# Accept tcp packets on destination port 22,25,80,443


(ssh,smtp,http,https)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

/sbin/service iptables save

Protección contra Syn-flood (inundación mediante Syn):


# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j
ACCEPT

Furtivo buscando puertos (port scanner):


# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -
m limit --limit 1/s -j ACCEPT

Ping de la muerte:
# iptables -A FORWARD -p icmp --icmp-type echo-request -m
limit --limit 1/s -j ACCEPT

SSH avanzado

1. Ssh –vvv user@maquina haceis debug de la conexión ssh por sino loga
2. En /etc/ssh/ hay configuración de ssh
3. sshd_config configuración del servidor (echese un ojo a las opciones mas
importantes)
4. ssh_config es la configuración como cliente
5. Dentro de cada HOME, existe un directorio oculto de .ssh con distinta
información. Por defecto esta el archivo known_hosts, que asocia a cada
host que nos conectamos un identificador-clave para que en futuras
conexiones nos demos cuenta si ese host ha sido cambiado y nos demos
cuenta de que nos estamos conectando a un sitio que no debemos. Cuando
Curso de SuseLinux
César Moreno Iglesias [email protected]
esto pasa , falla la conexión con ssh y tenemos que editar este archivo y
borrar la línea
6. Comando remoto ssh user@host Comando
7. Port Forwarding Local
ssh -L 8000:192.168.1.3:3389 [email protected]
Esto hace que en mi maquina local apareza un puerto de escucha en el
puerto 8000, que realmente enchufa reencamina los paquetes hacia la ip
192.168.1.3:3389 desde la maquina de salto tsm.inet

En este caso a este puerto 8000, solo me puedo conectar yo desde mi


maquina local, que es desde donde he lanzado el comando\

El flag –G hace que a este puerto local 8000 no solo me pueda conectar yo,
sino cualquier otro persona de mi Lan que ataque a mi IP y puerto 8000

8. Port Forwarding Reverse


Idem que el local pero al revés, hago que un puerto de escucha mio que ya
existe, imaginemos el puerto 80 que ya tiene un apache escuchando, sea
visible en la maquina ssh a la que me conecto. De este forma si alguien
enchufa paquete en la maquina destino al puerto que forwardeo a la
inversa, realmente los paquetes llegaran hasta mi apache local

9. Forwardear las X , entorno grafico


Ssh –X user@hostname
Lo bueno que puedo ver las herramientas del entorno grafico de la
maquina destino incluso aunque esta maquina destino no corra el target-
nivel de ejecución grafico. Esto gracias a que la variable DISPLAY en la
maquina destino se la da el valor de nuestra ip local y todo ello haciendo
un portforwarding de tipo reverse automatico. En nuestra maquina local
tenemos el servidor X corriendo con el display preparado para ser usado

10. Autenticacion automática mediante claves

Desde la maquina A local, logados como usuario cesar genero un par de claves de autenticacion
SIN passphare
a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/cesar/.ssh/id_rsa):
Created directory '/home/cesar/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/cesar/.ssh/id_rsa.
Your public key has been saved in /home/cesar/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 cesar@localhost
Ahora usamos ssh para crear un directio ~/.ssh como usuario b en la maquina server_destino.
(The directory may already exist, which is fine):
cesar@localhost:~> ssh b@server_destino mkdir -p .ssh
b@server_destino's password:
Finalmente anadimo la clave publica a b@maquina destino
b@maquina destino:.ssh/authorized_keys y metemos la passwd una vez mas:
Curso de SuseLinux
César Moreno Iglesias [email protected]
cesar@localhost:~> cat .ssh/id_rsa.pub | ssh b@maquina_salto 'cat
>> .ssh/authorized_keys'
b@maquina_salto's password:
Ya podemos logarnos desde nuestra maquina local a la maquina_destino sin contrasena:
cesar@localhost:~> ssh b@maquina_destino

11. Modo proxy de putty , que forwardea automáticamente peticiones hacia


host alcanzables desde la maquina de salto para llegar a webs alcanzables
desde la maquina de salto
http://www.techrepublic.com/blog/it-security/use-putty-as-a-secure-
proxy-on-windows/

Procesos
Padre/hijo

Child (hijos)
Un proceso hijo es un proceso creado por otro proceso, estos se crean
mediante la llamada al sistema fork() y en realidad, todos los procesos en
algún momento son hijos, todos menos el proceso init. En el caso de que un
proceso sea creado mediante la shell ( ejecutado desde esta ), la shell sera el
padre.
Orphan (huérfanos)
Normalmente un proceso hijo termina antes que un proceso padre, pero se
puede dar la situación de que se mate a un proceso padre ( killed ) y el hijo
se quede sin padre ( que crueldad ). Entonces el proceso init lo adoptara
como hijo, pero como su padre original no existe, es considerado huérfano.
Daemon (demonios)
Es un tipo especial de proceso que se ejecuta en segundo plano y no esta
asociado a ninguna shell. Esto se consigue matando la shell que crea el
proceso, de esta forma el padre de este proceso pasa a ser el proceso init
( queda huérfano ). Estos corren con permisos de root y su cometido es
proveer servicios a otros procesos.
Zombie
ps aux | grep 'Z'
Cuando un proceso hijo termina, el sistema guarda el PID ( Identificador )
y su estado ( un parámetro ) para dárselo a su padre. Hasta entonces el
proceso finalizado entra en estado zombie. Cuando un proceso finaliza toda
la memoria y recursos asociados con dicho proceso son liberados, pero la
entrada del mismo en la tabla de procesos aún existe, para cuando su padre
llame a la función wait() devolverle su PID y estado. Se llama a zombie
porque el proceso ha muerto, pero su ALMA no ha sido recogida.

linux-gv5n:~ # ps -lefa | grep -i top


0 S root 16673 5287 0 80 0 - 3839 - 14:09 pts/1 00:00:00 top
Curso de SuseLinux
César Moreno Iglesias [email protected]
linux-gv5n:~ # ps -lefa | grep -i 5287
4 S root 5287 5282 0 80 0 - 4230 wait 11:35 pts/1 00:00:00 –bash
linux-gv5n:~ # ps -lefa | grep -i 5282
4 S root 5282 911 0 80 0 - 21921 - 11:35 ? 00:00:00 sshd: root@pts/1
linux-gv5n:~ # ps -lefa | grep -i 911
4 S root 911 1 0 80 0 - 11727 - sep25 ? 00:00:00 /usr/sbin/sshd -D
linux-gv5n:~ # ps -lefa | grep -i " 1 "
4 S root 1 0 0 80 0 - 45255 - sep25 ? 00:00:11 /usr/lib/systemd/systemd --switched-root --system --
deserialize 21

El proceso INIT, es el proceso 1, es el que inicia el sistema y lanza los demás proceos, por ejemplo en función del runlevel
en el que nos encontremos.

Ejercicio ,, #pstree o #pstree -H pid (para nuestro ejemplo el top)


Curso de SuseLinux
César Moreno Iglesias [email protected]
Estados

S : sleeping

R : running

D : waiting

T : gestopt (suspended)

Z : zombie (defunct)

Hacer ejecicio de sacar la hora, cada segundo con un while. Despues probar con
un nohup y &, y usar pstree para ver como se cambia el pid por el padre

linux-gv5n:~ # ps -lefa | grep -i 5287


4 S root 5287 5282 0 80 0 - 4263 - 12:45 pts/1 00:00:00 -bash
0 S root 17538 5287 0 80 0 - 3268 wait 15:58 pts/1 00:00:00 /bin/sh ./hola.sh
linux-gv5n:~ # ps -lefa | grep -i 17538
0 S root 17538 1 0 80 0 - 3268 wait 15:58 ? 00:00:00 /bin/sh ./hola.sh
0 S root 17618 17538 0 80 0 - 1439 - 15:59 ? 00:00:00 sleep 1

Paginacion
#ver estado de memoria y swap
linux-gv5n:~ # free -m
total used free shared buffers cached
Mem: 987 793 193 2 2 469
-/+ buffers/cache: 321 665
Swap: 1481 176 1305

linux-gv5n:~ # swapon -s
Filename Type Size Used Priority
/dev/sda1 partition 1517564 180636 -1
Curso de SuseLinux
César Moreno Iglesias [email protected]
Explicar el concepto de paginación (page in, page out). Swapping y Paging es
básicamente lo mismo, lo que pasa es que se habla de swap por ejemplo si
swappeas el proceso completo.

Procesos multihebrados/paralelos
Explicacion, ver las hebras de un proceso, y la arquitctura de procesos paralelos
vs procesos..
ps -Tlf -p 16594
F S UID PID SPID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S cesar 16594 16594 1393 2 80 0 - 250367 - 15:07 ? 00:01:54 /usr/lib64/libexec/kscreenlocker_greet --
graceTime 5000 --ksldfd 26
1 S cesar 16594 16595 1393 0 80 0 - 250367 - 15:07 ? 00:00:00 /usr/lib64/libexec/kscreenlocker_greet --
graceTime 5000 --ksldfd 26
1 S cesar 16594 16596 1393 0 80 0 - 250367 - 15:07 ? 00:00:00 /usr/lib64/libexec/kscreenlocker_greet --
graceTime 5000 --ksldfd 26
1 S cesar 16594 16597 1393 0 80 0 - 250367 - 15:07 ? 00:00:00 /usr/lib64/libexec/kscreenlocker_greet --
graceTime 5000 --ksldfd 26
1 S cesar 16594 16599 1393 0 80 0 - 250367 - 15:07 ? 00:00:00 /usr/lib64/libexec/kscreenlocker_greet --
graceTime 5000 --ksldfd 26

Planifocador del kernel


El S.O. asigna una cierta prioridad a los procesos, en función de distintos
criterios, imaginad si son del kernel , o una aplicación que trabaja en tiempo real,
o aplicaciones que trabajan intensivas en I/O

Se puede ver el planificador que esta usando el kernel en


cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
El que esta en corchetes es el que se esta utilizando (deadline), los otros son los
disponibles
Hay muchos otros, Round Robin total, shortest job first…

Todos estos planificadores van enfocados a la espera de I/O, teniendo en cuenta


que hoy I/O es todo

Cuantos Cpu/Yield/Nice
-El cuanto de cpu
En el caso de CPU cuando el proceso esta en ejeucion, lo que si podemos hacer es
en lugar de quedarnos solo y exclusivamente con el cuanto que nos corresponde,
subir o bajar la priridad, lo que nos da o nos quita cuantos. El cuanto de CPU es el
tiempo máximo de cpu que la damos a un proceso en CPU si hay otros esperando
preparados en la cola de procesos..
Nice / renice nos permiten cambiar esa prioridad
#renice –n Incremento/Decremento prioriy –p pid

Prioridad por defecto es 20, y lo que hacemos con Nice es como modificar el
calculo de la prioridad

Maxima prioridad es la 0 (para procesos, demonios del kernel)


El nice y la prioridad van de la mano(NI 0 => PR 20, NI 19 => PR 39, NI -20
=> PR 0).

Imaginad hago un renice al proceso top, renice 19 23975


Curso de SuseLinux
César Moreno Iglesias [email protected]
El resultado

23975 root 39 19 15356 2692 2180 S 0,332 0,266 0:00.11 top

YIELD: Es cuando un proceso abandona voluntariamente la cpu, bien porque ha


terminado, bien porque esta a la espera de una I/O

La clave para saber si a un proceso le falta cpu o no, si le faltan cuantos es si los
cambios de contexto que sufre son INVOLUNTARIOS, porque le obligan a salir de
cpu. Si el porcentajete de Involuntarios sobre voluntarios es mayor, a ese
proceso le hace falta m’as cpu.

Cgroups
Agrupacion de procesos, como un grupo, a los cuales se les puede dar una
planificación especial..
Se pueden evitar cosas como que si un servicio como Apache tiene 9 hilos, y otro
servicio solo 1, en vez de que se repartan lan cpu a 90-10, se les puede hacer
poner de forma equitativa el reparto.
Se permite la manipulación sobre este sistema de ficheros virtual
/sys/fs/cgroup

Modo Kernel/Modo Usuario


Ya se explicado que cuando un proceso se ejecuta , en el momento que hace
llamadas al sistema ese tiempo es ya tiempo de kernel…

Se supone que el trabajo efectivo es de tiempo de usuario , no de kernel… Una


forma de medir el rendimiento, o la saturación, es por este valor, si el modo
kernel esta muy por encima de porcentaje del modo usuario, quiere decir
teoricamnte que se esta sacando poco trabajo efectivo, porque la funcionalidad
desarrollada por el programador no esta teniendo el tiempo que necesita..

Aquí ya es para mirar optimizaciones a nivel de código, etc, es un indicador.

Monitorizacion de CPU en multiprocesadores


¡! Cuidado con los sistemas de monitorización o alarmas en maquinas con
multiples cores!!

Monitorizacion de I/O discos


1 Tiempo de servicio (desde que se encuentra el dato, lo que tarda en
servise, pero como operación atómica, el bloque concreto que se lee del
disco)
2 Tiempo de Acceso al dato (tiempo que se tarda desde que lo pido hasta
que lo tengo
3 %de uso del canal de I/O (se puede ignorar porque NO DA UNA)
4 Cola de I/O … Este es mas relevante, tiene que ser pequeña o muy
pequeña
Curso de SuseLinux
César Moreno Iglesias [email protected]
El tiempo mas relevante es el tiempo de acceso..
-Con un disco mecanico estamos hablando de 8-10-12 miliegundos
-Sobre una cabina hablamos de 1-2-3 milisegundos si todo OK, porque
realmente se trabaja sobre la Memoria no sobre el disco
-En un SSD, podemos hablar de un tiempo de acceso de 0,01 milisegundos….

ESTO DISPARA MAS EL RENDIMIENTO QUE LA ANCHURA DE BANDA, Y sino


probad a meter un ssd por un usb 2.0, y arrancar el ordenador desde ahí,
veras que va mas rápido que con un SATA con disco mecanico

BackGround/Foreground
Los procesos se inician normalmente en Foreground. Se les puede enviar a
background para que siga trabajando por su cuenta con & al final..
Los comandos Jobs

Hacer ejercicio con yes

Ejecutar #yes repetidas veces


#yes y control+z (SIGSTOP)
#yes > /dev/null y control+z
#yes > /dev/null &

juego ejecutar
#jobs para listar
#jobs –l y veis el pid
# fg id para traer a fg
# bg para ejecutar en fg
# kill -s stop pid Para parar el foreground..

Comandos/herramientas de monitorización
top
2a. UPTIME and LOAD Averages
This portion consists of a single line containing:
program or window name, depending on display mode
current time and length of time since last boot
total number of users
system load avg over the last 1, 5 and 15 minutes

2b. TASK and CPU States


This portion consists of a minimum of two lines. In an SMP environment, additional lines can reflect
individual CPU state percentages.

Line 1 shows total tasks or threads, depending on the state of the Threads-mode toggle. That total is
further classified as:
running; sleeping; stopped; zombie

Line 2 shows CPU state percentages based on the interval since the last refresh. Where two labels are
shown below, those for more recent kernel versions are shown first.
us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
Curso de SuseLinux
César Moreno Iglesias [email protected]
st : time stolen from this vm by the hypervisor

-top –p pid
-top -T –p pid
-flecha arriba y abajo para desplazarnos
-u y metemos procesos solo de un usuario
-k para matar un proceso con un id
-m para ordenar por memoria
-c para ordenar por cpu
- b para modo batch que nos vale para scripting o para volcar a un log
-H para ver los thread … top -H -p 7499

vmstat
#vmstat 1 10 (10 iteraciones cada segundo)
Muy útil para ver paginacion
Procs
r: The number of runnable processes (running or waiting for run time).
b: The number of processes in uninterruptible sleep.

Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)

Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).

IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).

System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.

CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.

sar e iostat

zypper in sysstat (instala sar y iostat)

linux-gv5n:~ # sar -d 1 10
Linux 4.1.31-30-default (linux-gv5n.suse) 28/09/16 _x86_64_ (1 CPU)

18:40:40 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:40:41 dev8-0 15,84 15,84 3754,46 238,00 0,02 1,00 0,75 1,19
18:40:41 dev11-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00

18:40:41 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:40:42 dev8-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:40:42 dev11-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
Curso de SuseLinux
César Moreno Iglesias [email protected]
18:40:42 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:40:43 dev8-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:40:43 dev11-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
^C

18:40:43 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:40:44 dev8-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
18:40:44 dev11-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00

Media: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Media: dev8-0 4,73 4,73 1121,89 238,00 0,00 1,00 0,75 0,36
Media: dev11-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00

uptime
(procesos preparados en la cola en 1,5 y 15 min)
18:12 arriba 3 días 3:45, 4 usuarios, carga promedio: 0,05, 0,23, 0,30

mpstat
Estadisticas pero por procesador
¡!! Cuidado con el sistema de anticalentamiento del procesador que conmuta la
ejecución en cores!!!

Pidstat
Para hilar fino en las stadisticas de un proceso…
#pidstat 2 5

lsof y strace
Listar los descriptores de ficheros abiertos

#lsof –p pid
Ver las llamadas al sistema realizadas por un programa por ejemplo del top
#strace –o /tmp/traza.txt /usr/bin/top

IPCs
Listar los mecanimos de IPCs de unix, esto es memoria compartida , semáforos y
señales. Se borran con ipcrm

#ipcs

Proceso de Arranque
Servicios systemd
 Es el proceso/demonio padre de todo lo demás, es el proceso 1, a
dia de hoy es el encargado de iniciar todo el sistema.
 Resiste el kill -9
 Sustituye a demonios anteriores como System V init, pero es
compatible con el y sus script de arrancada.
Curso de SuseLinux
César Moreno Iglesias [email protected]
 Systemd la gran ventaja es que arranca todo en paralelo,
RESPETANDO DEPENDENCIAS-ORDEN
 Tambien soporta snapshooting y restoring a un estado concreto.
 Systemd no inicia servicios en principio hasta que no son
invocados por primera vez, con la salvedad de servicios que no
sean propios de S.O.. Imaginad un servicio de BD se va a iniciar sin
esperar a que se invoque.
 Systemd esta directamente integrado con cgroups, ya agrupa y
organiza servicios mediante grupos

Uso básico:
systemctl [general OPTIONS] subcommand [subcommand OPTIONS]

systemctl reload|restart|start|status|stop|... <my_service(s)>

vs System V init
rc<my_service(s)> reload|restart|start|status|stop|...
Opciones principales
 start > Arranca el servicio
 stop > Para el servicio
 restart > Para el servicio y lo arranca . Si no esta corriendo lo
arranca
 reload > Relee la configuración (Yo no la uso)
 reload-or-restart > Reele conf y si el servicio no soporta reconf en
caliente lo rearranca (Yo no la uso)
 status > Nos dice el estado dándonos info extra
 enable > Habilitar el servicio (Que lo habilite no quiere decir que lo
arranque), solo quiere decir que puede ser arrancado
automáticamente si systemd lo considera
 disable > Deshabilitar el servicio (No quiere decir que lo pare),
quiere decir que no será arrancado automáticamente por systemd
incluso aunque se reclame
 Masking/Unmasking para que si deshabilitamos un servicio ni
siquera se pueda arrancar manualmente.

Arrancar varios servicios a la vez


systemctl start <my_1st_service> <my_2nd_service>

Listar todos los servicios disponibles


systemctl list-unit-files --type=service
Para systemd una “unit” es cualquier recurso que pueda gestionar. Pero
una unit para systemd no es solo un servicio, sino mas cosas, recursos
de red,dispositivos,puntos de montaje,etc… por eso en este comando
especificamos solo servicios, y que nos muestre la lista de archivos de
estas unidades, otro type podría ser type=socket,mount,device,etc,etc.

inux-gv5n:~ # systemctl status bluetooth


Curso de SuseLinux
César Moreno Iglesias [email protected]
bluetooth.service - Bluetooth service
Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled)
Active: active (running) since lun 2016-09-19 18:44:11 CEST; 1 weeks 2 days ago
Docs: man:bluetoothd(8)
Main PID: 1482 (bluetoothd)
Status: "Running"
CGroup: /system.slice/bluetooth.service
└─1482 /usr/lib/bluetooth/bluetoothd

sep 19 18:44:11 linux-gv5n.suse systemd[1]: Starting Bluetooth service...


sep 19 18:44:11 linux-gv5n.suse bluetoothd[1482]: Bluetooth daemon 5.35
sep 19 18:44:11 linux-gv5n.suse systemd[1]: Started Bluetooth service.
sep 19 18:44:11 linux-gv5n.suse bluetoothd[1482]: Starting SDP server
sep 19 18:44:11 linux-gv5n.suse bluetoothd[1482]: Bluetooth management interface 1.9 initialized

Si los paramos , vemos que vuelve a levantarse, porque esta definido que asi sea,
con un nuevo pid. Aquellos demonios servicios, que están configurados para que
siempre estén arrancados se volverán a iniciar aunque los paremos

linux-gv5n:/run # systemctl stop autofs.service


linux-gv5n:/run # systemctl status autofs.service
autofs.service - Automounts filesystems on demand
Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled)
Active: inactive (dead)
Docs: man:automount(8)
man:autofs(5)

sep 28 19:26:31 linux-gv5n.suse systemd[1]: Starting Automounts filesystems on demand...


sep 28 19:26:31 linux-gv5n.suse automount[13962]: lookup_init:136: lookup(yp): map auto.master: Local domain name
not set
sep 28 19:26:31 linux-gv5n.suse systemd[1]: Started Automounts filesystems on demand.
sep 28 19:26:47 linux-gv5n.suse systemd[1]: Stopping Automounts filesystems on demand...
sep 28 19:26:47 linux-gv5n.suse systemd[1]: Stopped Automounts filesystems on demand.
sep 28 19:28:09 linux-gv5n.suse systemd[1]: Stopped Automounts filesystems on demand.

Si arrancamos.
. linux-gv5n:/run # systemctl start autofs.service
Deshabilitamos bluetooth y lo habilitamos, mirad que pasa si paran o no
linux-gv5n:/run # systemctl disable bluetooth
rm '/etc/systemd/system/dbus-org.bluez.service'
rm '/etc/systemd/system/bluetooth.target.wants/bluetooth.service'
linux-gv5n:/run # systemctl enable bluetooth
ln -s '/usr/lib/systemd/system/bluetooth.service' '/etc/systemd/system/dbus-org.bluez.service'
ln -s '/usr/lib/systemd/system/bluetooth.service' '/etc/systemd/system/bluetooth.target.wants/bluetooth.service'

Probamos a hacer un mask sobre el servicio autofs.service


linux-gv5n:/run # systemctl stop autofs
linux-gv5n:/run # systemctl mask autofs
ln -s '/dev/null' '/etc/systemd/system/autofs.service'
linux-gv5n:/run # systemctl start autofs
Failed to start autofs.service: Unit autofs.service is masked.
Probamos a hacer un unmask sobre el servicio autofs.service
linux-gv5n:/run # systemctl unmask autofs
rm '/etc/systemd/system/autofs.service'

NOTA: systemctl admite ver los servicios de otra maquina sin logarnos en ella
systemctl –H user@maquina status service
linux-gv5n:/run # systemctl -H root@localhost status autofs
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is 7b:90:d8:6e:4e:6e:c3:65:bb:b8:57:39:7c:42:3a:bc [MD5].
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Password:
autofs.service - Automounts filesystems on demand
Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled)
Active: active (running) since mié 2016-09-28 19:42:47 CEST; 7min ago
Curso de SuseLinux
César Moreno Iglesias [email protected]
Docs: man:automount(8)
man:autofs(5)
Process: 16099 ExecStart=/usr/sbin/automount $AUTOFS_OPTIONS -p /var/run/automount.pid (code=exited,
status=0/SUCCESS)
Main PID: 16101 (automount)
CGroup: /system.slice/autofs.service

Listar servicios fallidos


#systemctl --failed

La gestión de servicios se puede hacer con yast también claro.

Restart infinito o respawn


Linux "System V" init

Se pone la entrada en /etc/inittab, se le marcaban los runlevel, y el


proceso

myprocess:2345:respawn:/bin/myprocess

systemd

Escribimos en el archivo del servicio, que el llamado archivo de la unidad,


imaginamos, /etc/systemd/system/myprocess.service:

[Unit]
Description=My Process

[Service]
ExecStart=/bin/myprocess
Restart=always

[Install]
WantedBy=multi-user.target

instantaneas
Systemd permite instantáneas y revertir instantáneas si se definen nuevos
targets, o se modifican servicios
Crear un Snapshot
systemctl snapshot <my_snapshot>.snapshot
Borrar un Snapshot
systemctl delete <my_snapshot>.snapshot
Ver un Snapshot
systemctl show <my_snapshot>.snapshot
Activar un Snapshot
systemctl isolate <my_snapshot>.snapshot
Curso de SuseLinux
César Moreno Iglesias [email protected]

Dependencia entre unidades


Description Describimos unidad

Documentation URL de documentacion de la unidad

After [b] Define orden. La unidad se empieza solo despues que la unidad de
After este active. A diferencia de requires After no activa la unidad especific
. Before seria justo lo contrario a After.

Requires Configura una dependencia. Activa la unidad especificada, pero si esta falla
entonces no se arranca la unidad actual.

Wants Configura una dependencia mas debil que requires. Si no arranca


alguna de las unidades correctamente, no tiene impacto en la activacion
de la unidad.
.

Conflicts Configures negative dependencies, an opposite to Requires.

Caso de Uso
Instalamos un software que hemos bajado, y lo queremos dar de alta como
servicio porque no viene originariamente en la distribución
Opcion 1: Scripts de arranque a pelo en /etc/rc.d/rcX.d , ponemos el start y el
stop y un numero para el arranque S55rutas, o K55rutas, y pasamos los
argumentos de start y stop que ponemos con un bus condicional.
Yo aun lo sigo haciendo asi, a la vieja usanza

Opcion 2: La buena a dia de hoy, la elegante, la uniforme

1 Creamos el archivo de la unidad (archivo del servicio)


touch /etc/systemd/system/name.service
chmod 664 /etc/systemd/system/name.service
1 Editamos el archivo
[Unit]
Description=service_description
After=network.target

[Service]
ExecStart=path_to_executable
Type=forking
PIDFile=path_to_pidfile

[Install]
WantedBy=default.target
Wantedby es como para indicar los target bajo los cuales se va a ejecutar

3.Finalmente indicamos a systemctl que relea la configuración y que


arranque el servicio
systemctl daemon-reload
systemctl start name.service
Curso de SuseLinux
César Moreno Iglesias [email protected]
Niveles de Ejecución/target
Con systemd en lugar de niveles de ejecución runlevel, lo que tenemos son target,
donde esos target van asociados servicios, para efectos practicos hay
compatibilidad con los runlevel

System V systemd target Purpose


runlevel
runlevel0.target, halt.target, poweroff.target System shutdown
0
runlevel1.target, rescue.target,
1, S Single-user mode
runlevel2.target, multi-user.target,
2 Local multiuser without
remote network
runlevel3.target, multi-user.target,
3 Full multiuser with network
runlevel4.target
4 Unused/User-defined
runlevel5.target, graphical.target,
5 Full multiuser with network
and display manager
runlevel6.target, reboot.target,
6 System reboot

linux-gv5n:/run # runlevel
N5
linux-gv5n:/run # who -r
`run-level' 5 2016-09-19 18:44

Comprobar en que niveles de ejecución se lanza un servicio


linux-gv5n:/etc/systemd/system # ls /etc/systemd/system/*.wants/sshd.service
/etc/systemd/system/multi-user.target.wants/sshd.service

Comprobar todo lo que levanta el modo multiuser


linux-gv5n:/etc/systemd/system # ls /etc/systemd/system/multi-user.target.wants/
auditd.service cron.service irqbalance.service NetworkManager.service ntpd.service purge-kernels.service
smartd.service SuSEfirewall2_init.service wpa_supplicant.service
avahi-daemon.service cups.service ModemManager.service nscd.service postfix.service remote-fs.target
sshd.service SuSEfirewall2.service

Cambiar de nivel de ejecucion


Ejemplo 1: Pasamos solo a target multiusuario, se bajara la interfaz grafica
# systemctl isolate multi-user.target

Ejemplo 2: Pasamos a target interfaz grafico que conserva el multiusuario


# systemctl isolate graphical.target

Definir el target default


linux-gv5n:/etc/systemd/system # more default.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.

[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
Curso de SuseLinux
César Moreno Iglesias [email protected]
AllowIsolate=yes

UEFI vs BIOS
-La función de ambos es inicializar el hardware, e inicializar el proceso de carga
del S.O.
-Ambos hacen un check del hardware
-Ambos permiten arrancadas desde multiples medios
-Puede verificar la integridad del firmware del hardware

UEFI es el moderno, con interfaz grafico amigable, a diferencia de BIOS,

-Tiempos de hibernación inicio-reanudacion mas rapidos


-Compatibilidad con firmware de 64 bits
-Secure boot
-Solo se pueden instalar S.O. de 64bits
-El disco de instalación debe ser GTP no MBR
-Requiere partición UEFI de boot, para ello el disco tiene que estar vacio.

Hoy por hoy, la mayor parte de las BIOS tienen tanto BIOS legacy como UEFI

GPT vs MBR
La tabla de particiones GUID (GPT) se introdujo con UEFI. GPT es mas flexible
para particionar los discos de arranque que el viejo MBR(Master boot record)
Un disco o tiene GPT o tiene MBR, pero hay truco. Todos los discos GPT tienen
un MBR para protegerse de herramientas que trabajan con MBR

En principio cualquier Linux se puede cambiar para que trabaje con MBR y BIOS
tocando placa y particiones, o EFI y GPT.

Como ejemplos decir que los Mac desde el 2006 usan EFI y GPT, y que desde
Windows XP en su versión 64bits, y todas las versiones en adelante se soporta
EFI, siendo ya obligatorio en Windows 8

Particion primaria: Arrancamos desde aquí nuestros S.O


Particion extendida:Almacen de datos
Particion lógica: Particiones dentro de una extendida.

 MBR sólo soporta hasta 4 particiones primarias, o hasta 3 primarias y una


extendida, la cual puede tener hasta 128 particiones lógicas. GPT soporta
hasta 128 particiones primarias.
 MBR soporta todas las máquinas de 32 y 64 bits. GPT soporta sólo las de
64 bits
 MBR soporta hasta 2TB por partición. GPT soporta hasta 256TB por
partición
 MBR usa el viejo BIOS (fue creado hace 20 años) GPT funiona con EFI
Curso de SuseLinux
César Moreno Iglesias [email protected]
Tanto en GPT como en MBR la parte de de protencion de MBR , o el MBR va
ubicada en el mismo sitio en el sector 0. Pero con GTP

Se habla ya siempre de bloques lógica LBA , que abstraen los detalles físicos del
disco. Desde ATA siembre hablamos de LBA.. Sector 0, es realmente el LBA 0
Curso de SuseLinux
César Moreno Iglesias [email protected]
Curso de SuseLinux
César Moreno Iglesias [email protected]

GParted es la típica herramienta grafica para trabajar con particiones GPT


Curso de SuseLinux
César Moreno Iglesias [email protected]

Como averiguo si estoy usando GPT o MBR


$ sudo parted –l

Si sale particion de tipo msdos es MBR, si sale GPT es gtp


linux-gv5n:/etc/grub.d # parted -l
Model: ATA OpenSUSE Linux-0 (scsi)
Disk /dev/sda: 68,7GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags


1 1049kB 1555MB 1554MB primary linux-swap(v1) type=82
2 1555MB 28,6GB 27,1GB primary btrfs boot, type=83
3 28,6GB 68,7GB 40,1GB primary xfs type=83

Secure Boot
La función de Secure Boot es impedir la ejecución de cualquier software no
firmado y certificado por el fabricante, por lo que cualquier amenaza que
intentara atacar durante el inicio se vería frustrada, pues se detendría el
arranque del sistema
Para ello el cargador del S.O. debe estar firmado con alguna clave de confianza
que contenga el hw.
Y a su vez, el cargador del S.O. tiene que verificar que carga un kernel de
confianza.

Por tanto se establece una cadena de confianzas que va desde la Platform Key
que esta en el firmware del HW, hasta el cargador del S.O, y a su vez en el kernel.

Secureboot se puede activar/desactivar a traves del interfaz de la BIOS UEFI..


Si tratamos de arrancar un S.O. Linux con Secure boot y el cargador del S.O. no ha
venido firmado, NO VA A ARRANCAR
Curso de SuseLinux
César Moreno Iglesias [email protected]
Si tenemos que Secure Boot activado, metemos un cargador de S.O. firmado
llamemosle compatible con la PK del firmware, pero tratamos de iniciar un
Kernel que no es de confianza tambien fallara al arranque.

Soluciones para nuestra distribucion SUSE

1. Comprar HW de vendors que ya tenga metida una clave de


confianza de Suse, con la que ya SUSE firma el boot loader
2. Teniendo en cuenta que todos los HW vendors incorporan la clave
de Microsoft KEK (Microsoft key Exchange keys), ir a Microsoft y
que te firme el cargador del S.O y que certifique que es un cargador
valido, que es lo que ha hecho SUSE
Lo que hace el cargador que usemos Lilo o Grub2 es cargar el
kernel ,que están a su vez firmados por la clave de Suse y por tanto
reconocida por el cargador y el proceso sigue adelante?

¿?Como solucionamos el problema de tratar de meter un kernel compilado por


nosotros?? O un driver que se carga en la arrancada del kernel?? Y como
solucionamos el problema de tener multiarranque con Secure boot activado

Lo que se hace es firmar el kernel por nosotros, y cargamos un set de claves por
un lado en el Firmware UEFI en lo que se denomina MOK , que es un repositorio
de claves del owner del sistema, y por otro en la partición /boot de forma que
Lilo o grub2 tenga acceso a ellas y que sean capaces de validar el proceso de
arranque

https://www.suse.com/documentation/sled11/book_sle_admin/data/sec_uefi_secboot.html

Comentar que creo que en vmware en ultimas versiones ya como Esxi6 se


suporta secure boot, no porque lo reclame como tal Linux, que también, sino
porque lo implementa Windows, por ejemplo a partir de Windows 8 – Windows
Server 2012

Early launch antimalware


Tecnologia Windows, para cubrir o ayudar a cubrir partes de la arrancada que no
cubre Secure Boot, básicamente esta parte miraría la integridad, la confianza en
piezas de software como pueden ser driver que se cargaran por el kernel.

Trusted Execution
Esto es una tecnología de Intel (TXT), al igual que secureboot, trata de
parar el malware, para ejecutar código solo de confianza, para ello necesita una
BIOS, un procesador, un chipset y un S.O. que lo soporte.. Por tanto cubre o
garantiza lo mismo que SecureBoot, y también anade alguna comprobación
adicional
Tiene dos partes
1. tboot (trusted boot)
2. El habilitador del kernel
Curso de SuseLinux
César Moreno Iglesias [email protected]
La cobertura que hay de Suse para esto, o lo que yo al menos he encontrado es
muy pobre, por tanto no voy a entrar en ello.

TPM
Existe un chip de TPM (trusted platform module), que lleva distintas
funciones de securizacion. Por ejemplo nos da el soporte del Cifrado del sistema
de ficheros. (Ejemplo el Bitlocker de windows), o vuestro propio moviles
Este chip TPM, lleva una clave única para ese HW que cuando se cifra el el
sistema de ficheros se utiliza, y solo puede descifrar desde únicamente ese TPM,
lo que nos da la garantía de que no nos compromenten el sistema de ficheros
Eso lo utilizan los móviles por ejemplo, IOS por defecto, o si en Android se
elije cifrar el sistema de ficheros
En Linux cifrar el sistema de ficheros también se apoya en este chip
TPM lo lleva Intel, o ARM por ejemplo

GRUB2
1./BIOS o EFI inicializan HardWare
2./E invocan al programa , al boot loader en este caso GRUB2 (antes lilo), que
termina invocando al Kernel
3./A partir de aquí todo es gestionado por systemd

GRUB (GNU GRand Unifier Bootloader)

-Soporta lógicamente arranque multiple


-Una larga lista de sistemas de archicos ZFS, raiser, ext3,btrfs etc
-Soporta botar desde red , por tanto implementa protocolo de red como puede
ser cliente NFS
-etc

Grub los discos los enumero empezando por hd0 , y las particiones comenzando
como hd0,0

Sin embargo en Linux típicamente vemos el hd0 como /dev/sda..


La nomenclatura de Grub seria esta
• (hd0,0) The first primary partition on the first hard disk.
• (hd0,1) The second primary partition on the first hard disk.
• (hd0,2) The third primary partition on the first hard disk.
• (hd0,3) The fourth primary partition (It will be extended partition, most probably).
• (hd0,4) The first logical partition on the first hard disk.
(hd0,5) The second logical partition on the first hard disk.
Con yast se puede configurar detalles básicos del Grub, y conmutar entre modo
MBR y modo EFI
Curso de SuseLinux
César Moreno Iglesias [email protected]

https://es.opensuse.org/YaST:Sistema:Cargador_de_arranque

He aquí archivos histórico de grub, que son distintos a los de grub2, en algunos
casos existen en grub2 y en otro no, pero la nomenclatura en principio se
mantiene.
Los tutoriales que hay en la red son casi todos de grub, no de grub2, aquí os he
mezclado un poco todo en cuanto a configuración debido a que grub2 es mas
sencillo y gastaríamos mas tiempo en verlo, pero si entiendo grub1 luego grub2
es adaptarse para saber donde tocar.
/boot/grub/menu.lst
Informaciones sobre particions o S.O. que pueden ser botados por Grub. No
tiene porque existir si solo hay un S.O, porque es basicamente para preguntar
que arrancar.
gfxmenu (hd0,4)/boot/message
color white/blue black/light-gray
default 0
timeout 8

#/boot/message es la imagen que se presenta


localizada en /dev/sda5

#default 0, implica el S.O. arrancado por defecto, en


Curso de SuseLinux
César Moreno Iglesias [email protected]
este #caso justo el que se ponga en primera posicion
de la #lista
title suse 1
root (hd0,5)
kernel /boot/vmlinuz-2.6.18-238.19.1.el5 ro root=/dev/sda6 noquiet vga=791
resume=/dev/sda9
initrd /boot/initrd-2.6.18-238.19.1.el5

#initrd (ahora su sustituto initramfs son filesystem


basados en ram disk, (/tempfs)

#linux tira de la particion hd0,5, /dev/sda6 donde


esta el kernel vmlinux,

#Todo lo que viene detras de /boot/vmlinuz no es


interpretado por grub, sino que se le pasa
directamente al kernel, por ejemplo arranque en read
only ro, para pasar fsck, o vga=791 (1024*768) ,
noquiet le indica al kernel arrancar en modo verbose

#resume es una particion que se usaria cuando se


viene de hibernacion por ejemplo en este ejemplo
/dev/sda9.

# section to load Windows


title Windows
rootnoverify (hd0,0)
chainloader +1

#rootnoverify es como root, pero se le dice a grub que no trate de montar esa
particion, y se cambia a un bootloader distinto, que se le invocaria desde aqui
/boot/grub/device.map
Mapeo entre los nombres de dispositivo de BIOS ,GRUB y nombre de
dispositivos de linux
linux-gv5n:/boot/grub2 # more device.map
(hd0) /dev/sda

/etc/default/grub
En grub2 el fichero de configuracion esta aqui, y se pueden hacer cambios, pero
realmente a partir de este fichero y otros que estan en /etc/grub.d/ se genera el
fichero /boot/grub/grub.cfg que es el que realmente se utiliza
Se aplican los cambios con grub2-mkconfig -o /boot/grub2/grub.cfg
Antes en grub, el commando era update-grub

/etc/grub.d/

Hay archivos dendro de este directorio , que son shell script y que realmente son
los que ejecutan toda la arrancada de grub a partir de la configuracion
Curso de SuseLinux
César Moreno Iglesias [email protected]
Comandos/utilidades de grub2

Tenemos multiples utilidades que nos permiten trabajar con grub2, instalarlo,
cambiar configuracion, probar configuracio, etc

shell grub2

Una ventaja importante de grub, es que si el sistema no arranca o hay algun


fallo, siempre y cuando lleguemos hasta la ejecucion propia de grub , nos
saldra el shell de grub, con el que podremos meterle a mano las opciones y
arrancar botar el sistema

http://instintobinario.com/rescatar-el-arranque-de-linux-con-la-consola-de-
grub2/

Tutorial ONLINE de grub2: http://www.dedoimedo.com/computers/grub-


2.html

UUID

A las particiones se las asigna un identificador, como una especie de huella


digital unica que no cambiar, podeis ver en grub referencias a la particion
tirando de uuid

Podeis ver los uuid de las particiones de disco aqui

ls -l /dev/disk/by-uuid
title Linux

root (hd0,5)kernel

/boot/vmlinuz-2.6.27.7-desktop-1mnb BOOT_IMAGE=desktop_2.6.27.7-1mnb root=UUID=5f954576-e7fb-11dd-a363-


f3fa14c80e95 splash=silent vga=788

initrd (hd0,6)/boot/initrd-2.6.27.7-desktop-1mnb.imgsavedefaultboot

Supportconfig
En una SuseEnterprise nos permite recoger información del sistema para
enviarla a soporte (como un explorer en Solaris o un SOS RHEL)
En la opensuse a priori no viene por defecto, pero Novel pone un repositorio
inestable” equivalente y bajarlas de alli

http://software.opensuse.org/package/supportutils?search_term=supportutils
Curso de SuseLinux
César Moreno Iglesias [email protected]

El paquete a bajar son las SupportUtils, este tiene una extensión para Yast, que es
un xml que yast interpreta y descarga el paquete
Curso de SuseLinux
César Moreno Iglesias [email protected]

Se baja el paquete solo y se instala..

En principio el propio Yast Graficamente en la Enterprise te deja usar el


supportConfig, en la sección de Support, pero nosotros lo vamos a hacer via
comando.

Pasos:
1. Generamos el reporte (tarda unos minutos)
#supportconfig

Esto genera archivo en /var/log del tipo tgz.


Curso de SuseLinux
César Moreno Iglesias [email protected]

2. Cogemos el archivo y lo enviamos por correo al soporte “intermedio”, o


bien si el soporte es directamente con Novell, hacer un upload al soporte
global con un Request Number (numero de ticket)

Hay distintos flags que se pueden meter para añadir a la salida nuestro contacto,
o hacer que solo se saque la información de ciertos sistemas, en lugar de todos, y
también una forma de correr supportconfig con la menos información posible

supportconfig -E [email protected] -N "Cesar Moreno" -O "Telefonica" –P”3460923202”

Si se va a subir el archivos por Soporte Global, se requiere meter nuestros datos


de contacto en el propio archivo antes de subir por ftp el tgz, y también con la
opción –r meter el num de service request..

Imaginemos
Supportconfig –r 123456789 –E [email protected]

 Para crear una petición de servicio se puede hacer aquí, siempre y


cuando hubiéramos creado una cuenta previa, en Novell
Curso de SuseLinux
César Moreno Iglesias [email protected]
http://www.novell.com/center/eservice

Esto al final nos da un numero de ticket (request server number) que usaremos
para generar el file tgz.

Si nuestro servidor tiene conexion a internet con la opcion –u del supportconfig hace
directamente la subida

SupportConfig –ur 12345789 –E [email protected]

En caso de que no tenga conexión, nos toca subir por Ftp aqui si estamos en España,
mediante ftp anonimo subiremos por ftp aqui ftp://support-ftp.suse.com/in

Todos estos pasos si se hacen desde Yast graficamente salen todos de una tacada

Shell Script
Curso de SuseLinux
César Moreno Iglesias [email protected]

También podría gustarte