Uploaded by mega trend

RH134: Administración de Sistemas Red Hat II - Libro de Trabajo

advertisement
Libro de trabajo del estudiante (ROLE)
Red Hat Enterprise Linux 8.2 RH134
Administración de sistemas Red Hat II
Edición 1
RH134-RHEL8.2-es-1-20200928
Copyright ©2020 Red Hat, Inc.
Administración de
sistemas Red Hat II
RH134-RHEL8.2-es-1-20200928
Copyright ©2020 Red Hat, Inc.
Red Hat Enterprise Linux 8.2 RH134
Administración de sistemas Red Hat II
Edición 1 20200928
fecha de publicación 20200928
Autores:
Editor:
Fiona Allen, Adrian Andrade, Hervé Quatremain, Victor Costea,
Snehangshu Karmakar, Marc Kesler, Ed Parenti, Saumik Paul,
Dallas Spohn
Steven Bonneville, Philip Sweany, Ralph Rodriguez, David Sacco, Nicole
Muller, Seth Kenlon, Heather Charles
Copyright © 2020 Red Hat, Inc.
The contents of this course and all its modules and related materials, including handouts to audience members, are
Copyright © 2020 Red Hat, Inc.
No part of this publication may be stored in a retrieval system, transmitted or reproduced in any way, including, but
not limited to, photocopy, photograph, magnetic, electronic or other record, without the prior written permission of
Red Hat, Inc.
This instructional program, including all material provided herein, is supplied without any guarantees from Red Hat,
Inc. Red Hat, Inc. assumes no liability for damages or legal action arising from the use or misuse of contents or details
contained herein.
If you believe Red Hat training materials are being used, copied, or otherwise improperly distributed, please send
email to training@redhat.com or phone toll-free (USA) +1 (866) 626-2994 or +1 (919) 754-3700.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, JBoss, Hibernate, Fedora, the Infinity logo, and RHCE are
trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a registered trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or
other countries.
The OpenStack® word mark and the Square O Design, together or apart, are trademarks or registered trademarks
of OpenStack Foundation in the United States and other countries, and are used with the OpenStack Foundation's
permission. Red Hat, Inc. is not affiliated with, endorsed by, or sponsored by the OpenStack Foundation or the
OpenStack community.
All other trademarks are the property of their respective owners.
Colaboradores: Artur Glogowski, Fernando Lozano, Latha Murthy, Samik Sanyal, Chetan Tiwary,
Achyut Madhusudan, Rob Locke, Rudolf Kastl, Prashant Rastogi, Heider Souza, Michael Phillips
Convenciones del documento
ix
Introducción
xi
Administración de sistemas Red Hat II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Orientación sobre el entorno del aula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
Internacionalización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
1. Mejora de la productividad con la línea de comandos
1
Redacción de scripts de Bash simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Ejercicio Guiado: Redacción de scripts de Bash simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Ejecución de comandos con mayor eficiencia usando bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Ejercicio Guiado: Ejecución de comandos con mayor eficiencia usando bucles . . . . . . . . . . . . . . . . . . 15
Texto coincidente en la salida de comando con expresiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Ejercicio Guiado: Texto coincidente en la salida de comando con expresiones regulares . . . . . 26
Trabajo de laboratorio: Mejora de la productividad con la línea de comandos . . . . . . . . . . . . . . . . . . . . 29
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2. Programación de tareas futuras
37
Programación de un trabajo de usuario diferido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Ejercicio Guiado: Programación de un trabajo de usuario diferido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Programación de trabajos de usuario recurrentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Ejercicio Guiado: Programación de trabajos de usuario recurrentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Programación de trabajos del sistema recurrentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Ejercicio Guiado: Programación de trabajos del sistema recurrentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Administración de archivos temporales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Ejercicio Guiado: Administración de archivos temporales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Cuestionario: Programación de tareas futuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3. Ajuste del rendimiento del sistema
69
Ajuste de perfiles de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Ejercicio Guiado: Ajuste de perfiles de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Influencia en la programación de procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Ejercicio Guiado: Influencia en la programación de procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Trabajo de laboratorio: Ajuste del rendimiento del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4. Control de acceso a archivos con ACL
91
Interpretación de ACL de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Cuestionario: Interpretación de ACL de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Protección de archivos con ACL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Ejercicio Guiado: Protección de archivos con ACL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Trabajo de laboratorio: Control de acceso a archivos con ACL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5. Administración de seguridad de SELinux
121
Cambio del modo de cumplimiento de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Ejercicio Guiado: Cambio del modo de cumplimiento de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Control de contextos de archivo de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Ejercicio Guiado: Control de contextos de archivo de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Ajuste de la política de SELinux con booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Ejercicio Guiado: Ajuste de la política de SELinux con booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Investigación y resolución de problemas de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Ejercicio Guiado: Investigación y resolución de problemas de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Trabajo de laboratorio: Administración de seguridad de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
6. Administración de almacenamiento básico
157
RH134-RHEL8.2-es-1-20200928
v
Adición de particiones, sistemas de archivos y montajes persistentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Ejercicio Guiado: Adición de particiones, sistemas de archivos y montajes persistentes . . . . . 168
Administración de espacio de intercambio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Ejercicio Guiado: Administración de espacio de intercambio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Trabajo de laboratorio: Administración de almacenamiento básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
7. Administración de volúmenes lógicos
191
Creación de volúmenes lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Ejercicio Guiado: Creación de volúmenes lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Ampliación de volúmenes lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Ejercicio Guiado: Ampliación de volúmenes lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Trabajo de laboratorio: Administración de volúmenes lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
8. Implementación de funciones avanzadas de almacenamiento
221
Gestión de almacenamiento en capas con Stratis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Ejercicio Guiado: Gestión de almacenamiento en capas con Stratis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Compresión y desduplicación de almacenamiento con VDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Ejercicio Guiado: Compresión y desduplicación de almacenamiento con VDO . . . . . . . . . . . . . . . . 236
Trabajo de laboratorio: Implementación de funciones avanzadas de almacenamiento . . . . . . 240
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
9. Acceso al almacenamiento conectado a la red
251
Montaje de almacenamiento conectado a la red con NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Ejercicio Guiado: Administración de almacenamiento conectado a la red con NFS . . . . . . . . . . . 255
Montaje automático de almacenamiento conectado a la red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Ejercicio Guiado: Montaje automático de almacenamiento conectado a la red . . . . . . . . . . . . . . . . 263
Trabajo de laboratorio: Acceso al almacenamiento conectado a la red . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
10. Control del proceso de arranque
277
Selección del objetivo de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Ejercicio Guiado: Selección del objetivo de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Restablecimiento de la contraseña de root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Ejercicio Guiado: Restablecimiento de la contraseña de root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Reparación de problemas del sistema de archivos en el arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Ejercicio Guiado: Reparación de problemas del sistema de archivos en el arranque . . . . . . . . . . 294
Trabajo de laboratorio: Control del proceso de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
11. Administración de la seguridad de redes
305
Administración de firewalls del servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Ejercicio Guiado: Administración de firewalls del servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Control del etiquetado de puertos de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Ejercicio Guiado: Control del etiquetado de puertos de SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Trabajo de laboratorio: Administración de la seguridad de redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
12. Instalación de Red Hat Enterprise Linux
335
Instalación de Red Hat Enterprise Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Ejercicio Guiado: Instalación de Red Hat Enterprise Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Automatización de la instalación con Kickstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Ejercicio Guiado: Automatización de la instalación con Kickstart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Instalación y configuración de máquinas virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Cuestionario: Instalación y configuración de máquinas virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Trabajo de laboratorio: Instalación de Red Hat Enterprise Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
vi
RH134-RHEL8.2-es-1-20200928
13. Ejecución de contenedores
371
Introducción a los contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Cuestionario: Introducción a los contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Ejecución de un contenedor básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Ejercicio Guiado: Ejecución de un contenedor básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Búsqueda y administración de imágenes de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Ejercicio Guiado: Búsqueda y administración de imágenes de contenedores . . . . . . . . . . . . . . . . . . 394
Realización de una administración avanzada de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Ejercicio Guiado: Realización de una administración avanzada de contenedores . . . . . . . . . . . . . 405
Conexión de almacenamiento persistente a un contenedor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Ejercicio Guiado: Conexión de almacenamiento persistente a un contenedor . . . . . . . . . . . . . . . . . . 413
Administración de contenedores como servicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Ejercicio Guiado: Administración de contenedores como servicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Trabajo de laboratorio: Ejecución de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
14. Revisión completa
437
Revisión completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Trabajo de laboratorio: Corrección de problemas de arranque y mantenimiento de
servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Trabajo de laboratorio: Configuración y administración de sistemas de archivos y
almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Trabajo de laboratorio: Configuración y administración de seguridad del servidor . . . . . . . . . . . 456
Trabajo de laboratorio: Ejecución de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
RH134-RHEL8.2-es-1-20200928
vii
viii
RH134-RHEL8.2-es-1-20200928
Convenciones del documento
Referencias
En "Referencias", se describe el lugar donde se puede encontrar documentación
externa relevante para un tema.
nota
Las "Notas" son consejos, atajos o enfoques alternativos para una tarea
determinada. Omitir una nota no debería tener consecuencias negativas, pero
quizás se pase por alto algún truco que puede simplificar una tarea.
Importante
En las cajas (boxes) "Importante", se detallan cosas que se olvidan con facilidad:
cambios de configuración que solo se aplican a la sesión actual o servicios que se
deben reiniciar para poder aplicar una actualización. Ignorar una caja (box) con la
etiqueta "Importante" no provocará pérdida de datos, pero puede causar irritación y
frustración.
Advertencia
No se deben ignorar las "advertencias". Es muy probable que ignorar las
advertencias provoque la pérdida de datos.
RH134-RHEL8.2-es-1-20200928
ix
x
RH134-RHEL8.2-es-1-20200928
Introducción
Administración de sistemas Red Hat II
Este curso está diseñado específicamente para estudiantes que hayan
completado el curso Red Hat System Administration I (RH124). Red Hat
System Administration II (RH134) se centra en las tareas principales
necesarias para convertirse en un administrador de Linux de tiempo
completo y validar esas habilidades mediante el examen Red Hat Certified
System Administrator. Este curso aborda en detalle la administración de
Enterprise Linux, que incluye sistemas de archivos y particiones, volúmenes
lógicos, SELinux, funciones de firewall y solución de problemas.
Objetivos del
curso
• Ampliar las habilidades obtenidas durante el
curso Red Hat System Administration I (RH124).
• Desarrollar las habilidades necesarias para
un administrador de sistemas Red Hat
Enterprise Linux con certificación RHCSA.
Destinatarios
• Este curso está diseñado particularmente para
estudiantes que hayan completado el curso
Red Hat System Administration I (RH124). Por
la organización de los temas, no es adecuado
que los estudiantes usen RH134 como punto
de entrada del plan de estudios. Se alienta a los
estudiantes que no hayan tomado un curso de
Red Hat anterior a tomar System Administration
I (RH124) si no conocen Linux o el curso RHCSA
Fast Track (RH200) si tienen experiencia con la
administración de Enterprise Linux.
Requisitos
previos
• Haber realizado el curso Red Hat System
Administration I (RH124), o tener conocimientos
equivalentes.
RH134-RHEL8.2-es-1-20200928
xi
Introducción
Orientación sobre el entorno del aula
Figura 0.1: Entorno del aula
En este curso, la computadora principal usada para las actividades prácticas de aprendizaje es
workstation. Los estudiantes también usarán otras dos máquinas para las actividades: servera
y serverb. Estos tres sistemas se encuentran en el dominio DNS lab.example.com.
Todas las computadoras de los estudiantes tienen una cuenta de usuario estándar (student) con
la contraseña student. La contraseña root de todos los sistemas de los estudiantes es redhat.
Máquinas del aula
Nombre de la máquina
Direcciones IP
Rol
bastion.lab.example.com
172.25.250.254
Sistema de puerta de enlace para
conectar la red privada de los
estudiantes al servidor del aula
(debe estar siempre en ejecución)
workstation.lab.example.com
172.25.250.9
Estación de trabajo gráfica usada
para la administración del sistema
servera.lab.example.com
172.25.250.10
Primer servidor
serverb.lab.example.com
172.25.250.11
Segundo servidor
utility.lab.example.com
(registry.lab.example.com)
172.25.250.220
Servidor del registro de
contenedores
xii
RH134-RHEL8.2-es-1-20200928
Introducción
La función principal de bastion es que actúa como enrutador entre la red que conecta las
máquinas de los estudiantes y la red del aula. Si bastion está apagada, otras máquinas de
estudiantes solo podrán acceder a sistemas en la red de estudiantes individuales.
Varios sistemas en el aula brindan servicios de soporte. El host classroom.example.com
proporciona dos sistemas, content.example.com y materials.example.com, que son
fuentes de software y materiales del trabajo de laboratorio usados en actividades prácticas. Se
provee información sobre cómo usar estos servidores en las instrucciones para estas actividades.
El host utility.lab.example.com proporciona registry.lab.example.com, que
ejecuta un servidor de registro de contenedores de Red Hat Quay que proporciona imágenes de
contenedor para ejercicios en el aula.
Los sistemas classroom, bastion y utility deben estar todos en ejecución para que el
entorno del aula funcione correctamente.
nota
Al iniciar sesión en servera o serverb, es posible que vea un mensaje sobre la
activación de cockpit. El mensaje puede ser ignorado.
[student@workstation ~]$ ssh student@serverb
Warning: Permanently added 'serverb,172.25.250.11' (ECDSA) to the list of
known hosts.
Activate the web console with: systemctl enable --now cockpit.socket
[student@serverb ~]$
Control de sus sistemas
Se le asignan computadoras remotas en un aula de aprendizaje en línea de Red Hat. Se accede a
ellas a través de una aplicación web alojada en rol.redhat.com [http://rol.redhat.com]. Debe iniciar
sesión en este sitio usando sus credenciales de usuario del Portal de clientes de Red Hat.
Control de las máquinas virtuales
Las máquinas virtuales del entorno de su aula se controlan a través de una página web. El estado
de cada máquina virtual en el aula se muestra en la página en la pestaña Online Lab (Trabajo de
laboratorio en línea).
Estados de la máquina
Estado de la
máquina virtual
Descripción
STARTING (EN
INICIO)
La máquina virtual está por arrancar.
STARTED (INICIADA)
La máquina virtual se está ejecutando y está disponible (o bien,
cuando arranque, pronto lo estará).
STOPPING (EN
DETENCIÓN)
La máquina virtual está por apagarse.
RH134-RHEL8.2-es-1-20200928
xiii
Introducción
Estado de la
máquina virtual
Descripción
STOPPED
(DETENIDA)
La máquina virtual se ha apagado completamente. Al iniciarse, la
máquina virtual arranca en el mismo estado en que se hallaba en el
momento de apagarse (el disco se habrá preservado).
PUBLISHING
(PUBLICADA)
Se está llevando a cabo la creación inicial de la máquina virtual.
WAITING_TO_START
(EN ESPERA PARA
INICIARSE)
La máquina virtual está esperando que inicien las demás máquinas
virtuales.
Según el estado de una máquina, se dispone de una selección de las siguientes acciones.
Acciones de aula/máquina
Botón o acción
Descripción
PROVISION LAB
(APROVISIONAR
TRABAJO DE
LABORATORIO)
Crea el aula de ROL. Crea todas las máquinas virtuales necesarias para
el aula y las inicia. Puede tardar algunos minutos en completarse.
DELETE LAB
(ELIMINAR
TRABAJO DE
LABORATORIO)
Elimina el aula de ROL. Destruye todas las máquinas virtuales del aula.
Precaución: Se perderán los trabajos generados en los discos.
START LAB
(INICIAR
TRABAJO DE
LABORATORIO)
Inicia todas las máquinas virtuales en el aula.
SHUTDOWN
LAB (APAGAR
TRABAJO DE
LABORATORIO)
Detiene todas las máquinas virtuales en el aula.
OPEN CONSOLE
(ABRIR CONSOLA)
Abra una nueva pestaña en el navegador y conéctese a la consola de
la máquina virtual. Puede iniciar sesión directamente en la máquina
virtual y ejecutar los comandos. En la mayoría de los casos, debe iniciar
sesión en la máquina virtual workstation y usar ssh para conectarse
a las otras máquinas virtuales.
ACTION (ACCIÓN)
→ Start(Iniciar)
Inicie (power on [encender]) la máquina virtual.
ACTION
(ACCIÓN) →
Shutdown(Apagar)
Apague la máquina virtual correctamente y preserve el contenido del
disco.
xiv
RH134-RHEL8.2-es-1-20200928
Introducción
Botón o acción
Descripción
ACTION (ACCIÓN)
→ Power
Off(Desconectar)
Fuerce el apagado de la máquina virtual y preserve el contenido del
disco. Esto equivale a desenchufar una máquina física.
ACTION
(ACCIÓN) →
Reset(Restablecer)
Fuerce el apagado de la máquina virtual y restablezca el disco para que
vuelva a su estado original. Precaución: Se perderán los trabajos
generados en el disco.
Al inicio de un ejercicio, si se le indica que restablezca el nodo de una máquina virtual, haga clic en
ACTION (ACCIÓN) → Reset (Restablecer) solo para la máquina virtual específica.
Al inicio de un ejercicio, si se le indica que restablezca todas las máquinas virtuales, haga clic en
ACTION (ACCIÓN) → Reset (Restablecer)
Si desea que el entorno del aula vuelva a su estado original al inicio del curso, puede hacer
clic en DELETE LAB (ELIMINAR TRABAJO DE LABORATORIO) para eliminar el entorno del
aula completo. Después de eliminar el trabajo de laboratorio, puede hacer clic en PROVISION
LAB (APROVISIONAR TRABAJO DE LABORATORIO) para aprovisionar un nuevo conjunto de
sistemas del aula.
Advertencia
La operación DELETE LAB (ELIMINAR TRABAJO DE LABORATORIO) no puede
deshacerse. Se perderán todos los trabajos que haya completado en el entorno del
aula hasta el momento.
Temporizador de detención automática
La inscripción a la capacitación en línea de Red Hat le da derecho a una cierta cantidad de tiempo
de uso del equipo. Para ahorrar tiempo asignado de la computadora, el aula de ROL tiene un
temporizador de cuenta regresiva asociado, el cual apaga el entorno del aula cuando se termina el
tiempo.
Para ajustar el temporizador, haga clic en MODIFY (MODIFICAR) para que aparezca el cuadro
de diálogo New Autostop Time (Nuevo tiempo de detención automática). Defina la cantidad
de horas hasta que el aula deba detenerse automáticamente. Tenga en cuenta que hay un tiempo
máximo de diez horas. Haga clic en ADJUST TIME (AJUSTAR TIEMPO) para aplicar este cambio
en los ajustes del temporizador.
RH134-RHEL8.2-es-1-20200928
xv
Introducción
Internacionalización
Selección de idioma por usuario
Es posible que sus usuarios prefieran usar un idioma para su entorno de escritorio distinto al
predeterminado del sistema. Quizás también quieran usar una distribución del teclado o un
método de entrada distintos para su cuenta.
Configuración de idioma
En el entorno de escritorio GNOME, posiblemente el usuario deba definir el idioma de su
preferencia y el método de entrada la primera vez que inicie sesión. Si no es así, la manera más
simple para un usuario individual de definir el idioma de su preferencia y el método de entrada es
usando la aplicación Region & Language.
Puede iniciar esta aplicación de dos maneras. Puede ejecutar el comando gnome-controlcenter region desde una ventana de terminal, o bien, en la barra superior en el menú de
sistema de la esquina derecha, puede seleccionar el botón de configuración (que tiene un icono de
un destornillador y una llave inglesa cruzados) ubicado en la parte inferior izquierda del menú.
En la ventana que se abre, seleccione Region & Language (Región e idioma). El usuario puede
hacer clic en la caja (box) Language (Idioma) y seleccionar el idioma de su preferencia en la
lista que aparece. Esto también actualiza la configuración de Formats (Formatos) mediante
la adopción del valor predeterminado para ese idioma. La próxima vez que inicie sesión, se
efectuarán los cambios.
Estas configuraciones afectan el entorno de escritorio GNOME y todas las aplicaciones, como
gnome-terminal, que se inician dentro de este. Sin embargo, de forma predeterminada, no se
aplican a la cuenta si el acceso a ella es mediante un inicio de sesión ssh desde un sistema remoto
o un inicio de sesión basado en texto en una consola virtual (como tty5).
nota
Puede hacer que su entorno de shell use la misma configuración de LANG que su
entorno gráfico, incluso cuando inicia sesión a través de una consola virtual basada
en texto o mediante ssh. Una manera de hacer esto es colocar un código similar
al siguiente en su archivo ~/.bashrc. Este código de ejemplo definirá el idioma
empleado en un inicio de sesión en interfaz de texto de modo que coincida con el
idioma actualmente definido en el entorno de escritorio GNOME del usuario.
i=$(grep 'Language=' /var/lib/AccountsService/users/${USER} \
| sed 's/Language=//')
if [ "$i" != "" ]; then
export LANG=$i
fi
Es posible que algunos idiomas, como el japonés, coreano, chino y otros con un
conjunto de caracteres no latinos, no se vean correctamente en consolas virtuales
basadas en texto.
xvi
RH134-RHEL8.2-es-1-20200928
Introducción
Se pueden crear comandos individuales para usar otro idioma mediante la configuración de la
variable LANG en la línea de comandos:
[user@host ~]$ LANG=fr_FR.utf8 date
jeu. avril 25 17:55:01 CET 2019
Los comandos subsiguientes se revertirán y usarán el idioma de salida predeterminado del
sistema. El comando locale se puede usar para determinar el valor actual de LANG y otras
variables de entorno relacionadas.
Configuración del método de entrada
GNOME 3 en Red Hat Enterprise Linux 7 o posterior usa de manera automática el sistema de
selección de método de entrada IBus, que permite cambiar las distribuciones del teclado y los
métodos de entrada de manera rápida y sencilla.
La aplicación Region & Language (Región e idioma) también se puede usar para habilitar métodos
de entrada alternativos. En la ventana de la aplicación Region & Language (Región e idioma), la
caja (box) Input Sources (Fuentes de entrada) muestra los métodos de entrada disponibles en
este momento. De forma predeterminada, es posible que English (US) (Inglés [EE. UU.]) sea
el único método disponible. Resalte English (US) (Inglés [EE. UU.]) y haga clic en el icono de
keyboard (teclado) para ver la distribución actual del teclado.
Para agregar otro método de entrada, haga clic en el botón +, en la parte inferior izquierda de
la ventana Input Sources. Se abrirá la ventana Add an Input Source (Agregar una fuente de
entrada). Seleccione su idioma y, luego, el método de entrada o la distribución del teclado de su
preferencia.
Cuando haya más de un método de entrada configurado, el usuario puede alternar entre ellos
rápidamente escribiendo Super+Space (en ocasiones denominado Windows+Space). También
aparecerá un indicador de estado en la barra superior de GNOME con dos funciones: por un lado,
indica el método de entrada activo; por el otro lado, funciona como un menú que puede usarse
para cambiar de un método de entrada a otro o para seleccionar funciones avanzadas de métodos
de entrada más complejos.
Algunos de los métodos están marcados con engranajes, que indican que tienen opciones de
configuración y capacidades avanzadas. Por ejemplo, el método de entrada japonés Japanese
(Kana Kanji) (japonés [Kana Kanji]) permite al usuario editar previamente texto en latín y usar las
teclas de Down Arrow (flecha hacia abajo) y Up Arrow (flecha hacia arriba) para seleccionar los
caracteres correctos que se usarán.
El indicador también puede ser de utilidad para los hablantes de inglés de Estados Unidos. Por
ejemplo, en English (United States) (Inglés [Estados Unidos]) está la distribución de teclado
English (international AltGr dead keys) (Inglés [internacional, teclas inactivas AltGr]), que
trata AltGr (o la tecla Alt derecha) en un teclado de 104/105 teclas de una PC como una tecla
modificadora "Bloq Mayús secundaria" y tecla de activación de teclas inactivas para escribir
caracteres adicionales. Hay otras distribuciones alternativas disponibles, como Dvorak.
RH134-RHEL8.2-es-1-20200928
xvii
Introducción
nota
Cualquier carácter Unicode puede ingresarse en el entorno de escritorio GNOME
si conoce el código Unicode del carácter. Escriba Ctrl+Shift+U, seguido por
el código. Después de ingresar Ctrl+Shift+U, aparecerá una u subrayada que
indicará que el sistema espera la entrada del código Unicode.
Por ejemplo, la letra del alfabeto griego en minúscula lambda tiene el código U
+03BB y puede ingresarse escribiendo Ctrl+Shift+U, luego 03BB y, por último,
Enter.
Configuración de idioma predeterminado en todo el
sistema
El idioma predeterminado del sistema está definido en US English (inglés de EE. UU.), que usa
la codificación UTF-8 de Unicode como su conjunto de caracteres (en_US.utf8), pero puede
cambiarse durante o después de la instalación.
Desde la línea de comandos, el usuario root puede cambiar los ajustes de configuración regional
de todo el sistema con el comando localectl. Si localectl se ejecuta sin argumentos,
muestra los ajustes actuales de configuración regional de todo el sistema.
Para configurar el idioma predeterminado de todo el sistema, ejecute el comando localectl
set-locale LANG=locale, donde locale es el valor adecuado para la variable de entorno LANG
de la tabla "Referencia de códigos de idioma" en este capítulo. El cambio entrará en vigencia para
los usuarios en su siguiente inicio de sesión y se almacena en /etc/locale.conf.
[root@host ~]# localectl set-locale LANG=fr_FR.utf8
En GNOME, un usuario administrativo puede cambiar esta configuración en Region & Language
(Región e idioma) haciendo clic en el botón Login Screen (Pantalla de inicio de sesión) ubicado
en la esquina superior derecha de la ventana. Al cambiar la opción Language (Idioma) de la
pantalla de inicio de sesión gráfico, también se ajustará el valor de idioma predeterminado de todo
el sistema almacenado en el archivo de configuración /etc/locale.conf.
Importante
Las consolas virtuales basadas en texto, como tty4, pueden mostrar una cantidad
más limitada de fuentes que los terminales en una consola virtual que ejecuta un
entorno gráfico, o pseudoterminales para sesiones ssh. Por ejemplo, los caracteres
del japonés, coreano y chino posiblemente no se visualicen como se espera en una
consola virtual basada en texto. Por este motivo, debe considerar el uso de inglés u
otro idioma con un conjunto de caracteres latinos para los valores predeterminados
para todo el sistema.
De manera similar, las consolas virtuales basadas en texto soportan una cantidad
limitada de métodos de entrada; y esto se administra de manera separada
desde el entorno gráfico de escritorio. Las opciones de entrada globales
pueden ser configuradas a través localectl de la consola de texto virtual y del
entorno gráfico. Para obtener más información, consulte las páginas del manual
localectl(1) y vconsole.conf(5).
xviii
RH134-RHEL8.2-es-1-20200928
Introducción
Paquetes de idiomas
Paquetes de RPM especiales llamados langpacks instalan paquetes de idiomas que agregan
soporte para idiomas específicos. Estos paquetes de idiomas usan dependencias para instalar
automáticamente paquetes de RPM adicionales que contienen localizaciones, diccionarios y
traducciones para otros paquetes de software en su sistema.
Use yum list langpacks-* para enumerar los paquetes de idiomas que están instalados y
que pueden instalarse:
[root@host ~]# yum list langpacks-*
Updating Subscription Management repositories.
Updating Subscription Management repositories.
Installed Packages
langpacks-en.noarch
1.0-12.el8
@AppStream
Available Packages
langpacks-af.noarch
1.0-12.el8
rhel-8-for-x86_64-appstream-rpms
langpacks-am.noarch
1.0-12.el8
rhel-8-for-x86_64-appstream-rpms
langpacks-ar.noarch
1.0-12.el8
rhel-8-for-x86_64-appstream-rpms
langpacks-as.noarch
1.0-12.el8
rhel-8-for-x86_64-appstream-rpms
langpacks-ast.noarch
1.0-12.el8
rhel-8-for-x86_64-appstream-rpms
...output omitted...
Para agregar soporte de idioma, instale el paquete langpacks correcto. Por ejemplo, el siguiente
comando agrega soporte para francés:
[root@host ~]# yum install langpacks-fr
Use yum repoquery --whatsupplements para determinar qué paquetes de RPM pueden ser
instalados por un paquete de idiomas:
[root@host ~]# yum repoquery --whatsupplements langpacks-fr
Updating Subscription Management repositories.
Updating Subscription Management repositories.
Last metadata expiration check: 0:01:33 ago on Wed 06 Feb 2019 10:47:24 AM CST.
glibc-langpack-fr-0:2.28-18.el8.x86_64
gnome-getting-started-docs-fr-0:3.28.2-1.el8.noarch
hunspell-fr-0:6.2-1.el8.noarch
hyphen-fr-0:3.0-1.el8.noarch
libreoffice-langpack-fr-1:6.0.6.1-9.el8.x86_64
man-pages-fr-0:3.70-16.el8.noarch
mythes-fr-0:2.3-10.el8.noarch
RH134-RHEL8.2-es-1-20200928
xix
Introducción
Importante
Los paquetes langpacks usan dependencias débiles de RPM para instalar paquetes
complementarios solo cuando el paquete principal (core) que lo necesita también
está instalado.
Por ejemplo, al instalar langpacks-fr como se muestra en los ejemplos anteriores, el
paquete mythes-fr solo se instalará si el tesauro mythes también está instalado en el
sistema.
Si mythes se instala posteriormente en ese sistema, el paquete mythes-fr también
se instalará automáticamente debido a la débil dependencia del paquete langpacksfr ya instalado.
Referencias
Páginas del manual: locale(7), localectl(1), locale.conf(5),
vconsole.conf(5), unicode(7) y utf-8(7).
Las conversiones entre los nombres de las distribuciones X11 del entorno de
escritorio gráfico y sus nombres en localectl se pueden encontrar en el archivo /
usr/share/X11/xkb/rules/base.lst.
Referencia de códigos de idioma
nota
Es posible que en esta tabla no se reflejen todos los paquetes de idiomas
disponibles en su sistema. Use yum info langpacks-SUFFIX para obtener más
información sobre un paquete de idiomas en particular.
Códigos de idioma
Idioma
Sufijo de los
paquetes de
idiomas
Valor $LANG
Inglés (EE. UU.)
en
en_US.utf8
Asamés
as
as_IN.utf8
Bengalí
bn
bn_IN. UTF8
Chino (Simplificado)
zh_CN
zh_CN.utf8
Chino (Tradicional)
zh_TW
zh_TW.utf8
Francés
fr
fr_FR.utf8
Alemán
de
de_DE.utf8
Guyaratí
gu
gu_IN.utf8
xx
RH134-RHEL8.2-es-1-20200928
Introducción
Idioma
Sufijo de los
paquetes de
idiomas
Valor $LANG
Hindi
hi
hi_IN.utf8
Italiano
it
it_IT.utf8
Japonés
ja
ja_JP.utf8
Canarés
kn
kn_IN.utf8
Coreano
ko
ko_KR.utf8
Malayalam
ml
ml_IN.utf8
Maratí
mr
mr_IN.utf8
Odia
or
or_IN.utf8
Portugués (Brasil)
pt_BR
pt_BR. UTF8
Punyabí
pa
pa_IN.utf8
Ruso
ru
ru_RU.utf8
Español
es
es_ES.utf8
Tamil
ta
ta_IN.utf8
Telugú
te
te_IN.utf8
RH134-RHEL8.2-es-1-20200928
xxi
xxii
RH134-RHEL8.2-es-1-20200928
capítulo 1
Mejora de la productividad con
la línea de comandos
Meta
Ejecutar los comandos de manera más eficiente
mediante el uso de las funciones avanzadas
de la shell de Bash, los scripts de shell y
diversas utilidades proporcionadas por Red Hat
Enterprise Linux.
Objetivos
•
Automatizar las secuencias de comandos
escribiendo un simple script de shell.
•
Ejecutar comandos con eficiencia con listas de
ítems en un script o desde la línea de comandos
usando bucles for y condicionales.
•
Encontrar texto que coincida con un patrón en
los archivos de registro y la salida del comando
con el comando grep y las expresiones
regulares.
•
Redacción de scripts de Bash simples (y
ejercicio guiado)
•
Ejecución de comandos con mayor eficiencia
usando bucles (y ejercicio guiado)
•
Texto coincidente en la salida de comando con
expresiones regulares (y ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Mejora de la productividad con la línea de
comandos
1
capítulo 1 | Mejora de la productividad con la línea de comandos
Redacción de scripts de Bash simples
Objetivos
Después de completar esta sección, debe ser capaz de automatizar secuencias de comandos
escribiendo un simple script de shell.
Creación y ejecución de scripts de shell de Bash
Muchas tareas simples y comunes de administración de sistemas se realizan usando herramientas
de la línea de comandos. Las tareas que revisten mayor complejidad suelen requerir la
concatenación de varios comandos que se pasen resultados entre ellos. Usando el entorno de
shell Bash y las funciones de scripting, los comandos de Linux se combinan en scripts de shell para
resolver fácilmente los problemas repetitivos y difíciles del mundo real.
En su forma más simple, un script de shell Bash es un archivo ejecutable que contiene una lista
de comandos, y posiblemente con lógica de programación para controlar la toma de decisiones
en la tarea general. Si está bien escrito, un script de shell puede convertirse en una eficiente
herramienta de la línea de comandos cuando se ejecuta solo, y otros scripts pueden usarlo.
Para que los administradores de sistemas de Linux se desempeñen correctamente en todos los
entornos operativos, es esencial que tengan experiencia con scripting de shell. El conocimiento
práctico de scripting de shell resulta de especial importancia en entornos empresariales en los que
su uso puede traducirse en mayores eficiencia y precisión en la realización de tareas de rutina.
Puede crear un script de shell de Bash abriendo un archivo vacío en un editor de texto. Si bien
puede usar cualquier editor de texto, los editores avanzados, como vim o emacs, entienden
la sintaxis de shell de Bash y pueden proporcionar resaltado codificado por colores.
Este resaltado ayuda a identificar errores comunes, como sintaxis incorrecta, comillas faltantes,
paréntesis, llaves y corchetes faltantes, y mucho más.
Especificación del intérprete de comandos
La primera línea de un script comienza con la notación '#!', que comúnmente se denominan
sh-bang o she-bang, a partir de los nombres de esos dos caracteres, sharp y bang . Esta
notación específica de número mágico de dos bites indica un script interpretativo; la sintaxis
que sigue a la notación es el nombre del archivo completamente calificado para el intérprete
de comandos correcto necesario para procesar las líneas de este script. Para entender como
los números mágicos indican los tipos de archivos en Linux, consulte las páginas del manual
file(1) y magic(5). Para los archivos de script que usan la sintaxis de scripting de Bash, la
primera línea de un script de shell comienza de la siguiente manera:
#!/bin/bash
Ejecución de un script de shell de Bash
Un script de shell completado debe ser ejecutable para ejecutarse como un comando ordinario.
Use el comando chmod para agregar un permiso de ejecución, posiblemente junto con el comando
chown para cambiar la propiedad del archivo del script. Otorgue permiso de ejecución solo para
los usuarios previstos del script.
2
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Si coloca el script en uno de los directorios listados en la variable ambiental PATH de la shell,
puede invocar el script de shell usando solo el nombre del archivo como con cualquier otro
comando. La shell usa el primer comando que encuentra con ese nombre de archivo; evite usar
nombres de comandos existentes para su nombre de archivo del script de shell. Alternativamente,
puede invocar un script de shell ingresando un nombre de ruta al script en la línea de comandos.
El comando which, seguido del nombre de archivo del script ejecutable, muestra el nombre de la
ruta al comando que se ejecutará.
[user@host ~]$ which hello
~/bin/hello
[user@host ~]$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/
bin:/usr/local/sbin:/usr/sbin
Entrecomillado de caracteres especiales
Una serie de caracteres y palabras tienen significados especiales para la shell de Bash. Sin
embargo, ocasionalmente querrá usar estos caracteres para sus valores literales, en lugar de para
sus significados especiales. Para ello, use una de las tres herramientas para eliminar (o escape) el
significado especial: la barra invertida (\), comillas simples ('') o comillas dobles ("").
El carácter de escape barra invertida quita el significado especial del carácter individual que le
sigue inmediatamente. Por ejemplo, para visualizar la cadena # not a comment con el comando
echo, el signo # no debe ser interpretado por Bash con su significado especial. Coloque el
carácter de barra invertida delante del signo #.
[user@host ~]$ echo # not a comment
[user@host ~]$ echo \# not a comment
# not a comment
Cuando se debe eludir más de un carácter en una cadena de texto, los usuarios pueden usar
el carácter de escape varias veces o usar comillas simples (''). Las comillas simples conservan
el significado literal de todos los caracteres que encierran. Observe el carácter de escape y las
comillas simples en acción:
[user@host ~]$ echo # not a comment #
[user@host ~]$ echo \# not a comment #
# not a comment
[user@host ~]$ echo \# not a comment \#
# not a comment #
[user@host ~]$ echo '# not a comment #'
# not a comment #
Use comillas dobles para suprimir el globbing y la expansión de la shell, pero permita la sustitución
de comandos y variables. A nivel conceptual, la sustitución de variables es idéntica a la sustitución
de comandos, pero puede usar sintaxis de llaves opcional. Observe los ejemplos de las diversas
formas de uso de comillas a continuación.
Use comillas simples para interpretar todo el texto literalmente. Además de suprimir el globbing
y la expansión de la shell, las comillas dirigen a la shell para que también suprima la sustitución de
RH134-RHEL8.2-es-1-20200928
3
capítulo 1 | Mejora de la productividad con la línea de comandos
comandos y variables. El signo de interrogación (?) es un metacarácter que también necesita
protección para evitar la expansión.
[user@host ~]$ var=$(hostname -s); echo $var
host
[user@host ~]$ echo "***** hostname is ${var} *****"
***** hostname is host *****
[user@host ~]$ echo Your username variable is \$USER.
Your username variable is $USER.
[user@host ~]$ echo "Will variable $var evaluate to $(hostname -s)?"
Will variable host evaluate to host?
[user@host ~]$ echo 'Will variable $var evaluate to $(hostname -s)?'
Will variable $var evaluate to $(hostname -s)?
[user@host ~]$ echo "\"Hello, world\""
"Hello, world"
[user@host ~]$ echo '"Hello, world"'
"Hello, world"
Proporcionar salida de un script de shell
El comando echo visualiza texto arbitrario al asignar el texto como argumento del comando. De
manera predeterminada, el texto se visualiza en salida estándar (STDOUT), pero también puede
dirigirse a error estándar (STDERR) si se usa la redirección de la salida. En el siguiente script de
Bash simple, el comando echo muestra el mensaje "Hello, world" (Hola, mundo) a STDOUT.
[user@host ~]$ cat ~/bin/hello
#!/bin/bash
echo "Hello, world"
[user@host ~]$ hello
Hello, world
nota
Este usuario solo puede ejecutar hello en el prompt porque el directorio ~/bin (/
home/user/bin) está en la variable PATH del usuario y el script hello en este es
ejecutable. La shell encuentra automáticamente el script allí, siempre que no haya
otro archivo ejecutable llamado hello en cualquiera de los directorios enumerados
antes de /home/user/bin en la PATH.
El comando echo se usa ampliamente en scripts de shell para mostrar mensajes informativos o de
error. Estos mensajes pueden ser indicadores útiles del progreso de un script y pueden dirigirse
a salida estándar, error estándar, o bien ser redirigidos a un archivo de registro para su archivado.
Cuando se visualizan mensajes de error, se recomienda dirigirlos a STDERR a fin de facilitar la
diferenciación entre mensajes de error y mensajes de estado normal.
[user@host ~]$ cat ~/bin/hello
#!/bin/bash
echo "Hello, world"
echo "ERROR: Houston, we have a problem." >&2
4
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
[user@host ~]$ hello 2> hello.log
Hello, world
[user@host ~]$ cat hello.log
ERROR: Houston, we have a problem.
El comando echo también puede resultar de utilidad cuando se intenta depurar un script de shell
problemático. La adición de sentencias echo a la parte del script que no se comporta según lo
previsto puede ser de ayuda para aclarar los comandos que se ejecutan, así como los valores de
las variables que se invocan.
Referencias
Páginas del manual: bash(1), magic(5), echo(1) y echo(1p).
RH134-RHEL8.2-es-1-20200928
5
capítulo 1 | Mejora de la productividad con la línea de comandos
Ejercicio Guiado
Redacción de scripts de Bash simples
En este ejercicio, escribirá una secuencia de comandos de Bash simple que contiene una
secuencia de comandos y la ejecutará desde la línea de comandos.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Escribir y ejecutar un simple script de Bash
• Redirigir la salida de un script de Bash simple a un archivo
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab console-write start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
El script le avisará si no está disponible. También instala el paquete vim-enhanced si es
necesario.
[student@workstation ~]$ lab console-write start
1.
Desde workstation, abra una sesión de SSH en servera como student. Los sistemas
se configuran para que usen claves SSH para la autenticación, por lo que no se necesita una
contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Cree y ejecute un script simple de Bash.
2.1.
Use el editor de texto vim para crear un nuevo archivo de texto en su directorio de
inicio y asígnele el nombre firstscript.sh.
[student@servera ~]$ vim firstscript.sh
2.2.
Inserte el siguiente texto y guarde el archivo. Tenga en cuenta que la cantidad de
señales hash (#) es arbitraria.
#!/bin/bash
echo "This is my first bash script" > ~/output.txt
echo "" >> ~/output.txt
echo "#####################################################" >> ~/output.txt
2.3.
6
Use el comando sh para ejecutar el script.
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
[student@servera ~]$ sh firstscript.sh
2.4.
Revise el archivo de salida generado por el script.
[student@servera ~]$ cat output.txt
This is my first bash script
#####################################################
3.
Agregue más comandos al script firstscript.sh, ejecútelo y revise la salida.
3.1.
Use el editor de texto vim para editar el firstscript.sh.
[student@servera ~]$ vim firstscript.sh
3.2.
Agregue las siguientes líneas en negrita al archivo firstscript.sh.
#!/bin/bash
#
echo "This is my first bash script" > ~/output.txt
echo "" >> ~/output.txt
echo "#####################################################" >> ~/output.txt
echo "LIST BLOCK DEVICES" >> ~/output.txt
echo "" >> ~/output.txt
lsblk >> ~/output.txt
echo "" >> ~/output.txt
echo "#####################################################" >> ~/output.txt
echo "FILESYSTEM FREE SPACE STATUS" >> ~/output.txt
echo "" >> ~/output.txt
df -h >> ~/output.txt
echo "#####################################################" >> ~/output.txt
3.3.
Haga que el archivo firstscript.sh sea ejecutable con el comando chmod.
[student@servera ~]$ chmod a+x firstscript.sh
3.4.
Ejecute el script firstscript.sh.
[student@servera ~]$ ./firstscript.sh
3.5.
Revise el archivo de salida generado por el script.
[student@servera ~]$ cat output.txt
This is my first bash script
#####################################################
LIST BLOCK DEVICES
NAME
sr0
MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
11:0
1 1024M 0 rom
RH134-RHEL8.2-es-1-20200928
7
capítulo 1 | Mejora de la productividad con la línea de comandos
vda
252:0
└─vda1 252:1
vdb
252:16
0
0
0
10G
10G
5G
0 disk
0 part /
0 disk
#####################################################
FILESYSTEM FREE SPACE STATUS
Filesystem
Size Used Avail Use% Mounted on
devtmpfs
892M
0 892M
0% /dev
tmpfs
915M
0 915M
0% /dev/shm
tmpfs
915M
17M 899M
2% /run
tmpfs
915M
0 915M
0% /sys/fs/cgroup
/dev/vda1
10G 1.5G 8.6G 15% /
tmpfs
183M
0 183M
0% /run/user/1000
#####################################################
4. Elimine los archivos de ejercicio y cierre sesión en servera.
4.1.
Elimine el archivo de script firstscript.sh y el archivo de salida output.txt.
[student@servera ~]$ rm firstscript.sh output.txt
4.2.
Cierre sesión en servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab console-write finish para terminar este ejercicio.
[student@workstation ~]$ lab console-write finish
Esto concluye el ejercicio guiado.
8
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Ejecución de comandos con mayor
eficiencia usando bucles
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Iterar en listas usando bucles for.
• Evaluar los códigos de salida de comandos y scripts.
• Realizar pruebas con operadores.
• Crear estructuras condicionales con declaraciones if
Uso de bucles para iterar comandos
Los administradores de sistemas a menudo se encuentran con tareas repetitivas en sus
actividades cotidianas. Las tareas repetitivas pueden implicar la realización de una acción varias
veces en un objetivo, como controlar un proceso una vez por minuto durante 10 minutos para ver si
ha finalizado. La repetición de tareas también puede implicar la realización de una acción una vez
en varios objetivos, como realizar una copia de seguridad de cada base de datos de un sistema. El
bucle for es una de las tantas construcciones de bucles de shell que ofrece Bash que puede usarse
para iteraciones de tareas.
Procesamiento de ítems desde la línea de comandos
La construcción del bucle for de Bash emplea la siguiente sintaxis.
for VARIABLE in LIST; do
COMMAND VARIABLE
done
El bucle procesa las cadenas proporcionadas en LIST en orden, de a una por vez, y termina
después de procesar la última cadena de la lista. Cada cadena de la lista se almacena
provisoriamente como el valor de VARIABLE, mientras que el bucle for ejecuta el bloque
de comandos incluido en su construcción. El nombre asignado a la variable es arbitrario.
Normalmente, se hace referencia al valor de la variable a través de comandos en el bloque de
comandos.
La lista de cadenas proporcionadas a un bucle for puede proporcionarse de distintas maneras.
Puede ser una lista de cadenas ingresadas directamente por el usuario o generada a partir de
distintos tipos de expansión de shell, como expansión de variable, expansión de llave, expansión de
nombre de archivo o sustitución de comandos. A continuación se incluyen algunos ejemplos que
demuestran las distintas maneras en que se pueden proporcionar cadenas a bucles for.
[user@host ~]$ for HOST in host1 host2 host3; do echo $HOST; done
host1
host2
host3
[user@host ~]$ for HOST in host{1,2,3}; do echo $HOST; done
host1
host2
RH134-RHEL8.2-es-1-20200928
9
capítulo 1 | Mejora de la productividad con la línea de comandos
host3
[user@host ~]$ for HOST in host{1..3}; do echo $HOST; done
host1
host2
host3
[user@host ~]$ for FILE in file*; do ls $FILE; done
filea
fileb
filec
[user@host ~]$ for FILE in file{a..c}; do ls $FILE; done
filea
fileb
filec
[user@host ~]$ for PACKAGE in $(rpm -qa | grep kernel); \
do echo "$PACKAGE was installed on \
$(date -d @$(rpm -q --qf "%{INSTALLTIME}\n" $PACKAGE))"; done
abrt-addon-kerneloops-2.1.11-12.el7.x86_64 was installed on Tue Apr 22 00:09:07
EDT 2014
kernel-3.10.0-121.el7.x86_64 was installed on Thu Apr 10 15:27:52 EDT 2014
kernel-tools-3.10.0-121.el7.x86_64 was installed on Thu Apr 10 15:28:01 EDT 2014
kernel-tools-libs-3.10.0-121.el7.x86_64 was installed on Thu Apr 10 15:26:22 EDT
2014
[user@host ~]$ for EVEN in $(seq 2 2 10); do echo "$EVEN"; done
2
4
6
8
10
Uso de códigos de salida en un script
Después de que un script haya procesado todos sus contenidos, sale al proceso que lo llamó. Sin
embargo, es posible que ocasionalmente se desee finalizar un script antes de que termine, como
cuando se detecta una condición de error. Para ello, debe usarse el comando exit dentro de un
script. Cuando un script detecta el comando exit, finaliza de inmediato y no procesa el resto del
script.
El comando exit puede ejecutarse con un argumento entero opcional entre 0 y 255, que
representa un código de salida. Un código de salida es un código que se devuelve después de que
se ha completado un proceso. Un valor de código de salida igual a 0 indica que no hay error. Todos
los demás valores diferentes a cero indican un código de salida con error. Puede usar valores que
no son cero distintos para diferenciar los diversos tipos de errores detectados. El código de salida
se traslada al proceso principal, que lo almacena en la variable ? y al que puede accederse con $?,
conforme se demuestra en los siguientes ejemplos.
[user@host bin]$ cat hello
#!/bin/bash
echo "Hello, world"
exit 0
[user@host bin]$ ./hello
Hello, world
10
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
[user@host bin]$ echo $?
0
Si el comando exit se solicita sin un argumento, el script finaliza y pasa el estado de salida del
último comando ejecutado al proceso principal.
Prueba de entradas de script
Para asegurarse de que condiciones imprevistas no ocasionen fácilmente la falla de scripts, se
recomienda que no se hagan suposiciones con respecto a las entradas, como argumentos de la
línea de comandos, entradas del usuario, sustituciones de comandos, expansiones de variables y
expansiones de nombres de archivo. La verificación de la integridad puede realizarse usando el
comando test de Bash.
Al igual que todos los comandos, el comando test, tras finalizar, genera un código de salida, que
se almacena como el valor $?. Para ver la conclusión de una prueba, muestre el valor de $? que
se encuentra inmediatamente a continuación de la ejecución del comando test. Una vez más, un
estado de salida igual a 0 indica que la prueba se realizó correctamente, mientras que un estado
de salida distinto a cero indica que la prueba no se realizó correctamente.
Las pruebas se realizan con una variedad de operadores. Los operadores pueden usarse para
determinar si un número es mayor que, mayor o igual que, menor que, menor o igual que, o igual
a otro número. Se pueden usar para probar si una cadena de texto es igual o no a otra cadena de
texto. Los operadores también pueden usarse para evaluar si una variable tiene un valor o no.
nota
Muchos tipos de operadores se usan en scripting de shell, además de los
operadores de comparación que se enseñan aquí. La página del manual de
test(1) enumera los operadores de expresiones condicionales importantes
con descripciones. La página del manual de bash(1) también explica el uso y la
evaluación del operador, pero es una lectura muy difícil para los principiantes. Se
recomienda que los estudiantes amplíen sus necesidades avanzadas sobre scripting
de shell con libros y cursos dedicados a la programación de shell.
A continuación se ejemplifica el uso del comando test con los operadores comparativos
numéricos de Bash.
[user@host ~]$ test 1 -gt 0 ; echo $?
0
[user@host ~]$ test 0 -gt 1 ; echo $?
1
Las pruebas pueden realizarse mediante el uso de la sintaxis de comandos de prueba de Bash:
[ <TESTEXPRESSION> ]. También pueden llevarse a cabo mediante el uso de la sintaxis de
comandos de prueba ampliada más nueva de Bash: [[ <TESTEXPRESSION> ]], que está
disponible a partir de la versión 2.02 de Bash y que proporciona características como coincidencia
de patrones de comodines y coincidencia de patrones de expresiones regulares.
A continuación se ejemplifica el uso de la sintaxis de comandos de prueba y los operadores
comparativos numéricos de Bash.
RH134-RHEL8.2-es-1-20200928
11
capítulo 1 | Mejora de la productividad con la línea de comandos
[user@host ~]$ [ 1 -eq 1 ]; echo $?
0
[user@host ~]$ [ 1 -ne 1 ]; echo $?
1
[user@host ~]$ [ 8 -gt 2 ]; echo $?
0
[user@host ~]$ [ 2 -ge 2 ]; echo $?
0
[user@host ~]$ [ 2 -lt 2 ]; echo $?
1
[user@host ~]$ [ 1 -lt 2 ]; echo $?
0
A continuación se ejemplifica el uso de operadores comparativos de cadenas de Bash.
[user@host ~]$ [ abc = abc ]; echo $?
0
[user@host ~]$ [ abc == def ]; echo $?
1
[user@host ~]$ [ abc != def ]; echo $?
0
A continuación se ejemplifica el uso de operadores individuales de cadenas de Bash.
[user@host ~]$ STRING=''; [ -z "$STRING" ]; echo $?
0
[user@host ~]$ STRING='abc'; [ -n "$STRING" ]; echo $?
0
nota
Los caracteres de espacio dentro de los corchetes de prueba son obligatorios,
porque separan las palabras y los elementos dentro de la expresión de prueba. La
rutina de análisis de comandos de la shell divide todas las líneas de comandos en
palabras y operadores al reconocer espacios y otros metacaracteres con reglas de
análisis incorporadas. Para obtener un análisis completo de este concepto avanzado,
consulte la página del manual getopt(3). El carácter de corchete izquierdo ([)
es en sí un alias incorporado para el comando test. Las palabras de shell, ya sean
comandos, subcomandos, opciones, argumentos u otros elementos de token, están
siempre delimitadas por espacios.
Estructuras condicionales
Los scripts de shell simples representan una recopilación de comandos que se ejecutan de
principio a fin. Las estructuras condicionales permiten que los usuarios incorporen la toma de
decisiones en scripts de shell, de modo que ciertas partes del script se ejecutan solo cuando se
cumplen determinadas condiciones.
Uso de la construcción if/then
La estructura condicional más simple en Bash es la construcción if/then, que tiene la siguiente
sintaxis:
12
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
fi
Con esta construcción, si se cumple una determinada condición, se realizan una o más acciones.
Si la condición no se cumple, no se realiza ninguna acción. Las pruebas de números, cadenas
y archivos demostradas anteriormente se usan con frecuencia para la prueba de condiciones
en declaraciones if/then. La declaración if del final cierra la construcción if/then. En la
siguiente sección de código, se demuestra el uso de una construcción if/then para iniciar el
servicio psacct si no se encuentra activo.
[user@host ~]$ systemctl is-active psacct > /dev/null 2>&1
[user@host ~]$ if [ $? -ne 0 ]; then
> sudo systemctl start psacct
> fi
Uso de la construcción if/then/else
La construcción if/then puede expandirse aún más para que diversas acciones puedan
realizarse en función de si una condición se cumple o no. Esto se logra con la construcción if/
then/else.
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
else
<STATEMENT>
...
<STATEMENT>
fi
En la siguiente sección de código, se demuestra el uso de una declaración if/then/else para
iniciar el servicio psacct si no se encuentra activo y para detenerlo si está activo.
[user@host ~]$ systemctl is-active psacct > /dev/null 2>&1
[user@host ~]$ if [ $? -ne 0 ]; then
> sudo systemctl start psacct
> else
> sudo systemctl stop psacct
> fi
Uso de la construcción if/then/elif/then/else
Por último, la estructura condicional if/then/else puede expandirse aún más para probar
más de una condición y se ejecutará un conjunto de acciones diferente cuando se cumpla una
condición. La construcción se muestra en el siguiente ejemplo:
RH134-RHEL8.2-es-1-20200928
13
capítulo 1 | Mejora de la productividad con la línea de comandos
if <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
elif <CONDITION>; then
<STATEMENT>
...
<STATEMENT>
else
<STATEMENT>
...
<STATEMENT>
fi
Es esta estructura condicional, Bash prueba las condiciones en el orden presentado. Cuando
encuentra una condición verdadera, Bash ejecuta las acciones asociadas con la condición y, luego,
omite el resto de la estructura condicional. Si ninguna condición es verdadera, Bash ejecuta las
acciones enumeradas en la cláusula else.
En la siguiente sección de código, se demuestra el uso de una declaración if/then/elif/
then/else para ejecutar el cliente mysql si el servicio mariadb está activo, para ejecutar el
cliente psql si el servicio postgresql está activo o para ejecutar el cliente sqlite3 si los
servicios mariadb y postgresql no están activos.
[user@host ~]$ systemctl is-active mariadb > /dev/null 2>&1
MARIADB_ACTIVE=$?
[user@host ~]$ sudo systemctl is-active postgresql > /dev/null 2>&1
POSTGRESQL_ACTIVE=$?
[user@host ~]$ if [ "$MARIADB_ACTIVE" -eq 0 ]; then
> mysql
> elif [ "$POSTGRESQL_ACTIVE" -eq 0 ]; then
> psql
> else
> sqlite3
> fi
Referencias
Página del manual (1)bash
14
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Ejercicio Guiado
Ejecución de comandos con mayor
eficiencia usando bucles
En este ejercicio, usará bucles para imprimir de manera eficiente el nombre de host desde
varios servidores.
Resultados
Debe ser capaz de crear un bucle for para iterar a través de una lista de ítems de la línea de
comandos y en un script de shell.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab console-commands start. Este comando
ejecuta un script de inicio que determina si los hosts servera y serverb están accesibles
en la red. El script le avisará si no están disponibles.
[student@workstation ~]$ lab console-commands start
1.
Use los comandos ssh y hostname para imprimir el nombre de host de servera y
serverb en la salida estándar.
[student@workstation ~]$ ssh student@servera hostname
servera.lab.example.com
[student@workstation ~]$ ssh student@serverb hostname
serverb.lab.example.com
2.
Cree un bucle for para realizar la misma tarea de manera más eficiente.
[student@workstation ~]$ for HOST in servera serverb
do
ssh student@${HOST} hostname
done
servera.lab.example.com
serverb.lab.example.com
3.
Cree un script de shell para ejecutar el mismo bucle for.
3.1.
Cree el directorio /home/student/bin para contener el script de shell.
[student@workstation ~]$ mkdir ~/bin
3.2.
Verifique que el directorio recién creado esté en su variable ambiental PATH.
RH134-RHEL8.2-es-1-20200928
15
capítulo 1 | Mejora de la productividad con la línea de comandos
[student@workstation ~]$ echo $PATH
/home/student/.local/bin:/home/student/bin::/usr/local/bin:/usr/bin:/usr/local/
sbin:/usr/sbin
3.3.
Cree un script de shell en /home/student/bin/printhostname.sh
para realizar el bucle for. Use el comando cat para verificar el contenido de
printhostname.sh.
[student@workstation ~]$ vim ~/bin/printhostname.sh
[student@workstation ~]$ cat ~/bin/printhostname.sh
#!/bin/bash
#Execute for loop to print server hostname.
for HOST in servera serverb
do
ssh student@${HOST} hostname
done
exit 0
3.4.
Asegúrese de que el script recién creado sea ejecutable.
[student@workstation ~]$ chmod +x ~/bin/printhostname.sh
3.5.
Ejecute el script desde su directorio de inicio.
[student@workstation ~]$ printhostname.sh
servera.lab.example.com
serverb.lab.example.com
3.6.
Verifique que el código de salida de su script sea 0.
[student@workstation ~]$ echo $?
0
Finalizar
En workstation, ejecute el script lab console-commands finish para terminar este
ejercicio.
[student@workstation ~]$ lab console-commands finish
Esto concluye el ejercicio guiado.
16
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Texto coincidente en la salida de
comando con expresiones regulares
Objetivos
Tras finalizar esta sección, los estudiantes deben ser capaces de realizar lo siguiente:
• Crear expresiones regulares que correspondan a los datos deseados
• Aplicar expresiones regulares a archivos de texto con el comando grep
• Usar grep para buscar archivos y datos de comandos canalizados
Escritura de expresiones regulares
Las expresiones regulares proporcionan un mecanismo de coincidencia de patrones que facilita
la búsqueda de contenido específico. Los comandos vim, grep y less pueden usar expresiones
regulares. Los lenguajes de programación, como Perl, Python y C usan expresiones regulares
cuando usan criterios que corresponden a patrones.
Las expresiones regulares son un lenguaje en sí mismas, lo que significa que tienen su propia
sintaxis y reglas. En esta sección, se da un vistazo a la sintaxis usada en la creación de expresiones
regulares y se mostrarán algunos ejemplos del uso de expresiones regulares.
Descripción de una expresión regular simple
La expresión regular más simple es una coincidencia exacta. Una coincidencia exacta es cuando
los caracteres de la expresión regular coinciden con el tipo y el orden de los datos que se están
buscando.
Supongamos que un usuario está explorando el siguiente archivo en busca de todas las veces que
aparece el patrón cat:
cat
dog
concatenate
dogma
category
educated
boondoggle
vindication
chilidog
cat es una correspondencia exacta de una c, seguida de una a, seguida de una t sin otros
caracteres en el medio. El uso de cat como expresión regular para buscar el archivo anterior arroja
las siguientes coincidencias:
RH134-RHEL8.2-es-1-20200928
17
capítulo 1 | Mejora de la productividad con la línea de comandos
cat
concatenate
category
educated
vindication
Coincidencias con el inicio y el final de una línea
En la sección anterior, se usó una expresión regular de correspondencia exacta en un archivo.
Observe que la expresión regular coincidiría con la cadena de búsqueda independientemente
de en qué parte de la línea se encuentre: al principio, al final o en el medio de la palabra o línea.
Use un delimitador de línea para controlar la ubicación donde la expresión regular busca una
coincidencia.
Para buscar al principio de una línea, use el carácter de intercalación (^). Para buscar al final de
una línea, use el signo de dólar ($).
Usando el mismo archivo que arriba, la expresión regular ^cat coincidiría con dos palabras. La
expresión regular $cat no encontraría ninguna palabra coincidente.
cat
dog
concatenate
dogma
category
educated
boondoggle
vindication
chilidog
Para localizar líneas del archivo que terminen con dog, use esa expresión exacta y un delimitador
de final de línea para crear la expresión regular dog$. Si se aplica dog$ al archivo, se arrojarán dos
coincidencias:
dog
chilidog
Para localizar la única palabra en una línea, use el tanto el delimitador del principio y el del final de
línea. Por ejemplo, para localizar la palabra cat cuando es la única palabra en una línea, use ^cat$.
cat dog rabbit
cat
horse cat cow
cat pig
Adición de comodines y multiplicadores a expresiones
regulares
Las expresiones regulares usan un punto (.) para hacer coincidir un carácter único con la excepción
del carácter de nueva línea. Una expresión regular de c.t busca una cadena que contenga una
c seguida de un carácter individual seguido por una t. Ejemplos de coincidencias incluyen cat,
concatenate, vindication, c5t y c$t.
18
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Al usar un comodín no restringido, no puede predecir el carácter que coincidirá con el comodín.
Para hacer coincidir caracteres específicos, reemplace el comodín no restringido con caracteres
aceptables. Se cambia la expresión regular a c[aou]t, coincidirá con patrones que comiencen con
una c, seguida de una a, una o o una u, seguida de una t.
Los multiplicadores son un mecanismo usado a menudo con comodines. Los multiplicadores se
aplican al carácter anterior en la expresión regular. Uno de los multiplicadores más comunes que
se usan es el asterisco o el carácter de estrella. (*). Cuando se usa en una expresión regular, este
multiplicador significa que coincida con cero o más de la expresión anterior. Puedes usar * con
expresiones, no solo con personajes. Por ejemplo, c[aou]*t. Una expresión regular de c.*t
coincide con cat, coat, culvert e incluso ct (cero caracteres entre la c y la t). Cualquier dato
que comience con una c, luego cero o más caracteres, y que finalice con una t.
Otro tipo de multiplicador indicaría la cantidad de caracteres anteriores deseados en el patrón. Un
ejemplo del uso de un multiplicador explícito sería 'c.\{2\}t'. Esta expresión regular coincidirá
con cualquier palabra que comience con c, seguida de exactamente dos caracteres cualesquiera,
y que termine con una t. La expresión 'c.\{2\}t' coincidiría con dos palabras en el siguiente
ejemplo:
cat
coat convert
cart covert
cypher
nota
Se recomienda usar comillas simples para encapsular la expresión regular porque a
menudo contienen metacaracteres de shell (como $, * y {}). Esto asegura que los
caracteres sean interpretados por el comando y no por la shell.
nota
Este curso ha presentado dos sistemas distintos de análisis de texto de
metacaracteres: coincidencia de patrones de shell (también conocido como
comodín de archivo o expansión de nombre de archivo) y expresiones regulares.
Debido a que ambos sistemas usan metacaracteres similares, como el asterisco (*),
pero tienen diferencias en la interpretación y las reglas de los metacaracteres, estos
sistemas pueden resultar confusos hasta que se los domine a cada uno lo suficiente.
La coincidencia de patrones es una técnica de análisis de líneas de comandos
diseñada para especificar fácilmente muchos nombres de archivos, y se admite
principalmente solo para representar patrones de nombres de archivos en la
línea de comandos. Las expresiones regulares están diseñadas para representar
cualquier forma o patrón en las cadenas de texto, sin importar cuán complejas
sean. Las expresiones regulares son compatibles internamente con numerosos
comandos de procesamiento de texto, como grep, sed, awk, python, perl y
muchas aplicaciones, con algunas mínimas variaciones dependientes del comando
en las reglas de interpretación.
RH134-RHEL8.2-es-1-20200928
19
capítulo 1 | Mejora de la productividad con la línea de comandos
Expresiones regulares
Opción
Descripción
.
El punto (.) coincide con cualquier carácter individual.
?
El ítem anterior es opcional y coincidirá como máximo una vez.
*
El ítem anterior coincidirá cero o más veces.
+
El ítem anterior coincidirá una o más veces.
{n}
El ítem anterior coincide exactamente n veces.
{n,}
El ítem anterior coincide n o más veces.
{,m}
El ítem anterior coincide como máximo m veces.
{n,m}
El ítem anterior coincide como mínimo n veces y como máximo m veces.
[:alnum:]
Caracteres alfanuméricos: '[:alpha:]' y '[:digit:]'; en la configuración regional
'C' y en la codificación de caracteres ASCII, esto es lo mismo que '[0-9AZa-z]'.
[:alpha:]
Caracteres alfanuméricos: '[:lower:]' y '[:upper:]'; en la configuración
regional 'C' y en la codificación de caracteres ASCII esto es lo mismo que
'[A-Za-z]'.
[:blank:]
Caracteres en blanco: espacio y tabulación.
[:cntrl:]
Caracteres de control. En ASCII, estos caracteres tienen códigos octales
del 000 al 037, y 177 (DEL). En otros conjuntos de caracteres, estos son los
caracteres equivalentes, si los hay.
[:digit:]
Dígitos: 0 1 2 3 4 5 6 7 8 9.
[:graph:]
Caracteres gráficos: '[:alnum:]' y '[:punct:]'.
[:lower:]
Letras minúsculas; en la configuración regional 'C' y en la codificación de
caracteres ASCII, esto es a b c d e f g h i j k l m n o p q r s t u v w x y z.
[:print:]
Caracteres imprimibles: '[:alnum:]','[:punct:]' y el espacio.
[:punct:]
Caracteres de puntuación; en la configuración regional 'C' y la codificación
de caracteres ASCII, esto es ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ' { | }
~. En otros conjuntos de caracteres, estos son los caracteres equivalentes,
si los hay.
[:space:]
Caracteres de espacio: en la configuración regional 'C', esto es tabulación,
nueva línea, tabulación vertical, avance de página, retorno de carro y
espacio.
[:upper:]
Letras mayúsculas; en la configuración regional 'C' y en la codificación de
caracteres ASCII, esto es A B C D E F G H I J K L M N O P Q R S T U V W X
Y Z.
[:xdigit:]
Dígitos hexadecimales: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
20
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Opción
Descripción
\b
Coincidir con la cadena vacía en el extremo de una palabra.
\B
Coincidir con la cadena vacía, siempre que no sea en el extremo de una
palabra.
\<
Coincidir con la cadena vacía al principio de una palabra.
\>
Coincidir con la cadena vacía al final de una palabra.
\w
Coincidir con el componente de la palabra. Sinónimo de '[_[:alnum:]]'.
\W
Coincidir con la ausencia de componente de la palabra. Sinónimo de
'[^_[:alnum:]]'.
\s
Coincidir con el espacio en blanco. Sinónimo de '[[:space:]]'.
\S
Coincidir con la ausencia de espacio en blanco. Sinónimo de '[^[:space:]]'.
Coincidencia de expresiones regulares con Grep
El comando grep, proporcionado como parte de la distribución, usa expresiones regulares para
aislar los datos correspondientes.
Aislamiento de datos usando el comando grep
El comando grep proporciona una expresión regular y un archivo con el cual la expresión regular
debe coincidir.
[user@host ~]$ grep '^computer' /usr/share/dict/words
computer
computerese
computerise
computerite
computerizable
computerization
computerize
computerized
computerizes
computerizing
computerlike
computernik
computers
nota
Se recomienda usar comillas simples para encapsular la expresión regular porque a
menudo contienen metacaracteres de shell (como $, * y {}). Esto asegura que los
caracteres sean interpretados por el comando grep y no por la shell.
El comando grep se puede usar junto con otros comandos mediante el uso de un operador de
pipe (|). Por ejemplo:
RH134-RHEL8.2-es-1-20200928
21
capítulo 1 | Mejora de la productividad con la línea de comandos
[root@host ~]# ps aux | grep chrony
chrony
662 0.0 0.1 29440 2468 ?
S
10:56
0:00 /usr/sbin/chronyd
Opciones de grep
El comando grep tiene muchas opciones útiles para ajustar cómo usa la expresión regular con
datos.
Tabla de opciones de grep comunes
Opción
Función
-i
Usa la expresión regular proporcionada, pero no detecta diferencias
entre mayúsculas y minúsculas.
-v
Solo muestra las líneas que no contienen coincidencias con la
expresión regular.
-r
Aplica la búsqueda de datos que coincidan con la expresión regular de
forma recursiva para un grupo de archivos o directorios.
-A NUMBER
Muestra NUMBER (número) de líneas después de la coincidencia de la
expresión regular.
-B NUMBER
Muestra NUMBER (número) de líneas antes de la coincidencia de la
expresión regular.
-e
Si se usan varias opciones -e, se pueden suministrar varias
expresiones regulares y se usarán con un OR lógico.
Hay muchas otras opciones para grep. Use la página man para investigarlas.
Ejemplos de grep
Los siguientes ejemplos usan archivos de configuración y de registro variados.
Las expresiones regulares distinguen entre minúsculas y mayúsculas de manera predeterminada.
Use la opción -i con grep para ejecutar una búsqueda que distinga entre minúsculas y
mayúsculas. En el siguiente ejemplo, se busca el patrón serverroot.
[user@host ~]$ cat /etc/httpd/conf/httpd.conf
...output omitted...
ServerRoot "/etc/httpd"
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
22
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
#Listen 12.34.56.78:80
Listen 80
...output omitted...
[user@host ~]$ grep -i serverroot /etc/httpd/conf/httpd.conf
# with "/", the value of ServerRoot is prepended -- so 'log/access_log'
# with ServerRoot set to '/www' will be interpreted by the
# ServerRoot: The top of the directory tree under which the server's
# ServerRoot at a non-local disk, be sure to specify a local disk on the
# same ServerRoot for multiple httpd daemons, you will need to change at
ServerRoot "/etc/httpd"
En los casos en que sabe lo que no está buscando, la opción -v es muy útil. La opción -v solo
muestra las líneas que no coinciden con la expresión regular. En el siguiente ejemplo, se muestran
todas las líneas, independientemente de las mayúsculas y las minúsculas, que no contienen la
expresión regular server.
[user@host ~]$ cat /etc/hosts
127.0.0.1
localhost localhost.localdomain localhost4 localhost4.localdomain4
::1
localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.254 classroom.example.com classroom
172.25.254.254 content.example.com content
172.25.254.254 materials.example.com materials
172.25.250.254 workstation.lab.example.com workstation
### rht-vm-hosts file listing the entries to be appended to /etc/hosts
172.25.250.10
172.25.250.11
172.25.250.254
servera.lab.example.com servera
serverb.lab.example.com serverb
workstation.lab.example.com workstation
[user@host ~]$ grep -v -i server /etc/hosts
127.0.0.1
localhost localhost.localdomain localhost4 localhost4.localdomain4
::1
localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.254 classroom.example.com classroom
172.25.254.254 content.example.com content
172.25.254.254 materials.example.com materials
172.25.250.254 workstation.lab.example.com workstation
### rht-vm-hosts file listing the entries to be appended to /etc/hosts
172.25.250.254
workstation.lab.example.com workstation
Para ver un archivo sin distraerse por las líneas de comentario, use la opción -v. En el siguiente
ejemplo, la expresión regular busca todas las líneas que comiencen con un # o ; (caracteres típicos
que indican que la línea será interpretada como un comentario). Esas líneas se omiten en la salida.
[user@host ~]$ cat /etc/ethertypes
#
# Ethernet frame types
#
This file describes some of the various Ethernet
#
protocol types that are used on Ethernet networks.
RH134-RHEL8.2-es-1-20200928
23
capítulo 1 | Mejora de la productividad con la línea de comandos
#
# This list could be found on:
#
http://www.iana.org/assignments/ethernet-numbers
#
http://www.iana.org/assignments/ieee-802-numbers
#
# <name>
<hexnumber> <alias1>...<alias35> #Comment
#
IPv4
0800
ip ip4
# Internet IP (IPv4)
X25
0805
ARP
0806
ether-arp
#
FR_ARP
0808
# Frame Relay ARP
[RFC1701]
...output omitted...
[user@host ~]$ grep -v '^[#;]' /etc/ethertypes
IPv4
0800
ip ip4
# Internet IP (IPv4)
X25
0805
ARP
0806
ether-arp
#
FR_ARP
0808
# Frame Relay ARP
[RFC1701]
El comando grep con la opción -e le permite buscar más de una expresión regular a la vez. En el
siguiente ejemplo, usando una combinación de less y grep, se localizan todas las apariciones de
pam_unix, user root y Accepted publickey en el archivo de registro /var/log/secure.
[root@host ~]# cat /var/log/secure | grep -e 'pam_unix' \
-e 'user root' -e 'Accepted publickey' | less
Mar 19 08:04:46 host sshd[6141]: pam_unix(sshd:session): session opened for user
root by (uid=0)
Mar 19 08:04:50 host sshd[6144]: Disconnected from user root 172.25.250.254 port
41170
Mar 19 08:04:50 host sshd[6141]: pam_unix(sshd:session): session closed for user
root
Mar 19 08:04:53 host sshd[6168]: Accepted publickey for student from
172.25.250.254 port 41172 ssh2: RSA SHA256:M8ikhcEDm2tQ95Z0o7ZvufqEixCFCt
+wowZLNzNlBT0
Para buscar texto en un archivo abierto usando vim o less, use el carácter de barra (/) y escriba
el patrón que desea encontrar. Presione Intro para iniciar la búsqueda. Presione N para encontrar
la siguiente coincidencia.
[root@host ~]# vim /var/log/boot.log
...output omitted...
[^[[0;32m OK ^[[0m] Reached target Initrd Default Target.^M
Starting dracut pre-pivot and cleanup hook...^M
[^[[0;32m OK ^[[0m] Started dracut pre-pivot and cleanup hook.^M
Starting Cleaning Up and Shutting Down Daemons...^M
Starting Plymouth switch root service...^M
Starting Setup Virtual Console...^M
[^[[0;32m OK ^[[0m] Stopped target Timers.^M
[^[[0;32m OK ^[[0m] Stopped dracut pre-pivot and cleanup hook.^M
[^[[0;32m OK ^[[0m] Stopped target Initrd Default Target.^M
/Daemons
24
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
[root@host ~]# less /var/log/messages
...output omitted...
Feb 26 15:51:07 host NetworkManager[689]: <info> [1551214267.8584] Loaded device
plugin: NMTeamFactory (/usr/lib64/NetworkManager/1.14.0-14.el8/libnm-deviceplugin-team.so)
Feb 26 15:51:07 host NetworkManager[689]: <info> [1551214267.8599] device (lo):
carrier: link connected
Feb 26 15:51:07 host NetworkManager[689]: <info> [1551214267.8600] manager: (lo):
new Generic device (/org/freedesktop/NetworkManager/Devices/1)
Feb 26 15:51:07 host NetworkManager[689]: <info> [1551214267.8623] manager:
(ens3): new Ethernet device (/org/freedesktop/NetworkManager/Devices/2)
Feb 26 15:51:07 host NetworkManager[689]: <info> [1551214267.8653] device (ens3):
state change: unmanaged -> unavailable (reason 'managed', sys-iface-state:
'external')
/device
Referencias
Páginas del manual regex(7) y grep(1)
RH134-RHEL8.2-es-1-20200928
25
capítulo 1 | Mejora de la productividad con la línea de comandos
Ejercicio Guiado
Texto coincidente en la salida de
comando con expresiones regulares
En este trabajo de laboratorio, buscará texto en los registros del sistema y la salida de
comandos para encontrar información de manera más eficiente.
Resultados
Debe ser capaz de buscar de manera eficiente el texto en los archivos de registro y los
archivos de configuración.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab console-regex start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
También instala el paquete postfix.
[student@workstation ~]$ lab console-regex start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
El paquete postfix fue instalado hoy por el script start. Use el comando grep para
encontrar el GID y el UID para los grupos y usuarios postfix y postdrop. Para reducir
la salida del comando grep, visualice todos los registros de una determinada hora de
inicio.
3.1.
Use el comando date para determinar la hora actual.
[root@servera ~]# date
Fri Mar 22 08:23:56 CET 2019
26
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
3.2.
Use el comando grep con las opciones de fecha, hora de inicio y GID para buscar el
GID y el UID del usuario postfix y postdrop. El script de configuración del trabajo
de laboratorio se ejecutó unos minutos antes de la hora actual. Tenga esto en cuenta
cuando busque el archivo de registro /var/log/secure.
[root@servera ~]# grep '^Mar 22 08:2.*GID' /var/log/secure
Mar 22 08:20:04 servera groupadd[2514]: group added to /etc/group: name=postdrop,
GID=90
Mar 22 08:20:04 servera groupadd[2514]: new group: name=postdrop, GID=90
Mar 22 08:20:04 servera groupadd[2520]: group added to /etc/group: name=postfix,
GID=89
Mar 22 08:20:04 servera groupadd[2520]: new group: name=postfix, GID=89
Mar 22 08:20:04 servera useradd[2527]: new user: name=postfix, UID=89, GID=89,
home=/var/spool/postfix, shell=/sbin/nologin
4. Modifique su expresión regular para localizar los primeros dos mensajes en el archivo /
var/log/maillog. Observe que en esta búsqueda no está usando el carácter de acento
circunflejo (^) porque no está buscando el primer carácter en una línea.
[root@servera ~]# grep 'postfix' /var/log/maillog | head -n 2
Mar 22 08:21:02 servera postfix/postfix-script[3879]: starting the Postfix mail
system
Mar 22 08:21:02 servera postfix/master[3881]: daemon started -- version 3.3.1,
configuration /etc/postfix
5.
Debe encontrar el nombre del directorio queue para el servidor Postfix. Busque el
archivo de configuración /etc/postfix/main.cf para obtener toda la información
sobre colas. Use la opción -i para ignorar distinciones entre mayúsculas y minúsculas.
[root@servera ~]# grep -i 'queue' /etc/postfix/main.cf
# testing. When soft_bounce is enabled, mail will remain queued that
# The queue_directory specifies the location of the Postfix queue.
queue_directory = /var/spool/postfix
# QUEUE AND PROCESS OWNERSHIP
# The mail_owner parameter specifies the owner of the Postfix queue
# is the Sendmail-compatible mail queue listing command.
# setgid_group: The group for mail submission and queue management
6. Confirme que postfix está escribiendo mensajes a /var/log/messages. Use el
comando less y, luego, el carácter de barra (/) para buscar el archivo. Presione n para
pasar a la siguiente entrada que coincida con la búsqueda. Use la tecla q para salir del
comando less.
[root@servera ~]# less /var/log/messages
...output omitted...
Mar 22 07:58:04 servera systemd[1]: Started Postfix Mail Transport Agent.
...output omitted...
Mar 22 08:12:26 servera systemd[1]: Stopping Postfix Mail Transport Agent...
Mar 22 08:12:26 servera systemd[1]: Stopped Postfix Mail Transport Agent.
...output omitted...
/Postfix
RH134-RHEL8.2-es-1-20200928
27
capítulo 1 | Mejora de la productividad con la línea de comandos
7.
Use el comando ps aux para confirmar que el servidor postfix se está ejecutando
actualmente. Reduzca la salida de ps aux combinándola con el comando grep.
[root@servera ~]# ps aux | grep postfix
root
3881 0.0 0.2 121664 5364 ?
libexec/postfix/master -w
postfix
3882 0.0 0.4 147284 9088 ?
-u
postfix
3883 0.0 0.4 147336 9124 ?
u
Ss
08:21
0:00 /usr/
S
08:21
0:00 pickup -l -t unix
S
08:21
0:00 qmgr -l -t unix -
8. Confirme que las colas qmgr, cleanup y pickup estén configuradas correctamente. Use
el comando grep con la opción -e para hacer coincidir múltiples entradas en el mismo
archivo. El archivo de configuración es /etc/postfix/master.cf.
[root@servera ~]# grep -e qmgr -e pickup -e cleanup /etc/postfix/master.cf
pickup
unix n
n
60
1
pickup
cleanup
unix n
n
0
cleanup
qmgr
unix n
n
300
1
qmgr
#qmgr
unix n
n
300
1
oqmgr
9. Cierre sesión en servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab console-regex finish para terminar este ejercicio.
[student@workstation ~]$ lab console-regex finish
Esto concluye el ejercicio guiado.
28
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Trabajo de laboratorio
Mejora de la productividad con la línea de
comandos
Lista de verificación de rendimiento
En este trabajo de laboratorio, creará un script de Bash que puede filtrar y obtener
información relevante de diferentes hosts.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un script Bash y redirigir su salida a un archivo
• Usar bucles para simplificar su código
• Filtrar el contenido relevante usando grep y expresiones regulares
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab console-review start. Este comando
ejecuta un script de inicio que determina si las máquinas workstation, servera y
serverb son accesibles en la red. El script le avisará si no están disponibles. También instala
los paquetes vim-enhanced y util-linux si es necesario, configura sudo y prepara el contenido
de /var/log/secure en servera y serverb.
[student@workstation ~]$ lab console-review start
1.
Cree el archivo de script /home/student/bin/bash-lab en workstation.
2.
Edite su archivo de script recién creado para cumplir con la siguiente información solicitada
de los hosts servera y serverb. Los sistemas se configuran para que usen claves SSH para
la autenticación; no se necesita una contraseña.
RH134-RHEL8.2-es-1-20200928
29
capítulo 1 | Mejora de la productividad con la línea de comandos
Comando o archivo
Contenido solicitado
hostname -f
Obtenga toda la salida.
echo "#####"
Obtenga toda la salida.
lscpu
Obtenga solo las líneas que comienzan con la
cadena UPC.
echo "#####"
Obtenga toda la salida.
/etc/selinux/config
Ignore las líneas vacías. Ignore las líneas que
comienzan con #.
echo "#####"
Obtenga toda la salida.
/var/log/secure
Obtenga todas las entradas de "Failed
password".
echo "#####"
Obtenga toda la salida.
Guarde la información requerida en los nuevos archivos /home/student/outputservera y /home/student/output-serverb.
nota
Puede usar sudo sin requerir una contraseña en los hosts servera y serverb.
Recuerde usar un bucle para simplificar su script. También puede usar múltiples
comandos grep concatenados con el uso del carácter pipe (|).
Ejecute el script /home/student/bin/bash-lab y revise el contenido de la salida en
workstation.
3.
Evaluación
En workstation, ejecute el comando lab console-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab console-review grade
Finalizar
En workstation, ejecute el script lab console-review finish para terminar este ejercicio.
[student@workstation ~]$ lab console-review finish
Esto concluye el trabajo de laboratorio.
30
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Solución
Mejora de la productividad con la línea de
comandos
Lista de verificación de rendimiento
En este trabajo de laboratorio, creará un script de Bash que puede filtrar y obtener
información relevante de diferentes hosts.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un script Bash y redirigir su salida a un archivo
• Usar bucles para simplificar su código
• Filtrar el contenido relevante usando grep y expresiones regulares
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab console-review start. Este comando
ejecuta un script de inicio que determina si las máquinas workstation, servera y
serverb son accesibles en la red. El script le avisará si no están disponibles. También instala
los paquetes vim-enhanced y util-linux si es necesario, configura sudo y prepara el contenido
de /var/log/secure en servera y serverb.
[student@workstation ~]$ lab console-review start
1.
Cree el archivo de script /home/student/bin/bash-lab en workstation.
1.1.
En workstation, cree la carpeta /home/student/bin/ si es necesario.
[student@workstation ~]$ mkdir -p /home/student/bin
1.2.
Use vim para crear y editar el archivo de script /home/student/bin/bash-lab.
[student@workstation ~]$
1.3.
vim ~/bin/bash-lab
Inserte el siguiente texto y guarde el archivo.
#!/bin/bash
1.4.
Haga el archivo de script sea ejecutable.
[student@workstation ~]$ chmod a+x ~/bin/bash-lab
RH134-RHEL8.2-es-1-20200928
31
capítulo 1 | Mejora de la productividad con la línea de comandos
2.
Edite su archivo de script recién creado para cumplir con la siguiente información solicitada
de los hosts servera y serverb. Los sistemas se configuran para que usen claves SSH para
la autenticación; no se necesita una contraseña.
Comando o archivo
Contenido solicitado
hostname -f
Obtenga toda la salida.
echo "#####"
Obtenga toda la salida.
lscpu
Obtenga solo las líneas que comienzan con la
cadena UPC.
echo "#####"
Obtenga toda la salida.
/etc/selinux/config
Ignore las líneas vacías. Ignore las líneas que
comienzan con #.
echo "#####"
Obtenga toda la salida.
/var/log/secure
Obtenga todas las entradas de "Failed
password".
echo "#####"
Obtenga toda la salida.
Guarde la información requerida en los nuevos archivos /home/student/outputservera y /home/student/output-serverb.
nota
Puede usar sudo sin requerir una contraseña en los hosts servera y serverb.
Recuerde usar un bucle para simplificar su script. También puede usar múltiples
comandos grep concatenados con el uso del carácter pipe (|).
Use vim para abrir y editar el archivo de script /home/student/bin/bash-lab.
2.1.
[student@workstation ~]$ vim ~/bin/bash-lab
2.2.
Agregue las siguientes líneas en negrita al archivo del script /home/student/bin/
bash-lab.
nota
El siguiente es un ejemplo de cómo puede lograr el script solicitado. En scripting de
Bash, puede adoptar diferentes enfoques y obtener el mismo resultado.
32
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
#!/bin/bash
#
USR='student'
OUT='/home/student/output'
#
for SRV in servera serverb
do
ssh ${USR}@${SRV} "hostname -f" > ${OUT}-${SRV}
echo "#####" >> ${OUT}-${SRV}
ssh ${USR}@${SRV} "lscpu | grep '^CPU'" >> ${OUT}-${SRV}
echo "#####" >> ${OUT}-${SRV}
ssh ${USR}@${SRV} "grep -v '^$' /etc/selinux/config|grep -v '^#'" >> ${OUT}-${SRV}
echo "#####" >> ${OUT}-${SRV}
ssh ${USR}@${SRV} "sudo grep 'Failed password' /var/log/secure" >> ${OUT}-${SRV}
echo "#####" >> ${OUT}-${SRV}
done
3.
Ejecute el script /home/student/bin/bash-lab y revise el contenido de la salida en
workstation.
3.1.
En workstation, ejecute el script /home/student/bin/bash-lab.
[student@workstation ~]$ bash-lab
3.2.
Revise el contenido de /home/student/output-servera y /home/student/
output-serverb.
[student@workstation ~]$ cat /home/student/output-servera
servera.lab.example.com
#####
CPU op-mode(s):
32-bit, 64-bit
CPU(s):
2
CPU family:
21
CPU MHz:
2294.670
#####
SELINUX=enforcing
SELINUXTYPE=targeted
#####
Mar 21 22:30:28 servera sshd[3939]: Failed password for invalid user operator1
from 172.25.250.9 port 58382 ssh2
Mar 21 22:30:31 servera sshd[3951]: Failed password for invalid user sysadmin1
from 172.25.250.9 port 58384 ssh2
Mar 21 22:30:34 servera sshd[3953]: Failed password for invalid user manager1 from
172.25.250.9 port 58386 ssh2
#####
[student@workstation ~]$ cat /home/student/output-serverb
serverb.lab.example.com
#####
CPU op-mode(s):
32-bit, 64-bit
CPU(s):
2
RH134-RHEL8.2-es-1-20200928
33
capítulo 1 | Mejora de la productividad con la línea de comandos
CPU family:
6
CPU MHz:
2294.664
#####
SELINUX=enforcing
SELINUXTYPE=targeted
#####
Mar 21 22:30:37 serverb sshd[3883]: Failed password for invalid user operator1
from 172.25.250.9 port 39008 ssh2
Mar 21 22:30:39 serverb sshd[3891]: Failed password for invalid user sysadmin1
from 172.25.250.9 port 39010 ssh2
Mar 21 22:30:43 serverb sshd[3893]: Failed password for invalid user manager1 from
172.25.250.9 port 39012 ssh2
#####
Evaluación
En workstation, ejecute el comando lab console-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab console-review grade
Finalizar
En workstation, ejecute el script lab console-review finish para terminar este ejercicio.
[student@workstation ~]$ lab console-review finish
Esto concluye el trabajo de laboratorio.
34
RH134-RHEL8.2-es-1-20200928
capítulo 1 | Mejora de la productividad con la línea de comandos
Resumen
En este capítulo, aprendió lo siguiente:
• Cómo crear y ejecutar scripts de Bash simples
• Cómo usar un bucle para iterar a través de una lista de ítems de la línea de comandos y en un
script de shell
• Cómo buscar texto en los archivos de registro y configuración usando expresiones regulares y
grep
RH134-RHEL8.2-es-1-20200928
35
36
RH134-RHEL8.2-es-1-20200928
capítulo 2
Programación de tareas futuras
Meta
Programar tareas para que se ejecuten
automáticamente en el futuro
Objetivos
•
Configurar un comando que se ejecute una vez
en algún momento en el futuro
•
Programar comandos para que se ejecuten
en un horario de repetición usando el archivo
crontab de un usuario
•
Programar comandos para que se ejecuten
en un horario de repetición usando el archivo
crontab del sistema y directorios
•
Habilitar y deshabilitar los temporizadores de
systemd y configurar un temporizador que
administre archivos temporales
•
Programación de un trabajo de usuario diferido
(y ejercicio guiado)
•
Programación de trabajos de usuario
recurrentes (y ejercicio guiado)
•
Programación de trabajos del sistema
recurrentes (y ejercicio guiado)
•
Administración de archivos temporales (y
ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Programación de tareas futuras
37
capítulo 2 | Programación de tareas futuras
Programación de un trabajo de usuario
diferido
Objetivos
Después de completar esta sección, debe ser capaz de configurar un comando que se ejecute una
vez en algún momento en el futuro.
Descripción de tareas de usuario diferidas
A veces es posible que necesite ejecutar un comando, o un conjunto de comandos, en un punto
fijo en el futuro. Entre los ejemplos, se incluyen personas que desean programar un correo
electrónico para su jefe, o un administrador de sistemas que está trabajando en una configuración
de firewall que pone un trabajo de “seguridad” en vigencia para restablecer la configuración de
firewall en un tiempo de diez minutos, a menos que desactive el trabajo antes.
Estos comandos programados son a menudo se denominan tareas o trabajos y el termino diferido
indica que estas tareas o trabajos se ejecutarán en el futuro.
Una de las soluciones disponibles para los usuarios de Red Hat Enterprise Linux para la
programación de tareas diferidas es at. El paquete at proporciona el daemon del sistema (atd)
junto con un conjunto de herramientas de línea de comandos para interactuar con el daemon
(at, atq y más). En una instalación Red Hat Enterprise Linux predeterminada, el daemon atd se
instala y se habilita automáticamente.
Los usuarios (incluido root) pueden poner en cola trabajos para el daemon atd con el comando
at. El daemon atd proporciona 26 colas, de la a a la z, con trabajos en colas ordenadas
alfabéticamente que obtienen menos prioridad en el sistema (los valores buenos más altos, se
analizan en un capítulo posterior).
Programación de tareas de usuario diferidas
Use el comando at TIMESPEC para programar un nuevo trabajo. A continuación, el comando at
lee los comandos para ejecutar desde el canal stdin. Cuando ingresa comandos manualmente,
puede terminar su entrada presionando Ctrl+D. Para comandos más complejos que son
propensos a errores tipográficos, a menudo es más fácil usar la redirección de entrada desde
un archivo de script, por ejemplo, at now +5min < myscript, en lugar de escribir todos los
comandos manualmente en una ventana de terminal.
El argumento TIMESPEC con el comando at acepta muchas combinaciones poderosas, lo que
permite a los usuarios describir exactamente cuándo se debe ejecutar un trabajo. Típicamente,
comienzan con una hora, p. ej., 02:00 p. m., 15:59 o incluso teatime (hora del té), seguida
de una fecha opcional o una cantidad de días en el futuro. A continuación, se detalla una lista con
algunos ejemplos de combinaciones que se pueden usar.
• now +5min (ahora + 5 min)
• teatime tomorrow (hora del té mañana) (la hora del té es 16:00)
• noon +4 days (mediodía + 4 días)
• 5pm august 3 2021 (3 de agosto de 2021 a las 5:00 p. m.)
38
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Para obtener una lista completa de las especificaciones de tiempo válidas, consulte la definición
timespec como se indica en las referencias.
Inspección y administración de trabajos de usuario
diferidos
Para obtener una descripción general de los trabajos pendientes de su usuario, use el comando
atq o los comandos at -l.
[user@host ~]$ atq
28
Mon Feb 2 05:13:00 2015
a
29 Mon Feb 3 16:00:00 2014 h user
27 Tue Feb 4 12:00:00 2014 a user
user
En la salida anterior, cada línea representa un trabajo diferente programado para ejecutarse en el
futuro.
El número de trabajo único para este trabajo.
La fecha y hora de ejecución del trabajo programado.
Indica que el trabajo está programado con la cola predeterminada a. Se pueden programar
diferentes trabajos con diferentes colas.
El propietario del trabajo (y el usuario con el cual se ejecutará el trabajo).
Importante
Los usuarios no privilegiados solo pueden ver y controlar sus propios trabajos. El
usuario root puede ver y administrar todos los trabajos.
Para inspeccionar los comandos reales que se ejecutarán cuando se ejecute un trabajo, use el
comando at -c JOBNUMBER. Este comando muestra el entorno para el trabajo que se configura
para reflejar el entorno del usuario quien creó el trabajo en el momento en que se creó, seguido de
los comandos reales que se ejecutarán.
Eliminación de trabajos
El comando atrm JOBNUMBER elimina un trabajo programado. Elimine el trabajo programado
cuando ya no es necesario; por ejemplo, cuando una configuración de firewall remota dio un
resultado satisfactorio, y no es necesario que se restablezca.
Referencias
Páginas del manual: at(1) y atd(8)
/usr/share/doc/at/timespec
RH134-RHEL8.2-es-1-20200928
39
capítulo 2 | Programación de tareas futuras
Ejercicio Guiado
Programación de un trabajo de usuario
diferido
En este ejercicio, usara el comando at para programar varios comandos para ejecutar en
momentos específicos en el futuro.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Programar un trabajo para que se ejecute en un momento específico en el futuro
• Inspeccionar los comandos que ejecuta un trabajo programado
• Eliminar los trabajos programados
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab scheduling-at start para comenzar el ejercicio. Este
script asegura que el entorno esté limpio y configurado correctamente.
[student@workstation ~]$ lab scheduling-at start
1.
Desde workstation, abra una sesión de SSH en servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Programe un trabajo para ejecutar en tres minutos a partir de ahora usando el comando at.
El trabajo debe guardar la salida del comando date en /home/student/myjob.txt.
2.1.
Use el comando echo para pasar la cadena fecha >>/home/student/
myjob.txt como entrada al comando at para que el trabajo se ejecute en tres
minutos a partir de ahora.
[student@servera ~]$ echo "date >> /home/student/myjob.txt" | at now +3min
warning: commands will be executed using /bin/sh
job 1 at Thu Mar 21 12:30:00 2019
2.2.
Use el comando atq para enumerar los trabajos programados.
[student@servera ~]$ atq
1 Thu Mar 21 12:30:00 2019 a student
40
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
2.3.
Use el comando watch atq para monitorear la cola de los trabajos diferidos en
tiempo real. El trabajo se elimina de la cola después de su ejecución.
[student@servera ~]$ watch atq
Every 2.0s: atq
servera.lab.example.com: Thu Mar 21 12:30:00 2019
1 Thu Mar 21 12:30:00 2019 a student
De manera predeterminada, el comando watch precedente actualiza la salida de
atq cada dos segundos. Después de que el trabajo aplazado se elimine de la cola,
presione Ctrl+c para salir de watch y volver al prompt de shell.
2.4.
Use el comando cat para verificar que el contenido de /home/student/
myjob.txt coincida con la salida del comando date.
[student@servera ~]$ cat myjob.txt
Thu Mar 21 12:30:00 IST 2019
La salida anterior coincide con la salida del comando date, confirmando que el
trabajo programado se ejecutó con éxito.
3.
Use el comando at para programar interactivamente un trabajo con la cola g que se
ejecuta en teatime (16:00). El trabajo debe ejecutar un comando que imprima el mensaje
It's teatime (Es la hora del té) en /home/student/tea.txt. Los nuevos mensajes
deben adjuntarse al archivo /home/student/tea.txt.
[student@servera ~]$ at -q g teatime
warning: commands will be executed using /bin/sh
at> echo "It's teatime" >> /home/student/tea.txt
at> Ctrl+d
job 2 at Thu Mar 21 16:00:00 2019
4. Use el comando at para programar interactivamente otro trabajo con la cola b que se
ejecuta en 16:05. El trabajo debe ejecutar un comando que imprima el mensaje The
cookies are good (Las galletas están bien) en /home/student/cookies.txt. Los
nuevos mensajes deben adjuntarse al archivo /home/student/cookies.txt.
[student@servera ~]$ at -q b 16:05
warning: commands will be executed using /bin/sh
at> echo "The cookies are good" >> /home/student/cookies.txt
at> Ctrl+d
job 3 at Thu Mar 21 16:05:00 2019
5.
Inspeccione los comandos en los trabajos pendientes.
5.1.
Use el comando atq para ver los números de trabajo de los trabajos pendientes.
[student@servera ~]$ atq
2 Thu Mar 21 16:00:00 2019 g student
3 Thu Mar 21 16:05:00 2019 b student
Tenga en cuenta los números de trabajo de la salida anterior. Estos números de
trabajo pueden variar en su sistema.
RH134-RHEL8.2-es-1-20200928
41
capítulo 2 | Programación de tareas futuras
5.2.
Use el comando at para ver los números de trabajo del trabajo pendiente número 2.
[student@servera ~]$ at -c 2
...output omitted...
echo "It's teatime" >> /home/student/tea.txt
marcinDELIMITER28d54caa
Observe que el trabajo programado anterior ejecuta un comando echo que agrega el
mensaje It's teatime (Es la hora del té) a /home/student/tea.txt.
5.3.
Use el comando at para ver los comandos del trabajo pendiente número 3.
[student@servera ~]$ at -c 3
...output omitted...
echo "The cookies are good" >> /home/student/cookies.txt
marcinDELIMITER1d2b47e9
Observe que el trabajo programado anterior ejecuta un comando echo que agrega
el mensaje The cookies are good (Las galletas están bien) a /home/student/
cookies.txt.
6. Use el comando atq para ver el número de trabajo de un trabajo que se ejecuta en
teatime(16:00) y quítelo usando el comando atrm.
[student@servera ~]$ atq
2 Thu Mar 21 16:00:00 2019 g student
3 Thu Mar 21 16:05:00 2019 b student
[student@servera ~]$ atrm 2
7.
Verifique que el trabajo programado para ejecutarse en teatime (16:00) ya no exista.
7.1.
Use el comando atq para ver la lista de trabajos pendientes y confirmar que el
trabajo programado para ejecutarse en teatime (16:00) ya no existe.
[student@servera ~]$ atq
3 Thu Mar 21 16:05:00 2019 b student
7.2.
Cierre sesión en servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute lab scheduling-at finish para terminar este ejercicio. Este
script elimina los archivos creados durante el ejercicio para garantizar que el entorno quede limpio.
[student@workstation ~]$ lab scheduling-at finish
Esto concluye el ejercicio guiado.
42
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Programación de trabajos de usuario
recurrentes
Objetivos
Después de finalizar esta sesión, debe programar comandos para que se ejecuten en un horario de
repetición usando el archivo crontab de un usuario.
Descripción de trabajos de usuario recurrentes
Los trabajos programados para ejecutarse repetidamente se llaman trabajos recurrentes. Los
sistemas Red Hat Enterprise Linux se envían con el daemon crond, proporcionado por el paquete
cronie, habilitado e iniciado de forma predeterminada específicamente para trabajos recurrentes.
El daemon crond lee múltiples archivos de configuración: uno por usuario (editado con el
comando crontab) y un conjunto de archivos en todo el sistema. Estos archivos de configuración
les dan a los usuarios y administradores el control detallado cuando sus trabajos recurrentes
deben ser ejecutados.
Si un comando programado no produce ninguna salida o un error de que no está redirigido, el
daemon crond intenta enviar por correo electrónico esa salida al usuario que es propietario
de ese trabajo (a menos que se haya anulado) usando el servidor de correo configurado en el
sistema. Según el entorno, es posible que sea necesaria una configuración adicional. La salida o el
error del comando programado se puede redirigir a diferentes archivos.
Programación de trabajos de usuario recurrentes
Los usuarios normales pueden usar el comando crontab para administrar sus trabajos. Este
comando se puede denominar de cuatro maneras diferentes:
Ejemplos de crontab
Comando
Uso previsto
crontab -l
Detallar los trabajos para el usuario actual.
crontab -r
Eliminar todos los trabajos del usuario actual.
crontab -e
Editar trabajos para el usuario actual.
crontab filename
Eliminar todos los trabajos y reemplazar con los trabajos leídos
de nombre de archivo. Si no se especifica ningún archivo, se
usa stdin.
nota
El superusuario puede usar la opción -u con el comando crontab para administrar
trabajos para otro usuario. No debe usar el comando crontab para administrar
trabajos del sistema; en cambio, use los métodos descritos en la siguiente sección.
RH134-RHEL8.2-es-1-20200928
43
capítulo 2 | Programación de tareas futuras
Descripción del formato de trabajo del usuario
El comando crontab -e invoca a Vim de manera predeterminada, a menos que la variable de
entorno EDITOR se haya establecido en otro ajuste. Ingrese un trabajo por línea. Otras entradas
válidas incluyen: líneas vacías, generalmente para facilitar la lectura; comentarios, identificados
por líneas que comienzan con el signo de número (#); y variables de entorno usando el formato
NAME=value, que afecta a todas las líneas debajo de la línea donde se declaran. Los ajustes de
variables comunes incluyen la variable SHELL, que declara qué shell usar para interpretar las líneas
restantes del archivo crontab; y la variable MAILTO, que determina quién debe recibir la salida
enviada por correo electrónico.
Importante
Enviar un correo electrónico puede requerir la configuración adicional del servidor
de correo local o la retransmisión SMTP en un sistema.
Los campos en el archivo crontab aparecen en el siguiente orden:
• Minutes (Minutos)
• Hours (Horas)
• Day of month (Día del mes)
• Month (Mes)
• Day of week (Día de la semana)
• Command (Comando)
Importante
Cuando los campos Day of month (Día del mes) y Day of week (Día de la
semana) son ambos distintos de *, el comando se ejecuta cuando se cumple
cualquiera de estos dos campos. Por ejemplo, para ejecutar un comando el 15 de
cada mes, y todos los viernes a las 12:15, use el siguiente formato de trabajo:
15 12 15 * Fri command
Los primeros cinco campos usan las mismas reglas de sintaxis:
• * para “No importa”/siempre.
• Un número para especificar una cantidad de minutos u horas, una fecha o un día de la semana.
Para los días de semana, 0 equivale a domingo, 1 equivale a lunes, 2 equivale a martes, etc. 7
también equivale a domingo.
• x-y para un rango, x hasta y inclusive.
• x,y para listas. Las listas también pueden incluir rangos, por ejemplo, 5,10-13,17 en la
columna Minutes (Minutos) para indicar que un trabajo debe ejecutarse a los 5 minutos, a los
10 minutos, a los 11 minutos, a los 12 minutos, a los 13 minutos y a los 17 minutos de la hora.
• */x para indicar un intervalo de x, por ejemplo, */7 en la columna Minutes (Minutos) ejecuta
un trabajo exactamente cada siete minutos.
44
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Asimismo, se pueden usar abreviaturas en inglés de tres letras para los meses y los días de la
semana, por ejemplo, Jan (enero), Feb (febrero) y Mon (lunes), Tue (martes).
El último campo contiene el comando que se ejecutará usando la shell predeterminada. La
variable del entorno SHELL se puede usar para cambiar la shell para el comando programado. Si
el comando contiene un símbolo de porcentaje no codificado (%), ese símbolo de porcentaje se
tratará como el carácter de una línea nueva, y todo lo que esté después del símbolo de porcentaje
se enviará al comando en stdin.
Ejemplos de trabajos de usuario recurrentes
En esta sección, se describen algunos ejemplos de trabajos recurrentes.
• El siguiente trabajo ejecuta el comando /usr/local/bin/yearly_backup exactamente a
las 9:00 a. m. el 2 de febrero, todos los años.
0 9 2 2 * /usr/local/bin/yearly_backup
• El siguiente trabajo envía un correo electrónico que contiene la palabra Chime al propietario de
este trabajo, cada cinco minutos entre las 9:00 a. m. y las 5:00 p. m., todos los viernes de julio.
*/5 9-16 * Jul 5 echo "Chime"
El rango de horas precedente 9-16 significa que el temporizador de trabajo comienza a la hora
novena (09:00) y continúa hasta el final de la decimosexta hora (16:59). El trabajo comienza a
ejecutarse a las 09:00 con la última ejecución a las 16:55 porque a cinco minutos de las 16:55
es 17:00 que está más allá del alcance de las horas dadas.
• El siguiente trabajo ejecuta el comando /usr/local/bin/daily_report todas las semanas
dos minutos antes de la medianoche.
58 23 * * 1-5 /usr/local/bin/daily_report
• El siguiente trabajo ejecuta el comando mutt para enviar el mensaje de correo Checking in al
destinatario boss@example.com en cada día de trabajo (lunes a viernes), a las 9:00 a. m.
0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi there boss, just checking
in.
Referencias
Páginas del manual: crond(8), crontab(1), crontab(5)
RH134-RHEL8.2-es-1-20200928
45
capítulo 2 | Programación de tareas futuras
Ejercicio Guiado
Programación de trabajos de usuario
recurrentes
En este ejercicio, programará comandos para ejecutar en un programa de repetición como
un usuario no privilegiado, usando el comando crontab.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Programar trabajos recurrentes para ejecutar como usuario no privilegiado
• Inspeccionar los comandos que ejecuta un trabajo recurrente programado
• Eliminar trabajos recurrentes programados
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab scheduling-cron start para comenzar el ejercicio.
Este script asegura que el entorno esté limpio y configurado correctamente.
[student@workstation ~]$ lab scheduling-cron start
1.
Desde workstation, abra una sesión de SSH en servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Programar un trabajo recurrente como student que anexa la fecha y hora actual a /home/
student/my_first_cron_job.txt cada dos minutos entre 8:00 a. m. y 9:00 p. m. El
trabajo solo debe ejecutarse de lunes a viernes, no los sábados ni los domingos.
Importante
Si está trabajando en este laboratorio fuera del día y la hora mencionados en la
instrucción anterior, debe ajustar la hora o la fecha del sistema en consecuencia
para que el trabajo se ejecute mientras está trabajando.
2.1.
Use el comando crontab -e para abrir el crontab usando el editor de texto
predeterminado.
[student@servera ~]$ crontab -e
2.2.
46
Inserte la siguiente línea.
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
*/2 08-20 * * Mon-Fri /usr/bin/date >> /home/student/my_first_cron_job.txt
2.3.
Mientras esté en el editor de texto, presione Esc y escriba :wq para guardar los
cambios y salir del editor. Cuando el editor sale, debe ver la siguiente salida:
...output omitted...
crontab: installing new crontab
[student@servera ~]$
En la salida anterior, se confirma que el trabajo se programó correctamente.
3.
Use el comando crontab -l para enumerar los trabajos recurrentes programados.
Inspeccione el comando que programó para que se ejecute como un trabajo recurrente en
el paso anterior.
[student@servera ~]$ crontab -l
*/2 08-20 * * Mon-Fri /usr/bin/date >> /home/student/my_first_cron_job.txt
Observe que el trabajo programado anterior ejecuta el comando /usr/bin/date y
agrega su salida a /home/student/my_first_cron_job.txt.
4. Use el comando while para que su prompt de shell duerma hasta que se cree el archivo /
home/student/my_first_cron_job.txt como resultado de la ejecución exitosa del
trabajo recurrente que programó. Espere a que regrese su prompt de shell.
[student@servera ~]$ while ! test -f my_first_cron_job.txt; do sleep 1s; done
El comando anterior while usa ! test -f para continuar ejecutando un bucle de
comandos sleep 1s hasta que se crea el archivo my_first_cron_job.txt en el
directorio /home/student.
5.
Use el comando cat para verificar que el contenido de /home/student/
my_first_cron_job.txt coincida con la salida del comando date.
[student@servera ~]$ cat my_first_cron_job.txt
Fri Mar 22 13:56:01 IST 2019
La salida anterior puede variar en su sistema.
6. Elimine todos los trabajos recurrentes programados para ejecutarse como student.
6.1.
Use el comando crontab -r para eliminar todos los trabajos recurrentes
programados para student.
[student@servera ~]$ crontab -r
6.2.
Use el comando crontab -l para verificar que no existen trabajos recurrentes para
student.
RH134-RHEL8.2-es-1-20200928
47
capítulo 2 | Programación de tareas futuras
[student@servera ~]$ crontab -l
no crontab for student
6.3.
Cierre sesión en servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute lab scheduling-cron finish para terminar este ejercicio. Este
script elimina los archivos creados durante el ejercicio para garantizar que el entorno quede limpio.
[student@workstation ~]$ lab scheduling-cron finish
Esto concluye el ejercicio guiado.
48
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Programación de trabajos del sistema
recurrentes
Objetivos
Después de finalizar esta sesión, debe programar comandos para que se ejecuten en una
programación de repetición usando el archivo crontab y directorios del sistema.
Descripción de trabajos del sistema recurrentes
Los administradores de sistemas a menudo necesitan ejecutar trabajos recurrentes. La mejor
práctica es ejecutar estos trabajos desde cuentas del sistema en lugar de desde cuentas de
usuario. Es decir, no programe para ejecutar estos trabajos usando el comando crontab, pero en
su lugar usa archivos crontab en todo el sistema. Las entradas de trabajo en los archivos crontab
en todo el sistema son similares a los de las entradas de crontab de los usuarios, excepto que los
archivos crontab en todo el sistema tienen un campo adicional antes del campo de comando; el
usuario bajo cuya autoridad debe ejecutarse el comando.
El archivo /etc/crontab tiene un diagrama de sintaxis útil en los comentarios incluidos.
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue ...
# | | | | |
# * * * * * user-name command to be executed
Los trabajos recurrentes del sistema se definen en dos ubicaciones: el archivo /etc/crontab
y los archivos dentro del directorio /etc/cron.d/. Siempre debe crear sus archivos crontab
personalizados bajo el directorio /etc/cron.d para programar trabajos recurrentes del sistema.
Coloque el archivo crontab personalizado en /etc/cron.d para evitar que se sobrescriba
si se produce alguna actualización del paquete al proveedor de /etc/crontab, que puede
sobrescribir los contenidos existentes en /etc/crontab. Los paquetes que requieren trabajos
recurrentes del sistema colocan sus archivos crontab en /etc/cron.d/ que contiene las
entradas de trabajo. Los administradores también usan esta ubicación para agrupar trabajos
relacionados en un solo archivo.
El sistema crontab también incluye repositorios para scripts que necesitan ejecutarse cada hora,
día, semana y mes. Estos repositorios son directorios llamados /etc/cron.hourly/, /etc/
cron.daily/, /etc/cron.weekly/ y /etc/cron.monthly/. Una vez más, estos directorios
contienen scripts de shell ejecutables, no archivos crontab.
RH134-RHEL8.2-es-1-20200928
49
capítulo 2 | Programación de tareas futuras
Importante
Recuerde hacer que todos los scripts que coloque en estos directorios sean
ejecutables. Si un script no es ejecutable, no se ejecutará. Para hacer un script
ejecutable, use el comando chmod +x script_name.
Un comando llamado run-parts desde el archivo /etc/cron.d/0hourly ejecuta los scripts /
etc/cron.hourly/*. El comando run-parts también ejecuta los trabajos diarios, semanales
y mensuales también, pero desde un archivo de configuración diferente denominado /etc/
anacrontab.
nota
En el pasado, un servicio separado llamado anacron se usaba para manejar el
archivo /etc/anacrontab, pero en Red Hat Enterprise Linux 7 y posterior, el
servicio crond regular analiza este archivo.
El propósito de /etc/anacrontab es garantizar que los trabajos importantes siempre se
ejecuten, y que no se omitan accidentalmente porque el sistema se apagó o quedó inactivo
cuando el trabajo debería haberse ejecutado. Por ejemplo, si un trabajo del sistema que se ejecuta
diariamente no se ejecutó la última vez que venció debido a que el sistema se estaba reiniciando,
el trabajo se ejecuta cuando el sistema está listo. Sin embargo, puede haber una demora de varios
minutos para comenzar el trabajo según el valor del parámetro Delay in minutes especificado
para el trabajo en /etc/anacrontab.
Hay diferentes archivos en /var/spool/anacron/ para cada uno de los trabajos diarios,
semanales y mensuales para determinar si un trabajo en particular se ha ejecutado. Cuando crond
comienza un trabajo desde /etc/anacrontab, actualiza los sellos de hora de esos archivos.
El mismo sello de hora se usa para determinar cuándo se ejecutó un trabajo por última vez. La
sintaxis de /etc/anacrontab es diferente a la de los archivos de configuración de crontab
regulares. Contiene exactamente cuatro campos por línea, como se detalla a continuación.
• Period in days (Período en días)
El intervalo en días para el trabajo que se ejecuta en una programación de repetición. Este
campo acepta un entero o una macro como su valor. Por ejemplo, la macro @daily es
equivalente al entero 1, lo que significa que el trabajo se ejecuta diariamente. De manera
similar, la macro @weekly es equivalente al entero 7, lo que significa que el trabajo se ejecuta
diariamente.
• Delay in minutes (Demora en minutos)
Cantidad de tiempo que el daemon crond debe esperar antes de iniciar este trabajo.
• Job identifier (Identificador del trabajo)
El nombre único con se identifica en los mensajes de registro.
• Comando (Comando)
El comando que se ejecutará.
El archivo /etc/anacrontab también contiene declaraciones variables del entorno que usan
la sintaxis NAME=value. De especial interés es la variable START_HOURS_RANGE, que especifica
el intervalo de tiempo para que se ejecuten los trabajos. Los trabajos no se inician fuera de este
50
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
rango. Si en un día en particular, un trabajo no se ejecuta dentro de este intervalo de tiempo, el
trabajo tiene que esperar hasta el día siguiente para su ejecución.
Presentación del temporizador systemd
Con el advenimiento de systemd en Red Hat Enterprise Linux 7, una nueva función de
programación ya está disponible: unidades de temporizador systemd. Una unidad de
temporizador systemd activa otra unidad de un tipo diferente (como un servicio) cuyo nombre de
unidad coincide con el nombre de la unidad del temporizador. La unidad del temporizador permite
la activación basada en el temporizador de otras unidades. Para facilitar la depuración, systemd
registra los eventos del temporizador en los diarios (journals) del sistema.
Unidad de temporizador de muestra
El paquete sysstat proporciona una unidad de temporizador systemd llamada sysstatcollect.timer para recopilar estadísticas del sistema cada 10 minutos. En la siguiente
salida, se muestran las líneas de configuración de /usr/lib/systemd/system/sysstatcollect.timer.
...output omitted...
[Unit]
Description=Run system activity accounting tool every 10 minutes
[Timer]
OnCalendar=*:00/10
[Install]
WantedBy=sysstat.service
El parámetro OnCalendar=*:00/10 significa que esta unidad de temporizador activa la
unidad correspondiente (sysstat-collect.service) cada 10 minutos, Sin embargo,
puede especificar intervalos de tiempo más complejos. Por ejemplo, un valor de 2019-03* 12:35,37,39:16 frente al parámetro OnCalendar hace que la unidad del temporizador
active la unidad de servicio correspondiente en 12:35:16, 12:37:16 y 12:39:16 todos
los días durante todo el mes de marzo de 2019. También puede especificar temporizadores
relativos usando parámetros tal como OnUnitActiveSec. Por ejemplo, la opción
OnUnitActiveSec=15min hace que la unidad del temporizador desencadena la unidad
correspondiente 15 minutos después de la última vez que la unidad del temporizador activó su
unidad correspondiente.
Importante
No modifique ningún archivo de configuración de la unidad bajo el directorio /usr/
lib/systemd/system porque cualquier actualización al paquete del proveedor
del archivo de configuración puede anular los cambios de configuración que realizó
en ese archivo. Por lo tanto, haga una copia del archivo de configuración de la
unidad que desea cambiar bajo el directorio /etc/systemd/system y, luego,
modifique la copia para que los cambios de configuración que realice con respecto
a una unidad no se anulen con ninguna actualización del paquete del proveedor.
Si existen dos archivos con el mismo nombre bajo los directorios /usr/lib/
systemd/system y /etc/systemd/system, systemd analiza el archivo bajo el
directorio /etc/systemd/system.
RH134-RHEL8.2-es-1-20200928
51
capítulo 2 | Programación de tareas futuras
Después de cambiar el archivo de configuración de la unidad del temporizador, use el comando
systemctl daemon-reload para asegurar que systemd tenga conocimiento de los cambios.
Este comando recarga la configuración del administrador de systemd.
[root@host ~]# systemctl daemon-reload
Después de recargar la configuración del administrador systemd, use el siguiente comando
systemctl para activar la unidad del temporizador.
[root@host ~]# systemctl enable --now <unitname>.timer
Referencias
Páginas del manual crontab(5),anacron(8),anacrontab(5), systemd.time(7),
systemd.timer(5) y crond(8)
52
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Ejercicio Guiado
Programación de trabajos del sistema
recurrentes
En este ejercicio, programará comandos para que se ejecuten en varios horarios agregando
archivos de configuración a los directorios crontab del sistema.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Programar un trabajo del sistema recurrente para contar el número de usuarios activos
• Actualizar la unidad de temporizador systemd que recopila los datos de actividad del
sistema.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab scheduling-system start para comenzar el ejercicio.
Este script asegura que el entorno esté limpio y configurado correctamente.
[student@workstation ~]$ lab scheduling-system start
1.
Desde workstation, abra una sesión de SSH en servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar a la cuenta del usuario root.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Programe un trabajo del sistema recurrente que genere un mensaje de registro que indique
la cantidad de usuarios activos actualmente en el sistema. El trabajo debe ejecutarse
diariamente. Puede usar el comando w -h | wc -l para recuperar el número de usuarios
actualmente activos en el sistema. También, use el comando logger para generar el
mensaje de registro.
3.1.
Cree un archivo de script llamado /etc/cron.daily/usercount con el siguiente
contenido. Puedes usar el comando vi /etc/cron.daily/usercount para crear
el archivo de script.
RH134-RHEL8.2-es-1-20200928
53
capítulo 2 | Programación de tareas futuras
#!/bin/bash
USERCOUNT=$(w -h | wc -l)
logger "There are currently ${USERCOUNT} active users"
3.2.
Use el comando chmod para habilitar el permiso ejecutable (x) en /etc/
cron.daily/usercount.
[root@servera ~]# chmod +x /etc/cron.daily/usercount
4. El paquete sysstat proporciona las unidades systemd denominadas sysstatcollect.timer y sysstat-collect.service. La unidad del temporizador
desencadena la unidad de servicio cada 10 minutos para recopilar datos de actividad
del sistema usando el script de shell llamado /usr/lib64/sa/sa1. Asegúrese de
que el paquete sysstat se instale y cambie el archivo de configuración de la unidad del
temporizador para que recopile los datos de actividad del sistema cada dos minutos.
4.1.
Use el comando yum para instalar el paquete sysstat.
[root@servera ~]# yum install sysstat
...output omitted...
Is this ok [y/N]: y
...output omitted...
Installed:
sysstat-11.7.3-2.el8.x86_64
lm_sensorslibs-3.4.0-17.20180522git70f7e08.el8.x86_64
Complete!
4.2.
Copie /usr/lib/systemd/system/sysstat-collect.timer en /etc/
systemd/system/sysstat-collect.timer.
[root@servera ~]# cp /usr/lib/systemd/system/sysstat-collect.timer \
/etc/systemd/system/sysstat-collect.timer
Importante
No debe editar archivos bajo el directorio /usr/lib/systemd. Con systemd,
puede copiar el archivo de la unidad al directorio /etc/systemd/system y editar
esa copia. El proceso de systemd analiza su copia personalizada en lugar del
archivo bajo el directorio /usr/lib/systemd.
4.3. Edite /etc/systemd/system/sysstat-collect.timer para que la unidad del
temporizador funcione cada dos minutos. Además, reemplace todas las apariciones
de la cadena 10 minutes con 2 minutes en todo el archivo de configuración
de la unidad, incluidos los de las líneas comentadas. Puede usar el comando vi /
etc/systemd/system/sysstat-collect.timer para editar el archivo de
configuración.
...
#
54
Activates activity collector every 2 minutes
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
[Unit]
Description=Run system activity accounting tool every 2 minutes
[Timer]
OnCalendar=*:00/02
[Install]
WantedBy=sysstat.service
Los cambios anteriores causan que la unidad sysstat-collect. timer
desencadene la unidad de sysstat-collect.service cada dos minutos, que
ejecuta /usr/lib64/sa/sa1 1 1. La ejecución de /usr/lib64/sa/sa1 1 1
recopila los datos de actividad del sistema en un archivo binario bajo el directorio /
var/log/sa.
4.4. Use el comando systemctl daemon-reload para asegurarse de que systemd
conozca los cambios.
[root@servera ~]# systemctl daemon-reload
4.5.
Use el comando systemctl para activar la unidad del temporizador sysstatcollect.timer.
[root@servera ~]# systemctl enable --now sysstat-collect.timer
4.6. Use el comando while para esperar hasta que el archivo binario se cree bajo el
directorio /var/log/sa. Espere a que regrese su prompt de shell.
[root@servera ~]# while [ $(ls /var/log/sa | wc -l) -eq 0 ];
do sleep 1s; done
\
En el comando while de arriba, el ls /var/log/sa | wc -l devuelve un 0 si el
archivo no existe y un 1 si existe. El while determina si es igual a 0 y si es así, ingresa
al bucle, que se detiene por un segundo. Cuando el archivo existe, el bucle while se
cierra.
4.7.
Use el comando ls -l para verificar que el archivo binario bajo el directorio /var/
log/sa se modificó en los últimos dos minutos.
[root@servera ~]# ls -l /var/log/sa
total 8
-rw-r--r--. 1 root root 5156 Mar 25 12:34 sa25
[root@servera ~]# date
Mon Mar 25 12:35:32 +07 2019
La salida del comando anterior puede variar en su sistema.
4.8. Salga de la shell del usuario root y cierre sesión en servera.
RH134-RHEL8.2-es-1-20200928
55
capítulo 2 | Programación de tareas futuras
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute lab scheduling-system finish para terminar este ejercicio. Este
script elimina los archivos creados durante el ejercicio para garantizar que el entorno quede limpio.
[student@workstation ~]$ lab scheduling-system finish
Esto concluye el ejercicio guiado.
56
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Administración de archivos temporales
Objetivos
Después de finalizar esta sesión, debe ser capaz de habilitar y deshabilitar los temporizadores de
systemd y configurar un temporizador que administre archivos temporales.
Administración de archivos temporales
Un sistema moderno requiere una gran cantidad de archivos y directorios temporales. Algunas
aplicaciones (y usuarios) usan el directorio /tmp para almacenar datos temporales, mientras que
otros usan una ubicación específica de la tarea como daemon y directorios volátiles específicos
del usuario bajo /run. En este contexto, volátil significa que el sistema de archivos que almacena
estos archivos solo existe en la memoria. Cuando el sistema vuelva a arrancar o pierda potencia,
todo el contenido del almacenamiento volátil desaparecerá.
Para mantener un sistema ejecutándose de forma ordenada, es necesario que estos directorios
y archivos se creen cuando no existen, dado que los daemons y scripts podrían contar con que
estos estén allí, y que los archivos antiguos se purguen de modo que no puedan llenar espacio en
el disco ni proporcionar información errónea.
Red Hat Enterprise Linux 7 y posteriores incluyen una nueva herramienta llamada systemdtmpfiles, que proporciona un método estructurado y configurable para administrar directorios y
archivos temporales.
Cuando systemd inicia un sistema, una de las primeras unidades de servicio iniciadas es
systemd-tmpfiles-setup. Este servicio ejecuta el comando systemd-tmpfiles --create
--remove. Este comando lee los archivos de configuración de /usr/lib/tmpfiles.d/
*.conf, /run/tmpfiles.d/*.conf y /etc/tmpfiles.d/*.conf. Todos los archivos y
directorios marcados para la eliminación en esos archivos de configuración se eliminarán, y todos
los archivos y directorios marcados para la creación (o arreglos de permisos) se crearán con los
permisos correctos si es necesario.
Limpieza de archivos temporales con un temporizador de
systemd
Para asegurar que los sistemas de larga duración no llenan sus discos con datos obsoletos, una
unidad de temporizador systemd llamada systemd-tmpfiles-clean.timer desencadena
systemd-tmpfiles-clean.service en un intervalo regular, que ejecuta el comando
systemd-tmpfiles --clean.
Los archivos de configuración de la unidad del temporizador systemd tienen una sección
[Timer] que indica con qué frecuencia debe iniciarse el servicio con el mismo nombre.
Use el siguiente comando systemctl para ver los contenidos del archivo de configuración de la
unidad systemd-tmpfiles-clean.timer.
[user@host ~]$ systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
# SPDX-License-Identifier: LGPL-2.1+
#
RH134-RHEL8.2-es-1-20200928
57
capítulo 2 | Programación de tareas futuras
#
#
#
#
#
#
#
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=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
En la configuración anterior, el parámetro OnBootSec=15min indica que la unidad de servicio
llamada systemd-tmpfiles-clean.service se desencadena 15 minutos después de que
el sistema se haya iniciado. El parámetro OnUnitActiveSec=1d indica que cualquier otro
desencadenador para la unidad de servicio systemd-tmpfiles-clean.service ocurre 24
horas después de que la unidad de servicio se activó por última vez.
En función de sus necesidades, puede cambiar los parámetros en el archivo de configuración de
la unidad del temporizador systemd-tmpfiles-clean.timer. Por ejemplo, el valor 30 min
para el parámetro OnUnitActiveSec desencadena la unidad de servicio systemd-tmpfilesclean.service 30 minutos después de la última activación de la unidad de servicio. Como
resultado, systemd-tmpfiles-clean.service se activa cada 30 minutos después de que los
cambios surtan efecto.
Después de cambiar el archivo de configuración de la unidad del temporizador, use el comando
systemctl daemon-reload para asegurar que systemd tenga conocimiento de los cambios.
Este comando recarga la configuración del administrador systemd.
[root@host ~]# systemctl daemon-reload
Después de recargar la configuración del administrador systemd, use el siguiente comando
systemctl para activar la unidad systemd-tmpfiles-clean.timer.
[root@host ~]# systemctl enable --now systemd-tmpfiles-clean.timer
Limpieza de archivos temporales manualmente
El comando systemd-tmpfiles --clean analiza los mismos archivos de configuración que el
comando systemd-tmpfiles --create, pero en lugar de crear archivos y directorios, purgará
todos los archivos a los que no se haya accedido, y que no hayan sido modificados ni cambiados
en una fecha anterior a la antigüedad máxima definida en el archivo de configuración.
El formato de los archivos de configuración para systemd-tmpfiles se detalla en la página del
manual tmpfiles.d(5). La sintaxis básica consta de siete columnas: Tipo, Ruta, Modo, UID, GID,
Edad y Argumento. Tipo se refiere a la acción que debe realizar systemd-tmpfiles; por ejemplo,
d ara crear un directorio si no existe aún, o Z para restaurar recursivamente contextos de SELinux y
propiedad y permisos de archivos.
A continuación, se dan algunos ejemplos con explicaciones:
58
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
d /run/systemd/seats 0755 root root -
Cuando cree archivos y directorios, cree el directorio /run/systemd/seats si aún no existe,
propiedad del usuario root y el grupo root, con permisos establecidos para rwxr-xr-x. Este
directorio no se purgará automáticamente.
D /home/student 0700 student student 1d
Cree el directorio /home/student si aún no existe. Si existe, vacíe todos los contenidos. Cuando
systemd-tmpfiles --clean se ejecute, elimine todos los archivos a los que no se haya
accedido, ni se hayan modificado ni cambiado en más de un día.
L /run/fstablink - root root - /etc/fstab
Cree el enlace simbólico /run/fstablink que apunte a /etc/fstab. Nunca purgue
automáticamente esta línea.
Precedencia de archivos de configuración
Los archivos de configuración pueden encontrarse en tres lugares:
• /etc/tmpfiles.d/*.conf
• /run/tmpfiles.d/*.conf
• /usr/lib/tmpfiles.d/*.conf
Los archivos en /usr/lib/tmpfiles.d/ son proporcionados por los paquetes de RPM
relevantes, y no debe editarlos. Los archivos bajo /run/tmpfiles.d/ son archivos volátiles,
normalmente usados por daemons para administrar sus propios archivos temporales de tiempo de
ejecución. Los archivos bajo /etc/tmpfiles.d/ están pensados para que los administradores
configuren ubicaciones temporales personalizadas y anulen los valores predeterminados provistos
por el proveedor.
Si un archivo en /run/tmpfiles.d/ tiene el mismo nombre de archivo que un archivo en /
usr/lib/tmpfiles.d/, se usa el archivo en /run/tmpfiles.d/. Si un archivo en /etc/
tmpfiles.d/ tiene el mismo nombre de archivo que un archivo en /run/tmpfiles.d/ o /
usr/lib/tmpfiles.d/, se usa el archivo en /etc/tmpfiles.d/.
Dadas estas reglas de precedencia, puede reemplazar fácilmente la configuración proporcionada
por el proveedor si copia el archivo relevante en /etc/tmpfiles.d/ y, luego, lo edita. Trabajar
de esta manera garantiza que la configuración proporcionada por el administrador se puede
administrar fácilmente desde un sistema de administración de configuración central, y que no se
sobrescriba por una actualización de un paquete.
nota
Cuando evalúe configuraciones nuevas o modificadas, puede ser útil solo aplicar los
comandos de un archivo de configuración. Esto se puede lograr si se especifica el
nombre del archivo de configuración en la línea de comandos.
RH134-RHEL8.2-es-1-20200928
59
capítulo 2 | Programación de tareas futuras
Referencias
Páginas del manual: systemd-tmpfiles(8), tmpfiles.d(5), stat(1), stat(2) y
systemd.timer(5).
60
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
Ejercicio Guiado
Administración de archivos temporales
En este ejercicio, configurará systemd-tmpfiles para cambiar la rapidez con la que
elimina los archivos temporales de /tmp, y también para purgar periódicamente los archivos
de otro directorio.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Configurar systemd-tmpfiles para eliminar archivos temporales no usados de /tmp.
• Configurar systemd-tmpfiles para purgar periódicamente archivos de otro directorio.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab scheduling-tempfiles start para iniciar el ejercicio.
Este script crea los archivos necesarios y asegura la configuración correcta del entorno.
[student@workstation ~]$ lab scheduling-tempfiles start
1.
Desde workstation, abra una sesión de SSH en servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Configure systemd-tmpfiles para limpiar el directorio /tmp para que no contenga
archivos que no se hayan usado en los últimos cinco días. Asegúrese de que la
configuración no se sobrescriba con ninguna actualización del paquete.
2.1.
Use el comando sudo -i para cambiar al usuario root.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
2.2.
Copie /usr/lib/tmpfiles.d/tmp.conf en /etc/tmpfiles.d/tmp.conf.
[root@servera ~]# cp /usr/lib/tmpfiles.d/tmp.conf \
/etc/tmpfiles.d/tmp.conf
2.3.
Busque la línea de configuración en /etc/tmpfiles.d/tmp.conf que se aplica
al directorio /tmp. Reemplace la edad existente de los archivos temporales en esa
línea de configuración con la nueva edad de 5 días. Elimine todas las otras líneas del
RH134-RHEL8.2-es-1-20200928
61
capítulo 2 | Programación de tareas futuras
archivo, incluidas las comentadas. Puede usar el comando vim /etc/tmpfiles.d/
tmp.conf para editar el archivo de configuración. El archivo /etc/tmpfiles.d/
tmp.conf debe aparecer de la siguiente manera:
q /tmp 1777 root root 5d
En la configuración anterior, el tipo q es idéntico a d e indica a systemd-tmpfiles
que cree el directorio /tmp si no existe. El directorio debe tener los permisos octales
establecidos en 1777. Tanto el usuario propietario como el grupo de /tmp deben ser
root. El directorio /tmp no debe contener los archivos temporales que no se han
usado en los últimos cinco días.
2.4.
Use el comando systemd-tmpfiles --clean para verificar que el archivo /etc/
tmpfiles.d/tmp.conf contenga la configuración correcta.
[root@servera ~]# systemd-tmpfiles --clean /etc/tmpfiles.d/tmp.conf
Debido a que el comando anterior no devolvió ningún error, confirma que los ajustes
de configuración son correctos.
3.
Agregue una nueva configuración que asegure que el directorio /run/momentary exista
con la propiedad del usuario y del grupo establecida en root. Los permisos octales para el
directorio deben ser 0700. La configuración debe purgar los archivos de este directorio que
no se hayan usado en los últimos 30 segundos.
3.1.
Cree el archivo llamado /etc/tmpfiles.d/momentary.conf con el siguiente
contenido. Puede usar el comando vim /etc/tmpfiles.d/momentary.conf
para crear el archivo de configuración.
d /run/momentary 0700 root root 30s
La configuración anterior hace que systemd-tmpfiles asegure que el directorio
/run/momentary exista con sus permisos octales establecidos en 0700. El usuario
propietario y el grupo de /run/momentary deben ser root. Los archivos de este
directorio que no se hayan usado en los últimos 30 segundos se deben purgar.
3.2.
Use el comando systemd-tmpfiles --create para verificar que el archivo /
etc/tmpfiles.d/momentary.conf contenga la configuración adecuada. El
comando crea el directorio /run/momentary si aún no existe.
[root@servera ~]# systemd-tmpfiles --create \
/etc/tmpfiles.d/momentary.conf
Debido a que el comando anterior no devolvió ningún error, confirma que los ajustes
de configuración son correctos.
3.3.
Use el comando ls para verificar que el directorio /run/momentary se crea con los
permisos, el propietario y el propietario del grupo adecuados.
[root@servera ~]# ls -ld /run/momentary
drwx------. 2 root root 40 Mar 21 16:39 /run/momentary
Tenga en cuenta que el conjunto de permisos octales de /run/momentary es 0700
y que la propiedad del usuario y del grupo se establece en root.
62
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
4. Verifique que cualquier archivo bajo el directorio /run/momentary, no usado en los
últimos 30 segundos, se elimina, en función de la configuración de systemd-tmpfiles
para el directorio.
4.1.
Use el comando touch para crear un archivo denominado /run/momentary/
testfile.
[root@servera ~]# touch /run/momentary/testfile
4.2.
Use el comando sleep para configurar su prompt de shell para que no regrese
durante 30 segundos.
[root@servera ~]# sleep 30
4.3. Después de que vuelva a aparecer el prompt de shell, use el comando systemdtmpfiles --clean para limpiar archivos obsoletos de /run/momentary, sobre la
base de la regla mencionada en /etc/tmpfiles.d/momentary.conf.
[root@servera ~]# systemd-tmpfiles --clean \
/etc/tmpfiles.d/momentary.conf
El comando anterior elimina /run/momentary/testfile porque el archivo no se
usó durante 30 segundos y debería haberse eliminado según la regla mencionada en
/etc/tmpfiles.d/momentary.conf.
4.4. Use el comando ls -l para verificar que el archivo /run/momentary/testfile
no exista.
[root@servera ~]# ls -l /run/momentary/testfile
ls: cannot access '/run/momentary/testfile': No such file or directory
4.5.
Salga de la shell del usuario root y cierre sesión en servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute lab scheduling-tempfiles finish para terminar este ejercicio.
Este script elimina los archivos creados durante el ejercicio para garantizar que el entorno quede
limpio.
[student@workstation ~]$ lab scheduling-tempfiles finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
63
capítulo 2 | Programación de tareas futuras
Cuestionario
Programación de tareas futuras
Elija las respuestas correctas para las siguientes preguntas.
1. ¿Qué comando muestra todos los trabajos de usuario que actualmente están
programados para ejecutarse como trabajos diferidos?
a. atq
b. atrm
c. at -c
d. at --display
2. ¿Qué comando elimina el trabajo de usuario diferido que tiene el número de trabajo 5?
a. at -c 5
b. atrm 5
c. at 5
d. at --delete 5
3. ¿Qué comando muestra todos los trabajos de usuario recurrentes programados para el
actual usuario que inició sesión actualmente?
a. crontab -r
b. crontab -l
c. crontab -u
d. crontab -V
4. ¿Qué formato de trabajo ejecuta /usr/local/bin/daily_backup cada hora desde
las 9:00 a. m. a las 6:00 p. m. todos los días de lunes a viernes?
a. 00 ***Mon-Fri/usr/local/bin/daily_backup
b. * */9 * * Mon-Fri /usr/local/bin/daily_backup
c. 00 */18 * * * /usr/local/bin/daily_backup
d. 00 09-18 * * Mon-Fri /usr/local/bin/daily_backup
5. ¿Qué directorio contiene los scripts de shell destinados a ejecutarse diariamente?
a. /etc/cron.d
b. /etc/cron.hourly
c. /etc/cron.daily
d. /etc/cron.weekly
64
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
6. ¿Qué archivo de configuración define la configuración de los trabajos del sistema que
se ejecutan de forma diaria, semanal y mensual?
a. /etc/crontab
b. /etc/anacrontab
c. /etc/inittab
d. /etc/sysconfig/crond
7. ¿Qué unidad systemd desencadena regularmente la limpieza de los archivos
temporales?
a. systemd-tmpfiles-clean.timer
b. systemd-tmpfiles-clean.service
c. dnf-makecache.timer
d. unbound-anchor.timer
RH134-RHEL8.2-es-1-20200928
65
capítulo 2 | Programación de tareas futuras
Solución
Programación de tareas futuras
Elija las respuestas correctas para las siguientes preguntas.
1. ¿Qué comando muestra todos los trabajos de usuario que actualmente están
programados para ejecutarse como trabajos diferidos?
a. atq
b. atrm
c. at -c
d. at --display
2. ¿Qué comando elimina el trabajo de usuario diferido que tiene el número de trabajo 5?
a. at -c 5
b. atrm 5
c. at 5
d. at --delete 5
3. ¿Qué comando muestra todos los trabajos de usuario recurrentes programados para el
actual usuario que inició sesión actualmente?
a. crontab -r
b. crontab -l
c. crontab -u
d. crontab -V
4. ¿Qué formato de trabajo ejecuta /usr/local/bin/daily_backup cada hora desde
las 9:00 a. m. a las 6:00 p. m. todos los días de lunes a viernes?
a. 00 ***Mon-Fri/usr/local/bin/daily_backup
b. * */9 * * Mon-Fri /usr/local/bin/daily_backup
c. 00 */18 * * * /usr/local/bin/daily_backup
d. 00 09-18 * * Mon-Fri /usr/local/bin/daily_backup
5. ¿Qué directorio contiene los scripts de shell destinados a ejecutarse diariamente?
a. /etc/cron.d
b. /etc/cron.hourly
c. /etc/cron.daily
d. /etc/cron.weekly
66
RH134-RHEL8.2-es-1-20200928
capítulo 2 | Programación de tareas futuras
6. ¿Qué archivo de configuración define la configuración de los trabajos del sistema que
se ejecutan de forma diaria, semanal y mensual?
a. /etc/crontab
b. /etc/anacrontab
c. /etc/inittab
d. /etc/sysconfig/crond
7. ¿Qué unidad systemd desencadena regularmente la limpieza de los archivos
temporales?
a. systemd-tmpfiles-clean.timer
b. systemd-tmpfiles-clean.service
c. dnf-makecache.timer
d. unbound-anchor.timer
RH134-RHEL8.2-es-1-20200928
67
capítulo 2 | Programación de tareas futuras
Resumen
En este capítulo, aprendió lo siguiente:
• Los trabajos que están programados para ejecutarse una vez en el futuro se llaman trabajos o
tareas diferidos.
• Los trabajos de usuario recurrentes ejecutan las tareas del usuario en una programación de
repetición.
• Los trabajos recurrentes del sistema realizan tareas administrativas en una programación de
repetición que tiene impacto en todo el sistema.
• Las unidades de tipo temporizador de systemd pueden ejecutar tanto los trabajos diferidos
como los recurrentes.
68
RH134-RHEL8.2-es-1-20200928
capítulo 3
Ajuste del rendimiento del
sistema
Meta
Mejorar el rendimiento del sistema estableciendo
parámetros de ajuste y ajustando la prioridad de
programación de los procesos.
Objetivos
•
Optimizar el rendimiento del sistema
seleccionando un perfil de ajuste administrado
por el daemon tuned.
•
Dar o quitar la prioridad a procesos específicos
con los comandos nice y renice.
•
Ajuste de perfiles de optimización (y ejercicio
guiado)
•
Influencia en la programación de procesos (y
ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Ajuste del rendimiento del sistema
69
capítulo 3 | Ajuste del rendimiento del sistema
Ajuste de perfiles de ajuste
Objetivos
Después de completar esta sección, debe ser capaz de optimizar el rendimiento del sistema
seleccionando un perfil de ajuste administrado por el daemon tuned.
Sistemas de ajuste
Los administradores del sistema pueden optimizar el rendimiento de un sistema ajustando
diversas configuraciones de dispositivos basadas en una variedad de cargas de trabajo de casos
de uso. El daemon tuned aplica la configuración de ajuste de forma estática y dinámica, con
perfiles de optimización que reflejan los requisitos particulares de la carga de trabajo.
Configuración de ajuste estático
El daemon tuned aplica la configuración del sistema cuando se inicia el servicio o al seleccionar
un nuevo perfil de ajuste. El ajuste estático configura los parámetros predefinidos del kernel
en los perfiles a los que se aplica tuned en el tiempo de ejecución. Con el ajuste estático, los
parámetros del kernel se establecen para las expectativas de rendimiento general y no se ajustan a
medida que cambian los niveles de actividad.
Configuración de ajuste dinámico
Con el ajuste dinámico, el daemon tuned monitorea la actividad del sistema y ajusta la
configuración según los cambios de comportamiento del tiempo de ejecución. El ajuste dinámico
se ajusta continuamente para adaptarse a la carga de trabajo actual, comenzando con las
configuraciones iniciales declaradas en el perfil de ajuste elegido.
Por ejemplo, los dispositivos de almacenamiento experimentan un alto uso durante el arranque y
el inicio de sesión, pero tienen una actividad mínima cuando las cargas de trabajo de los usuarios
consisten en el uso de navegadores web y clientes de correo electrónico. De manera similar, la
actividad de la CPU y los dispositivos de red aumentan durante el uso máximo en un día laboral.
El daemon tuned monitorea la actividad de estos componentes y ajusta la configuración de
parámetros para maximizar el rendimiento durante momentos de mucha actividad y reducir
los ajustes durante momentos de poca actividad. El daemon tuned usa los parámetros de
rendimiento proporcionados en los perfiles de ajuste predefinidos.
Instalación y habilitación de ajuste
La instalación mínima de Red Hat Enterprise Linux 8 incluye y habilita el paquete tuned de manera
predeterminada. Para instalar y habilitar el paquete manualmente:
[root@host ~]$ yum install tuned
[root@host ~]$ systemctl enable --now tuned
Created symlink /etc/systemd/system/multi-user.target.wants/tuned.service → /usr/
lib/systemd/system/tuned.service.
70
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Selección de un perfil de ajuste
La aplicación Tuned proporciona perfiles divididos en las siguientes categorías:
• Perfiles de ahorro de energía
• Perfiles de aumento de rendimiento
Los perfiles de aumento de rendimiento incluyen perfiles que se centran en los siguientes
aspectos:
• Baja latencia de almacenamiento y red
• Alto rendimiento de almacenamiento y red
• Rendimiento de máquinas virtuales
• Rendimiento del host de virtualización
Perfiles de ajuste distribuidos con Red Hat Enterprise Linux 8
Perfil de Tuned
Propósito
balanced (balanceado)
Ideal para los sistemas que requieren un balance entre
ahorro de energía y rendimiento.
desktop (escritorio)
Derivado del perfil balanced. Proporciona una
respuesta más rápida de las aplicaciones interactivas.
throughput-performance
(rendimiento de productividad)
Ajusta el sistema para maximizar el rendimiento.
latency-performance
(rendimiento de latencia)
Ideal para los sistemas de servidores que requieren baja
latencia a expensas del consumo de energía.
network-latency (latencia de
red)
Derivado del perfil latency-performance.
Habilita parámetros de ajuste de red adicionales para
proporcionar una baja latencia de red.
network-throughput
(rendimiento de red)
Derivado del perfil throughput-performance. Se
aplican parámetros de ajuste de red adicionales para
maximizar el rendimiento de la red.
powersave (ahorro de energía)
Ajusta el sistema para maximizar el ahorro de energía.
oracle
Optimizado para cargas de base de datos de Oracle,
basado en el perfil throughput-performance.
virtual-guest (invitado virtual)
Ajusta el sistema para maximizar el rendimiento si se
ejecuta en una máquina virtual.
virtual-host (host virtual)
Ajusta el sistema para maximizar el rendimiento si actúa
como host de máquinas virtuales.
Administración de perfiles desde la línea de comandos
El comando tuned-adm puede usarse para modificar la configuración del daemon tuned. El
comando tuned-adm puede consultar la configuración actual, listar los perfiles disponibles,
recomendar un perfil de ajuste para el sistema, modificar los perfiles directamente o desactivar los
ajustes.
RH134-RHEL8.2-es-1-20200928
71
capítulo 3 | Ajuste del rendimiento del sistema
Un administrador del sistema identifica el perfil de ajuste activo actualmente con tuned-adm
active.
[root@host ~]# tuned-adm active
Current active profile: virtual-guest
El comando tuned-adm list enumera todos los perfiles de optimización disponibles, incluidos
ambos perfiles incorporados y los perfiles de optimización personalizados creados por un
administrador del sistema.
[root@host ~]# tuned-adm list
Available profiles:
- balanced
- desktop
- latency-performance
- network-latency
- network-throughput
- powersave
- sap
- throughput-performance
- virtual-guest
- virtual-host
Current active profile: virtual-guest
Use tuned-adm profile profilename para cambiar el perfil activo a uno diferente que se
adapte mejor a los requisitos de ajuste actuales del sistema.
[root@host ~]$ tuned-adm profile throughput-performance
[root@host ~]$ tuned-adm active
Current active profile: throughput-performance
El comando tuned-adm puede recomendar un perfil de ajuste para el sistema. Este mecanismo se
usa para determinar el perfil predeterminado de un sistema después de la instalación.
[root@host ~]$ tuned-adm recommend
virtual-guest
nota
La salida tuned-adm recommend se basa en diversas características del sistema,
entre ellas, si el sistema es una máquina virtual y otras categorías predefinidas
seleccionadas durante la instalación del sistema.
Para revertir los cambios de configuración realizados por el perfil actual, cambie a otro perfil o
desactive el daemon ajustado. Desactive la actividad de ajuste de tuned con tuned-adm off.
[root@host ~]$ tuned-adm off
[root@host ~]$ tuned-adm active
No current active profile.
72
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Administración de perfiles con la consola web
Para administrar los perfiles de rendimiento del sistema con la consola web, inicie sesión con
acceso privilegiado. Haga clic en la opción Reuse my password for privileged tasks (Reutilizar
mi contraseña para tareas privilegiadas). Esto permite que el usuario ejecute comandos, con
privilegios de sudo, que modifican los perfiles de rendimiento del sistema.
Figura 3.1: Inicio de sesión privilegiado con la consola web
Como usuario privilegiado, haga clic en la opción del menú Systems (Sistemas) en la barra de
navegación izquierda. El perfil activo actual se muestra en el campo Performance Profile (Perfil
de rendimiento). Para seleccionar un perfil diferente, haga clic en el enlace del perfil activo.
Figura 3.2: Perfil de rendimiento activo
En la interfaz de usuario de Change Performance Profile (Cambiar perfil de rendimiento),
desplácese por la lista de perfiles para seleccionar el que mejor se adapte al propósito del sistema.
RH134-RHEL8.2-es-1-20200928
73
capítulo 3 | Ajuste del rendimiento del sistema
Figura 3.3: Seleccione un perfil de rendimiento preferido
Para verificar los cambios, vuelva a la página principal de System y confirme que se muestra el
perfil activo en el campo Performance Profile.
Figura 3.4: Verifique el perfil de rendimiento activo
Referencias
Páginas del manual: tuned(8), tuned.conf(5), tuned-main.conf(5) y tunedadm(1)
74
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Ejercicio Guiado
Ajuste de perfiles de ajuste
En este ejercicio, ajustará el rendimiento de un servidor activando el servicio tuned y
aplicando un perfil de ajuste.
Resultados
Debe ser capaz de configurar un sistema para usar un perfil de ajuste.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab tuning-profiles start. El comando
ejecuta un script de inicio que determina si el host servera es accesible en la red.
[student@workstation ~]$ lab tuning-profiles start
1.
En workstation, use SSH para iniciar sesión en servera con el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Verifique que el paquete tuned esté instalado, habilitado e iniciado.
2.1.
Use yum para confirmar que el paquete tuned esté instalado.
[student@servera ~]$ yum list tuned
...output omitted...
Installed Packages
tuned.noarch
2.10.0-15.el8
2.2.
@anaconda
El comando systemctl is-enabled tuned muestra si el servicio está habilitado.
[student@servera ~]$ systemctl is-enabled tuned
enabled
2.3.
El comando systemctl is-active tuned muestra si el servicio se está
ejecutando actualmente.
[student@servera ~]$ systemctl is-active tuned
active
RH134-RHEL8.2-es-1-20200928
75
capítulo 3 | Ajuste del rendimiento del sistema
3.
Enumere los perfiles de ajuste disponibles e identifique el perfil activo. Si sudo solicita una
contraseña, ingrese student después del aviso.
[student@servera ~]$ sudo tuned-adm list
[sudo] password for student: student
Available profiles:
- balanced
- General non-specialized tuned profile
- desktop
- Optimize for the desktop use-case
- latency-performance
- Optimize for deterministic performance at the cost of
increased power consumption
- network-latency
- Optimize for deterministic performance at the cost of
increased power consumption, focused on low latency
network performance
- network-throughput
- Optimize for streaming network throughput, generally
only necessary on older CPUs or 40G+ networks
- powersave
- Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent
performance across a variety of common server workloads
- virtual-guest
- Optimize for running inside a virtual guest
- virtual-host
- Optimize for running KVM guests
Current active profile: virtual-guest
4. Cambie el perfil de ajuste activo actual a powersave y, a continuación, confirme los
resultados. Si sudo solicita una contraseña, ingrese student después del aviso.
4.1.
Cambie el perfil de ajuste activo actual.
[student@servera ~]$ sudo tuned-adm profile powersave
4.2.
Confirme que powersave es el perfil de ajuste activo.
[student@servera ~]$ sudo tuned-adm active
Current active profile: powersave
5.
Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab tuning-profiles finish para terminar este
ejercicio.
[student@workstation ~]$ lab tuning-profiles finish
Esto concluye el ejercicio guiado.
76
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Influencia en la programación de
procesos
Objetivos
Después de completar esta sección, debe ser capaz de priorizar o quitar la prioridad de procesos
específicos, con los comandos nice y renice.
Programación y multitareas de procesos de Linux
Los sistemas de computación modernos varían de los sistemas de gama baja, que tienen una
CPU y solo pueden ejecutar una única instrucción a la vez, hasta las supercomputadoras de
alto rendimiento con cientos de CPU cada una y decenas o incluso centenas de núcleos de
procesamiento en cada CPU, que permiten ejecutar enormes cantidades de instrucciones en
paralelo. Aun así, todos estos sistemas tienen algo en común: la necesidad de ejecutar más
procesos y subprocesos que la cantidad de CPU que tienen.
Linux y otros sistemas operativos ejecutan más procesos que la cantidad de unidades de
procesamiento que tienen, con una técnica llamada particionamiento de tiempo o multitarea. El
programador de procesos del sistema operativo cambia rápidamente entre procesos en un único
núcleo, lo que da la impresión de que hay varios procesos ejecutándose al mismo tiempo.
Prioridades relativas
Los diferentes procesos tienen diferentes niveles de importancia. El programador de procesos
se puede configurar para usar diferentes políticas de programación para diferentes procesos. La
política de programación usada para la mayoría de los procesos que se ejecutan en un sistema
normal se denomina SCHED_OTHER (también denominada SCHED_NORMAL), pero hay otras
políticas disponibles para las diversas necesidades de cargas de trabajo.
Debido a que no todos los procesos son igual de importantes, a los procesos que se ejecutan con
la política SCHED_NORMAL se les puede dar una prioridad relativa. Esta prioridad se denomina
el valor bueno de un proceso, y se organizan en 40 niveles buenos diferentes para todos los
procesos.
Los valores de nivel bueno van desde -20 (prioridad más alta) a 19 (prioridad más baja). De
forma predeterminada, los procesos heredan su nivel bueno de sus procesos principales, que es
generalmente 0. Los niveles buenos más altos indican menos prioridad (el proceso abandona
fácilmente el uso de la CPU), mientras que los niveles buenos más bajos indican una mayor
prioridad (el proceso tiene menos tendencia a abandonar el uso de la CPU). Si no hay disputa por
recursos (por ejemplo, cuando hay menos procesos activos que núcleos de la CPU disponibles),
incluso los procesos con un nivel bueno alto usarán todos los recursos de la CPU disponibles
que puedan. Sin embargo, cuando hay más procesos que solicitan tiempo de CPU que núcleos
disponibles, los procesos con un nivel bueno más alto recibirán menos tiempo de la CPU que
aquellos con un nivel bueno más bajo.
Configuración de niveles buenos y permisos
Dado que establecer un nivel bueno bajo en un proceso que requiere mucha CPU podría afectar
de forma negativa el rendimiento de otros procesos que se ejecutan en el mismo sistema, solo el
usuario root puede reducir el nivel bueno de un proceso.
RH134-RHEL8.2-es-1-20200928
77
capítulo 3 | Ajuste del rendimiento del sistema
Los usuarios no privilegiados solo están autorizados a incrementar los niveles buenos de sus
propios procesos. No pueden reducir los niveles buenos de sus procesos ni pueden modificar el
nivel bueno de los procesos de otros usuarios.
Informe de niveles buenos
Varias herramientas muestran los niveles buenos de los procesos en ejecución. Las herramientas
de gestión de procesos, como top, muestran el nivel bueno de manera predeterminada. Otras
herramientas, como el comando ps, muestran niveles buenos cuando se usan las opciones
adecuadas.
Visualización de niveles buenos con el comando top
Use el comando top para visualizar y administrar procesos de forma interactiva. La configuración
predeterminada muestra dos columnas de interés sobre niveles buenos y prioridades. La columna
NI muestra el valor bueno del proceso y la columna PR muestra su prioridad programada. En la
interfaz top, el nivel bueno se asigna a una cola de prioridad interna del sistema, como se muestra
en el siguiente gráfico. Por ejemplo, un nivel bueno de -20 se asigna a 0 en la columna PR. Un nivel
bueno de 19 se asigna a una prioridad de 39 en la columna PR.
Figura 3.5: Niveles buenos y cómo se informan con el comando top
Visualización de niveles buenos desde la línea de comandos
El comando ps muestra los niveles buenos de los procesos, pero solo al incluir las opciones de
formato correctas.
El siguiente comando ps muestra una lista de todos los procesos, con su PID, nombre, nivel
bueno y clase de programación, ordenados de forma descendente por nivel bueno. Los procesos
que muestran TS en la columna de clase de programación CLS se ejecutan con la política de
programación SCHED_NORMAL. Los procesos con un guión (-) como nivel bueno se ejecutan
con otras políticas de programación y son interpretados como una prioridad más alta por el
programador. Los detalles de las políticas de programación adicionales están más allá del alcance
de este curso.
[user@host ~]$ ps axo pid,comm,nice,cls --sort=-nice
PID COMMAND
NI CLS
30 khugepaged
19 TS
29 ksmd
5 TS
1 systemd
0 TS
2 kthreadd
0 TS
9 ksoftirqd/0
0 TS
10 rcu_sched
0 TS
11 migration/0
- FF
12 watchdog/0
- FF
...output omitted...
78
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Inicio de procesos con niveles buenos diferentes
Durante la creación del proceso, este hereda el nivel bueno del proceso superior. Cuando un
proceso se inicia desde la línea de comandos, heredará el nivel bueno del proceso de la shell desde
donde se inició. Generalmente, esto genera nuevos procesos que se ejecutarán con un nivel bueno
de 0.
El siguiente ejemplo inicia un proceso desde la shell y muestra el valor bueno del proceso. Tenga
en cuenta el uso de la opción PID en ps para especificar la salida solicitada.
[user@host ~]$ sha1sum /dev/zero &
[1] 3480
[user@host ~]$ ps -o pid,comm,nice 3480
PID COMMAND
NI
3480 sha1sum
0
Todos los usuarios pueden usar el comando nice para iniciar comandos con un nivel bueno
predeterminado o superior. Sin opciones, el comando nice inicia un proceso con el valor bueno
predeterminado de 10.
En el siguiente ejemplo, se inicia el comando sha1sum como una tarea en segundo plano con el
nivel bueno predeterminado y se muestra el nivel bueno del proceso:
[user@host ~]$ nice sha1sum /dev/zero &
[1] 3517
[user@host ~]$ ps -o pid,comm,nice 3517
PID COMMAND
NI
3517 sha1sum
10
Use la opción -n para aplicar un nivel bueno definido por el usuario para el proceso de arranque. El
proceso predeterminado es agregar 10 al nivel bueno actual del proceso. En el siguiente ejemplo,
se inicia un comando como una tarea en segundo plano con el valor bueno definido por el usuario
y se muestra el nivel bueno del proceso:
[user@host ~]$ nice -n 15 sha1sum &
[1] 3521
[user@host ~]$ ps -o pid,comm,nice 3521
PID COMMAND
NI
3521 sha1sum
15
Importante
Los usuarios sin privilegios solo pueden aumentar el nivel bueno de su valor actual a
un máximo de 19. Una vez aumentado, los usuarios sin privilegios no pueden reducir
el valor para volver al nivel bueno anterior. El usuario root puede reducir el nivel
bueno de cualquier nivel actual a un mínimo de -20.
Cambio del nivel bueno de un proceso existente
El nivel bueno de un proceso existente se puede cambiar con el comando renice. En este
ejemplo, se usa el identificador PID del ejemplo anterior para cambiar el nivel bueno actual de 15 al
nivel bueno deseado de 19.
RH134-RHEL8.2-es-1-20200928
79
capítulo 3 | Ajuste del rendimiento del sistema
[user@host ~]$ renice -n 19 3521
3521 (process ID) old priority 15, new priority 19
El comando top también se puede usar para cambiar el nivel bueno de un proceso. Desde la
interfaz interactiva top, elija la opción r para acceder al comando renice, seguido por el PID que
se cambiará y el nuevo nivel bueno.
Referencias
Páginas del manual: nice(1), renice(1), top(1) y sched_setscheduler(2).
80
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Ejercicio Guiado
Influencia en la programación de
procesos
En este ejercicio, ajustará la prioridad de programación de los procesos con los comandos
nice y renice, y observará los efectos que esto tiene en la ejecución de procesos.
Resultados
Debe poder ajustar las prioridades de programación para los procesos.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab tuning-procscheduling start. El
comando ejecuta un script de inicio que determina si el host servera es accesible en la red.
[student@workstation ~]$ lab tuning-procscheduling start
1.
En workstation, use SSH para iniciar sesión en servera con el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Determine la cantidad de núcleos de CPU en servera y, a continuación, inicie dos
instancias del comando sha1sum /dev/zero & para cada núcleo.
2.1.
Use grep para analizar la cantidad de procesadores virtuales existentes (núcleos de
CPU) del archivo /proc/cpuinfo.
[student@servera ~]$ grep -c '^processor' /proc/cpuinfo
2
2.2.
Use un comando de bucle para iniciar varias instancias del comando sha1sum /
dev/zero &. Inicie dos por procesador virtual encontrado en el paso anterior. En
este ejemplo, serían cuatro instancias. Los valores de PID en su salida variarán con
respecto al ejemplo.
[student@servera ~]$ for i in $(seq 1 4); do sha1sum /dev/zero & done
[1] 2643
[2] 2644
[3] 2645
[4] 2646
RH134-RHEL8.2-es-1-20200928
81
capítulo 3 | Ajuste del rendimiento del sistema
3.
Verifique que las tareas en segundo plano se estén ejecutando para cada uno de los
procesos sha1sum.
[student@servera ~]$ jobs
[1]
Running
[2]
Running
[3]- Running
[4]+ Running
sha1sum /dev/zero &
sha1sum /dev/zero &
sha1sum /dev/zero &
sha1sum /dev/zero &
4. Use los comandos ps y pgrep para mostrar el porcentaje de uso de CPU para cada
proceso sha1sum.
[student@servera ~]$ ps u $(pgrep sha1sum)
USER
PID %CPU %MEM
VSZ
RSS TTY
student
2643 49.8 0.0 228360 1744 pts/0
student
2644 49.8 0.0 228360 1780 pts/0
student
2645 49.8 0.0 228360 1748 pts/0
student
2646 49.8 0.0 228360 1780 pts/0
5.
STAT START
R
11:15
R
11:15
R
11:15
R
11:15
TIME COMMAND
6:09 sha1sum /dev/zero
6:09 sha1sum /dev/zero
6:09 sha1sum /dev/zero
6:09 sha1sum /dev/zero
Cierre todos los procesos sha1sum y, a continuación, verifique que no haya trabajos en
ejecución.
5.1.
Use el comando pkill para cerrar todos los procesos en ejecución con el patrón de
nombre sha1sum.
[student@servera ~]$ pkill sha1sum
[2]
Terminated
sha1sum /dev/zero
[4]+ Terminated
sha1sum /dev/zero
[1]- Terminated
sha1sum /dev/zero
[3]+ Terminated
sha1sum /dev/zero
5.2.
Verifique que no haya tareas en ejecución.
[student@servera ~]$ jobs
[student@servera ~]$
6. Inicie varias instancias de sha1sum /dev/zero & y, a continuación, inicie una instancia
adicional de sha1sum /dev/zero & con un nivel bueno de 10. Inicie tantas instancias
como procesadores virtuales tenga el sistema. En este ejemplo, se inician 3 instancias
normales y otra con el nivel bueno más alto.
6.1.
Use los bucles para iniciar tres instancias de sha1sum /dev/zero &.
[student@servera ~]$ for i in $(seq 1 3); do sha1sum /dev/zero & done
[1] 1947
[2] 1948
[3] 1949
6.2.
82
Use el comando nice para iniciar la cuarta instancia con un nivel bueno de 10.
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
[student@servera ~]$ nice -n 10 sha1sum /dev/zero &
[4] 1953
7.
Use los comandos ps y pgrep para mostrar el PID, el porcentaje de uso de CPU, el valor
bueno y el nombre ejecutable para cada proceso. La instancia con el valor bueno de 10
debe mostrar un porcentaje menor de uso de CPU que las otras instancias.
[student@servera ~]$ ps -o pid,pcpu,nice,comm $(pgrep sha1sum)
PID %CPU NI COMMAND
1947 66.0
0 sha1sum
1948 65.7
0 sha1sum
1949 66.1
0 sha1sum
1953 6.7 10 sha1sum
8. Use el comando sudo renice para bajar el nivel bueno de un proceso del paso anterior.
Observe el valor de PID de la instancia de proceso con el nivel bueno de 10. Use ese PID de
proceso para bajar su nivel bueno a 5.
[student@servera ~]$ sudo renice -n 5 1953
[sudo] password for student: student
1953 (process ID) old priority 10, new priority 5
9. Repita los comandos ps y pgrep para volver a mostrar el porcentaje de CPU y el nivel
bueno.
[student@servera ~]$ ps -o pid,pcpu,nice,comm $(pgrep sha1sum)
PID %CPU NI COMMAND
1947 63.8
0 sha1sum
1948 62.8
0 sha1sum
1949 65.3
0 sha1sum
1953 9.1
5 sha1sum
10. Use el comando pkill para cerrar todos los procesos en ejecución con el patrón de
nombre sha1sum.
[student@servera ~]$ pkill sha1sum
...output omitted...
11. Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab tuning-procscheduling finish para terminar este
ejercicio.
RH134-RHEL8.2-es-1-20200928
83
capítulo 3 | Ajuste del rendimiento del sistema
[student@workstation ~]$ lab tuning-procscheduling finish
Esto concluye el ejercicio guiado.
84
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Trabajo de laboratorio
Ajuste del rendimiento del sistema
Lista de verificación de rendimiento
En este trabajo de laboratorio, aplicará un perfil de ajuste específico y ajustará la prioridad de
programación de un proceso existente con un alto uso de CPU.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Activar un perfil de ajuste específico para un sistema de cómputo.
• Ajustar la prioridad de programación de CPU de un proceso.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
Desde workstation, ejecute el comando lab tuning-review start. Este comando
ejecuta un script de inicio para determinar si el host serverb es accesible en la red.
[student@workstation ~]$ lab tuning-review start
1.
Cambie el perfil de ajuste actual para serverb a balanced, un perfil de ajuste general no
especializado.
2.
Dos procesos en serverb están consumiendo un alto porcentaje de uso de CPU. Ajuste el
nivel de nice de cada proceso en 10 para permitir más tiempo de CPU para otros procesos.
Evaluación
En workstation, ejecute el comando lab tuning-review grade para confirmar que ha
realizado correctamente este ejercicio de laboratorio.
[student@workstation ~]$ lab tuning-review grade
Finalizar
En workstation, ejecute el script lab tuning-review finish para terminar este ejercicio.
[student@workstation ~]$ lab tuning-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
85
capítulo 3 | Ajuste del rendimiento del sistema
Solución
Ajuste del rendimiento del sistema
Lista de verificación de rendimiento
En este trabajo de laboratorio, aplicará un perfil de ajuste específico y ajustará la prioridad de
programación de un proceso existente con un alto uso de CPU.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Activar un perfil de ajuste específico para un sistema de cómputo.
• Ajustar la prioridad de programación de CPU de un proceso.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
Desde workstation, ejecute el comando lab tuning-review start. Este comando
ejecuta un script de inicio para determinar si el host serverb es accesible en la red.
[student@workstation ~]$ lab tuning-review start
Cambie el perfil de ajuste actual para serverb a balanced, un perfil de ajuste general no
especializado.
1.
1.1.
Desde workstation, abra una sesión de SSH en serverb como el usuario student.
Los sistemas se configuran para que usen claves SSH para la autenticación, por lo que
no se necesita una contraseña.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
1.2.
Use yum para confirmar que el paquete tuned esté instalado.
[student@serverb ~]$ yum list tuned
...output omitted...
Installed Packages
tuned.noarch
2.10.0-15.el8
1.3.
@anaconda
Use el comando systemctl is-active tuned para mostrar el estado del servicio
tuned.
[student@serverb ~]$ systemctl is-active tuned
active
86
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
1.4.
Enumere todos los perfiles de ajuste disponibles y sus descripciones. Tenga en cuenta
que el perfil activo actual es virtual-guest.
[student@serverb ~]$ sudo tuned-adm list
[sudo] password for student: student
Available profiles:
- balanced
- General non-specialized tuned profile
- desktop
- Optimize for the desktop use-case
- latency-performance
- Optimize for deterministic performance at the cost of
increased power consumption
- network-latency
- Optimize for deterministic performance at the cost of
increased power consumption, focused on low latency
network performance
- network-throughput
- Optimize for streaming network throughput, generally
only necessary on older CPUs or 40G+ networks
- powersave
- Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent
performance across a variety of common server workloads
- virtual-guest
- Optimize for running inside a virtual guest
- virtual-host
- Optimize for running KVM guests
Current active profile: virtual-guest
1.5.
Cambie el perfil de ajuste activo actual al perfil balanced.
[student@serverb ~]$ sudo tuned-adm profile balanced
1.6.
Enumere la información de resumen del perfil activo actual de tuned.
Use el comando tuned-adm profile_info para confirmar que el perfil activo sea el
perfil balanced.
[student@serverb ~]$ sudo tuned-adm profile_info
Profile name:
balanced
Profile summary:
General non-specialized tuned profile
...output omitted...
2.
Dos procesos en serverb están consumiendo un alto porcentaje de uso de CPU. Ajuste el
nivel de nice de cada proceso en 10 para permitir más tiempo de CPU para otros procesos.
2.1.
Determine los dos consumidores de CPU principales en serverb. Los consumidores
de CPU principales aparecen en último lugar en la salida del comando. Los valores
porcentuales de CPU varían.
[student@serverb ~]$ ps aux --sort=pcpu
USER
PID %CPU %MEM
VSZ
RSS TTY
...output omitted...
root
2983 100 0.0 228360 1744 ?
root
2967 101 0.0 228360 1732 ?
[student@serverb ~]$
RH134-RHEL8.2-es-1-20200928
STAT START
TIME COMMAND
R<
RN
0:23 md5sum /dev/zero
0:23 sha1sum /dev/zero
21:08
21:08
87
capítulo 3 | Ajuste del rendimiento del sistema
2.2.
Identifique el nivel actual de nice para los dos consumidores de CPU principales.
[student@serverb ~]$ ps -o pid,pcpu,nice,comm \
$(pgrep sha1sum;pgrep md5sum)
PID %CPU NI COMMAND
2967 99.6
2 sha1sum
2983 99.7 -2 md5sum
2.3.
Use el comando sudo renice -n 10 2967 2983 para ajustar el nivel de nice
de cada proceso en 10. Use los valores de PID identificados en la salida del comando
anterior.
[student@serverb ~]$ sudo renice -n 10 2967 2983
[sudo] password for student: student
2967 (process ID) old priority 2, new priority 10
2983 (process ID) old priority -2, new priority 10
2.4.
Verifique que el nivel actual de nice de cada proceso sea 10.
[student@serverb ~]$ ps -o pid,pcpu,nice,comm \
$(pgrep sha1sum;pgrep md5sum)
PID %CPU NI COMMAND
2967 99.6 10 sha1sum
2983 99.7 10 md5sum
2.5.
Salga de serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
Evaluación
En workstation, ejecute el comando lab tuning-review grade para confirmar que ha
realizado correctamente este ejercicio de laboratorio.
[student@workstation ~]$ lab tuning-review grade
Finalizar
En workstation, ejecute el script lab tuning-review finish para terminar este ejercicio.
[student@workstation ~]$ lab tuning-review finish
Esto concluye el trabajo de laboratorio.
88
RH134-RHEL8.2-es-1-20200928
capítulo 3 | Ajuste del rendimiento del sistema
Resumen
En este capítulo, aprendió lo siguiente:
• El servicio tuned modifica automáticamente la configuración del dispositivo para satisfacer las
necesidades específicas del sistema en función del perfil de ajuste predefinido seleccionado.
• Para revertir todos los cambios realizados en la configuración del sistema por el perfil
seleccionado, cambie a otro perfil o desactive el servicio tuned.
• El sistema asigna una prioridad relativa a un proceso para determinar su acceso a la CPU. Esta
prioridad se denomina el valor nice de un proceso.
• El comando nice asigna una prioridad a un proceso cuando se inicia. El comando renice
modifica la prioridad de un proceso en ejecución.
RH134-RHEL8.2-es-1-20200928
89
90
RH134-RHEL8.2-es-1-20200928
capítulo 4
Control de acceso a archivos
con ACL
Meta
Interpretar y establecer listas de control de acceso
(ACL) en archivos para manejar situaciones que
requieren permisos complejos de acceso de
usuarios y grupos.
Objetivos
•
Describir los casos de uso de las ACL,
identificar los archivos que tienen ACL
configuradas e interpretar el efecto de esas
ACL.
•
Establecer y eliminar las ACL de los archivos y
definir las ACL predeterminadas establecidas
automáticamente por un directorio en los
archivos recién creados.
•
Interpretación de las ACL de archivos (y
ejercicio guiado)
•
Protección de archivos con ACL (y ejercicio
guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Control de acceso a archivos con ACL
91
capítulo 4 | Control de acceso a archivos con ACL
Interpretación de ACL de archivos
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Describir las ACL y las opciones de montaje en sistemas de archivos.
• Ver e interpretar las ACL con ls y getfacl.
• Describir la máscara de ACL y la precedencia de permisos de ACL.
• Identificar en qué ocasiones Red Hat Enterprise Linux usa las ACL de manera predeterminada.
Conceptos de lista de control de acceso
Los permisos estándares de archivos de Linux son satisfactorios cuando a los archivos los usa
un solo propietario y un solo grupo de personas designado. Sin embargo, algunos casos de uso
requieren que varios usuarios y grupos nombrados accedan a los archivos con diferentes conjuntos
de permisos de archivos. Las listas de control de acceso (ACL) proporcionan esta función.
Con las ACL, puede otorgar permisos a varios usuarios y grupos, identificados por nombre de
usuario, nombre de grupo, UID o GID, con los mismos indicadores de permiso que se usan para
los permisos de archivos normales: leer, escribir y ejecutar. Estos usuarios y grupos adicionales,
más allá del propietario del archivo y la afiliación de grupo del archivo, se denominan named users
(usuarios nombrados) y named groups (grupos nombrados) respectivamente, porque se nombran
no en una lista larga, sino dentro de una ACL.
Los usuarios pueden establecer ACL en los archivos y directorios que poseen. Los usuarios
privilegiados, a los que se asigna la capacidad de Linux CAP_FOWNER, pueden establecer
ACL en cualquier archivo o directorio. Los archivos y subdirectorios nuevos pueden heredar
automáticamente la configuración de ACL de las ACL predeterminadas del directorio principal, si
están configuradas. Al igual que las reglas de acceso a archivos normales, la jerarquía del directorio
principal necesita al menos el otro conjunto de permisos de búsqueda (ejecutar) para habilitar el
acceso de usuarios y grupos nombrados.
Compatibilidad del sistema de archivos con ACL
Los sistemas de archivos deben montarse con el soporte para ACL habilitado. Los sistemas de
archivos XFS tienen soporte para ACL incorporado. Otros sistemas de archivos, como ext3 o ext4
creados en Red Hat Enterprise Linux 8, tienen la opción acl habilitada de forma predeterminada,
aunque en versiones anteriores debe confirmar que el soporte de ACL esté habilitado. Para
habilitar el soporte de ACL en el sistema de archivos, use la opción de ACL con el comando mount
o la entrada del sistema de archivos en el archivo de configuración /etc/fstab.
Visualización e interpretación de permisos de ACL
El comando ls -l solo produce detalles de configuración de ACL mínimos:
[user@host content]$ ls -l reports.txt
-rwxrw----+ 1 user operators 130 Mar 19 23:56 reports.txt
92
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
El signo más (+) al final de la cadena de permiso de 10 caracteres indica que existe una estructura
de ACL ampliada con entradas en este archivo.
usuario:
muestra la configuración de ACL del usuario, que es la misma que la configuración estándar
de archivos del usuario; rwx.
grupo:
muestra la configuración actual de la máscara de ACL, no la configuración del propietario del
grupo; rw.
otro:
muestra la configuración de ACL de otro, que es la misma que la configuración estándar de
archivos de otro; sin acceso.
Importante
Si se modifican los permisos del grupo en un archivo con ACL mediante el uso de
chmod, no se modifican los permisos del propietario del grupo, pero sí se modifica la
máscara de ACL. Use setfacl -m g::perms file si lo que intenta es actualizar
los permisos del propietario del grupo de archivos.
Ver ACL de archivos
Para visualizar la configuración de ACL en un archivo, use getfacl file:
[user@host content]$ getfacl reports.txt
# file: reports.txt
# owner: user
# group: operators
user::rwx
user:consultant3:--user:1005:rwx
#effective:rwgroup::rwx
#effective:rwgroup:consultant1:r-group:2210:rwx
#effective:rwmask::rwother::---
Repase cada sección del ejemplo anterior:
Entradas comentadas:
# file: reports.txt
# owner: user
# group: operators
Las primeras tres líneas son comentarios que identifican el nombre del archivo, el propietario
(user) y el propietario del grupo (operators). Si hay indicadores de archivos adicionales
(por ejemplo, setuid o setgid), aparecerá una cuarta línea de comentarios que muestra los
indicadores establecidos.
Entradas de usuarios:
RH134-RHEL8.2-es-1-20200928
93
capítulo 4 | Control de acceso a archivos con ACL
user::rwx
user:consultant3:--user:1005:rwx
#effective:rw-
Permisos del propietario de archivos. user tiene rwx.
Permisos de usuarios nombrados. Una entrada para cada usuario nombrado asociado con
este archivo. consultant3 no tiene permisos.
Permisos de usuarios nombrados. El UID 1005 tiene rwx, pero la máscara limita los permisos
efectivos a rw solamente.
Entradas de grupos:
group::rwx
#effective:rwgroup:consultant1:r-group:2210:rwx
#effective:rw-
Permisos de propietario de grupo. operators tiene rwx, pero la máscara limita los permisos
efectivos a rw solamente.
Permisos de grupos nombrados. Una entrada para cada grupo nombrado asociado con este
archivo. consultant1 tiene r solamente.
Permisos de grupos nombrados. El GID 2210 tiene rwx, pero la máscara limita los permisos
efectivos a rw solamente.
Entrada de la máscara:
mask::rw-
La configuración de la máscara muestra los máximos permisos posibles para todos los usuarios
nombrados, el propietario del grupo y los grupos nombrados. El UID 1005, operators y el GID
2210 no pueden ejecutar este archivo, aunque cada entrada tenga establecido el permiso de
ejecución.
Otra entrada:
other::---
Otro permiso o permisos "globales". Todos los demás UID y GID NO tienen permisos.
Visualización de ACL de directorios
Para visualizar la configuración de ACL en un directorio, use el comando getfacl directory:
[user@host content]$ getfacl .
# file: .
# owner: user
# group: operators
# flags: -suser::rwx
user:consultant3:--user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
94
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
mask::rwx
other::--default:user::rwx
default:user:consultant3:--default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::---
Repase cada sección del ejemplo anterior:
Abrir entradas de comentarios:
# file: .
# owner: user
# group: operators
# flags: -s-
Las primeras tres líneas son comentarios que identifican el nombre del directorio, el propietario
(user) y el propietario del grupo (operators). Si hay indicadores de directorio adicionales
(setuid, setgid, sticky), una cuarta línea de comentario mostrará los indicadores establecidos
(en este caso, setgid).
Entradas de ACL estándares:
user::rwx
user:consultant3:--user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
Los permisos de ACL en este directorio son los mismos que los del archivo del ejemplo anterior,
pero se aplican al directorio. La diferencia clave es la inclusión del permiso de ejecución en estas
entradas (cuando corresponda) para habilitar el permiso de búsqueda del directorio.
Entradas del usuario predeterminadas:
default:user::rwx
default:user:consultant3:---
Permisos de ACL del propietario del archivos predeterminados. El propietario del archivo
obtendrá rwx, lectura/escritura en archivos nuevos y ejecución en subdirectorios nuevos.
Permisos de ACL de usuarios nombrados predeterminados. Una entrada para cada usuario
nombrado al que se aplicará automáticamente la ACL predeterminada a los archivos o
subdirectorios nuevos. De manera predeterminada, consultant3 no tendrá permisos.
Entradas del grupo predeterminadas:
default:group::rwx
default:group:consultant1:r-x
RH134-RHEL8.2-es-1-20200928
95
capítulo 4 | Control de acceso a archivos con ACL
Permisos de ACL predeterminados del propietario del grupo El propietario del grupo de
archivos obtendrá rwx, lectura/escritura en archivos nuevos y ejecución en subdirectorios
nuevos.
Permisos de ACL del grupo nombrado predeterminados. Una entrada para cada grupo
nombrado que obtendrá automáticamente la ACL predeterminada. consultant1 obtendrá
rx, solo lectura en archivos nuevos y ejecución en subdirectorios nuevos.
Entrada de la máscara ACL predeterminada:
default:mask::rwx
La configuración de máscara predeterminada muestra los permisos máximos iniciales posibles
para todos los archivos y directorios nuevos creados que tienen ACL de usuarios nombrados, ACL
del propietario del grupo o ACL de grupos nombrados: lectura y escritura para archivos nuevos y
permiso de ejecución en subdirectorios nuevos. Los archivos nuevos nunca obtienen permiso de
ejecución.
Entrada de otro predeterminada:
default:other::---
Permisos "globales" o de otro predeterminados. Todos los demás UID y GID no tienen permisos
para archivos nuevos o subdirectorios nuevos.
Las entradas predeterminadas del ejemplo anterior no incluyen el usuario nombrado (UID
1005) ni el grupo nombrado (GID 2210); consecuentemente, no obtendrán entradas de ACL
iniciales automáticamente agregadas para estas a ningún archivo nuevo o subdirectorio nuevo.
Esto las limita de manera efectiva a archivos y subdirectorios que ya tienen ACL, o si el propietario
del archivo relevante agrega la ACL más tarde usando setfacl. Aún pueden crear sus propios
archivos y subdirectorios.
nota
La salida del comando getfacl se puede usar como entrada para setfacl
a fin de restaurar las ACL, o para copiar las ACL de un archivo o directorio de
origen y guardarlas en un archivo nuevo. Por ejemplo, para restaurar las ACL desde
una copia de seguridad, use getfacl -R /dir1 > file1 para generar un
archivo recursivo de volcado de salida de ACL para el directorio y su contenido. A
continuación, esta salida se puede usar para la recuperación de las ACL originales
al pasar la salida guardada como entrada al comando setfacl. Por ejemplo, para
realizar una actualización masiva del mismo directorio en la ruta actual, use el
siguiente comando: setfacl --set-file=file1
La máscara ACL
La máscara de ACL define los permisos máximos que se pueden otorgar a usuarios nombrados, el
propietario del grupo y los grupos nombrados. No restringe los permisos del usuario propietario del
archivo ni otro. Todos los archivos y directorios que implementan ACL tendrán una máscara de
ACL.
La máscara se puede visualizar con getfacl y establecer explícitamente con setfacl. Se
calculará y se agregará automáticamente si no se la establece de forma explícita, pero también
podría heredarse de una configuración de máscara predeterminada de un directorio principal. De
96
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
forma predeterminada, la máscara se calcula nuevamente siempre que se agregue, se modifique o
se elimine cualquiera de las ACL afectadas.
Precedencia de permisos de ACL
Al determinar si un proceso (un programa en ejecución) puede acceder a un archivo, los permisos
del archivo y las ACL se aplican de la siguiente manera:
• Si el proceso se ejecuta como el usuario que es propietario del archivo, se aplican los permisos
de ACL del usuario del archivo.
• Si el proceso se ejecuta como un usuario que está detallado en una entrada de ACL del usuario,
se aplican los permisos de ACL de usuario nombrado (siempre que esté permitido por la
máscara).
• Si el proceso se ejecuta como grupo que coincide con el propietario del grupo del archivo, o
como un grupo con una entrada de ACL de grupos nombrados explícitamente, se aplican los
permisos de ACL que coinciden (siempre que esté permitido por la máscara).
• De lo contrario, se aplican los otros permisos de ACL del archivo.
Ejemplos de uso de ACL por el sistema operativo
Red Hat Enterprise Linux tiene ejemplos que demuestran el uso típico de ACL para los requisitos
de permisos ampliados.
ACL en archivos de diario (journal) de Systemd
systemd-journald usa entradas de ACL para permitir el acceso de lectura al archivo /
run/log/journal/cb44...8ae2/system.journal a los grupos adm y wheel. Esta ACL
permite que los miembros de los grupos adm y wheel tengan acceso de lectura a los registros
administrados por journalctl sin tener la necesidad de dar permisos especiales al contenido
privilegiado dentro de /var/log/, como messages, secure o audit.
Debido a la configuración de systemd-journald, la carpeta principal del archivo
system.journal puede cambiar, pero systemd-journald aplica ACL a la nueva carpeta y al
archivo automáticamente.
nota
Los administradores del sistema deben establecer una ACL en la carpeta /
var/log/journal/ cuando systemd-journald está configurado para usar
almacenamiento persistente.
[user@host ]$ getfacl /run/log/journal/cb44...8ae2/system.journal
getfacl: Removing leading '/' from absolute path names
# file: run/log/journal/cb44...8ae2/system.journal
# owner: root
# group: systemd-journal
user::rwgroup::r-group:adm:r-group:wheel:r-mask::r-other::---
RH134-RHEL8.2-es-1-20200928
97
capítulo 4 | Control de acceso a archivos con ACL
ACL en dispositivos administrados por Systemd
systemd-udev usa un conjunto de reglas de udev que permiten el uso de la etiqueta uaccess
en algunos dispositivos, como reproductores o grabadoras de CD/DVD, dispositivos de
almacenamiento USB, tarjetas de sonido y muchos otros. Las reglas de udev mencionadas
anteriormente establecen las ACL en esos dispositivos para permitir que los usuarios que hayan
iniciado sesión en una interfaz gráfica de usuario (por ejemplo gdm) tengan control total de esos
dispositivos.
Las ACL permanecerán activas hasta que el usuario cierre la sesión de la GUI. Al siguiente usuario
que inicie sesión en la GUI se le aplicará una nueva ACL para los dispositivos requeridos.
En el siguiente ejemplo, puede ver que user tiene una entrada de ACL con permisos rw aplicados
al dispositivo /dev/sr0 que es una unidad de CD/DVD.
[user@host ]$ getfacl /dev/sr0
getfacl: Removing leading '/' from absolute path names
# file: dev/sr0
# owner: root
# group: cdrom
user::rwuser:group:rwgroup::rwmask::rwother::---
Referencias
Páginas del manual: acl(5), getfacl(1), journald.conf(5), ls(1), systemdjournald(8) y systemd-udevd(8)
98
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
Cuestionario
Interpretación de ACL de archivos
Establezca una coincidencia entre los siguientes elementos y sus equivalentes de la tabla.
Archivo g::rw
Archivo user::rx
Archivo user:mary:rx
default:m::rx /directory
default:user:mary:rx /directory
g::rw /directory
getfacl /directory
group:hug:rwx /directory
Descripción
Operación de ACL
Visualizar la ACL en un directorio.
Usuario nombrado con permisos de lectura y
ejecución para un archivo.
Propietario del archivo con permisos de lectura y
ejecución para un archivo.
Permisos de lectura y escritura para un directorio
otorgados al propietario del grupo del directorio.
Permisos de lectura y escritura para un archivo
otorgados al propietario del grupo del archivo.
Permisos de lectura, escritura y ejecución para un
directorio otorgados a un grupo nombrado.
Permisos de lectura y ejecución establecidos como
la máscara predeterminada.
Permiso de lectura inicial otorgado a usuario
nombrado para archivos nuevos y permisos de
lectura y ejecución para subdirectorios nuevos.
RH134-RHEL8.2-es-1-20200928
99
capítulo 4 | Control de acceso a archivos con ACL
Solución
Interpretación de ACL de archivos
Establezca una coincidencia entre los siguientes elementos y sus equivalentes de la tabla.
Descripción
Operación de ACL
Visualizar la ACL en un directorio.
getfacl /directory
Usuario nombrado con permisos de lectura y
ejecución para un archivo.
Archivo user:mary:rx
Propietario del archivo con permisos de lectura y
ejecución para un archivo.
Archivo user::rx
Permisos de lectura y escritura para un directorio
otorgados al propietario del grupo del directorio.
g::rw /directory
Permisos de lectura y escritura para un archivo
otorgados al propietario del grupo del archivo.
Archivo g::rw
Permisos de lectura, escritura y ejecución para un
directorio otorgados a un grupo nombrado.
group:hug:rwx /directory
Permisos de lectura y ejecución establecidos como
la máscara predeterminada.
default:m::rx /directory
Permiso de lectura inicial otorgado a usuario
nombrado para archivos nuevos y permisos de
lectura y ejecución para subdirectorios nuevos.
default:user:mary:rx /directory
100
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
Protección de archivos con ACL
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Cambiar permisos de archivos de ACL regulares usando setfacl.
• Controlar permisos de archivos de ACL predeterminados para archivos y directorios nuevos.
Cambio de permisos de archivos de ACL
Use setfacl para agregar, modificar o eliminar ACL en archivos y directorios.
Las ACL usan la representación de permisos de sistema de archivos normal, "r" para permiso de
lectura, "w" para permiso de escritura y "x" para permiso de ejecución. Un "-" (guión) indica que el
permiso relevante está ausente. Cuando (recursivamente) se configuran ACL, se puede usar una
"X" mayúscula para indicar que el permiso de ejecución solo se debe establecer en directorios y no
en archivos regulares, a menos que el archivo ya tenga el permiso de ejecución relevante. Este es
el mismo comportamiento de chmod.
Adición o modificación de ACL
Las ACL se pueden establecer a través de la línea de comandos usando la opción -m, o se pueden
especificar a través de un archivo usando la opción -M (use "-" [guión]) en lugar de un nombre
de archivo para stdin). Estas dos opciones son las opciones "modificar"; agregan entradas de
ACL nuevas o reemplazan entradas de ACL existentes específicas en un archivo o directorio. Las
demás entradas de ACL existentes en el archivo o el directorio permanecen intactas.
nota
Use las opciones --set o --set-file para reemplazar completamente la
configuración de ACL en un archivo.
Cuando se define por primera vez una ACL en un archivo, si la operación de adición no incluye
configuración para permisos del propietario del archivo, el propietario del grupo u otros, se
establecerán en función de los permisos de archivos estándares actuales (estas también son
conocidas como entradas de ACL de base y no se pueden eliminar), y, asimismo, se calculará y se
agregará un nuevo valor de máscara.
Para agregar o modificar una ACL de usuario o usuario nombrado:
[user@host ~]$ setfacl -m u:name:rX file
Si name se deja en blanco, se aplica al propietario del archivo; de lo contrario, name puede ser
un nombre de usuario o un valor de UID. En este ejemplo, los permisos otorgados serían de solo
lectura y, si ya están establecidos, de ejecución (a menos que file fuera un directorio, en cuyo
caso el directorio obtendría el permiso de ejecución establecido para permitir la búsqueda en el
directorio).
RH134-RHEL8.2-es-1-20200928
101
capítulo 4 | Control de acceso a archivos con ACL
Los permisos del propietario del archivo de ACL y el propietario del archivo estándar son
equivalentes; por consiguiente, el uso de chmod en los permisos del propietario del archivo es
equivalente a usar setfacl en los permisos del propietario del archivo. chmod no tiene efecto
sobre los usuarios nombrados.
Para agregar o modificar una ACL de grupo o grupo nombrado:
[user@host ~]$ setfacl -m g:name:rw file
Esto sigue el mismo patrón para agregar o modificar una entrada de ACL de usuario. Si name se
deja en blanco, se aplica al propietario del grupo. De lo contrario, especifique un nombre de grupo
o un valor de GID para un grupo nombrado. Los permisos serían de lectura y escritura en este
ejemplo.
chmod no tiene efecto en permisos de ningún grupo para archivos con configuraciones de ACL,
pero actualiza la máscara de ACL.
Para agregar o modificar la ACL de otro:
[user@host ~]$ setfacl -m o::- file
otro solo acepta configuración de permisos. Estas son las configuraciones típicas de permisos para
otros: sin permisos, configurado con un guión (-); y permisos de solo lectura, configurados como
de costumbre con r. Por supuesto, puede establecer cualquiera de los permisos estándares.
Los permisos de otro de ACL y otro estándar son equivalentes; por consiguiente, el uso de chmod
en los permisos de otro es equivalente a usar setfacl en los permisos de otro.
Puede agregar varias entradas con el mismo comando; use una lista de entradas separadas por
coma:
[user@host ~]$ setfacl -m u::rwx,g:consultants:rX,o::- file
Esto establece permisos de lectura, escritura y ejecución para el propietario del archivo, establece
al grupo nombrado consultants en solo lectura y ejecución condicional, y restringe a todos los
usuarios other a ningún permiso. El propietario del grupo mantiene sus permisos de ACL o de
archivo existentes y las otras entradas "nombradas" permanecen iguales.
Uso de getfacl como entrada
La salida de getfacl se puede usar como entrada para setfacl:
[user@host ~]$ getfacl file-A | setfacl --set-file=- file-B
La opción --set-file acepta la entrada de un archivo o de stdin. El carácter de guión (-)
especifica el uso de stdin. En este caso, file-B tendrá la misma configuración de ACL que file-A.
Configuración de una máscara de ACL explícita
Puede configurar una máscara de ACL de forma explícita en un archivo o directorio para limitar
los permisos efectivos máximos para usuarios nombrados, el propietario del grupo y los grupos
nombrados. Esto restringe los permisos existentes que superen la máscara, pero no afecta los
permisos que son menos permisivos que la máscara.
102
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
[user@host ~]$ setfacl -m m::r file
Esto agrega un valor de máscara que restringe a cualquiera de los usuarios nombrados,
el propietario del grupo y cualquiera de los grupos nombrados a permiso de solo lectura,
independientemente de su configuración existente. Los usuarios propietario del archivo y otro no
se ven afectados por la configuración de la máscara.
getfacl muestra un comentario "efectivo" además de entradas que son restringidas por una
configuración de máscara.
Importante
De forma predeterminada, cada vez que una de las configuraciones de ACL
afectadas (usuarios nombrados, propietario del grupo o grupos nombrados) se
modifica o elimina, la máscara de ACL se vuelve a calcular y potencialmente se
restablece una configuración de máscara explícita anterior.
Para evitar calcular nuevamente la máscara, use la opción -n o incluya una
configuración de máscara (-m m::perms) con cualquier operación setfacl que
modifique la configuración de ACL afectada de la máscara.
Modificaciones de ACL recursivas
Al configurar una ACL en un directorio, use la opción -R para aplicar la ACL de forma recursiva.
Recuerde que es probable que quiera usar el permiso "X" (x mayúscula) con recursión, de modo
que los archivos con permiso de ejecución establecido retienen la configuración y los directorios
obtienen el permiso de ejecución establecido para permitir la búsqueda de directorios. También se
considera práctica recomendada usar la "X" mayúscula cuando se configuran ACL de manera no
recursiva, dado que esto evita que los administradores agreguen de forma accidental permisos de
ejecución a un archivo normal.
[user@host ~]$ setfacl -R -m u:name:rX directory
Esto agrega el usuario name al directorio directory y todos los archivos y subdirectorios existentes,
con permisos de solo lectura y ejecución condicional.
Eliminación de ACL
La eliminación de entradas de ACL específicas sigue el mismo formato básico que la operación de
modificar, excepto que ":perms" no se especifica.
[user@host ~]$ setfacl -x u:name,g:name file
Esto solo elimina al usuario nombrado y al grupo nombrado de la ACL de archivos o directorios. El
resto de las entradas de ACL existentes permanecen activas.
Puede incluir las operaciones de eliminación (-x) y modificación (-m) en la misma operación
setfacl.
La máscara solo puede eliminarse si no hay otras ACL establecidas (excluidas las ACL base que
no se pueden eliminar), de modo que debe eliminarse última. El archivo ya no tendrá ACL y ls -l
no mostrará el símbolo más (+) junto a la cadena de permisos. De forma alternativa, para eliminar
RH134-RHEL8.2-es-1-20200928
103
capítulo 4 | Control de acceso a archivos con ACL
todas las entradas de ACL de un archivo o directorio (incluidas las ACL predeterminadas en los
directorios), use el siguiente comando:
[user@host ~]$ setfacl -b file
Control de permisos de archivos de ACL
predeterminadas
Para asegurarse de que los archivos y directorios creados dentro de un directorio hereden ciertas
ACL, use la ACL predeterminada en un directorio. Puede configurar una ACL predeterminada y
cualquiera de las configuraciones de ACL estándares, incluida una máscara predeterminada.
El directorio en sí aún requiere ACL estándares para el control de acceso porque las ACL
predeterminadas no implementan control de acceso para el directorio; solo proporcionan soporte
de herencia para permisos de ACL. Por ejemplo:
[user@host ~]$ setfacl -m d:u:name:rx directory
Esto agrega un usuario nombrado predeterminados (d:u:name) con permiso de solo lectura y
ejecución en subdirectorios.
El comando setfacl para agregar una ACL predeterminada para cada uno de los tipos de ACL es
exactamente el mismo que para las ACL estándares, pero incluye d: delante. De forma alternativa,
use la opción -d en la línea de comandos.
Importante
Al configurar las ACL predeterminadas en un directorio, asegúrese de que los
usuarios podrán acceder al contenido de los subdirectorios nuevos creados en este,
al incluir el permiso de ejecución en la ACL predeterminada.
Los usuarios no recibirán automáticamente el permiso de ejecución establecido en
los archivos regulares creados recientemente, ya que, a diferencia de los directorios
nuevos, la máscara de ACL de un archivo regular nuevo es rw-.
nota
Los archivos y subdirectorios nuevos continúan obteniendo los valores de UID de
su propietario y de GID del grupo primario establecidos a partir del usuario creador,
excepto cuando la marca setgid del directorio principal está habilitada, en cuyo
caso el GID del grupo primario es el mismo que el GID del directorio principal.
Eliminación de entradas de ACL predeterminadas
Puede eliminar una ACL predeterminada de la misma manera que elimina una ACL estándar; se
agrega d: adelante o se usa la opción -d.
[user@host ~]$ setfacl -x d:u:name directory
Esto elimina la entrada de ACL predeterminada que se agregó en el ejemplo anterior.
104
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
Para eliminar todas las entradas de ACL predeterminadas en un directorio, use setfacl -k
directory.
Referencias
Páginas del manual: acl(5), setfacl(1), getfacl(1)
RH134-RHEL8.2-es-1-20200928
105
capítulo 4 | Control de acceso a archivos con ACL
Ejercicio Guiado
Protección de archivos con ACL
En este ejercicio, usará las entradas de ACL para otorgar acceso a un directorio para un
grupo y negar el acceso a un usuario, establecer la ACL predeterminada en un directorio y
confirmar que los nuevos archivos creados en ese directorio heredan la ACL predeterminada.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Use las entradas de ACL para otorgar acceso a un grupo y denegar el acceso a uno de sus
miembros.
• Verifique que los archivos y directorios existentes reflejen los nuevos permisos de ACL.
• Establezca la ACL predeterminada en un directorio y confirme que los archivos y
directorios nuevos heredan su configuración.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab acl-secure start. Este comando ejecuta
un script de inicio que determina si la máquina servera es accesible en la red. También crea
los usuarios, grupos, directorios y archivos usados en este ejercicio.
[student@workstation ~]$ lab acl-secure start
Los operadores y consultores son miembros de una empresa de soporte de TI. Necesitan empezar
a compartir información. servera contiene un directorio compartido configurado correctamente
ubicado en /shares/content que aloja archivos.
Actualmente, solo los miembros del grupo operators tienen acceso a este directorio, pero los
miembros del grupo consultants necesitan acceso completo a este directorio.
El usuario consultant1 es miembro del grupo consultants, pero ha causado problemas en
muchas ocasiones, por lo que este usuario no debería tener acceso al directorio.
Su trabajo es agregar entradas de ACL adecuadas al directorio y su contenido, de modo que los
miembros del grupo consultants tengan acceso completo, pero negar todo tipo de acceso al
usuario consultant1. Asegúrese de que a los archivos y directorios futuros almacenados en /
shares/content se le apliquen las entradas de ACL adecuadas.
Información importante:
• Los usuarios sysadmin1 y operator1 son miembros del grupo operators.
• Los usuarios consultant1 y consultant2 son miembros del grupo consultants.
• El directorio /shares/content contiene un subdirectorio llamado server-info y varios
archivos para evaluar la ACL. Además, el directorio /shares/content contiene un script
ejecutable llamado loadvg.sh que puede usar para la prueba.
106
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
• Los usuarios sysadmin1, operator1, consultant1 y consultant2 tienen sus contraseñas
configuradas en redhat.
• Todos los cambios deben ocurrir en el directorio /shares/content y sus archivos; no ajuste el
directorio /shares.
1.
Inicie sesión en servera y cambie al usuario root.
1.1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no
se necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
2.
Agregue la ACL nombrada al directorio /shares/content y todo su contenido.
2.1.
Use setfacl para actualizar recursivamente el directorio /shares/content,
lo que otorga permisos de lectura, escritura y ejecución condicional al grupo
consultants.
[root@servera ~]# setfacl -Rm g:consultants:rwX /shares/content
La opción -R significa recursivo, la opción -m significa modificar/agregar, rwX
significa aplicar permisos de lectura, escritura y ejecución condicional.
2.2.
Use setfacl para actualizar recursivamente el directorio /shares/content,
denegar al usuario consultant1 del grupo consultants todo tipo de acceso.
[root@servera ~]# setfacl -Rm u:consultant1:- /shares/content
La opción -R significa recursivo, la opción -m significa modificar/agregar, - significa
no dar acceso.
3.
Agregue la ACL nombrada como ACL predeterminada para admitir futuras adiciones de
archivos y directorios.
3.1.
Use setfacl para agregar una regla de acceso predeterminada para el grupo
consultants. Otorgue permisos de lectura, escritura y ejecución en el directorio
content.
[root@servera ~]# setfacl -m d:g:consultants:rwx /shares/content
La opción -m significa modificar/agregar, d:g significa grupo predeterminado, :rwx
significa permisos de lectura/escritura/ejecución (necesario para la creación y el
acceso adecuados a subdirectorio)
RH134-RHEL8.2-es-1-20200928
107
capítulo 4 | Control de acceso a archivos con ACL
3.2.
Use setfacl para agregar una regla de acceso predeterminada para el usuario
consultant1. Niegue todo acceso al directorio content.
[root@servera ~]# setfacl -m d:u:consultant1:- /shares/content
La opción -m significa modificar/agregar, d:u significa usuario predeterminado, significa que no hay permisos.
4. Verifique sus cambios en ACL.
consultant2 debe ser capaz de leer cualquier archivo y crear un directorio nuevo con un
nuevo archivo en este.
consultant1 no debe ser capaz de leer, escribir ni ejecutar ningún archivo; esto incluye no
poder enumerar el contenido del directorio.
Use su - user para cambiar a usuarios de prueba. Use exit o Ctrl+D para salir de la
shell de usuarios de prueba.
[root@servera ~]# exit
[student@servera ~]$ su - consultant2
Password: redhat
[consultant2@servera ~]$ cd /shares/content/
4.1.
Use cat para comprobar que consultant2 pueda leer un archivo.
[consultant2@servera content]$ cat serverb-loadavg.txt
#################################################
serverb.lab.example.com
#################################################
Wed Mar 25 15:25:19 EDT 2019
#################################################
ldavg 0.18, 0.06, 0.05
#################################################
4.2.
Use el script loadavg.sh para comprobar que consultant2 pueda ejecutar un
archivo.
[consultant2@servera content]$ ./loadavg.sh
ldavg 0.00, 0.00, 0.04
4.3. Cree un directorio denominado reports.
Use echo para crear un archivo con cierto contenido, nombre el archivo test.txt y
colóquelo en el directorio nuevo.
Cambie nuevamente a student cuando haya finalizado.
[consultant2@servera content]$ mkdir reports
[consultant2@servera content]$ echo "TEST REPORT" > reports/test.txt
[consultant2@servera content]$ exit
logout
[student@servera ~]$
108
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
4.4. Inicie sesión como el usuario consultant1. Use cd para tratar de cambiar de
directorio como consultant1 y también pruebe ls para detallar el directorio.
Ambos comandos deben fallar con permiso denegado.
Pruebe uno o más de los comandos que usó consultant2, pero como
consultant1, para verificar aún más la falta de acceso. Use la ruta completa, /
shares/content, porque no puede usar cd para cambiar al directorio.
Cambie nuevamente a student cuando haya terminado de probar consultant1.
[student@servera ~]$ su - consultant1
Password: redhat
[consultant1@servera ~]$ cd /shares/content/
-bash: cd: /shares/content/: Permission denied
[consultant1@servera ~]$ ls /shares/content/
ls: cannot open directory '/shares/content/': Permission denied
[consultant1@servera ~]$ cat /shares/content/serverb-loadavg.txt
cat: /shares/content/serverb-loadavg.txt: Permission denied
[consultant1@servera ~]$ exit
logout
[student@servera ~]$
4.5.
Inicie sesión como el usuario sysadmin1. Use getfacl para ver todas las entradas
de ACL en /shares/content y las entradas de ACL en /shares/content/
reports.
Cambie nuevamente a student cuando haya terminado de probar consultant1.
[student@servera ~]$ su - sysadmin1
Password: redhat
[sysadmin1@servera ~]$ getfacl /shares/content
getfacl: Removing leading '/' from absolute path names
# file: shares/content/
# owner: root
# group: operators
# flags: -suser::rwx
user:consultant1:--group::rwx
group:consultants:rwx
mask::rwx
other::--default:user::rwx
default:user:consultant1:--default:group::rwx
default:group:consultants:rwx
default:mask::rwx
default:other::--[sysadmin1@servera ~]$ getfacl /shares/content/reports
getfacl: Removing leading '/' from absolute path names
# file: shares/content/reports
# owner: consultant2
# group: operators
# flags: -suser::rwx
RH134-RHEL8.2-es-1-20200928
109
capítulo 4 | Control de acceso a archivos con ACL
user:consultant1:--group::rwx
group:consultants:rwx
mask::rwx
other::--default:user::rwx
default:user:consultant1:--default:group::rwx
default:group:consultants:rwx
default:mask::rwx
default:other::--[sysadmin1@servera ~]$ exit
logout
[student@servera ~]$
4.6. Cierre sesión en servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab acl-secure finish para terminar este ejercicio.
[student@workstation ~]$ lab acl-secure finish
Esto concluye el ejercicio guiado.
110
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
Trabajo de laboratorio
Control de acceso a archivos con ACL
Lista de verificación de rendimiento
En esta práctica de laboratorio, configurará un directorio de colaboración para usuarios de
dos grupos, combinando el permiso set-GID y las entradas de ACL predeterminadas para
proporcionar permisos de acceso correctos.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Configure el permiso set-GID en una carpeta, para que se herede la propiedad del grupo
en los archivos y las carpetas que tiene dentro.
• Configure las entradas de ACL para permitir o denegar los permisos de lectura, escritura o
ejecución para usuarios y grupos en archivos y directorios.
• Configure la ACL predeterminada para obtener los permisos correctos de ACL y archivos
automáticamente en los nuevos archivos y directorios.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab acl-review start. Este comando ejecuta
un script de inicio que determina si la máquina serverb es accesible en la red. También crea
los usuarios, grupos, directorios y archivos usados en este ejercicio.
[student@workstation ~]$ lab acl-review start
Una agencia de finanzas e inversiones está configurando un directorio compartido de
colaboración para contener archivos de casos, para los cuales los miembros del grupo managers
(gerentes) tendrán permisos de lectura y escritura.
El cofundador de la agencia, manager1, ha decidido que los miembros del grupo contractors
(contratistas) también deben ser capaces de leer y escribir en el directorio compartido.
Sin embargo, manager1 no confía en el usuario contractor3 (un miembro del grupo
contractors); por ello, el acceso de contractor3 al directorio debe restringirse a solo lectura.
manager1 ha creado los usuarios y grupos; además, ha iniciado el proceso de configuración
del directorio compartido copiando algunos archivos de plantillas. Como manager1 ha estado
demasiado ocupado, le corresponde a usted terminar el trabajo.
Su tarea es completar la configuración del directorio compartido. El directorio y todo su contenido
deben ser propiedad del grupo managers, y los archivos se deben actualizar para lectura y
escritura para el propietario y el grupo (managers). Los otros usuarios no deben tener permisos.
También debe proporcionar permisos de lectura y escritura para el grupo contractors, con
la excepción de contractor3, quien solo obtiene permisos de lectura. Asegúrese de que su
configuración se aplique a archivos existentes y futuros.
RH134-RHEL8.2-es-1-20200928
111
capítulo 4 | Control de acceso a archivos con ACL
Información importante:
• Directorio compartido: /shares/cases en serverb.
• Los usuarios manager1 y manager2 son miembros del grupo managers.
• Los usuarios contractor1 , contractor2 y contractor3 son miembros del grupo
contractors.
• Existen dos archivos en el directorio: shortlist.txt y backlog.txt.
• Las cinco contraseñas de usuario son redhat.
• Todos los cambios deben ocurrir en el directorio /shares/cases y sus archivos; no ajuste el
directorio /shares.
1.
El directorio cases y su contenido deben pertenecer al grupo managers. Los nuevos
archivos agregados en el directorio cases deben pertenecer automáticamente al grupo
managers. Los usuarios y grupos propietarios de los archivos existentes deben tener
permisos de lectura y escritura; los otros usuarios no deben tener ningún permiso.
nota
Pista: no use setfacl.
2.
Agregue entradas de ACL al directorio cases (y su contenido) que permitan que los
miembros del grupo contractors tengan acceso de lectura/escritura a los archivos y
permiso de ejecución en el directorio. Restrinja al usuario contractor3 a acceso de lectura
a los archivos y permiso de ejecución en el directorio.
3.
Agregue entradas de ACL que aseguren que todos los archivos o directorios nuevos del
directorio cases tengan los permisos correctos aplicados para todos los grupos y usuarios
autorizados.
4.
Verifique que haya hecho los cambios en el sistema de archivos y ACL correctamente.
Use ls y getfacl para revisar su configuración en /shares/cases.
Como el usuario student, use su - user para cambiar primero a manager1 y, luego, a
contractor1. Verifique que puede escribir en un archivo, leer desde un archivo, hacer un
directorio y escribir en un archivo en el directorio nuevo. Use ls para comprobar los permisos
del directorio nuevo y getfacl para revisar las ACL del directorio nuevo.
Como el usuario student, use su - contractor3 para cambiar de usuario. Intente
escribir en un archivo (debería fallar) e intente hacer un directorio nuevo (debería fallar).
Como el usuario contractor3, debe poder leer desde el archivo shortlist.txt en
el directorio cases y leer desde los archivos de "prueba" escritos en cualquiera de los
directorios nuevos creados por los usuarios manager1 y contractor1.
nota
El conjunto de pruebas anteriores son algunas de las pruebas que podría realizar
para comprobar que los permisos de acceso sean correctos. Debe idear pruebas de
validación de acceso adecuadas para su entorno.
Evaluación
En workstation, ejecute el comando lab acl-review grade para confirmar que ha
realizado correctamente este ejercicio.
112
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
[student@workstation ~]$ lab acl-review grade
Finalizar
En workstation, ejecute el comando lab acl-review finish para terminar este ejercicio.
[student@workstation ~]$ lab acl-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
113
capítulo 4 | Control de acceso a archivos con ACL
Solución
Control de acceso a archivos con ACL
Lista de verificación de rendimiento
En esta práctica de laboratorio, configurará un directorio de colaboración para usuarios de
dos grupos, combinando el permiso set-GID y las entradas de ACL predeterminadas para
proporcionar permisos de acceso correctos.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Configure el permiso set-GID en una carpeta, para que se herede la propiedad del grupo
en los archivos y las carpetas que tiene dentro.
• Configure las entradas de ACL para permitir o denegar los permisos de lectura, escritura o
ejecución para usuarios y grupos en archivos y directorios.
• Configure la ACL predeterminada para obtener los permisos correctos de ACL y archivos
automáticamente en los nuevos archivos y directorios.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab acl-review start. Este comando ejecuta
un script de inicio que determina si la máquina serverb es accesible en la red. También crea
los usuarios, grupos, directorios y archivos usados en este ejercicio.
[student@workstation ~]$ lab acl-review start
Una agencia de finanzas e inversiones está configurando un directorio compartido de
colaboración para contener archivos de casos, para los cuales los miembros del grupo managers
(gerentes) tendrán permisos de lectura y escritura.
El cofundador de la agencia, manager1, ha decidido que los miembros del grupo contractors
(contratistas) también deben ser capaces de leer y escribir en el directorio compartido.
Sin embargo, manager1 no confía en el usuario contractor3 (un miembro del grupo
contractors); por ello, el acceso de contractor3 al directorio debe restringirse a solo lectura.
manager1 ha creado los usuarios y grupos; además, ha iniciado el proceso de configuración
del directorio compartido copiando algunos archivos de plantillas. Como manager1 ha estado
demasiado ocupado, le corresponde a usted terminar el trabajo.
Su tarea es completar la configuración del directorio compartido. El directorio y todo su contenido
deben ser propiedad del grupo managers, y los archivos se deben actualizar para lectura y
escritura para el propietario y el grupo (managers). Los otros usuarios no deben tener permisos.
También debe proporcionar permisos de lectura y escritura para el grupo contractors, con
la excepción de contractor3, quien solo obtiene permisos de lectura. Asegúrese de que su
configuración se aplique a archivos existentes y futuros.
114
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
Información importante:
• Directorio compartido: /shares/cases en serverb.
• Los usuarios manager1 y manager2 son miembros del grupo managers.
• Los usuarios contractor1 , contractor2 y contractor3 son miembros del grupo
contractors.
• Existen dos archivos en el directorio: shortlist.txt y backlog.txt.
• Las cinco contraseñas de usuario son redhat.
• Todos los cambios deben ocurrir en el directorio /shares/cases y sus archivos; no ajuste el
directorio /shares.
1.
El directorio cases y su contenido deben pertenecer al grupo managers. Los nuevos
archivos agregados en el directorio cases deben pertenecer automáticamente al grupo
managers. Los usuarios y grupos propietarios de los archivos existentes deben tener
permisos de lectura y escritura; los otros usuarios no deben tener ningún permiso.
nota
Pista: no use setfacl.
1.1.
Inicie sesión en serverb como el usuario student.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
1.3.
Use el comando chgrp para actualizar recursivamente la propiedad del grupo en el
directorio y su contenido.
[root@serverb ~]# chgrp -R managers /shares/cases
1.4.
Use el comando chmod para actualizar el indicador set-GID en el directorio.
[root@serverb ~]# chmod g+s /shares/cases
1.5.
Use chmod para actualizar todos los permisos de archivo existentes para rw para el
propietario y el grupo.
[root@serverb ~]# chmod 660 /shares/cases/*
RH134-RHEL8.2-es-1-20200928
115
capítulo 4 | Control de acceso a archivos con ACL
Agregue entradas de ACL al directorio cases (y su contenido) que permitan que los
miembros del grupo contractors tengan acceso de lectura/escritura a los archivos y
permiso de ejecución en el directorio. Restrinja al usuario contractor3 a acceso de lectura
a los archivos y permiso de ejecución en el directorio.
2.
2.1.
Use setfacl para actualizar recursivamente el directorio cases existente y sus
contenidos. Otorgue al grupo contractors permisos de lectura, escritura y ejecución
condicional.
[root@serverb ~]# setfacl -Rm g:contractors:rwX /shares/cases
2.2.
Use setfacl para actualizar recursivamente el directorio cases existente y sus
contenidos. Otorgue al usuario contractor3 permisos de lectura y ejecución
condicional.
[root@serverb ~]# setfacl -Rm u:contractor3:rX /shares/cases
3.
Agregue entradas de ACL que aseguren que todos los archivos o directorios nuevos del
directorio cases tengan los permisos correctos aplicados para todos los grupos y usuarios
autorizados.
3.1.
Use setfacl para actualizar los permisos predeterminados para los miembros del
grupo contractors. Los permisos predeterminados son de lectura, escritura y
ejecución (necesarios para la creación y el acceso adecuados de subdirectorios).
[root@serverb ~]# setfacl -m d:g:contractors:rwx /shares/cases
3.2.
Use setfacl para actualizar los permisos predeterminados para el usuario
contractor3. Los permisos predeterminados son de lectura y ejecución (necesarios
para el acceso adecuado a subdirectorios).
[root@serverb ~]# setfacl -m d:u:contractor3:rx /shares/cases
4.
Verifique que haya hecho los cambios en el sistema de archivos y ACL correctamente.
Use ls y getfacl para revisar su configuración en /shares/cases.
Como el usuario student, use su - user para cambiar primero a manager1 y, luego, a
contractor1. Verifique que puede escribir en un archivo, leer desde un archivo, hacer un
directorio y escribir en un archivo en el directorio nuevo. Use ls para comprobar los permisos
del directorio nuevo y getfacl para revisar las ACL del directorio nuevo.
Como el usuario student, use su - contractor3 para cambiar de usuario. Intente
escribir en un archivo (debería fallar) e intente hacer un directorio nuevo (debería fallar).
Como el usuario contractor3, debe poder leer desde el archivo shortlist.txt en
el directorio cases y leer desde los archivos de "prueba" escritos en cualquiera de los
directorios nuevos creados por los usuarios manager1 y contractor1.
4.1.
116
Como el usuario root, use ls para verificar el directorio cases y su contenido. Busque
los permisos de propiedad, directorio y archivos. La "s" en los permisos de archivo de
grupo indica que el indicador set-GID ya está configurado; el "+" indica que existen
entradas de ACL. Al final, salga de la sesión de usuario root.
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
[root@serverb ~]# ls -ld /shares/cases
drwxrws---+ 2 root managers 46 Mar 29 00:40 /shares/cases
[root@serverb ~]# ls -l /shares/cases
total 8
-rw-rw----+ 1 root managers 44 Mar 29 00:33 backlog.txt
-rw-rw----+ 1 root managers 46 Mar 29 00:33 shortlist.txt
4.2.
Use getfacl y revise su salida. Busque las entradas de usuarios nombrados y grupos
nombrados en ACL estándares y predeterminadas.
[root@serverb ~]# getfacl /shares/cases
# file: shares/cases
# owner: root
# group: managers
# flags: -suser::rwx
user:contractor3:r-x
group::rwx
group:contractors:rwx
mask::rwx
other::--default:user::rwx
default:user:contractor3:r-x
default:group::rwx
default:group:contractors:rwx
default:mask::rwx
default:other::--[root@serverb ~]# exit
logout
4.3. Cambie al usuario manager1 y realice las siguientes operaciones. Compruebe que
obtenga el comportamiento de acceso esperado.
[student@serverb ~]$ su - manager1
Password: redhat
[manager1@serverb ~]$ cd /shares/cases
[manager1@serverb cases]$ echo hello > manager1.txt
[manager1@serverb cases]$ cat shortlist.txt
###Shortlist of Clients to call###TEMPLATE###
[manager1@serverb cases]$ mkdir manager1.dir
[manager1@serverb cases]$ echo hello > manager1.dir/test.txt
[manager1@serverb cases]$ ls -ld manager1.dir
drwxrws---+ 2 manager1 managers 22 Mar 29 00:59 manager1.dir
[manager1@serverb cases]$ ls -l manager1.dir
total 4
-rw-rw----+ 1 manager1 managers 6 Mar 29 00:59 test.txt
[manager1@serverb cases]$ getfacl manager1.dir
# file: manager1.dir/
# owner: manager1
# group: managers
# flags: -s-
RH134-RHEL8.2-es-1-20200928
117
capítulo 4 | Control de acceso a archivos con ACL
user::rwx
user:contractor3:r-x
group::rwx
group:contractors:rwx
mask::rwx
other::--default:user::rwx
default:user:contractor3:r-x
default:group::rwx
default:group:contractors:rwx
default:mask::rwx
default:other::--[manager1@serverb cases]$ exit
logout
4.4. Cambie al usuario contractor1 y realice las siguientes operaciones. Compruebe que
obtenga el comportamiento de acceso esperado.
[student@serverb ~]$ su - contractor1
Password: redhat
[contractor1@serverb ~]$ cd /shares/cases
[contractor1@serverb cases]$ echo hello > manager1.txt
[contractor1@serverb cases]$ cat shortlist.txt
###Shortlist of Clients to call###TEMPLATE###
[contractor1@serverb cases]$ mkdir contractor1.dir
[contractor1@serverb cases]$ echo hello > contractor1.dir/test.txt
[contractor1@serverb cases]$ ls -ld contractor1.dir
drwxrws---+ 2 contractor1 managers 22 Mar 29 01:05 contractor1.dir
[contractor1@serverb cases]$ ls -l contractor1.dir
total 4
-rw-rw----+ 1 contractor1 managers 6 Mar 29 01:07 test.txt
[manager1@serverb cases]$ getfacl contractor1.dir
# file: contractor1.dir/
# owner: contractor1
# group: managers
# flags: -suser::rwx
user:contractor3:r-x
group::rwx
group:contractors:rwx
mask::rwx
other::--default:user::rwx
default:user:contractor3:r-x
default:group::rwx
default:group:contractors:rwx
default:mask::rwx
default:other::--[contractor1@serverb cases]$ exit
logout
118
RH134-RHEL8.2-es-1-20200928
capítulo 4 | Control de acceso a archivos con ACL
4.5.
Cambie al usuario contractor3 y realice las siguientes operaciones. Compruebe que
obtenga el comportamiento de acceso esperado.
[student@serverb ~]# su - contractor3
Password: redhat
[contractor3@serverb ~]# cd /shares/cases
[contractor3@serverb cases]# echo hello > contractor3.txt
-bash: contractor3.txt: Permission denied
[contractor3@serverb cases]# cat shortlist.txt
###Shortlist of Clients to call###TEMPLATE###
[contractor3@serverb cases]# mkdir contractor3.dir
mkdir: cannot create directory ‘contractor3.dir’: Permission denied
[contractor3@serverb cases]# cat manager1.dir/test.txt
hello
[contractor3@serverb cases]# cat contractor1.dir/test.txt
hello
[contractor3@serverb cases]# exit
logout
[student@serverb ~]#
4.6. Cierre sesión en serverb
[student@serverb ~]# exit
logout
Connection to serverb closed.
[student@workstation ~]$
nota
El conjunto de pruebas anteriores son algunas de las pruebas que podría realizar
para comprobar que los permisos de acceso sean correctos. Debe idear pruebas de
validación de acceso adecuadas para su entorno.
Evaluación
En workstation, ejecute el comando lab acl-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab acl-review grade
Finalizar
En workstation, ejecute el comando lab acl-review finish para terminar este ejercicio.
[student@workstation ~]$ lab acl-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
119
capítulo 4 | Control de acceso a archivos con ACL
Resumen
En este capítulo, aprendió lo siguiente:
• Las ACL proporcionan control de acceso detallado a archivos y directorios.
• Con el comando getfacl, se visualizan las ACL en un archivo o directorio.
• El comando setfacl establece, modifica y elimina las ACL predeterminadas y estándares de
los archivos y directorios.
• Use las ACL predeterminadas para controlar los permisos de archivos y directorios nuevos.
• Red Hat Enterprise Linux usa systemd y udev para aplicar ACL predefinidas en dispositivos,
carpetas y archivos.
120
RH134-RHEL8.2-es-1-20200928
capítulo 5
Administración de seguridad de
SELinux
Meta
Proteger y administrar la seguridad de un servidor
con SELinux.
Objetivos
•
Describir cómo SELinux protege los recursos y
cómo seleccionar el modo de cumplimiento.
•
Configurar el contexto de SELinux de un
archivo para controlar la interacción de los
procesos con ese archivo.
•
Configurar los booleanos de SELinux para
permitir cambios en la política de tiempo de
ejecución para diferentes necesidades de
acceso.
•
Investigar los mensajes de registro de SELinux
y solucionar los problemas de denegación de
AVC de SELinux.
•
Cambio del modo de cumplimiento de SELinux
(y ejercicio guiado)
•
Control de contextos de archivo de SELinux (y
ejercicio guiado)
•
Ajuste de la política de SELinux con booleanos
(y ejercicio guiado)
•
Investigación y resolución de problemas de
SELinux (y ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Administración de seguridad de SELinux
121
capítulo 5 | Administración de seguridad de SELinux
Cambio del modo de cumplimiento de
SELinux
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Explicar la manera en que SELinux protege los recursos.
• Modificar el modo actual de SELinux de un sistema.
• Configurar el modo predeterminado de SELinux de un sistema
Protección de recursos de SELinux
SELinux es una característica de seguridad importante de Linux. El acceso a los archivos y otros
recursos se controla a un nivel muy granular. Los procesos solo tienen permitido el acceso a los
recursos especificados por su política, o bien SELinux parámetros booleanos.
Los permisos de archivo controlan qué usuarios o grupos de usuarios pueden acceder a qué
archivos específicos. Sin embargo, un usuario con acceso de lectura o escritura a cualquier archivo
específico puede usar ese archivo de cualquier manera que el usuario elija, incluso si ese uso no es
la forma en que se debe usar el archivo.
Por ejemplo, con acceso de escritura a un archivo, ¿un archivo de datos estructurados, diseñado
para escribirse y usar un único programa, debería poder ser abierto y modificado por otros
editores que podrían resultar en daños?
Los permisos de archivo no pueden detener este acceso no deseado. No fueron diseñados para
controlar cómo se usa un archivo, sino solo quién tiene permiso para leer, escribir o ejecutar un
archivo.
SELinux consiste en conjuntos de políticas, definidas por los desarrolladores de la aplicación, que
declaran exactamente qué acciones y accesos son adecuados y permitidos para cada ejecutable
binario, archivo de configuración y archivo de datos usados por una aplicación. Esto se conoce
como política dirigida porque se escribe una política para cubrir las actividades de una sola
aplicación. Las políticas declaran etiquetas predefinidas que se colocan en programas, archivos y
puertos de red individuales.
¿Por qué usar Security Enhanced Linux?
No todos los problemas de seguridad se pueden predecir de antemano. SELinux aplica un
conjunto de reglas de acceso que impiden que una debilidad en una aplicación afecte a otras
aplicaciones o al sistema subyacente. SELinux proporciona una capa adicional de seguridad;
también agrega una capa de complejidad que puede ser desalentadora para las personas
que recién empiezan a usar este subsistema. Aprender a trabajar con SELinux puede llevar
tiempo, pero la política de cumplimiento significa que una debilidad en una parte del sistema
no se extiende a otras partes. Si SELinux funciona mal con un subsistema en particular, puede
desactivar la aplicación para ese servicio específico hasta que encuentre una solución al problema
subyacente.
SELinux tiene tres modos:
122
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
• Enforcing (Cumplimiento): SELinux hace cumplir las reglas de control de acceso. Las
computadoras generalmente se ejecutan en este modo.
• Permissive (Permisivo): SELinux está activo, pero en lugar de aplicar las reglas de control de
acceso, registra advertencias de reglas que se han infringido. Este modo se usa principalmente
para pruebas y solución de problemas.
• Disabled (Deshabilitado): SELinux está desactivado por completo; no se niegan las infracciones
de SELinux, ni siquiera se registran. No se recomienda usarlo.
Conceptos básicos de seguridad de SELinux
Security Enhanced Linux (SELinux) es una capa adicional de seguridad del sistema. El objetivo
principal de SELinux es proteger los datos del usuario de los servicios del sistema que han sido
comprometidos. La mayoría de los administradores de Linux están familiarizados con el modelo
de seguridad de permisos de usuario/grupo/otro. Este es un modelo basado en usuarios y
grupos conocido como control de acceso discrecional. SELinux proporciona un nivel adicional de
seguridad que está basado en objetos y controlado por reglas más sofisticadas, conocido como
control de acceso obligatorio.
Para permitir el acceso anónimo remoto a un servidor web, se deben abrir los puertos de firewall.
Sin embargo, esta acción otorga a las personas malintencionadas la oportunidad de comprometer
el sistema mediante una vulnerabilidad. Si logran comprometer el proceso del servidor web,
obtienen sus permisos. En concreto, los permisos del usuario apache y del grupo apache. Ese
usuario y grupo tiene acceso de lectura a la raíz del documento, /var/www/html. También tiene
acceso a /tmp y /var/tmp, y cualquier otro archivo y directorio que se pueda escribir en todo el
mundo.
SELinux es un conjunto de reglas de seguridad que determina qué proceso puede acceder a qué
archivos, directorios y puertos. Los archivos, procesos, directorios y puertos tienen etiquetas de
seguridad especiales denominadas contextos de SELinux. Un contexto es un nombre que usa la
política de SELinux para determinar si un proceso puede o no acceder a un archivo, directorio o
puerto. De forma predeterminada, la política no permite ninguna interacción, a menos que una
regla explícita otorgue acceso. Si no hay ninguna regla de permiso, no se permite ningún tipo de
acceso.
Las etiquetas de SELinux tienen varios contextos: user (usuario), role (rol), type (tipo) y
sensitivity (sensibilidad). La política de destino, que es la política predeterminada habilitada
en Red Hat Enterprise Linux, basa sus reglas en el tercer contexto: el contexto de tipo. Por lo
general, los nombres de contexto de tipo finalizan en _t.
Figura 5.1: Contexto de archivo de SELinux
El contexto de tipo para un servidor web es httpd_t. El contexto de tipo para los archivos y los
directorios que generalmente se encuentran en /var/www/html es httpd_sys_content_t. El
contexto para los archivos y directorios que normalmente se encuentran en /tmp y /var/tmp es
tmp_t. El contexto de tipo para los puertos del servidor web es http_port_t.
Apache tiene un contexto de tipo de httpd_t. Hay una regla de política que permite que Apache
acceda a archivos y directorios con el contexto de tipo httpd_sys_content_t. De manera
predeterminada, los archivos encontrados en /var/www/html y otros directorios del servidor
RH134-RHEL8.2-es-1-20200928
123
capítulo 5 | Administración de seguridad de SELinux
web tienen el contexto de tipo httpd_sys_content_t. No hay una regla allow (permitir) en la
política para los archivos que normalmente se encuentran en /tmp y /var/tmp, de modo que no
se permite el acceso. Con SELinux habilitado, un usuario malintencionado que haya comprometido
el proceso del servidor web no podría acceder al directorio /tmp.
El servidor MariaDB tiene un contexto de tipo de mysqld_t. De manera predeterminada, los
archivos encontrados en /data/mysql tienen el contexto de tipo de mysqld_db_t. Este tipo
de contexto permite que MariaDB acceda a esos archivos, pero deshabilita el acceso de otros
servicios, como el servicio web de Apache.
Figura 5.2: Acceso de SELinux
Muchos comandos que tienen que ver con archivos usan la opción -Z para mostrar o configurar
contextos de SELinux. Por ejemplo, ps, ls, cp y mkdir usan la opción -Z para mostrar o
configurar contextos de SELinux.
[root@host ~]# ps axZ
LABEL
PID TTY
STAT
TIME COMMAND
system_u:system_r:init_t:s0
1 ?
Ss
0:09 /usr/lib/systemd/...
system_u:system_r:kernel_t:s0
2 ?
S
0:00 [kthreadd]
system_u:system_r:kernel_t:s0
3 ?
S
0:00 [ksoftirqd/0]
...output omitted...
[root@host ~]# systemctl start httpd
[root@host ~]# ps -ZC httpd
LABEL
PID TTY
TIME CMD
system_u:system_r:httpd_t:s0
1608 ?
00:00:05 httpd
system_u:system_r:httpd_t:s0
1609 ?
00:00:00 httpd
...output omitted...
[root@host ~]# ls -Z /home
drwx------. root
root
system_u:object_r:lost_found_t:s0 lost+found
drwx------. student student unconfined_u:object_r:user_home_dir_t:s0 student
drwx------. visitor visitor unconfined_u:object_r:user_home_dir_t:s0 visitor
[root@host ~]# ls -Z /var/www
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
Cambio del modo actual de SELinux
El subsistema de SELinux proporciona herramientas para mostrar y cambiar los modos. Para
determinar el modo actual de SELinux, ejecute el comando getenforce. Para configurar SELinux
en un modo diferente, use el comando setenforce:
124
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
[user@host ~]# getenforce
Enforcing
[user@host ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
[user@host ~]# setenforce 0
[user@host ~]# getenforce
Permissive
[user@host ~]# setenforce Enforcing
[user@host ~]# getenforce
Enforcing
Alternativamente, puede establecer el modo de SELinux en el momento del arranque pasando
un parámetro al kernel: el argumento del kernel de enforcing=0 arranca el sistema en modo
permisivo; un valor de enforcing=1 establece el modo de cumplimiento. También puede
desactivar SELinux completamente pasando el parámetro del kernel selinux=0. Un valor de
selinux=1 habilita SELinux.
Configuración del modo predeterminado de SELinux
También puede configurar SELinux de manera persistente con el archivo /etc/selinux/
config. En el siguiente ejemplo (la configuración predeterminada), el archivo de configuración
establece SELinux en enforcing. Los comentarios también muestran los otros valores válidos:
permissive y disabled.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#
enforcing - SELinux security policy is enforced.
#
permissive - SELinux prints warnings instead of enforcing.
#
disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#
targeted - Targeted processes are protected,
#
minimum - Modification of targeted policy. Only selected processes
#
are protected.
#
mls - Multi Level Security protection.
SELINUXTYPE=targeted
El sistema lee este archivo en el momento del arranque y configura SELinux como se muestra. Lo
argumentos del kernel (selinux=0|1 y enforcing=0|1) anulan esta configuración.
Referencias
Páginas del manual: getenforce(8), setenforce(8) y selinux_config(5)
RH134-RHEL8.2-es-1-20200928
125
capítulo 5 | Administración de seguridad de SELinux
Ejercicio Guiado
Cambio del modo de cumplimiento de
SELinux
En este trabajo de laboratorio, administrará modos de SELinux, tanto de forma temporal
como de forma persistente.
Resultados
Debería ser capaz de ver y configurar el modo de SELinux actual.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab selinux-opsmode start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
[student@workstation ~]$ lab selinux-opsmode start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Cambie el modo predeterminado de SELinux a permisivo y reinicie.
3.1.
Use el comando getenforce para verificar que servera está en modo enforcing.
[root@servera ~]# getenforce
Enforcing
3.2.
Use el comando vim para abrir el archivo de configuración /etc/selinux/config.
Cambie el parámetro SELINUX de enforcing a permissive.
[root@servera ~]# vim /etc/selinux/config
126
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
3.3.
Use el comando grep para confirmar que el parámetro SELINUX se establece en
permissive.
[root@servera ~]# grep '^SELINUX' /etc/selinux/config
SELINUX=permissive
SELINUXTYPE=targeted
3.4.
Use el comando systemctl reboot para reiniciar servera.
[root@servera ~]# systemctl reboot
Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$
4. servera tarda unos minutos en reiniciarse. Después de unos minutos, inicie sesión en
servera como el usuario student. Use el comando sudo -i para convertirse en root.
Visualice el modo de SELinux actual con el comando getenforce.
4.1.
En workstation, use el comando ssh para iniciar sesión en servera con el usuario
student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
4.2.
Use el comando sudo -i para convertirse en root.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
4.3. Visualice el modo de SELinux actual con el comando getenforce.
[root@servera ~]# getenforce
Permissive
5.
En el archivo /etc/selinux/config, cambie el modo predeterminado de SELinux a
enforcing. Este cambio solo tendrá efecto en el siguiente reinicio.
5.1.
Use el comando vim para abrir el archivo de configuración /etc/selinux/config.
Vuelva a cambiar SELINUX a enforcing.
[root@servera ~]# vim /etc/selinux/config
5.2.
Use el comando grep para confirmar que el parámetro SELINUX se establece en
enforcing.
[root@servera ~]# grep '^SELINUX' /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted
RH134-RHEL8.2-es-1-20200928
127
capítulo 5 | Administración de seguridad de SELinux
6. Use el comando setenforce para configurar el modo de SELinux actual en enforcing
sin reiniciar. Confirme que el modo se ha configurado en enforcing con el comando
getenforce.
[root@servera ~]# setenforce 1
[root@servera ~]# getenforce
Enforcing
7.
Salga de servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab selinux-opsmode finish para terminar este
ejercicio.
[student@workstation ~]$ lab selinux-opsmode finish
Esto concluye el ejercicio guiado.
128
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
Control de contextos de archivo de
SELinux
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Administrar las reglas de políticas de SELinux que determinan el contexto predeterminado para
archivos y directorios con el comando semanage fcontext.
• Aplicar el contexto definido por la política de SELinux a archivos y directorios con el comando
restorecon.
Contexto inicial de SELinux
En los sistemas que ejecutan SELinux, todos los procesos y archivos están etiquetados. La
etiqueta representa la información relevante de seguridad, conocida como el contexto de SELinux.
En general, los nuevos archivos heredan su contexto de SELinux del directorio principal,
garantizando así que tengan el contexto adecuado.
Sin embargo, este procedimiento de herencia puede verse comprometido de dos maneras
diferentes. Primero, si crea un archivo en una ubicación diferente de la ubicación final y, luego,
mueve el archivo, este aún tiene el contexto de SELinux del directorio donde se creó, no del
directorio de destino. Segundo, si copia un archivo conservando el contexto de SELinux, como con
el comando cp -a, el contexto de SELinux refleja la ubicación del archivo original.
En el siguiente ejemplo, se demuestran la herencia y sus escollos. Considere estos dos archivos
creados en /tmp, uno se movió a /var/www/html y el segundo se copió al mismo directorio.
Tenga en cuenta los contextos de SELinux de los archivos. El archivo que se movió al directorio /
var/www/html conserva el contexto de archivo para el directorio /tmp. El archivo que se copió al
directorio /var/www/html heredó el contexto de SELinux del directorio /var/www/html.
El comando ls -Z muestra el contexto de SELinux de un archivo. Tenga en cuenta la etiqueta del
archivo.
[root@host ~]# ls -Z /var/www/html/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
index.html
El comando ls -Zd muestra el contexto de SELinux de un directorio:
[root@host ~]# ls -Zd /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Tenga en cuenta que el /var/www/html/index.html tiene la misma etiqueta que el directorio
principal /var/www/html/. Ahora, cree archivos fuera del directorio /var/www/html y observe
su contexto de archivo:
RH134-RHEL8.2-es-1-20200928
129
capítulo 5 | Administración de seguridad de SELinux
[root@host ~]# touch /tmp/file1 /tmp/file2
[root@host ~]# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1
unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
Mueva uno de estos archivos al directorio /var/www/html, copie otro, y observe la etiqueta de
cada uno:
[root@host ~]# mv /tmp/file1 /var/www/html/
[root@host ~]# cp /tmp/file2 /var/www/html/
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
El archivo movido mantiene su etiqueta original, mientras que el archivo copiado hereda la
etiqueta del directorio /var/www/html. unconfined_u: es el usuario, object_r: denota el rol
y s0 es el nivel. Un nivel de sensibilidad de 0 es el nivel de sensibilidad más bajo posible.
Cambio del contexto de SELinux de un archivo
Los comandos para cambiar el contexto de SELinux de los archivos incluyen semanage
fcontext, restorecon y chcon.
El método preferido para establecer el contexto de SELinux para un archivo es declarar el
etiquetado predeterminado para un archivo con el comando semanage fcontext y, luego,
aplicar ese contexto al archivo con el comando restorecon. Esto asegura que el etiquetado sea
el deseado incluso después de haber etiquetado de nuevo todo el sistema de archivos.
El comando chcon cambia los contextos de SELinux. chcon establece el contexto de seguridad
en el archivo, almacenado en el sistema de archivos. Es útil para pruebas y experimentos. Sin
embargo, no guarda los cambios de contexto en la base de datos de contexto de SELinux. Cuando
se ejecuta un comando restorecon, los cambios realizados por el comando chcon tampoco se
guardan. Además, si se vuelve a etiquetar todo el sistema de archivos, se revierte el contexto de
SELinux para los archivos modificados con chcon.
En la siguiente pantalla, se muestra un directorio que se está creando. El directorio tiene un valor
de tipo de default_t.
[root@host ~]# mkdir /virtual
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual
El comando chcon cambia el contexto de archivo del directorio /virtual: el valor de tipo cambia
a httpd_sys_content_t.
[root@host ~]# chcon -t httpd_sys_content_t /virtual
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /virtual
El comando restorecon se ejecuta y el valor de tipo vuelve al valor de default_t. Observe el
mensaje Relabeled (reetiquetado).
130
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
[root@host ~]# restorecon -v /virtual
Relabeled /virtual from unconfined_u:object_r:httpd_sys_content_t:s0 to
unconfined_u:object_r:default_t:s0
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual
Definición de las reglas de contextos de archivos
predeterminados de SELinux
El comando semanage fcontext muestra o modifica las reglas que usa restorecon para
configurar los contextos de archivos predeterminados. Usa expresiones regulares ampliadas
para especificar los nombres de archivo y las rutas de acceso. La expresión regular ampliada más
frecuente usada en las reglas fcontext es (/.*)?, que significa “como opción, coincidir con un /
seguido por una serie de caracteres”. Busca coincidencias con el directorio detallado antes de la
expresión y todo lo que contiene ese directorio de forma recursiva.
Operaciones básicas de contexto de archivo
La siguiente tabla es una referencia para las opciones semanage fcontext para agregar,
eliminar o enumerar contextos de archivos de SELinux.
Comandos de semanage fcontext
opción
descripción
-a, --add
Agregar un registro del tipo de objeto especificado
-d, --delete
Eliminar un registro del tipo de objeto especificado
-l, --list
Mostrar registros del tipo de objeto especificado
Para asegurarse de tener las herramientas para administrar los contextos de SELinux, instale el
paquete policycoreutils y el paquete policycoreutils-python si es necesario. Estos
contienen el comando restorecon y el comando semanage, respectivamente.
Para asegurarse de que todos los archivos de un directorio tengan el contexto de archivo correcto,
ejecute el comando semanage fcontext -l seguido por el comando restorecon. En el
siguiente ejemplo, observe el contexto de archivo de cada archivo antes y después de que se
ejecuten los comandos semanage y restorecon.
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
[root@host ~]# semanage fcontext -l
...output omitted...
/var/www(/.*)?
all files
system_u:object_r:httpd_sys_content_t:s0
...output omitted...
RH134-RHEL8.2-es-1-20200928
131
capítulo 5 | Administración de seguridad de SELinux
[root@host; ~]# restorecon -Rv /var/www/
Relabeled /var/www/html/file1 from unconfined_u:object_r:user_tmp_t:s0 to
unconfined_u:object_r:httpd_sys_content_t:s0
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2
En el siguiente ejemplo, se muestra cómo usar semanage para agregar un contexto para un
directorio nuevo.
[root@host ~]# mkdir /virtual
[root@host ~]# touch /virtual/index.html
[root@host ~]# ls -Zd /virtual/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /virtual/
[root@host ~]# ls -Z /virtual/
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
[root@host ~]# semanage fcontext -a -t httpd_sys_content_t '/virtual(/.*)?'
[root@host ~]# restorecon -RFvv /virtual
[root@host ~]# ls -Zd /virtual/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /virtual/
[root@host ~]# ls -Z /virtual/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
Referencias
Páginas del manual: chcon(1), restorecon(8), semanage(8) y semanagefcontext(8)
132
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
Ejercicio Guiado
Control de contextos de archivo de
SELinux
En este trabajo de laboratorio, realizará un cambio persistente en el contexto de SELinux de
un directorio y su contenido.
Resultados
Debe poder configurar el servidor HTTP Apache para publicar contenido web desde una raíz
de documento no estándar.
Andes De Comenzar
Inicie sesión con el usuario student en workstation con la contraseña student.
En workstation, ejecute el comando lab selinux-filecontexts start. Este
comando ejecuta un script de inicio que determina si la máquina servera es accesible en
la red. También instala el servicio httpd y configura el firewall en servera para permitir
conexiones http.
[student@workstation ~]$ lab selinux-filecontexts start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Configure Apache para usar una root de documento en una ubicación no estándar.
3.1.
Cree la nueva root del documento, /custom, con el comando mkdir.
[root@servera ~]# mkdir /custom
3.2.
Cree el archivo index.html en la raíz del documento /custom con el comando
echo.
RH134-RHEL8.2-es-1-20200928
133
capítulo 5 | Administración de seguridad de SELinux
[root@servera ~]# echo 'This is SERVERA.' > /custom/index.html
3.3.
Configure Apache para que use la nueva ubicación de la raíz del documento.
Para hacerlo, edite el archivo de configuración de Apache /etc/httpd/conf/
httpd.conf y reemplace las dos apariciones de /var/www/html con /custom.
...output omitted...
DocumentRoot "/custom"
...output omitted...
<Directory "/custom">
...output omitted...
4. Inicie y habilite el servicio web Apache y confirme que el servicio se está ejecutando.
4.1.
Inicie y habilite el servicio web Apache con el comando systemctl.
[root@servera ~]# systemctl enable --now httpd
4.2.
Use el comando systemctl para confirmar que el servicio se está ejecutando.
[root@servera ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset:
disabled)
Active: active (running) since Mon 2019-03-25 19:16:48 CET; 15h ago
Docs: man:httpd.service(8)
Main PID: 6565 (httpd)
Status: "Total requests: 16; Idle/Busy workers 100/0;Requests/sec: 0.000285;
Bytes served/sec:
0 B/sec"
Tasks: 213 (limit: 11406)
Memory: 37.3M
CGroup: /system.slice/httpd.service
├─6565 /usr/sbin/httpd -DFOREGROUND
├─6566 /usr/sbin/httpd -DFOREGROUND
├─6567 /usr/sbin/httpd -DFOREGROUND
├─6568 /usr/sbin/httpd -DFOREGROUND
└─6569 /usr/sbin/httpd -DFOREGROUND
Mar 25 19:16:48 servera.lab.example.com systemd[1]: Starting The Apache HTTP
Server...
Mar 25 19:16:48 servera.lab.example.com httpd[6565]: Server configured, listening
on: port 80
Mar 25 19:16:48 servera.lab.example.com systemd[1]: Started The Apache HTTP
Server.
5.
Abra un navegador web en workstation e intente ver http://servera/index.html.
Recibirá un mensaje de error que dice que no tiene permiso para acceder al archivo.
6. Para permitir el acceso al archivo index.html en servera, SELinux debe estar
configurado. Defina una regla de contextos de archivos de SELinux que establezca el tipo
134
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
de contexto en httpd_sys_content_t para el directorio /custom y todos los archivos
debajo de este.
[root@servera ~]# semanage fcontext -a \
-t httpd_sys_content_t '/custom(/.*)?'
7.
Use el comando restorecon para cambiar los contextos de archivos.
[root@servera ~]# restorecon -Rv /custom
Relabeled /custom from unconfined_u:object_r:default_t:s0 to
unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /custom/index.html from unconfined_u:object_r:default_t:s0 to
unconfined_u:object_r:httpd_sys_content_t:s0
8. Intente ver http://servera/index.html nuevamente. Debería ver el mensaje This
is SERVERA. (Este es SERVERA).
9. Salga de servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab selinux-filecontexts finish para terminar este
ejercicio.
[student@workstation ~]$ lab selinux-filecontexts finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
135
capítulo 5 | Administración de seguridad de SELinux
Ajuste de la política de SELinux con
booleanos
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Activar y desactivar las reglas de políticas de SELinux con setsebool.
• Administrar el valor persistente de los booleanos SELinux con el comando semanage boolean
-l.
• Consultar las páginas del manual que finalizan con _selinux para encontrar información útil
sobre los booleanos de SELinux.
Booleanos de SELinux
Los booleanos de SELinux son opciones que modifican el comportamiento de la política de
SELinux. Los booleanos de SELinux son reglas que pueden habilitarse o deshabilitarse. Los
administradores de seguridad pueden usarlos para realizar ajustes selectivos en la política.
Las páginas del manual de SELinux, provistas con el paquete selinux-policy-doc, describen el
propósito de los booleanos disponibles. El comando man -k '_selinux' enumera estas
páginas del manual.
Los comandos útiles para la gestión de booleanos de SELinux incluyen getsebool, que enumera
los booleanos y su estado, y setsebool, que modifica los booleanos. setsebool -P modifica la
política de SELinux para hacer la modificación persistente. semanage boolean -l informa si un
booleano es persistente o no, junto con una breve descripción del booleano.
Los usuarios no privilegiados pueden ejecutar el comando getsebool, pero solo los
superusuarios pueden ejecutar semanage boolean -l y setsebool -P.
[user@host ~]$ getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
antivirus_use_jit --> off
...output omitted...
[user@host ~]$ getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[user@host ~]$ setsebool httpd_enable_homedirs on
Could not change active booleans. Please try as root: Permission denied
[user@host ~]$ sudo setsebool httpd_enable_homedirs on
[user@host ~]$ sudo semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs
(on
, off) Allow httpd to enable homedirs
[user@host ~]$ getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
136
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
La opción -P escribe todos los valores pendientes en la política, haciéndolos persistentes en los
reinicios. En el ejemplo que sigue, tenga en cuenta los valores entre paréntesis: ambos ahora están
configurados en on (activado).
[user@host ~]$ setsebool -P httpd_enable_homedirs on
[user@host ~]$ sudo semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs
(on
,
on) Allow httpd to enable homedirs
Para enumerar los valores booleanos en los que el estado actual difiere del estado
predeterminado, ejecute semanage boolean -l -C.
[user@host ~]$ sudo semanage boolean -l -C
SELinux boolean
State Default Description
cron_can_relabel
(off
,
on)
Allow cron to can relabel
Referencias
Páginas del manual: booleans(8), getsebool(8), setsebool(8), semanage(8),
semanage-boolean(8)
RH134-RHEL8.2-es-1-20200928
137
capítulo 5 | Administración de seguridad de SELinux
Ejercicio Guiado
Ajuste de la política de SELinux con
booleanos
Apache puede publicar contenido web alojado en los directorios de inicio de los usuarios,
pero SELinux lo impide de forma predeterminada. En este ejercicio, identificará y cambiará
el booleano de SELinux que permite a Apache acceder a los directorios de inicio de los
usuarios.
Resultados
Debe poder configurar Apache para publicar contenido web desde los directorios de inicio
de los usuarios.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab selinux-booleans start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la
red. También instala el servicio httpd y configura el firewall en servera para permitir
conexiones http.
[student@workstation ~]$ lab selinux-booleans start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
138
Para habilitar la función Apache que permite que los usuarios publiquen contenido web
desde sus directorios de inicio, debe editar el archivo de configuración /etc/httpd/
conf.d/userdir.conf. Comente la línea que establece UserDir en disabled
(desactivado) y quite el comentario de la línea que establece UserDir en public_html.
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
[root@servera ~]# vim /etc/httpd/conf.d/userdir.conf
#UserDir disabled
UserDir public_html
4. Use el comando grep para confirmar los cambios.
[root@servera ~]# grep '#UserDir' /etc/httpd/conf.d/userdir.conf
#UserDir disabled
[root@servera ~]# grep '^ *UserDir' /etc/httpd/conf.d/userdir.conf
UserDir public_html
5.
Inicie y habilite el servicio web Apache para que tengan efecto los cambios realizados.
[root@servera ~]# systemctl enable --now httpd
6. En otra ventana de terminal inicie sesión como student. SSH en servera. Cree algo de
contenido web que sea publicado desde un directorio de inicio de los usuarios.
6.1.
En otra ventana de terminal inicie sesión como student. Use el comando ssh para
iniciar sesión en servera como el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
6.2.
Use el comando mkdir para crear un directorio denominado ~/public_html.
[student@servera ~]$ mkdir ~/public_html
6.3.
Cree el archivo index.html con el siguiente contenido:
[student@servera ~]$ echo 'This is student content on SERVERA.' > \
~/public_html/index.html
6.4. Use el comando chmod para cambiar los permisos en el directorio de inicio de
student de modo que Apache pueda acceder al subdirectorio public_html.
[student@servera ~]$ chmod 711 ~
7.
Abra un navegador web en workstation e intente ver la siguiente URL: http://
servera/~student/index.html. Recibe un mensaje de error que dice que no tiene
permiso para acceder al archivo.
8. En la ventana de terminal con acceso root, use el comando getsebool para ver si hay
booleanos que restrinjan el acceso a los directorios de inicio.
RH134-RHEL8.2-es-1-20200928
139
capítulo 5 | Administración de seguridad de SELinux
[root@servera ~]# getsebool -a | grep home
...output omitted...
httpd_enable_homedirs --> off
...output omitted...
9. En la ventana de terminal con acceso root, use el comando setsebool para habilitar el
acceso al directorio de inicio de forma persistente.
[root@servera ~]# setsebool -P httpd_enable_homedirs on
10. Intente ver http://servera/~student/index.html nuevamente. Debe ver el
mensaje: This is student content on SERVERA. (Este es contenido de student en
SERVERA).
11. Salga de servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab selinux-booleans finish para terminar este
ejercicio.
[student@workstation ~]$ lab selinux-booleans finish
Esto concluye el ejercicio guiado.
140
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
Investigación y resolución de problemas
de SELinux
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Usar las herramientas de análisis de registros de SELinux.
• Visualizar información útil durante la resolución de problemas de SELinux con el comando
sealert.
Solución de problemas de SELinux
Es importante comprender qué acciones debe tomar cuando SELinux impide el acceso a
los archivos en un servidor que debe ser accesible. Use los siguientes pasos como guía para
solucionar estos problemas:
1.
Antes de pensar en hacer ajustes, considere que SELinux puede estar haciendo este trabajo
correctamente al prohibir el intento de acceso. Si un servidor web intenta acceder a archivos
en /home, esto podría indicar un riesgo para el servicio si el contenido web no es publicado
por usuarios. Si el acceso debería haberse otorgado, es necesario realizar pasos adicionales
para solucionar el problema.
2.
El problema más frecuente de SELinux es un contexto de archivos incorrecto. Esto puede
ocurrir cuando un archivo se crea en una ubicación con un contexto de archivos y se traslada a
una ubicación donde se espera un contexto diferente. En la mayoría de los casos, la ejecución
de restorecon corregirá el problema. Corregir los problemas de este modo tiene poco
impacto en la seguridad del resto del sistema.
3.
Otra solución para un acceso demasiado restrictivo podría ser el ajuste de un booleano. Por
ejemplo, el booleano ftpd_anon_write controla si usuarios del FTP anónimos pueden
cargar archivos. Debe activar este booleano para permitir que los usuarios anónimos de FTP
carguen archivos en un servidor. El ajuste de booleanos requiere más cuidado porque estos
pueden tener un amplio impacto en la seguridad del sistema.
4.
Es posible que la política de SELinux tenga un error que impida un acceso legítimo. Debido a
que SELinux se ha consolidado, es poco común que esto ocurra. Cuando está claro que se ha
identificado un error en la política, comuníquese con el soporte de Red Hat para informar el
error de modo que se pueda resolver.
Monitoreo de las violaciones de SELinux
Instale el paquete setroubleshoot-server para enviar mensajes de SELinux a /var/log/
messages. setroubleshoot-server escucha mensajes de auditoría en /var/log/
audit/audit.log y envía un breve resumen a /var/log/messages. Este resumen incluye
identificadores únicos (UUID) para violaciones de SELinux que se pueden usar para reunir más
información. El comando sealert -l UUID se usa para generar un informe para un incidente
específico. Use sealert -a /var/log/audit/audit.log para generar informes para todos
los incidentes en ese archivo.
Considere el siguiente ejemplo de secuencia de comandos en un servidor web Apache estándar:
RH134-RHEL8.2-es-1-20200928
141
capítulo 5 | Administración de seguridad de SELinux
[root@host ~]# touch /root/file3
[root@host ~]# mv /root/file3 /var/www/html
[root@host ~]# systemctl start httpd
[root@host ~]# curl http://localhost/file3
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /file3
on this server.</p>
</body></html>
Se espera que el servidor web envíe el contenido de file3, pero en cambio, devuelve un error de
permission denied (Permiso denegado). Si se inspeccionan /var/log/audit/audit.log y
/var/log/messages, se puede obtener más información sobre este error.
[root@host ~]# tail /var/log/audit/audit.log
...output omitted...
type=AVC msg=audit(1392944135.482:429): avc: denied { getattr } for
pid=1609 comm="httpd" path="/var/www/html/file3" dev="vda1" ino=8980981
scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
...output omitted...
[root@host ~]# tail /var/log/messages
...output omitted...
Feb 20 19:55:42 host setroubleshoot: SELinux is preventing /usr/sbin/httpd
from getattr access on the file . For complete SELinux messages. run
sealert -l 613ca624-248d-48a2-a7d9-d28f5bbe2763
Ambos archivos de registro indican que el motivo del error es una denegación de SELinux.
El comando sealert que es parte de la salida de /var/log/messages proporciona más
información, que incluye una posible corrección.
[root@host ~]# sealert -l 613ca624-248d-48a2-a7d9-d28f5bbe2763
SELinux is preventing /usr/sbin/httpd from getattr access on the file .
*****
Plugin catchall (100. confidence) suggests
**************************
If you believe that httpd should be allowed getattr access on the
file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
Additional Information:
Source Context
Target Context
Target Objects
142
system_u:system_r:httpd_t:s0
unconfined_u:object_r:admin_home_t:s0
[ file ]
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
Source
Source Path
Port
Host
Source RPM Packages
Target RPM Packages
Policy RPM
Selinux Enabled
Policy Type
Enforcing Mode
Host Name
Platform
Alert Count
First Seen
Last Seen
Local ID
httpd
/usr/sbin/httpd
<Unknown>
servera
httpd-2.4.6-14.el7.x86_64
selinux-policy-3.12.1-124.el7.noarch
True
targeted
Enforcing
servera
Linux servera 3.10.0-84.el7.x86_64 #1
SMP Tue Feb 4 16:28:19 EST 2014 x86_64 x86_64
2
2014-02-20 19:55:35 EST
2014-02-20 19:55:35 EST
613ca624-248d-48a2-a7d9-d28f5bbe2763
Raw Audit Messages
type=AVC msg=audit(1392944135.482:429): avc: denied { getattr } for
pid=1609 comm="httpd" path="/var/www/html/file3" dev="vda1" ino=8980981
scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
type=SYSCALL msg=audit(1392944135.482:429): arch=x86_64 syscall=lstat
success=no exit=EACCES a0=7f9fed0edea8 a1=7fff7bffc770 a2=7fff7bffc770
a3=0 items=0 ppid=1608 pid=1609 auid=4294967295 uid=48 gid=48 euid=48
suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295
comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
Hash: httpd,httpd_t,admin_home_t,file,getattr
nota
La sección Raw Audit Messages (Mensajes de auditoría sin formato) revela el
archivo de destino que presenta el problema, /var/www/html/file3. Además,
el contexto objetivo, tcontext, no parece pertenecer a un servidor web. Use el
comando restorecon /var/www/html/file3 para corregir el contexto de
archivos. Si deben ajustarse otros archivos, restorecon puede restablecer de
forma recursiva el contexto: restorecon -R /var/www/.
La sección Raw Audit Messages (Mensajes de auditoría en bruto) del comando sealert
contiene información de /var/log/audit.log. Para buscar el archivo /var/log/audit.log,
use el comando ausearch. La opción -m busca en el tipo de mensaje. La opción -ts busca en
función del tiempo.
RH134-RHEL8.2-es-1-20200928
143
capítulo 5 | Administración de seguridad de SELinux
[root@host ~]# ausearch -m AVC -ts recent
---time->Tue Apr 9 13:13:07 2019
type=PROCTITLE msg=audit(1554808387.778:4002):
proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=SYSCALL msg=audit(1554808387.778:4002): arch=c000003e syscall=49
success=no exit=-13 a0=3 a1=55620b8c9280 a2=10 a3=7ffed967661c items=0
ppid=1 pid=9340 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0
sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd"
subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1554808387.778:4002): avc: denied { name_bind }
for pid=9340 comm="httpd" src=82 scontext=system_u:system_r:httpd_t:s0
tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0
Consola web
Si la Consola web está instalada, también se puede usar para solucionar problemas de SELinux.
Inicie sesión en la Consola Web y seleccione SELinux en el menú de la izquierda. La ventana
SELinux Policy (Política de SELinux) le informa del estado de cumplimiento actual. Cualquier
problema se detalla en la sección SELinux Access Control Errors (Errores de control de acceso
de SELinux).
Figura 5.3: Política de SELinux en la consola web
Haga clic en el carácter > para mostrar los detalles del error. Haga clic en solution details
(detalles de la solución) para mostrar todos los detalles y la posible solución.
Figura 5.4: Solución de política de SELinux en la consola web
Una vez resuelto el problema, la sección SELinux Access Control Errors ya no debería mostrar
el error. Si aparece el mensaje No SELinux alerts (No hay alertas de SELinux), se han
corregido todos los problemas.
144
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
Figura 5.5: No hay alertas de SELinux en la consola web
Referencias
Página del manual: sealert(8)
RH134-RHEL8.2-es-1-20200928
145
capítulo 5 | Administración de seguridad de SELinux
Ejercicio Guiado
Investigación y resolución de problemas
de SELinux
En este trabajo de laboratorio, aprenderá cómo solucionar problemas de denegaciones por
seguridad de SELinux.
Resultados
Podrá obtener algo de experiencia en el uso de herramientas de solución de problemas de
SELinux.
Andes De Comenzar
Inicie sesión con el usuario student en workstation con la contraseña student.
En workstation, ejecute el comando lab selinux-issues start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
Instala el servicio httpd, configura el firewall en servera para permitir conexiones HTTP y
elimina el contexto de SELinux del directorio /custom.
[student@workstation ~]$ lab selinux-issues start
1.
Abra un navegador web en workstation e intente ver http://servera/index.html.
Recibirá un mensaje de error que dice que no tiene permiso para acceder al archivo.
2.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
3.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
4. Con el comando less, vea el contenido de /var/log/messages. Use la tecla / para
buscar sealert. Copie el comando sugerido sealert para que pueda usarse en el
siguiente paso. Use la tecla q para salir del comando less.
146
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
[root@servera ~]# less /var/log/messages
...output omitted...
Mar 28 06:07:03 servera setroubleshoot[15326]: SELinux is preventing /usr/sbin/
httpd from getattr access on the file /custom/index.html. For complete SELinux
messages run: sealert -l b1c9cc8f-a953-4625-b79b-82c4f4f1fee3
Mar 28 06:07:03 servera platform-python[15326]: SELinux is preventing /usr/sbin/
httpd from getattr access on the file /custom/index.html.#012#012***** Plugin
catchall (100. confidence) suggests
**************************#012#012If
you believe that httpd should be allowed getattr access on the index.html file
by default.#012Then you should report this as a bug.#012You can generate a
local policy module to allow this access.#012Do#012allow this access for now by
executing:#012# ausearch -c 'httpd' --raw | audit2allow -M my-httpd#012# semodule
-X 300 -i my-httpd.pp#012
Mar 28 06:07:04 servera setroubleshoot[15326]: failed to retrieve rpm info for /
custom/index.html
...output omitted...
5.
Ejecute el comando sugerido sealert. Tenga en cuenta el contexto de origen, los objetos
de destino, la política y el modo de cumplimiento.
[root@servera ~]# sealert -l b1c9cc8f-a953-4625-b79b-82c4f4f1fee3
SELinux is preventing /usr/sbin/httpd from getattr access on the file /custom/
index.html.
*****
Plugin catchall (100. confidence) suggests
**************************
If you believe that httpd should be allowed getattr access on the index.html file
by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'httpd' --raw | audit2allow -M my-httpd
# semodule -X 300 -i my-httpd.pp
Additional Information:
Source Context
Target Context
Target Objects
Source
Source Path
Port
Host
Source RPM Packages
Target RPM Packages
Policy RPM
Selinux Enabled
Policy Type
Enforcing Mode
Host Name
Platform
RH134-RHEL8.2-es-1-20200928
system_u:system_r:httpd_t:s0
unconfined_u:object_r:default_t:s0
/custom/index.html [ file ]
httpd
/usr/sbin/httpd
<Unknown>
servera.lab.example.com
selinux-policy-3.14.1-59.el8.noarch
True
targeted
Enforcing
servera.lab.example.com
Linux servera.lab.example.com
4.18.0-67.el8.x86_64 #1 SMP Sat Feb 9 12:44:00
147
capítulo 5 | Administración de seguridad de SELinux
Alert Count
First Seen
Last Seen
Local ID
UTC 2019 x86_64 x86_64
18
2019-03-25 19:25:28 CET
2019-03-28 11:07:00 CET
b1c9cc8f-a953-4625-b79b-82c4f4f1fee3
Raw Audit Messages
type=AVC msg=audit(1553767620.970:16958): avc: denied { getattr } for
pid=15067 comm="httpd" path="/custom/index.html" dev="vda1" ino=4208311
scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0
tclass=file permissive=0
Hash: httpd,httpd_t,default_t,file,getattr
6. La sección Raw Audit Messages (Mensajes de auditoría en bruto) del comando
sealert contiene información de /var/log/audit/audit.log. Use el comando
ausearch para buscar el archivo /var/log/audit/audit.log. La opción -m busca en
el tipo de mensaje. La opción -ts busca en función del tiempo. Esta entrada identifica el
proceso relevante y el archivo que causa la alerta. El proceso es el servidor web Apache
httpd, el archivo es /custom/index.html y el contexto es system_r:httpd_t.
[root@servera ~]# ausearch -m AVC -ts recent
---time->Thu Mar 28 13:39:30 2019
type=PROCTITLE msg=audit(1553776770.651:17000):
proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=SYSCALL msg=audit(1553776770.651:17000): arch=c000003e syscall=257
success=no exit=-13 a0=ffffff9c a1=7f8db803f598 a2=80000 a3=0 items=0 ppid=15063
pid=15065 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48
sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd"
subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1553776770.651:17000): avc: denied
{ open } for pid=15065 comm="httpd" path="/custom/index.html"
dev="vda1" ino=4208311 scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=0
7.
Para resolver el problema, use los comandos semanage y restorecon. El contexto que se
debe administrar es httpd_sys_content_t .
[root@servera ~]# semanage fcontext -a \
-t httpd_sys_content_t '/custom(/.*)?'
[root@servera ~]# restorecon -Rv /custom
Relabeled /custom from unconfined_u:object_r:default_t:s0 to
unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /custom/index.html from unconfined_u:object_r:default_t:s0 to
unconfined_u:object_r:httpd_sys_content_t:s0
8. Intente ver http://servera/index.html nuevamente. Debería ver el mensaje This
is SERVERA. (Este es SERVERA).
148
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
9. Salga de servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab selinux-issues finish para terminar este ejercicio.
[student@workstation ~]$ lab selinux-issues finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
149
capítulo 5 | Administración de seguridad de SELinux
Trabajo de laboratorio
Administración de seguridad de SELinux
Lista de verificación de rendimiento
En este trabajo de laboratorio, solucionará un problema de denegación de acceso de
SELinux. Los administradores de sistemas tienen problemas para obtener un nuevo servidor
web para proporcionar contenido a clientes cuando SELinux está en modo de cumplimiento.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Identificar problemas en los archivos de registro del sistema.
• Ajustar la configuración de SELinux.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab selinux-review start. Este comando
ejecuta un script de inicio que determina si la máquina serverb es accesible en la red.
También instala el servidor httpd Apache, crea un nuevo DocumentRoot para Apache y
actualiza el archivo de configuración.
[student@workstation ~]$ lab selinux-review start
1.
Inicie sesión en serverb como el usuario root.
2.
Inicie un navegador web en workstation y diríjase a http://serverb/lab.html. Verá el
mensaje de error: You do not have permission to access /lab.html on this
server (No tiene permiso para acceder a /lab.html en este servidor).
3.
Investigue e identifique el problema de SELinux que impide que Apache proporcione el
contenido web.
4.
Muestre el contexto de SELinux de la nueva raíz de documentos HTTP y la raíz de
documentos HTTP original. Resuelva el problema de SELinux que impide que Apache
proporcione el contenido web.
5.
Verifique que el problema de SELinux se haya resuelto y que Apache pueda proporcionar
contenido web.
6.
Salga de serverb.
Evaluación
En workstation, ejecute el script lab selinux-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab selinux-review grade
150
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
Finalizar
En workstation, ejecute el script lab selinux-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab selinux-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
151
capítulo 5 | Administración de seguridad de SELinux
Solución
Administración de seguridad de SELinux
Lista de verificación de rendimiento
En este trabajo de laboratorio, solucionará un problema de denegación de acceso de
SELinux. Los administradores de sistemas tienen problemas para obtener un nuevo servidor
web para proporcionar contenido a clientes cuando SELinux está en modo de cumplimiento.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Identificar problemas en los archivos de registro del sistema.
• Ajustar la configuración de SELinux.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab selinux-review start. Este comando
ejecuta un script de inicio que determina si la máquina serverb es accesible en la red.
También instala el servidor httpd Apache, crea un nuevo DocumentRoot para Apache y
actualiza el archivo de configuración.
[student@workstation ~]$ lab selinux-review start
Inicie sesión en serverb como el usuario root.
1.
1.1.
Use el comando ssh para iniciar sesión en serverb como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que
no se necesita una contraseña.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
2.
152
Inicie un navegador web en workstation y diríjase a http://serverb/lab.html. Verá el
mensaje de error: You do not have permission to access /lab.html on this
server (No tiene permiso para acceder a /lab.html en este servidor).
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
3.
Investigue e identifique el problema de SELinux que impide que Apache proporcione el
contenido web.
3.1.
Con el comando less, vea el contenido de /var/log/messages. Use la tecla / para
buscar sealert. Use la tecla q para salir del comando less.
[root@serverb ~]# less /var/log/messages
Mar 28 10:19:51 serverb setroubleshoot[27387]: SELinux is preventing /usr/sbin/
httpd from getattr access on the file /lab-content/lab.html. For complete SELinux
messages run: sealert -l 8824e73d-3ab0-4caf-8258-86e8792fee2d
Mar 28 10:19:51 serverb platform-python[27387]: SELinux is preventing /usr/sbin/
httpd from getattr access on the file /lab-content/lab.html.#012#012***** Plugin
catchall (100. confidence) suggests
**************************#012#012If
you believe that httpd should be allowed getattr access on the lab.html file
by default.#012Then you should report this as a bug.#012You can generate a
local policy module to allow this access.#012Do#012allow this access for now by
executing:#012# ausearch -c 'httpd' --raw | audit2allow -M my-httpd#012# semodule
-X 300 -i my-httpd.pp#012
3.2.
Ejecute el comando sugerido sealert. Tenga en cuenta el contexto de origen, los
objetos de destino, la política y el modo de cumplimiento.
[root@serverb ~]# sealert -l 8824e73d-3ab0-4caf-8258-86e8792fee2d
SELinux is preventing /usr/sbin/httpd from getattr access on the file /labcontent/lab.html.
*****
Plugin catchall (100. confidence) suggests
**************************
If you believe that httpd should be allowed getattr access on the lab.html file by
default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'httpd' --raw | audit2allow -M my-httpd
# semodule -X 300 -i my-httpd.pp
Additional Information:
Source Context
Target Context
Target Objects
Source
Source Path
Port
Host
Source RPM Packages
Target RPM Packages
Policy RPM
Selinux Enabled
Policy Type
Enforcing Mode
Host Name
Platform
RH134-RHEL8.2-es-1-20200928
system_u:system_r:httpd_t:s0
unconfined_u:object_r:default_t:s0
/lab-content/lab.html [ file ]
httpd
/usr/sbin/httpd
<Unknown>
serverb.lab.example.com
selinux-policy-3.14.1-59.el8.noarch
True
targeted
Enforcing
serverb.lab.example.com
Linux serverb.lab.example.com
153
capítulo 5 | Administración de seguridad de SELinux
Alert Count
First Seen
Last Seen
Local ID
4.18.0-67.el8.x86_64 #1 SMP Sat Feb 9 12:44:00
UTC 2019 x86_64 x86_64
2
2019-03-28 15:19:46 CET
2019-03-28 15:19:46 CET
8824e73d-3ab0-4caf-8258-86e8792fee2d
Raw Audit Messages
type=AVC msg=audit(1553782786.213:864): avc: denied { getattr } for
pid=15606 comm="httpd" path="/lab-content/lab.html" dev="vda1" ino=8763212
scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0
tclass=file permissive=0
Hash: httpd,httpd_t,default_t,file,getattr
3.3.
La sección Raw Audit Messages (Mensajes de auditoría en bruto) del comando
sealert contiene información de /var/log/audit/audit.log. Use el comando
ausearch para buscar el archivo /var/log/audit/audit.log. La opción -m
busca en el tipo de mensaje. La opción ts busca en función del tiempo. Esta entrada
identifica el proceso relevante y el archivo que causa la alerta. El proceso es el servidor
web Apache httpd, el archivo es /lab-content/lab.html y el contexto es
system_r:httpd_t.
[root@serverb ~]# ausearch -m AVC -ts recent
time->Thu Mar 28 15:19:46 2019
type=PROCTITLE msg=audit(1553782786.213:864):
proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=SYSCALL msg=audit(1553782786.213:864): arch=c000003e syscall=6 success=no
exit=-13 a0=7fb900004930 a1=7fb92dfca8e0 a2=7fb92dfca8e0 a3=1 items=0 ppid=15491
pid=15606 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48
sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd"
subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1553782786.213:864): avc: denied { getattr } for
pid=15606 comm="httpd" path="/lab-content/lab.html" dev="vda1" ino=8763212
scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0
tclass=file permissive=0
4.
Muestre el contexto de SELinux de la nueva raíz de documentos HTTP y la raíz de
documentos HTTP original. Resuelva el problema de SELinux que impide que Apache
proporcione el contenido web.
4.1.
Use ls-dZ para comparar la raíz del documento de /lab-content y /var/www/
html.
[root@serverb ~]# ls -dZ /lab-content /var/www/html
unconfined_u:object_r:default_t:s0 /lab-content/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
4.2.
154
Cree una regla de contextos de archivos que establezca el tipo predeterminado en
httpd_sys_content_ para /lab-content y todos los archivos debajo de este.
RH134-RHEL8.2-es-1-20200928
capítulo 5 | Administración de seguridad de SELinux
[root@serverb ~]# semanage fcontext -a \
-t httpd_sys_content_t '/lab-content(/.*)?'
4.3. Use el comando restorecon para establecer el contexto de SELinux para los archivos
en /lab-content.
[root@serverb ~]# restorecon -R /lab-content/
5.
Verifique que el problema de SELinux se haya resuelto y que Apache pueda proporcionar
contenido web.
Use su navegador web para actualizar el enlace http://serverb/lab.html. Ahora
debería ver algo de contenido web.
This is the html file for the SELinux final lab on SERVERB.
6.
Salga de serverb.
[root@serverb ~]# exit
logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
Evaluación
En workstation, ejecute el script lab selinux-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab selinux-review grade
Finalizar
En workstation, ejecute el script lab selinux-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab selinux-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
155
capítulo 5 | Administración de seguridad de SELinux
Resumen
En este capítulo, aprendió lo siguiente:
• Los comandos getenforce y setenforce se usan para administrar el modo de SELinux de un
sistema.
• El comando semanage se usa para administrar las reglas de políticas de SELinux. El comando
restorecon aplica el contexto definido por la política.
• Los booleanos son opciones que modifican el comportamiento de la política de SELinux. Se
pueden habilitar o deshabilitar, y se usan para ajustar la política.
• El comando sealert muestra información útil que ayuda con la solución de problemas de
SELinux.
156
RH134-RHEL8.2-es-1-20200928
capítulo 6
Administración de
almacenamiento básico
Meta
Crear y administrar dispositivos de
almacenamiento, particiones, sistemas de archivos
y espacios de intercambio desde la línea de
comandos.
Objetivos
•
Crear particiones de almacenamiento,
formatearlas con sistemas de archivos y
montarlas para su uso.
•
Crear y administrar espacios de intercambio
para complementar la memoria física.
•
Adición de particiones, sistemas de archivos y
montajes persistentes (y ejercicio guiado)
•
Administración de espacio de intercambio (y
ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Administración de almacenamiento básico
157
capítulo 6 | Administración de almacenamiento básico
Adición de particiones, sistemas de
archivos y montajes persistentes
Objetivos
Tras completar esta sección, debería ser capaz de crear particiones de almacenamiento,
formatearlas con sistemas de archivos y montarlas para su uso.
Partición de un disco
La partición de discos permite a los administradores de sistemas dividir un disco duro en varias
unidades de almacenamiento lógico denominadas particiones. Al separar un disco en particiones,
los administradores de sistemas pueden usar diferentes particiones para realizar diferentes
funciones.
Por ejemplo, la partición de discos es necesaria o beneficiosa en las siguientes situaciones:
• Limitar espacio disponible para aplicaciones o usuarios.
• Separar archivos de programa y de sistemas operativos de archivos de usuarios.
• Crear un área separada para el intercambio de memoria.
• Limitar el uso de espacio en disco para mejorar el rendimiento de herramientas de diagnóstico e
imágenes de copia de seguridad.
Esquema de partición MBR
Desde 1982, el esquema de particiones Master Boot Record (MBR) ha indicado cómo los discos se
deben particionar en sistemas que ejecutan firmware de BIOS. Este esquema admite un máximo
de cuatro particiones primarias. En sistemas Linux, con el uso de particiones ampliadas y lógicas,
los administradores pueden crear un máximo de 15 unidades. Dado que los datos del tamaño de
la partición se almacenan como valores de 32 bits, los discos particionados con el esquema MBR
tienen un tamaño de disco y partición máximo de 2 TiB.
Figura 6.1: Particiones MBR del dispositivo de almacenamiento /dev/vdb
Dado que los discos físicos son cada vez más grandes, y volúmenes basados en SAN aún más
grandes, el límite de tamaño de la partición y del disco de 2 TiB del esquema de partición MBR
ya no es un límite teórico, sino más bien un problema del mundo real que los administradores
de sistemas encuentran cada vez más frecuentemente en los entornos de producción. Como
consecuencia, el esquema MBR heredado está en proceso de ser sustituido por el nuevo esquema
GUID Partition Table (GPT) para la partición de disco.
158
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Esquema de partición GPT
Para sistemas que ejecutan firmware Unified Extensible Firmware Interface (UEFI), GPT es el
estándar para el diseño de tablas de partición en discos duros físicos. GPT es parte del estándar
UEFI y aborda muchas de las limitaciones que impone el antiguo esquema basado en MBR.
Un GPT proporciona un máximo de 128 particiones. A diferencia de MBR, que usa 32 bits para
almacenar información de tamaño y direcciones en bloques lógicos, un GPT asigna 64 bits para
direcciones en bloques lógicos. Esto permite que GPT incluya particiones y discos de hasta ocho
zebibyte (ZiB), u 8 mil millones de tebibytes.
Además de abordar las limitaciones del esquema de partición MBR, GPT también ofrece algunas
funciones y beneficios adicionales. Un GPT usa un identificador único global (GUID) para
identificar cada disco y partición. En contraste con MBR, que tiene un único punto de error,
GPT ofrece redundancia de la información de su tabla de particiones. El GPT primario reside
en el cabezal del disco, mientras que una copia de seguridad, el GPT secundario, se aloja en el
extremo del disco. GPT usa la suma de comprobación para detectar errores y daños en la tabla de
particiones y el encabezado de GPT.
Figura 6.2: Particiones GPT del dispositivo de almacenamiento /dev/vdb
Administración de particiones con parted
Los editores de particiones son programas que permiten a los administradores hacer cambios en
particiones de discos, como crear particiones, eliminar particiones y cambiar el tipo de partición.
Para realizar estas operaciones, los administradores pueden usar el editor de particiones Parted
tanto para el esquema de partición GPT como MBR.
El comando parted toma el nombre del dispositivo de todo el disco como primer argumento y
uno o más subcomandos. En el siguiente ejemplo, se usa el subcomando print para visualizar la
tabla de particiones en el disco /dev/vda.
[root@host ~]# parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number
1
2
Start
1049kB
10.7GB
End
10.7GB
53.7GB
Size
10.7GB
42.9GB
Type
primary
primary
File system
xfs
xfs
Flags
boot
Si no proporciona un subcomando, parted abre una sesión interactiva para emitir comandos.
[root@host ~]# parted /dev/vda
GNU Parted 3.2
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
RH134-RHEL8.2-es-1-20200928
159
capítulo 6 | Administración de almacenamiento básico
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number
1
2
Start
1049kB
10.7GB
End
10.7GB
53.7GB
Size
10.7GB
42.9GB
Type
primary
primary
File system
xfs
xfs
Flags
boot
(parted) quit
[root@host ~]#
De forma predeterminada, parted muestra todos los tamaños en potencias de 10 (KB, MB, GB).
Puede cambiar ese valor predeterminado con el subcomando unit que acepta los siguientes
parámetros:
• s para sector
• B para byte
• MiB, GiB o TiB (potencias de 2)
• MB, GB o TB (potencias de 10)
[root@host ~]# parted /dev/vda unit s print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 104857600s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number
1
2
Start
2048s
20971520s
End
20971486s
104857535s
Size
20969439s
83886016s
Type
primary
primary
File system
xfs
xfs
Flags
boot
Como se muestra en el ejemplo anterior, también puede especificar varios subcomandos (aquí,
unit y print) en la misma línea.
Escritura de la tabla de particiones en un disco nuevo
Para particionar una nueva unidad, primero debe escribir una etiqueta de disco. La etiqueta del
disco indica qué esquema de partición usar.
Advertencia
Tenga en cuenta que parted realiza los cambios de inmediato. Un error con
parted podría provocar la pérdida de datos.
Como el usuario root, use el siguiente comando para escribir una etiqueta de disco MBR en un
disco.
[root@host ~]# parted /dev/vdb mklabel msdos
160
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Para escribir una etiqueta de disco GPT, use el siguiente comando.
[root@host ~]# parted /dev/vdb mklabel gpt
Advertencia
El subcomando mklabel borra la tabla de particiones existente. Solo use mklabel
cuando la intención sea volver a usar el disco sin tener en cuenta los datos
existentes. Si una nueva etiqueta cambia los límites de la partición, todos los datos
en los sistemas de archivos existentes serán inaccesibles.
Creación de particiones de MBR
La creación de una partición de disco estilo MBR incluye varios pasos:
1.
Especifique el dispositivo de disco donde creará la partición.
Como usuario root, ejecute el comando parted y especifique el nombre del dispositivo de
disco como un argumento. Esto inicia el comando parted en modo interactivo, y muestra un
prompt de comando.
[root@host ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
2.
Use el subcomando mkpart para crear una nueva partición primaria o ampliada.
(parted) mkpart
Partition type?
primary/extended? primary
nota
En el caso de situaciones donde se necesitan más de cuatro particiones en un disco
particionado con MBR, cree tres particiones primarias y una partición ampliada. Esta
partición ampliada sirve como contenedor dentro del cual se pueden crear varias
particiones lógicas.
3.
Indique el tipo de sistema de archivos que desea crear en la partición, como xfs o ext4. Esto
no crea el sistema de archivos en la partición; es solo una indicación del tipo de partición.
File system type?
[ext2]? xfs
Para obtener la lista de los tipos de sistemas de archivos admitidos, use el siguiente comando:
[root@host ~]# parted /dev/vdb help mkpart
mkpart PART-TYPE [FS-TYPE] START END
make a partition
PART-TYPE is one of: primary, logical, extended
FS-TYPE is one of: btrfs, nilfs2, ext4, ext3, ext2, fat32, fat16, hfsx,
hfs+, hfs, jfs, swsusp, linux-swap(v1), linux-swap(v0), ntfs, reiserfs,
RH134-RHEL8.2-es-1-20200928
161
capítulo 6 | Administración de almacenamiento básico
hp-ufs, sun-ufs, xfs, apfs2, apfs1, asfs, amufs5, amufs4, amufs3,
amufs2, amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2,
affs1, affs0, linux-swap, linux-swap(new), linux-swap(old)
START and END are disk locations, such as 4GB or 10%. Negative values
count from the end of the disk. For example, -1s specifies exactly the
last sector.
'mkpart' makes a partition without creating a new file system on the
partition. FS-TYPE may be specified to set an appropriate partition
ID.
4.
Especifique el sector en el disco donde se iniciará la nueva partición.
Start? 2048s
Observe el sufijo s para proporcionar el valor en sectores. También puede usar los sufijos
MiB, GiB, TiB, MB, GB o TB. Si no proporciona un sufijo, MB es el predeterminado. parted
puede redondear el valor que proporcione para satisfacer las restricciones de disco.
Cuando parted comienza, recupera la topología del disco del dispositivo. Por ejemplo, el
tamaño del bloque físico del disco suele ser un parámetro que recopila parted. Con esa
información, parted asegura que la posición de inicio que proporcione alinea correctamente
la partición con la estructura del disco. La alineación correcta de la partición es importante
para un rendimiento óptimo. Si la posición de inicio genera una partición desalineada, parted
muestra una advertencia. Con la mayoría de los discos, un sector de inicio que es un múltiplo
de 2048 es una suposición segura.
5.
Especifique el sector del disco donde debería terminar la nueva partición.
End? 1000MB
Con parted, no puede proporcionar directamente el tamaño de su partición, pero puede
calcularlo rápidamente con la siguiente fórmula:
Size = End - Start
Tan pronto como usted proporcione la posición final, parted actualiza la tabla de particiones
en el disco con los detalles de la nueva partición.
Salga de parted.
6.
(parted) quit
Information: You may need to update /etc/fstab.
[root@host ~]#
Ejecute el comando udevadm settle. Este comando espera a que el sistema detecte la
nueva partición y cree el archivo de dispositivo asociado en el directorio /dev. Sólo regresa
cuando finaliza.
7.
[root@host ~]# udevadm settle
[root@host ~]#
162
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Como alternativa al modo interactivo, también puede crear la partición de la siguiente manera:
[root@host ~]# parted /dev/vdb mkpart primary xfs 2048s 1000MB
Creación de particiones GPT
El esquema GTP también usa el comando parted para crear nuevas particiones:
1.
Especifique el dispositivo de disco donde creará la partición.
Como el usuario root, ejecute el comando parted con el dispositivo de disco como único
argumento para iniciar parted en modo interactivo con un prompt del sistema.
[root@host ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
2.
Use el subcomando mkpart para comenzar a crear la nueva partición.
Con el esquema GPT, cada partición recibe un nombre.
(parted) mkpart
Partition name?
3.
[]? usersdata
Indique el tipo de sistema de archivos que desea crear en la partición, como xfs o ext4. Esto
no crea el sistema de archivos en la partición; es solo una indicación del tipo de partición.
File system type?
4.
[ext2]? xfs
Especifique el sector en el disco donde se iniciará la nueva partición.
Start? 2048s
5.
Especifique el sector del disco donde debería terminar la nueva partición.
End? 1000MB
Tan pronto como usted proporcione la posición final, parted actualiza la tabla de particiones
en el disco con los detalles de la nueva partición.
6.
Salga de parted.
(parted) quit
Information: You may need to update /etc/fstab.
[root@host ~]#
7.
Ejecute el comando udevadm settle. Este comando espera a que el sistema detecte la
nueva partición y cree el archivo de dispositivo asociado en el directorio /dev. Sólo regresa
cuando finaliza.
RH134-RHEL8.2-es-1-20200928
163
capítulo 6 | Administración de almacenamiento básico
[root@host ~]# udevadm settle
[root@host ~]#
Como alternativa al modo interactivo, también puede crear la partición de la siguiente manera:
[root@host ~]# parted /dev/vdb mkpart usersdata xfs 2048s 1000MB
Eliminación de particiones
Los siguientes pasos se aplican a los esquemas de partición MBR y GPT.
1.
Especifique el disco que contiene la partición que se eliminará.
Como el usuario root, ejecute el comando parted con el dispositivo de disco como único
argumento para iniciar parted en modo interactivo con un prompt del sistema.
[root@host ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
2.
Identifique el número de partición de la partición que se eliminará.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
3.
Start
1049kB
End
1000MB
Size
999MB
File system
xfs
Name
usersdata
Flags
Elimine la partición.
(parted) rm 1
El subcomando rm elimina inmediatamente la partición de la tabla de particiones en el disco.
Salga de parted.
4.
(parted) quit
Information: You may need to update /etc/fstab.
[root@host ~]#
Creación de sistemas de archivos
Después de la creación de un dispositivo de bloque, el siguiente paso es agregarle un sistema de
archivos. Red Hat Enterprise Linux admite muchos tipos de sistema de archivos diferentes, pero
164
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
dos tipos comunes son XFS y ext4. Anaconda, el instalador para Red Hat Enterprise Linux, usa
XFS de forma predeterminada.
Como el usuario root, use el comando mkfs.xfs para aplicar un sistema de archivos XFS a un
dispositivo de bloque. Para ext4, use mkfs.ext4 .
[root@host ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1
isize=512
=
sectsz=512
=
crc=1
=
reflink=1
data
=
bsize=4096
=
sunit=0
naming
=version 2
bsize=4096
log
=internal log
bsize=4096
=
sectsz=512
realtime =none
extsz=4096
agcount=4, agsize=60992 blks
attr=2, projid32bit=1
finobt=1, sparse=1, rmapbt=0
blocks=243968, imaxpct=25
swidth=0 blks
ascii-ci=0, ftype=1
blocks=1566, version=2
sunit=0 blks, lazy-count=1
blocks=0, rtextents=0
Montaje de sistemas de archivos
Después de haber agregado el sistema de archivos, el último paso es montar el sistema de
archivos en un directorio en la estructura de directorios. Cuando monta un sistema de archivos en
la jerarquía del directorio, las utilidades de espacio de usuarios pueden acceder o escribir archivos
en el dispositivo.
Montaje manual de sistemas de archivos
Los administradores usan el comando mount para conectar manualmente el dispositivo a una
ubicación de directorio o punto de montaje. El comando mount espera el dispositivo, el punto de
montaje y, opcionalmente, las opciones del sistema de archivos como argumentos. Las opciones
del sistema de archivos personalizan el comportamiento del sistema de archivos.
[root@host ~]# mount /dev/vdb1 /mnt
También puede usar el comando mount para ver los sistemas de archivos montados actualmente,
los puntos de montaje y las opciones.
[root@host ~]# mount | grep vdb1
/dev/vdb1 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
Montaje de forma persistente de sistemas de archivos
Montar manualmente un sistema de archivos es una buena manera de verificar que un dispositivo
formateado sea accesible y funcione de la manera esperada. Sin embargo, cuando el servidor
se reinicia, el sistema no vuelve a montar automáticamente el sistema de archivos en el árbol
de directorios; los datos están intactos en el sistema de archivos, pero los usuarios no pueden
acceder a ellos.
Para asegurarse de que el sistema monte automáticamente el sistema de archivos en el arranque
del sistema, agregue una entrada al archivo /etc/fstab. Este archivo de configuración enumera
los sistemas de archivos para montar en el arranque del sistema.
/etc/fstab es un archivo delimitado por espacios en blanco con seis campos por línea.
RH134-RHEL8.2-es-1-20200928
165
capítulo 6 | Administración de almacenamiento básico
[root@host ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Feb 13 16:39:59 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=a8063676-44dd-409a-b584-68be2c9f5570
/
xfs
defaults
0 0
UUID=7a20315d-ed8b-4e75-a5b6-24ff9e1f9838
/dbdata xfs
defaults
0 0
Cuando agregue o elimine una entrada en el archivo /etc/fstab, ejecute el comando
systemctl daemon-reload, o reinicie el servidor, para systemd para registrar la nueva
configuración.
[root@host ~]# systemctl daemon-reload
El primer campo especifica el dispositivo. En este ejemplo, se usa el UUID para especificar el
dispositivo. Los sistemas de archivos crean y almacenan el UUID en su superbloque en el momento
de la creación. O puede usar el archivo del dispositivo, como /dev/vdb1.
nota
Es preferible usar el UUID porque los identificadores del dispositivo de bloques
pueden cambiar en determinadas situaciones, como en el caso de que un proveedor
de la nube cambie la capa de almacenamiento subyacente de una máquina virtual,
o que los discos se detecten en un orden diferente con cada arranque del sistema.
El nombre del archivo del dispositivo de bloque puede cambiar, pero el UUID
permanece constante en el superbloque del sistema de archivos.
Use el comando lsblk --fs para escanear los dispositivos de bloque conectados
a una máquina y recuperar los UUID del sistema de archivos.
[root@host ~]# lsblk --fs
NAME
FSTYPE LABEL UUID
MOUNTPOINT
sr0
vda
└─vda1 xfs
a8063676-44dd-409a-b584-68be2c9f5570 /
vdb
└─vdb1 xfs
7a20315d-ed8b-4e75-a5b6-24ff9e1f9838 /dbdata
El segundo campo es el punto de montaje del directorio, desde el cual se podrá acceder al
dispositivo de bloque en la estructura del directorio. El punto de montaje debe existir; de lo
contrario, créelo con el comando mkdir.
El tercer campo contiene el tipo del sistema de archivos, como xfs o ext4.
166
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
El cuarto campo es la lista de opciones separada por comas para aplicar al dispositivo. defaults
es un conjunto de opciones que se usan comúnmente. La página del manual mount(8) documenta
las otras opciones disponibles.
El quinto campo es usado por el comando dump para hacer una copia de seguridad del dispositivo.
Otras aplicaciones de copia de seguridad no suelen usar este campo.
El último campo, el campo de orden de fsck, determina si debería ejecutarse el comando fsck en
el arranque del sistema para verificar que los sistemas de archivos estén limpios. El valor en este
campo indica el orden en el que debe ejecutarse fsck. Para sistemas de archivos XFS, establezca
este campo en 0 porque XFS no usa fsck para comprobar el estado de su sistema de archivos.
Para sistemas de archivos ext4, configúrelo en 1 para el sistema de archivos raíz y en 2 para los
otros sistemas de archivos ext4. De esta manera, fsck primero procesa el sistema de archivos raíz
y, luego, verifica los sistemas de archivos en discos separados al mismo tiempo, y los sistemas de
archivos en el mismo disco en secuencia.
nota
Si hay una entrada incorrecta en /etc/fstab, es posible que la máquina no pueda
volver a arrancarse. Los administradores deben comprobar que la entrada sea válida
al desmontar el sistema de archivos nuevo y usar mount /mountpoint, que lee /
etc/fstab, para montar el sistema de archivos nuevamente. Si el comando mount
arroja un error, corríjalo antes de volver a arrancar la máquina.
Como alternativa, puede usar el comando findmnt --verify para controlar el
archivo /etc/fstab.
Referencias
info parted( Manual de usuario de GNU Parted )
Páginas del manual parted(8), mkfs(8), mount(8), lsblk(8) y fstab(5)
Para obtener más información, consulte la guía Configuración y administración de
sistemas de archivos en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/configuring_and_managing_file_systems/
RH134-RHEL8.2-es-1-20200928
167
capítulo 6 | Administración de almacenamiento básico
Ejercicio Guiado
Adición de particiones, sistemas de
archivos y montajes persistentes
En este ejercicio, creará una partición en un nuevo dispositivo de almacenamiento, la
formateará con un sistema de archivos XFS, la configurará para que se monte en el arranque
y la montará para su uso.
Resultados
Debería ser capaz de usar parted , mkfs.xfs y otros comandos para crear una partición en
un disco nuevo, formatearla y montarla de manera persistente.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab storage-partitions start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
También prepara el segundo disco en servera para el ejercicio.
[student@workstation ~]$ lab storage-partitions start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. Si se le solicita, use student
como la contraseña.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Use parted para crear una nueva etiqueta de disco de tipo msdos en el disco /dev/vdb
para preparar ese nuevo disco para el esquema de partición MBR.
[root@servera ~]# parted /dev/vdb mklabel msdos
Information: You may need to update /etc/fstab.
168
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
4. Agregue una nueva partición primaria que tenga un tamaño de 1 GiB. Para una correcta
alineación, inicie la partición en el sector 2048. Establezca el tipo de sistema de archivo de
la partición en XFS.
4.1.
Use el modo interactivo parted para poder crear la partición.
[root@servera ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? xfs
Start? 2048s
End? 1001MB
(parted) quit
Information: You may need to update /etc/fstab.
Dado que la partición comienza en el sector 2048, el comando anterior establece la
posición final en 1001MB para obtener un tamaño de partición de 1000MB (1 GB).
Como alternativa, puede realizar la misma operación con el siguiente comando no
interactivo: parted /dev/vdb mkpart primary xfs 2048s 1001MB
4.2.
Verifique su trabajo enumerando las particiones en /dev/vdb.
[root@servera ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number
1
Start
1049kB
End
1001MB
Size
1000MB
Type
primary
File system
Flags
4.3. Ejecute el comando udevadm settle. Este comando espera a que el sistema
registre la nueva partición y regresa cuando finaliza.
[root@servera ~]# udevadm settle
5.
Formatee la nueva partición con el sistema de archivos XFS.
[root@servera ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1
isize=512
=
sectsz=512
=
crc=1
=
reflink=1
data
=
bsize=4096
=
sunit=0
naming
=version 2
bsize=4096
log
=internal log
bsize=4096
=
sectsz=512
realtime =none
extsz=4096
RH134-RHEL8.2-es-1-20200928
agcount=4, agsize=61056 blks
attr=2, projid32bit=1
finobt=1, sparse=1, rmapbt=0
blocks=244224, imaxpct=25
swidth=0 blks
ascii-ci=0, ftype=1
blocks=1566, version=2
sunit=0 blks, lazy-count=1
blocks=0, rtextents=0
169
capítulo 6 | Administración de almacenamiento básico
6. Configure el nuevo sistema de archivos para montarlo de forma persistente en /archive.
6.1.
Use mkdir para crear el punto de montaje del directorio /archive.
[root@servera ~]# mkdir /archive
6.2.
Use el comando lsblk con la opción --fs para descubrir el UUID del dispositivo /
dev/vdb1.
[root@servera ~]# lsblk --fs /dev/vdb
NAME
FSTYPE LABEL UUID
MOUNTPOINT
vdb
└─vdb1 xfs
e3db1abe-6d96-4faa-a213-b96a6f85dcc1
El UUID en la salida anterior es probablemente diferente en su sistema.
6.3.
Agregue una entrada a /etc/fstab. En el siguiente contenido, reemplace el UUID
con el que descubrió en el paso anterior.
...output omitted...
UUID=e3db1abe-6d96-4faa-a213-b96a6f85dcc1 /archive xfs defaults
0 0
6.4. Actualice systemd para que el sistema registre la configuración de /etc/fstab
nueva.
[root@servera ~]# systemctl daemon-reload
6.5.
Ejecute el comando mount /archive para montar el sistema de archivos nuevo
usando la nueva entrada agregada a /etc/fstab.
[root@servera ~]# mount /archive
6.6. Verifique que el sistema de archivos nuevo esté montado en /archive.
[root@servera ~]# mount | grep /archive
/dev/vdb1 on /archive type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
7.
Reinicie servera. Después de reiniciar el servidor, inicie sesión y verifique que /dev/vdb1
se monte en /archive. Cuando finalice, cierre sesión en servera.
7.1.
Reinicie servera.
[root@servera ~]# systemctl reboot
Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$
7.2.
170
Espere unos minutos a que se reinicie servera e inicie sesión como el usuario
student.
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
7.3.
Verifique que /dev/vdb1 esté montado en /archive.
[student@servera ~]$ mount | grep /archive
/dev/vdb1 on /archive type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
7.4.
Cierre sesión en servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab storage-partitions finish para terminar este
ejercicio.
[student@workstation ~]$ lab storage-partitions finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
171
capítulo 6 | Administración de almacenamiento básico
Administración de espacio de
intercambio
Objetivos
Tras completar esta sección, debería ser capaz de crear y administrar espacios de intercambio
para complementar la memoria física.
Introducción a los conceptos de espacio de
intercambio
Un espacio de intercambio es un área del disco bajo el control del subsistema de administración
de memoria del kernel Linux. El kernel usa espacio de intercambio para complementar la memoria
RAM del sistema al contener páginas inactivas de memoria. La combinación de la memoria RAM
del sistema más el espacio de intercambio se denomina memoria virtual.
Cuando el uso de la memoria en un sistema supera un límite definido, el kernel busca en la
memoria RAM páginas de memoria asignadas a los procesos, pero inactivas. El kernel escribe las
páginas inactivas en el área de intercambio y, luego, reasigna la página RAM a otros procesos. Si
el programa requiere acceso a una página en el disco, el kernel localiza otra página de memoria
inactiva, la escribe en el disco y, luego, vuelve a convocar la página necesaria desde el área de
intercambio.
Dado que las áreas de intercambio residen en el disco, el intercambio es lento cuando se lo
compara con la memoria RAM. Si bien se usa para aumentar la memoria RAM del sistema, no debe
considerar el espacio de intercambio como una solución sostenible para una RAM insuficiente para
su carga de trabajo.
Tamaño del espacio de intercambio
Los administradores deben establecer el tamaño del espacio de intercambio en función de la
carga de trabajo de memoria en el sistema. Los proveedores de aplicaciones a veces proporcionan
recomendaciones sobre ese tema. En la siguiente tabla, se proporcionan algunas instrucciones
basadas en la cantidad total de memoria física.
Recomendaciones de memoria RAM y espacio de intercambio
RAM
Espacio de intercambio
Espacio de intercambio si
se permite la hibernación
2 GiB o menos
Dos veces la memoria RAM
Tres veces la memoria RAM
Entre 2 GiB y 8 GiB
Igual que la memoria RAM
Dos veces la memoria RAM
Entre 8 GiB y 64 GiB
Al menos 4 GiB
1,5 veces la memoria RAM
Mas de 64 GiB
Al menos 4 GiB
No se recomienda la
hibernación.
La función de hibernación de los equipos portátiles y de escritorio usa el espacio de intercambio
para guardar el contenido de la memoria RAM antes de apagar el sistema. Cuando vuelve a
172
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
encender el sistema, el kernel restaura el contenido de la memoria RAM desde el espacio de
intercambio y no necesita un arranque completo. Para esos sistemas, el espacio de intercambio
debe ser mayor que la cantidad de memoria RAM.
El artículo de la base de conocimiento en la sección de referencia al final de esta sección brinda
más orientación sobre el tamaño del espacio de intercambio.
Creación de un espacio de intercambio
Para crear un espacio de intercambio, debe realizar lo siguiente:
• Cree una partición con un tipo de sistema de archivos de linux-swap.
• Coloque una firma de intercambio en el dispositivo.
Creación de una partición de intercambio
Use parted para crear una partición del tamaño deseado y establezca su tipo de sistema de
archivos en linux-swap. Anteriormente, las herramientas observaban el tipo de sistema de
archivos de la partición para determinar si el dispositivo debía activarse; no obstante, eso ya no
sucede. Si bien las utilidades ya no usan el tipo de sistema de archivos de la partición, establecer
ese tipo permite a los administradores determinar rápidamente el propósito de la partición.
En el siguiente ejemplo, se crea una partición de 256 MB.
[root@host ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
Start
1049kB
End
1001MB
Size
1000MB
File system
Name
data
Flags
(parted) mkpart
Partition name? []? swap1
File system type? [ext2]? linux-swap
Start? 1001MB
End? 1257MB
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
2
Start
1049kB
1001MB
End
1001MB
1257MB
Size
1000MB
256MB
File system
linux-swap(v1)
Name
data
swap1
Flags
(parted) quit
RH134-RHEL8.2-es-1-20200928
173
capítulo 6 | Administración de almacenamiento básico
Information: You may need to update /etc/fstab.
[root@host ~]#
Después de crear la partición, ejecute el comando udevadm settle. Este comando espera
que el sistema detecte la nueva partición y cree el archivo de dispositivo asociado en /dev. Sólo
regresa cuando finaliza.
[root@host ~]# udevadm settle
[root@host ~]#
Formateo del dispositivo
El comando mkswap aplica una firma de intercambio al dispositivo. A diferencia de otras utilidades
de formateo, mkswap escribe un único bloque de datos al inicio del dispositivo, dejando el resto
del dispositivo sin formatear de modo que el kernel pueda usarlo para almacenar páginas de
memoria.
[root@host ~]# mkswap /dev/vdb2
Setting up swapspace version 1, size = 244 MiB (255848448 bytes)
no label, UUID=39e2667a-9458-42fe-9665-c5c854605881
Activación de un espacio de intercambio
Puede usar el comando swapon para activar un espacio de intercambio formateado.
Use swapon con el dispositivo como parámetro, o use swapon -a para activar todos los espacios
de intercambio detallados en el archivo /etc/fstab. Use los comandos swapon --show y free
para inspeccionar los espacios de intercambio disponibles.
[root@host ~]# free
total
used
Mem:
1873036
134688
Swap:
0
0
[root@host ~]# swapon /dev/vdb2
[root@host ~]# free
total
used
Mem:
1873036
135044
Swap:
249852
0
free
1536436
0
shared
16748
buff/cache
201912
available
1576044
free
1536040
249852
shared
16748
buff/cache
201952
available
1575680
Puede desactivar un espacio de intercambio con el comando swapoff. Si el espacio de
intercambio tiene páginas escritas, swapoff intenta mover esas páginas a otros espacios de
intercambio activos o volver a la memoria. Si no puede escribir datos en otros lugares, el comando
swapoff falla, con un error, y el espacio de intercambio permanece activo.
Activación del espacio de intercambio de forma persistente
Para activar un espacio de intercambio en cada arranque, coloque una entrada en el archivo /
etc/fstab. En el siguiente ejemplo, se muestra una línea típica en /etc/fstab basada en el
espacio de intercambio creado anteriormente.
UUID=39e2667a-9458-42fe-9665-c5c854605881
174
swap
swap
defaults
0 0
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
El ejemplo anterior usa el UUID como el primer campo. Cuando formatea el dispositivo, el
comando mkswap muestra ese UUID. Si perdió la salida de mkswap, use el comando lsblk --fs.
Como alternativa, también puede usar el nombre del dispositivo en el primer campo.
El segundo campo se reserva típicamente para el punto de montaje. Sin embargo, para
dispositivos de intercambio, que no son accesibles a través de la estructura del directorio, este
campo toma el valor del marcador de posición swap. La página man fstab(5) usa un valor de
marcador de posición de none; sin embargo, el uso de un valor de swap permite mensajes de error
más informativos en el caso de que algo salga mal.
El tercer campo es el tipo de sistema de archivos. El tipo de sistemas de archivos para un espacio
de intercambio es swap.
El cuarto campo es para opciones. El ejemplo usa la opción defaults. La opción defaults
incluye la opción de montaje auto, que significa activar el espacio de intercambio
automáticamente en el arranque del sistema.
Los dos campos finales son el indicador dump y el orden fsck. Los espacios de intercambio no
requieren copias de seguridad ni revisión del sistema de archivos y por lo tanto, estos campos
deben establecerse en cero.
Cuando agregue o elimine una entrada en el archivo /etc/fstab, ejecute el comando
systemctl daemon-reload, o reinicie el servidor, para systemd para registrar la nueva
configuración.
[root@host ~]# systemctl daemon-reload
Configuración de la prioridad de espacio de intercambio
De forma predeterminada, el sistema usa espacios de intercambio en serie, lo que significa que el
kernel usa el primer espacio de intercambio activado hasta que esté lleno; luego, el kernel empieza
a usar el segundo espacio de intercambio. Sin embargo, puede definir una prioridad para cada
espacio de intercambio para forzar ese orden.
Para establecer la prioridad, use la opción pri en /etc/fstab. El kernel usa el espacio de
intercambio con la prioridad más alta primero. La prioridad predeterminada es -2.
En el siguiente ejemplo, se muestran tres espacios de intercambio definidos en /etc/fstab. El
kernel usa la última entrada primero, con pri=10. Cuando ese espacio está lleno, usa la segunda
entrada, con pri=4. Por último, usa la primera entrada, que tiene una prioridad predeterminada de
-2.
UUID=af30cbb0-3866-466a-825a-58889a49ef33
UUID=39e2667a-9458-42fe-9665-c5c854605881
UUID=fbd7fa60-b781-44a8-961b-37ac3ef572bf
swap
swap
swap
swap
swap
swap
defaults
pri=4
pri=10
0 0
0 0
0 0
Use swapon --show para visualizar las prioridades de espacio de intercambio.
Cuando los espacios de intercambio tienen la misma prioridad, el kernel los escribe con el método
Round-Robin.
RH134-RHEL8.2-es-1-20200928
175
capítulo 6 | Administración de almacenamiento básico
Referencias
Páginas del manual mkswap(8), swapon(8), swapoff(8), mount(8) y parted(8)
Base de conocimiento: ¿Cuál es el tamaño de intercambio (swap) recomendado
para las plataformas Red Hat?
https://access.redhat.com/solutions/15244
176
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Ejercicio Guiado
Administración de espacio de
intercambio
En este ejercicio, creará y formateará una partición para usar como espacio de intercambio,
la formateará como intercambio y la activará de forma persistente.
Resultados
Debería poder crear una partición y un espacio de intercambio en un disco con el esquema
de partición GPT.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab storage-swap start. Este comando ejecuta
un script de inicio que determina si la máquina servera es accesible en la red. También
prepara el segundo disco en servera para el ejercicio.
[student@workstation ~]$ lab storage-swap start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. Si se le solicita, use student
como la contraseña.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Use el comando parted para inspeccionar el disco /dev/vdb.
[root@servera ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
RH134-RHEL8.2-es-1-20200928
177
capítulo 6 | Administración de almacenamiento básico
Number
1
Start
1049kB
End
1001MB
Size
1000MB
File system
Name
data
Flags
Observe que el disco ya tiene una tabla de particiones y usa el esquema de partición GPT.
Además, ya existe una partición de 1 GB.
4. Agregue una nueva partición con un tamaño de 500 MB para usar como espacio de
intercambio. Establezca el tipo de partición en linux-swap.
4.1.
Use parted para crear la partición. Dado que el disco usa el esquema de partición
GPT, debe asignarle un nombre a la partición. Asígnele el nombre myswap.
[root@servera ~]# parted /dev/vdb mkpart myswap linux-swap \
1001MB 1501MB
Information: You may need to update /etc/fstab.
Observe en el comando anterior que la posición inicial, 1001 MB, es el final de la
primera partición existente. De esta manera parted se asegura de que la nueva
partición siga inmediatamente a la anterior, sin ninguna brecha.
Dado que la partición comienza en la posición 1001 MB, el comando establece la
posición final en 1501 MB para obtener un tamaño de partición de 500 MB.
4.2.
Verifique su trabajo enumerando las particiones en /dev/vdb.
[root@servera ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
2
Start
1049kB
1001MB
End
1001MB
1501MB
Size
1000MB
499MB
File system
Name
Flags
data
myswap swap
El tamaño de la nueva partición no es exactamente 500 MB. Esto es porque parted
tiene que alinear la partición con el diseño del disco.
4.3. Ejecute el comando udevadm settle. Este comando espera a que el sistema
registre la nueva partición y regresa cuando finaliza.
[root@servera ~]# udevadm settle
5.
Inicialice la partición creada recientemente como espacio de intercambio.
[root@servera ~]# mkswap /dev/vdb2
Setting up swapspace version 1, size = 476 MiB (499118080 bytes)
no label, UUID=cb7f71ca-ee82-430e-ad4b-7dda12632328
6. Habilite el espacio de intercambio creado recientemente.
6.1.
178
Use el comando swapon --show para mostrar que la creación e inicialización del
espacio de intercambio no lo habilita aún para su uso.
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
[root@servera ~]# swapon --show
6.2.
Habilite el espacio de intercambio creado recientemente.
[root@servera ~]# swapon /dev/vdb2
6.3.
Verifique que el espacio de intercambio creado recientemente ahora esté disponible.
[root@servera ~]# swapon --show
NAME
TYPE
SIZE USED PRIO
/dev/vdb2 partition 476M
0B
-2
6.4. Deshabilite el espacio de intercambio.
[root@servera ~]# swapoff /dev/vdb2
6.5.
Confirme que el espacio de intercambio está deshabilitado.
[root@servera ~]# swapon --show
7.
Configure el nuevo espacio de intercambio para que esté habilitado en el arranque del
sistema.
7.1.
Use el comando lsblk con la opción --fs para descubrir el UUID del dispositivo /
dev/vdb2.
[root@servera ~]# lsblk --fs /dev/vdb2
NAME FSTYPE LABEL UUID
MOUNTPOINT
vdb2 swap
cb7f71ca-ee82-430e-ad4b-7dda12632328
El UUID en la salida anterior es probablemente diferente en su sistema.
7.2.
Agregue una entrada a /etc/fstab. En el siguiente comando, reemplace el UUID
con el que descubrió en el paso anterior.
...output omitted...
UUID=cb7f71ca-ee82-430e-ad4b-7dda12632328
7.3.
swap
swap
defaults
0 0
Actualice systemd para que el sistema registre la configuración de /etc/fstab
nueva.
[root@servera ~]# systemctl daemon-reload
7.4.
Habilite el espacio de intercambio con la nueva entrada recién agregada a /etc/
fstab.
[root@servera ~]# swapon -a
7.5.
Verifique que el nuevo espacio de intercambio esté habilitado.
RH134-RHEL8.2-es-1-20200928
179
capítulo 6 | Administración de almacenamiento básico
[root@servera ~]# swapon --show
NAME
TYPE
SIZE USED PRIO
/dev/vdb2 partition 476M
0B
-2
8. Reinicie servera. Después de reiniciar el servidor, inicie sesión y verifique que el espacio
de intercambio esté habilitado. Cuando finalice, cierre sesión en servera.
8.1.
Reinicie servera.
[root@servera ~]# systemctl reboot
Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$
8.2.
Espere unos minutos a que se reinicie servera e inicie sesión como el usuario
student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
8.3.
Verifique que el espacio de intercambio esté habilitado.
[root@servera ~]# swapon --show
NAME
TYPE
SIZE USED PRIO
/dev/vdb2 partition 476M
0B
-2
8.4. Cierre sesión en servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab storage-swap finish para terminar este ejercicio.
[student@workstation ~]$ lab storage-swap finish
Esto concluye el ejercicio guiado.
180
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Trabajo de laboratorio
Administración de almacenamiento
básico
Lista de verificación de rendimiento
En este trabajo de laboratorio, creará varias particiones en un disco nuevo, formateará
algunas con sistemas de archivos y las montará, y activará otras como espacios de
intercambio.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Visualizar y crear particiones con el comando parted.
• Crear nuevos sistemas de archivos en particiones y montarlos de forma persistente.
• Crear espacios de intercambio y activarlos en el arranque.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab storage-review start. Este comando
ejecuta un script de inicio que determina si la máquina serverb es accesible en la red.
También prepara el segundo disco en serverb para el ejercicio.
[student@workstation ~]$ lab storage-review start
1.
Hay nuevos discos disponibles en serverb. En el primer disco nuevo, cree una partición
GPT de 2 GB denominada copia de seguridad. Dado que puede ser difícil establecer el
tamaño exacto, un tamaño entre 1,8 GB y 2,2 GB es aceptable. Establezca el tipo de sistema
de archivos correcto en esa partición para alojar un sistema de archivos XFS.
La contraseña para la cuenta de usuario student en serverb es student. Este usuario
tiene acceso completo root a través de sudo.
2.
Formatee la partición de 2 GB con un sistema de archivos XFS y móntelo de manera
persistente en /backup.
3.
En el mismo disco nuevo, cree dos particiones GPT de 512 MB denominadas swap1 y swap2.
Un tamaño entre 460 MB y 564 MB es aceptable. Establezca el tipo de sistema de archivos
correcto en esas particiones para alojar espacios de intercambio.
4.
Inicialice las dos particiones de 512 MiB como espacios de intercambio y configúrelas para
que se activen en el arranque. Establezca el espacio de intercambio en la partición swap2
para que se prefiera sobre el otro.
5.
Para verificar su trabajo, reinicie serverb. Confirme que el sistema monta automáticamente
la primera partición en /backup. Además, confirme que el sistema activa los dos espacios de
intercambio.
Cuando finalice, cierre sesión en serverb.
RH134-RHEL8.2-es-1-20200928
181
capítulo 6 | Administración de almacenamiento básico
Evaluación
En workstation, ejecute el script lab storage-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab storage-review grade
Finalizar
En workstation, ejecute el script lab storage-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab storage-review finish
Esto concluye el trabajo de laboratorio.
182
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Solución
Administración de almacenamiento
básico
Lista de verificación de rendimiento
En este trabajo de laboratorio, creará varias particiones en un disco nuevo, formateará
algunas con sistemas de archivos y las montará, y activará otras como espacios de
intercambio.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Visualizar y crear particiones con el comando parted.
• Crear nuevos sistemas de archivos en particiones y montarlos de forma persistente.
• Crear espacios de intercambio y activarlos en el arranque.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab storage-review start. Este comando
ejecuta un script de inicio que determina si la máquina serverb es accesible en la red.
También prepara el segundo disco en serverb para el ejercicio.
[student@workstation ~]$ lab storage-review start
1.
Hay nuevos discos disponibles en serverb. En el primer disco nuevo, cree una partición
GPT de 2 GB denominada copia de seguridad. Dado que puede ser difícil establecer el
tamaño exacto, un tamaño entre 1,8 GB y 2,2 GB es aceptable. Establezca el tipo de sistema
de archivos correcto en esa partición para alojar un sistema de archivos XFS.
La contraseña para la cuenta de usuario student en serverb es student. Este usuario
tiene acceso completo root a través de sudo.
1.1.
Use el comando ssh para iniciar sesión en serverb como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no
se necesita una contraseña.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
1.2.
Dado que crear particiones y sistemas de archivos requiere acceso root, use el
comando sudo -i para cambiar al usuario root. Si se le solicita, use student como
la contraseña.
RH134-RHEL8.2-es-1-20200928
183
capítulo 6 | Administración de almacenamiento básico
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
1.3.
Use el comando lsblk para identificar los nuevos discos. Esos discos no deberían
tener particiones todavía.
[root@serverb ~]# lsblk
NAME
MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0
11:0
1 1024M 0 rom
vda
252:0
0
10G 0 disk
└─vda1 252:1
0
10G 0 part /
vdb
252:16
0
5G 0 disk
vdc
252:32
0
5G 0 disk
vdd
252:48
0
5G 0 disk
Tenga en cuenta que el primer disco nuevo, vdb, no tiene particiones.
1.4.
Confirme que el disco no tiene etiqueta.
[root@serverb ~]# parted /dev/vdb print
Error: /dev/vdb: unrecognised disk label
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
1.5.
Use parted y el subcomando mklabel para definir el esquema de partición GPT.
[root@serverb ~]# parted /dev/vdb mklabel gpt
Information: You may need to update /etc/fstab.
1.6.
Cree la partición de 2 GB. Asígnele el nombre copia de seguridad y establezca su
tipo en xfs. Inicie la partición en el sector 2048.
[root@serverb ~]# parted /dev/vdb mkpart backup xfs 2048s 2GB
Information: You may need to update /etc/fstab.
1.7.
Confirme la correcta creación de la nueva partición.
[root@serverb ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
184
Start
1049kB
End
2000MB
Size
1999MB
File system
Name
backup
Flags
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
1.8.
Ejecute el comando udevadm settle. Este comando espera que el sistema detecte
la nueva partición y cree el archivo de dispositivo /dev/vdb1. Sólo regresa cuando
finaliza.
[root@serverb ~]# udevadm settle
[root@serverb ~]#
2.
Formatee la partición de 2 GB con un sistema de archivos XFS y móntelo de manera
persistente en /backup.
2.1.
Use el comandomkfs.xfs para formatear la partición /dev/vbd1.
[root@serverb ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1
isize=512
=
sectsz=512
=
crc=1
=
reflink=1
data
=
bsize=4096
=
sunit=0
naming
=version 2
bsize=4096
log
=internal log
bsize=4096
=
sectsz=512
realtime =none
extsz=4096
2.2.
agcount=4, agsize=121984 blks
attr=2, projid32bit=1
finobt=1, sparse=1, rmapbt=0
blocks=487936, imaxpct=25
swidth=0 blks
ascii-ci=0, ftype=1
blocks=2560, version=2
sunit=0 blks, lazy-count=1
blocks=0, rtextents=0
Cree el punto de montaje /backup.
[root@serverb ~]# mkdir /backup
[root@serverb ~]#
2.3.
Antes de agregar el nuevo sistema de archivos a /etc/fstab, recupere su UUID.
[root@serverb ~]# lsblk --fs /dev/vdb1
NAME FSTYPE LABEL UUID
MOUNTPOINT
vdb1 xfs
a3665c6b-4bfb-49b6-a528-74e268b058dd
El UUID en su sistema es probablemente diferente.
2.4.
Edite /etc/fstab y defina el nuevo sistema de archivos.
[root@serverb ~]# vim /etc/fstab
...output omitted...
UUID=a3665c6b-4bfb-49b6-a528-74e268b058dd
2.5.
/backup
xfs
defaults
0 0
Fuerce a systemd para que vuelva a leer el archivo /etc/fstab.
[root@serverb ~]# systemctl daemon-reload
[root@serverb ~]#
2.6.
Monte manualmente /backup para verificar su trabajo. Confirme que el montaje es
correcto.
RH134-RHEL8.2-es-1-20200928
185
capítulo 6 | Administración de almacenamiento básico
[root@serverb ~]# mount /backup
[root@serverb ~]# mount | grep /backup
/dev/vdb1 on /backup type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
En el mismo disco nuevo, cree dos particiones GPT de 512 MB denominadas swap1 y swap2.
Un tamaño entre 460 MB y 564 MB es aceptable. Establezca el tipo de sistema de archivos
correcto en esas particiones para alojar espacios de intercambio.
3.
3.1.
Recupere la posición final de la primera partición visualizando la tabla de particiones
actual en /dev/vdb. En el siguiente paso, use ese valor como el inicio de la partición
swap1.
[root@serverb ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
3.2.
Start
1049kB
End
2000MB
Size
1999MB
File system
xfs
Name
backup
Flags
Cree la primera partición de 512 MB denominada swap1. Establezca su tipo en linuxswap. Use la posición final de la primera partición como punto de partida. La posición
final es 2000 MB + 512 MB = 2512 MB
[root@serverb ~]# parted /dev/vdb mkpart swap1 linux-swap 2000MB 2512M
Information: You may need to update /etc/fstab.
3.3.
Cree la segunda partición de 512 MB denominada swap2. Establezca su tipo en
linux-swap. Use la posición final de la partición anterior como punto de partida:
2512M. La posición final es 2512 MB + 512 MB = 3024 MB
[root@serverb ~]# parted /dev/vdb mkpart swap2 linux-swap 2512M 3024M
Information: You may need to update /etc/fstab.
3.4.
Visualice la tabla de particiones para verificar su trabajo.
[root@serverb ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
2
3
186
Start
1049kB
2000MB
2512MB
End
2000MB
2512MB
3024MB
Size
1999MB
513MB
512MB
File system
xfs
Name
backup
swap1
swap2
Flags
swap
swap
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
3.5.
Ejecute el comando udevadm settle. Este comando espera que el sistema registre
las nuevas particiones y cree los archivos de dispositivo.
[root@serverb ~]# udevadm settle
[root@serverb ~]#
4.
Inicialice las dos particiones de 512 MiB como espacios de intercambio y configúrelas para
que se activen en el arranque. Establezca el espacio de intercambio en la partición swap2
para que se prefiera sobre el otro.
4.1.
Use el comando mkswap para inicializar las particiones de intercambio.
[root@serverb ~]# mkswap /dev/vdb2
Setting up swapspace version 1, size = 489 MiB (512749568 bytes)
no label, UUID=87976166-4697-47b7-86d1-73a02f0fc803
[root@serverb ~]# mkswap /dev/vdb3
Setting up swapspace version 1, size = 488 MiB (511700992 bytes)
no label, UUID=4d9b847b-98e0-4d4e-9ef7-dfaaf736b942
Tome nota de los UUID de los dos espacios de intercambio. Usará esa información en el
siguiente paso. Si ya no puede ver la salida mkswap, use el comando lsblk --fs para
recuperar los UUID.
4.2.
Edite /etc/fstab y defina los nuevos espacios de intercambio. Para configurar
el espacio de intercambio en la partición swap2 para ser preferido sobre swap1,
otórguele una mayor prioridad con la opción pri.
[root@serverb ~]# vim /etc/fstab
...output omitted...
UUID=a3665c6b-4bfb-49b6-a528-74e268b058dd
UUID=87976166-4697-47b7-86d1-73a02f0fc803
UUID=4d9b847b-98e0-4d4e-9ef7-dfaaf736b942
/backup xfs
swap
swap
swap
swap
defaults
pri=10
pri=20
0 0
0 0
0 0
4.3. Fuerce a systemd para que vuelva a leer el archivo /etc/fstab.
[root@serverb ~]# systemctl daemon-reload
[root@serverb ~]#
4.4. Use el comando swapon -a para activar los nuevos espacios de intercambio. Use el
comando swapon --show para confirmar la correcta activación de los espacios de
intercambio.
[root@serverb ~]# swapon -a
[root@serverb ~]# swapon --show
NAME
TYPE
SIZE USED PRIO
/dev/vdb2 partition 489M
0B
10
/dev/vdb3 partition 488M
0B
20
5.
Para verificar su trabajo, reinicie serverb. Confirme que el sistema monta automáticamente
la primera partición en /backup. Además, confirme que el sistema activa los dos espacios de
intercambio.
Cuando finalice, cierre sesión en serverb.
RH134-RHEL8.2-es-1-20200928
187
capítulo 6 | Administración de almacenamiento básico
5.1.
Reinicie serverb.
[root@serverb ~]# systemctl reboot
[root@serverb ~]#
Connection to serverb closed by remote host.
Connection to serverb closed.
[student@workstation ~]$
5.2.
Espere unos minutos a que se reinicie serverb e inicie sesión como el usuario
student.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
5.3.
Verifique que el sistema monte automáticamente /dev/vdb1 en /backup.
[student@serverb ~]$ mount | grep /backup
/dev/vdb1 on /backup type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
5.4.
Use el comando swapon --show para confirmar que el sistema activa ambos
espacios de intercambio.
[student@serverb ~]$ swapon --show
NAME
TYPE
SIZE USED PRIO
/dev/vdb2 partition 489M
0B
10
/dev/vdb3 partition 488M
0B
20
5.5.
Cierre sesión en serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
Evaluación
En workstation, ejecute el script lab storage-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab storage-review grade
Finalizar
En workstation, ejecute el script lab storage-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab storage-review finish
Esto concluye el trabajo de laboratorio.
188
RH134-RHEL8.2-es-1-20200928
capítulo 6 | Administración de almacenamiento básico
Resumen
En este capítulo, aprendió lo siguiente:
• Usa el comando parted para agregar, modificar y eliminar particiones en discos con esquemas
de partición MBR o GPT.
• Usa el comando mkfs.xfs para crear sistemas de archivos XFS en particiones de disco.
• Necesita agregar comandos de montaje de sistemas de archivos en /etc/fstab para hacer
esos montajes persistentes.
• Usa el comando mkswap para inicializar espacios de intercambio.
RH134-RHEL8.2-es-1-20200928
189
190
RH134-RHEL8.2-es-1-20200928
capítulo 7
Administración de volúmenes
lógicos
Meta
Crear y administrar volúmenes lógicos que
contengan sistemas de archivos y espacios de
intercambio desde la línea de comandos.
Objetivos
•
Crear y administrar volúmenes lógicos desde
dispositivos de almacenamiento y formatearlos
con sistemas de archivos o prepararlos con
espacios de intercambio.
•
Agregar y eliminar el almacenamiento asignado
a los grupos de volúmenes y ampliar en forma
no destructiva el tamaño de un volumen lógico
formateado con un sistema de archivos.
•
Creación de volúmenes lógicos (y ejercicio
guiado)
•
Ampliación de volúmenes lógicos (y ejercicio
guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Administración de volúmenes lógicos
191
capítulo 7 | Administración de volúmenes lógicos
Creación de volúmenes lógicos
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Describir los componentes y conceptos de la administración de volúmenes lógicos.
• Implementar almacenamiento del LVM.
• Visualizar información de componentes del LVM.
Conceptos de la administración de volúmenes lógicos
(LVM)
Los volúmenes lógicos y la administración de volúmenes lógicos facilitan la administración del
espacio del disco. Si un sistema de archivos que aloja un volumen lógico necesita más espacio, se
puede asignar a su volumen lógico del espacio libre en su grupo de volúmenes y se puede cambiar
el tamaño del sistema de archivos. Si un disco comienza a fallar, se puede registrar un disco de
reemplazo como volumen físico con el grupo de volúmenes y las extensiones del volumen lógico
se pueden migrar al disco nuevo.
Definiciones de LVM
Dispositivos físicos
Los dispositivos físicos son los dispositivos de almacenamiento usados para guardar los
datos almacenados en un volumen lógico. Estos son dispositivos en bloques y podrían
ser particiones de discos, discos enteros, arreglos RAID o discos SAN. Un dispositivo
debe inicializarse como un volumen físico de LVM para poder ser usado con LVM. Todo el
dispositivo se usará como un volumen físico.
Volúmenes físicos (PV)
Los volúmenes físicos constituyen el almacenamiento "físico" subyacente que se usa con el
LVM. Debe inicializar un dispositivo como un volumen físico antes de usarlo en un sistema
de LVM. Las herramientas de LVM segmentan volúmenes físicos en extensiones físicas
(physical extents, PE); que son pequeños conjuntos de datos que actúan como el bloque de
almacenamiento más pequeño en un volumen físico.
Grupos de volúmenes (VG)
Los grupos de volúmenes son pools (conjuntos) de almacenamiento conformados por
uno o más volúmenes físicos. Este es el equivalente funcional de un disco completo en el
almacenamiento básico. Un PV solo puede ser asignado a un único VG. Un VG puede constar
de espacio sin usar y de cualquier cantidad de volúmenes lógicos.
Volúmenes lógicos (LV)
Los volúmenes lógicos se crean desde extensiones físicas libres en un grupo de volúmenes y
proporcionan el dispositivo de "almacenamiento" usado por aplicaciones, usuarios y el sistema
operativo. Los LV son una colección de extensiones lógicas (LE), que se mapean a extensiones
físicas, la porción de almacenamiento más pequeña de un PV. De forma predeterminada, cada
LE se mapea a una PE. La configuración de opciones de LV específicas cambia este mapeo;
por ejemplo, la duplicación hace que cada LE se mapee a dos PE.
192
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Implementación de almacenamiento del LVM
La creación de almacenamiento de LVM requiere varios pasos. El primer paso es determinar
qué dispositivos físicos usar. Después de ensamblar un conjunto de dispositivos adecuados,
se inicializan como volúmenes físicos para que se reconozcan como pertenecientes a la LVM.
Los volúmenes físicos se combinan en un grupo de volúmenes. Esto crea un pool (conjunto) de
espacio en disco a partir del cual se pueden asignar volúmenes lógicos. Los volúmenes lógicos
creados a partir del espacio disponible en un grupo de volúmenes pueden formatearse con un
sistema de archivos, activarse como espacio de intercambio, y montarse o activarse de manera
persistente.
Figura 7.1: Componentes de la administración de volúmenes lógicos
La LVM proporciona un conjunto integral de herramientas de línea de comandos para implementar
y administrar almacenamiento de LVM. Estas herramientas de línea de comandos se pueden usar
en scripts, lo que las hace más adecuadas para la automatización.
Importante
En los siguientes ejemplos, se usa el dispositivo vdb y sus particiones para ilustrar
comandos LVM. En la práctica, estos ejemplos deberían usar los dispositivos
correctos para el disco y las particiones del disco usados por el sistema. Use
los comandos lsblk, blkid o cat /proc/partitions para identificar los
dispositivos en su sistema.
RH134-RHEL8.2-es-1-20200928
193
capítulo 7 | Administración de volúmenes lógicos
Creación de un volumen lógico
Para crear un volumen lógico, realice los siguientes pasos:
Prepare el dispositivo físico.
Use parted, gdisk o fdisk para crear una partición para usar con LVM. Configure siempre el
tipo de partición en Linux LVM (LVM Linux) en las particiones de LVM; use 0x8e para particiones
MBR. Si es necesario, use partprobe para registrar la nueva partición con el kernel.
De forma alternativa, use un disco entero, un arreglo RAID o un disco SAN.
Solo se necesita preparar un dispositivo físico si no hay ninguno ya preparado, y se requiere un
volumen físico nuevo para crear o ampliar un grupo de volúmenes.
[root@host ~]# parted -s /dev/vdb mkpart primary 1MiB 769MiB
[root@host ~]# parted -s /dev/vdb mkpart primary 770MiB 1026MiB
[root@host ~]# parted -s /dev/vdb set 1 lvm on
[root@host ~]# parted -s /dev/vdb set 2 lvm on
Cree un volumen físico.
Use pvcreate para etiquetar la partición (u otro dispositivo físico) como volumen físico. El
comando pvcreate divide el volumen físico en extensiones físicas (PE) de un tamaño fijo, por
ejemplo, bloques de 4 MiB. Puede etiquetar varios dispositivos al mismo tiempo con nombres de
dispositivos delimitados por espacios como argumentos para pvcreate.
[root@host ~]# pvcreate /dev/vdb2 /dev/vdb1
Esto etiquetará dispositivos /dev/vdb2 y /dev/vdb1 como PV, listos para la asignación en un
grupo de volúmenes.
Un PV solo debe crearse si no hay PV libres para crear o ampliar un VG.
Cree un grupo de volúmenes.
Use vgcreate para recopilar uno o más volúmenes físicos en un grupo de volúmenes. Un grupo
de volúmenes es el equivalente funcional de un disco duro; creará volúmenes lógicos a partir del
pool (conjunto) de extensiones físicas libres en el grupo de volúmenes.
La línea de comandos de vgcreate consiste en un nombre de grupo de volúmenes seguido de
uno o más volúmenes físicos para asignar a este grupo de volúmenes.
[root@host ~]# vgcreate vg01 /dev/vdb2 /dev/vdb1
Esto crea un VG denominado vg01 que tiene el tamaño combinado, en unidades de PE, de los dos
PV: /dev/vdb2 y /dev/vdb1.
Un VG solo necesita crearse si no existe ninguno. Se pueden crear más VG por motivos
administrativos para administrar el uso de PV y LV. O bien, los VG existentes se pueden ampliar
para alojar nuevos LV cuando sea necesario.
Cree un volumen lógico.
Use lvcreate para crear un nuevo volumen lógico desde las extensiones físicas disponibles en un
grupo de volúmenes. Como mínimo, la línea de comandos de lvcreate incluye la opción -n para
194
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
configurar el nombre del LV, la opción -L para establecer el tamaño del LV en bytes o la opción l para establecer el tamaño del LV en extensiones y el nombre del grupo de volúmenes que aloja
este volumen lógico.
[root@host ~]# lvcreate -n lv01 -L 700M vg01
Esto crea un LV denominado lv01, con un tamaño de 700 MiB, en el VG vg01. Este comando
fallará si el grupo de volúmenes no tiene una cantidad suficiente de extensiones físicas libres
para el tamaño solicitado. También tenga en cuenta que el tamaño se redondeará a un factor del
tamaño de la extensión física si el tamaño no puede coincidir exactamente.
Puede especificar el tamaño con la opción -L, que espera tamaños en bytes, mebibytes
(megabytes binarios, 1048576 bytes), gibibytes (gigabytes binarios), o similar. O puede usar la
opción -l, que espera tamaños especificados como un número de extensiones físicas.
En la siguiente lista, se proporcionan algunos ejemplos de creación de LV:
• lvcreate -L 128M: Cambia el tamaño del volumen lógico a exactamente 128 MiB.
• lvcreate -l 128 : Cambia el tamaño del volumen lógico a exactamente 128 extensiones.
El número total de bytes depende del tamaño del bloque de extensiones físicas en el volumen
físico subyacente.
Importante
Diferentes herramientas muestran el nombre del volumen lógico, ya sea usando
el nombre tradicional /dev/vgname/lvname o el nombre del mapeador de
dispositivos del kernel /dev/mapper/vgname-lvname.
Agregue el sistema de archivos.
Use mkfs para crear un sistema de archivos XFS en el nuevo volumen lógico. O cree un sistema de
archivos basado en su sistema de archivos preferido, por ejemplo, ext4.
[root@host ~]# mkfs -t xfs /dev/vg01/lv01
Para hacer que el sistema de archivos esté disponible después de los reinicios, siga los siguientes
pasos:
• Use mkdir para crear un punto de montaje.
[root@host ~]# mkdir /mnt/data
• Agregue una entrada al archivo /etc/fstab:
/dev/vg01/lv01
/mnt/data xfs
defaults 1 2
nota
El montaje de un volumen lógico por nombre es equivalente al montaje por UUID
porque LVM encuentra sus volúmenes físicos basados en un UUID incluso si
inicialmente los agrega al grupo de volúmenes por nombre.
RH134-RHEL8.2-es-1-20200928
195
capítulo 7 | Administración de volúmenes lógicos
• Ejecute mount /mnt/data para montar el sistema de archivos que acaba de agregar en /
etc/fstab.
[root@host ~]# mount /mnt/data
Eliminación de un volumen lógico
Para eliminar todos los componentes del volumen lógico, siga los siguientes pasos:
Prepare el sistema de archivos.
Traslade todos los datos que se deben conservar a otro sistema de archivos. Use el comando
umount para desmontar el sistema de archivos y, luego, eliminar cualquier entrada de /etc/
fstab asociada a este sistema de archivos.
[root@host ~]# umount /mnt/data
Advertencia
Al eliminar un volumen lógico, se destruyen todos los datos almacenados en este.
Realice una copia de seguridad de los datos o trasládelos antes de eliminar el
volumen lógico.
Elimine el volumen lógico.
Use lvremove DEVICE_NAME para eliminar un volumen lógico que ya no es necesario.
[root@host ~]# lvremove /dev/vg01/lv01
Desmonte el sistema de archivos del LV antes de ejecutar este comando. El comando solicita
confirmación antes de eliminar el LV.
Las extensiones físicas del LV se liberan y están disponibles para ser asignadas a LV existentes o
nuevos en el grupo de volúmenes.
Elimine el grupo de volúmenes.
Use vgremove VG_NAME para eliminar un grupo de volúmenes que ya no es necesario.
[root@host ~]# vgremove vg01
Los volúmenes físicos del VG se liberan y están disponibles para ser asignados a VG existentes o
nuevos en el sistema.
Elimine los volúmenes físicos.
Use pvremove para eliminar volúmenes físicos que ya no son necesarios. Use una lista delimitada
por espacios de dispositivos del PV para eliminar más de uno a la vez. Este comando elimina los
metadatos del PV de la partición (o disco). Ahora, la partición está libre para una nueva asignación
o para ser formateada.
[root@host ~]# pvremove /dev/vdb2 /dev/vdb1
196
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Revisión de la información de estado de LVM
Volúmenes físicos
Use pvdisplay para visualizar información sobre volúmenes físicos (VP). Para mostrar
información sobre todos los volúmenes físicos, use el comando sin argumentos. Para mostrar
información sobre un volumen físico específico, pase el nombre de ese dispositivo al comando.
[root@host ~]# pvdisplay /dev/vdb1
--- Physical volume --PV Name
/dev/vdb1
VG Name
vg01
PV Size
768.00 MiB / not usable 4.00 MiB
Allocatable
yes
PE Size
4.00 MiB
Total PE
191
Free PE
16
Allocated PE
175
PV UUID
JWzDpn-LG3e-n2oi-9Etd-VT2H-PMem-1ZXwP1
PV Name (Nombre de PV) se mapea al nombre del dispositivo.
VG Name (Nombre de VG) muestra el grupo de volúmenes donde se encuentra el PV.
PV Size (Tamaño de PV) muestra el tamaño físico del PV, incluido todo el espacio no
utilizable.
PE Size (Tamaño de PE) es el tamaño de la extensión física, que es el tamaño más pequeño
a donde puede ser asignado un volumen lógico.
Es también el factor de multiplicación que se usa en el cálculo del tamaño de cualquier valor
informado en las unidades de PE, como Free PE (PE libre); por ejemplo: 26 PE x 4 MiB (el
PE Size [Tamaño de PE]) da 104 MiB de espacio libre. El tamaño de un volumen lógico se
redondea a un factor de unidades de PE.
LVM establece el tamaño de la PE automáticamente, aunque es posible especificarlo.
Free PE (PE libre) muestra cuántas unidades de PE están disponibles para la asignación
para nuevos volúmenes lógicos.
Grupos de volúmenes
Use vgdisplay para visualizar información sobre grupos de volúmenes (GV). Para mostrar
información sobre todos los grupos de volúmenes, use el comando sin argumentos. Para mostrar
información sobre un grupo de volúmenes específico, pase el nombre del VG al comando.
[root@host ~]# vgdisplay vg01
--- Volume group --VG Name
vg01
System ID
Format
lvm2
Metadata Areas
2
Metadata Sequence No 2
VG Access
read/write
VG Status
resizable
MAX LV
0
Cur LV
1
Open LV
1
Max PV
0
RH134-RHEL8.2-es-1-20200928
197
capítulo 7 | Administración de volúmenes lógicos
Cur PV
Act PV
VG Size
PE Size
Total PE
Alloc PE / Size
Free PE / Size
VG UUID
2
2
1016.00 MiB
4.00 MiB
254
175 / 700.00 MiB
79 / 316.00 MiB
3snNw3-CF71-CcYG-Llk1-p6EY-rHEv-xfUSez
VG Name (Nombre de VG) es el nombre del grupo de volúmenes.
VG Size (Tamaño de VG) es el tamaño total del pool (conjunto) de almacenamiento
disponible para la asignación de volúmenes lógicos.
Total PE (PE total) es el tamaño total expresado en unidades de PE.
Free PE / Size (PE libre/tamaño) muestra cuánto espacio libre hay en el VG para
distribuir para nuevos LV o para ampliar los LV existentes.
Volúmenes lógicos
Use lvdisplay para visualizar información sobre volúmenes lógicos (LV). Si no proporciona
ningún argumento al comando muestra información sobre todos los LV, si proporciona el nombre
de un dispositivo del LV como un argumento, el comando muestra información sobre ese
dispositivo específico.
[root@host ~]# lvdisplay /dev/vg01/lv01
--- Logical volume --LV Path
/dev/vg01/lv01
LV Name
lv01
VG Name
vg01
LV UUID
5IyRea-W8Zw-xLHk-3h2a-IuVN-YaeZ-i3IRrN
LV Write Access
read/write
LV Creation host, time host.lab.example.com, 2019-03-28 17:17:47 -0400
LV Status
available
# open
1
LV Size
700 MiB
Current LE
175
Segments
1
Allocation
inherit
Read ahead sectors
auto
- current set to
256
Block device
252:0
LV Path (Ruta de LV) muestra el nombre del dispositivo del volumen lógico.
Es posible que algunas herramientas informen el nombre del dispositivo como /dev/
mapper/vgname-lvname; ambos representan el mismo LV.
VG Name (Nombre de VG) muestra el grupo de volúmenes desde donde se asigna el LV.
LV Size (Tamaño de LV) muestra el tamaño total del LV. Use herramientas del sistema de
archivos para determinar el espacio libre y el espacio usado para el almacenamiento de datos.
Current LE (LE actual) muestra la cantidad de extensiones lógicas usadas por este LV. Una
LE generalmente se mapea a una extensión física del VG y, por lo tanto, al volumen físico.
198
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Referencias
páginas de manual lvm(8), pvcreate(8), vgcreate(8), lvcreate(8),
pvremove(8), vgremove(8), lvremove(8), pvdisplay(8), vgdisplay(8),
lvdisplay(8), fdisk(8), gdisk(8), parted(8), partprobe(8) y mkfs(8)
RH134-RHEL8.2-es-1-20200928
199
capítulo 7 | Administración de volúmenes lógicos
Ejercicio Guiado
Creación de volúmenes lógicos
En este trabajo de laboratorio, creará un volumen físico, un grupo de volúmenes, un volumen
lógico y un sistema de archivos XFS. También montará de forma persistente el sistema de
archivos de volúmenes lógicos.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear volúmenes físicos, grupos de volúmenes y volúmenes lógicos con herramientas de
LVM.
• Crear nuevos sistemas de archivos en volúmenes lógicos y montarlos de manera
persistente.
Andes De Comenzar
Inicie sesión con el usuario student en workstation con la contraseña student.
En workstation, ejecute el comando lab lvm-creating start. Este comando ejecuta
un script de inicio que determina si la máquina servera es accesible en la red. También
verifica que el almacenamiento esté disponible y que se hayan instalado los paquetes de
software apropiados.
[student@workstation ~]$ lab lvm-creating start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Cree los recursos físicos en el dispositivo /dev/vdb.
3.1.
200
Use parted para crear dos particiones de 256 MiB y configúrelas con el tipo Linux
LVM.
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
[root@servera ~]# parted -s /dev/vdb mklabel gpt
[root@servera ~]# parted -s /dev/vdb mkpart primary 1MiB 257MiB
[root@servera ~]# parted -s /dev/vdb set 1 lvm on
[root@servera ~]# parted -s /dev/vdb mkpart primary 258MiB 514MiB
[root@servera ~]# parted -s /dev/vdb set 2 lvm on
3.2.
Use udevadm settle para que el sistema registre las nuevas particiones.
[root@servera ~]# udevadm settle
4. Use pvcreate para agregar las dos nuevas particiones como PV.
[root@servera ~]# pvcreate /dev/vdb1 /dev/vdb2
Physical volume "/dev/vdb1" successfully created.
Physical volume "/dev/vdb2" successfully created.
5.
Use vgcreate para crear un nuevo VG denominado servera_01_vg compilado a partir
de los dos PV.
[root@servera ~]# vgcreate servera_01_vg /dev/vdb1 /dev/vdb2
Volume group "servera_01_vg" successfully created
6. Use lvcreate para crear un LV de 400 MiB LV denominado servera_01_lv desde el
VG servera_01_vg.
[root@servera ~]# lvcreate -n servera_01_lv -L 400M servera_01_vg
Logical volume "servera_01_lv" created.
Esto crea un dispositivo denominado /dev/servera_01_vg/servera_01_lv pero sin
un sistema de archivos.
7.
Agregue un sistema de archivos persistente.
7.1.
Agregue un sistema de archivos XFS en el LV servera_01_lv con el comando
mkfs.
[root@servera ~]# mkfs -t xfs /dev/servera_01_vg/servera_01_lv
...output omitted...
7.2.
Crear un punto de montaje en /data.
[root@servera ~]# mkdir /data
7.3.
Agregue la siguiente línea al final de /etc/fstab en servera:
/dev/servera_01_vg/servera_01_lv
7.4.
/data
xfs
defaults
1 2
Use systemctl daemon-reload para actualizar systemd con la nueva
configuración de /etc/fstab.
RH134-RHEL8.2-es-1-20200928
201
capítulo 7 | Administración de volúmenes lógicos
[root@servera ~]# systemctl daemon-reload
7.5.
Verifique la entrada /etc/fstab y monte el nuevo dispositivo de LV
servera_01_lv LV con el comando mount.
[root@servera ~]# mount /data
8. Evalúe y revise su trabajo.
8.1.
Como prueba final, copie algunos archivos en /data y verifique cuántos se copiaron.
[root@servera ~]# cp -a /etc/*.conf /data
[root@servera ~]# ls /data | wc -l
34
Verificará que aún tenga la misma cantidad de archivos en el siguiente ejercicio
guiado.
8.2.
parted/dev/VDB Print enumera las particiones que existen en /dev/VDB.
[root@servera ~]# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number
1
2
Start
1049kB
271MB
End
269MB
539MB
Size
268MB
268MB
File system
Name
primary
primary
Flags
lvm
lvm
Observe la columna Número, que contiene los valores 1 y 2. Estos corresponden
a /dev/vdb1 y /dev/vdb2, respectivamente. También observe la columna
Indicadores, que indica el tipo de partición.
8.3.
pvdisplay muestra información sobre cada uno de los volúmenes físicos. De forma
opcional, incluya el nombre del dispositivo para limitar detalles a un PV específico.
[root@servera ~]# pvdisplay /dev/vdb2
--- Physical volume --PV Name
/dev/vdb2
VG Name
servera_01_vg
PV Size
256.00 MiB / not usable 4.00 MiB
Allocatable
yes
PE Size
4.00 MiB
Total PE
63
Free PE
26
Allocated PE
37
PV UUID
2z0Cf3-99YI-w9ny-alEW-wWhL-S8RJ-M2rfZk
Esto muestra que el PV está asignado al VG servera_01_vg, tiene un tamaño de
256 MiB (si bien 4 MiB no se pueden usar) y el tamaño de la extensión física (PE
Size [Tamaño de PE]) es de 4 MiB (el tamaño de un LV asignable más pequeño).
202
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Hay 63 PE, de las cuales 26 están libres para la asignación para LV en el futuro y 37
están asignadas actualmente a LV. Esto se traduce a los siguientes valores de MiB:
• Un total de 252 MiB (63 PE x 4 MiB); recuerde, 4 MiB no se pueden usar.
• 104 MiB libres (26 PE x 4 MiB)
• 148 MiB asignados (37 PE x 4 MiB)
8.4. vgdisplay vgname muestran información sobre el grupo de volúmenes
denominado vgname.
[root@servera ~]# vgdisplay servera_01_vg
Verifique los siguientes valores:
• El valor de VG Size (Tamaño de VG) es 504,00 MiB.
• El valor de Total PE (PE total) es 126.
• El valor de Alloc PE / Size (PE asign. / Tamaño) es 100 / 400,00 MiB.
• El valor de Free PE / Size (PE libre / Tamaño) es 26 / 104,00 MiB.
8.5.
lvdisplay /dev/vgname/lvname muestra información sobre el volumen lógico
denominado lvname.
[root@servera ~]# lvdisplay /dev/servera_01_vg/servera_01_lv
Revise los valores de LV Path (Ruta de LV), LV Name (Nombre de LV), VG Name
(Nombre de VG), LV Status (Estado de LV), LV Size (Tamaño de LV) y Current
LE (LE actual) (extensiones lógicas, que se mapean a extensiones físicas).
8.6. El comando mount muestra todos los dispositivos montados y cualquier opción de
montaje. Debe incluir /dev/servera_01_vg/servera_01_lv.
nota
Muchas herramientas informan en cambio el nombre del mapeador de dispositivos,
/dev/mapper/servera_01_vg-servera_01_lv; es el mismo volumen lógico.
[root@servera ~]# mount
Debe observar (probablemente, en la última línea) /dev/mapper/
servera_01_vg-servera_01_lv montado en /data y la información de montaje
asociada.
8.7.
df -h muestra espacio libre legible para el ser humano. De forma opcional, incluya el
punto de montaje para limitar detalles a ese sistema de archivos.
[root@servera ~]# df -h /data
Filesystem
/dev/mapper/servera_01_vg-servera_01_lv
Size Used Avail Use% Mounted on
395M
24M 372M
6% /data
Estos valores, permitidos para metadatos del sistema de archivos, son los esperados.
RH134-RHEL8.2-es-1-20200928
203
capítulo 7 | Administración de volúmenes lógicos
9. Cierre sesión en servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab lvm-creating finish para terminar este ejercicio.
Este script elimina el almacenamiento configurado en servera durante el ejercicio.
[student@workstation ~]$ lab lvm-creating finish
Esto concluye el ejercicio guiado.
204
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Ampliación de volúmenes lógicos
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Ampliar un grupo de volúmenes (VG) con pvcreate y vgextend, y usar vgdisplay para
verificar la salida.
• Reducir un VG usando pvmove y vgreduce.
• Ampliar un volumen lógico (LV) usando lvextend.
• Cambiar el tamaño de los sistemas de archivos XFS con xfs_growfs.
• Cambiar el tamaño de los sistemas de archivos ext4 con resize2fs.
Ampliación y reducción de un grupo de volúmenes
Puede agregar más espacio en disco a un grupo de volúmenes mediante la adición de más
volúmenes físicos. Esto se denomina ampliación del grupo de volúmenes. Luego, puede asignar las
nuevas extensiones físicas desde los volúmenes físicos adicionales a volúmenes lógicos.
Puede eliminar los volúmenes físicos no usados de un grupo de volúmenes. Esto se denomina
reducción del grupo de volúmenes. Primero, use el comando pvmove para trasladar datos desde
extensiones de un volumen físico hasta extensiones de otros volúmenes físicos en el grupo
de volúmenes. De esta manera, se puede agregar un nuevo disco a un grupo de volúmenes
existentes, se pueden trasladar los datos desde un disco más antiguo o más lento hacia el disco
nuevo y se puede eliminar el disco viejo del grupo de volúmenes. Puede hacer esto mientras los
volúmenes lógicos del grupo de volúmenes están en uso.
Importante
En los siguientes ejemplos, se usa el dispositivo vdb y sus particiones para ilustrar
comandos LVM. En la práctica, use los dispositivos apropiados para el disco y las
particiones de disco en su propio sistema.
Ampliación de un grupo de volúmenes
Para ampliar un grupo de volúmenes, realice los siguientes pasos:
Prepare el dispositivo físico y cree el volumen físico..
Al igual que en la creación de un nuevo grupo de volúmenes, debe crear y preparar una nueva
partición para usar como volumen físico si no hay ninguna ya preparada.
[root@host ~]# parted -s /dev/vdb mkpart primary 1027MiB 1539MiB
[root@host ~]# parted -s /dev/vdb set 3 lvm on
[root@host ~]# pvcreate /dev/vdb3
Un PV solo debe crearse si no hay PV libres para ampliar el VG.
RH134-RHEL8.2-es-1-20200928
205
capítulo 7 | Administración de volúmenes lógicos
Amplíe un grupo de volúmenes.
Use vgextend para agregar el nuevo volumen físico al grupo de volúmenes. Use el nombre del
VG y el nombre del dispositivo del PV como argumentos para vgextend.
[root@host ~]# vgextend vg01 /dev/vdb3
Esto amplía el VG vg01 al tamaño del PV /dev/vdb3.
Verifique que el nuevo espacio esté disponible.
Use vgdisplay para confirmar que las extensiones físicas adicionales estén disponibles. Revise el
Free PE / Size (PE libre/tamaño) en la salida. No debe ser cero.
[root@host ~]# vgdisplay vg01
--- Volume group --VG Name
vg01
...output omitted...
Free PE / Size
178 / 712.00 MiB
...output omitted...
Reducción de un grupo de volúmenes
Para reducir un grupo de volúmenes, realice los siguientes pasos:
Traslade las extensiones físicas.
Use pvmove PV_DEVICE_NAME para reubicar cualquier extensión física del volumen físico que
desee eliminar a otros volúmenes físicos en el grupo de volúmenes. Los otros volúmenes físicos
deben tener una cantidad suficiente de extensiones libres para aceptar este traslado. Esto solo es
posible si hay suficientes extensiones libres en el VG y si todas corresponden a otros PV.
[root@host ~]# pvmove /dev/vdb3
Este comando traslada las PE desde /dev/vdb3 a otros PV con PE libres en el mismo VG.
Advertencia
Antes de usar pvmove, efectúe una copia de seguridad de los datos en los
volúmenes lógicos del grupo de volúmenes. Una pérdida de energía imprevista
durante la operación puede hacer que el grupo de volúmenes quede en un estado
incoherente. Esto provocaría la pérdida de datos en volúmenes lógicos en el grupo
de volúmenes.
Reduzca el grupo de volúmenes.
Use vgreduce VG_NAME PV_DEVICE_NAME para quitar un volumen físico de un grupo de
volúmenes.
[root@host ~]# vgreduce vg01 /dev/vdb3
Esto elimina el PV /dev/vdb3 del VG vg01 y ahora puede agregarse a otro VG. O se puede usar
pvremove para dejar de usar el dispositivo como un PV de forma permanente.
206
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Ampliación de un volumen lógico y el sistema de
archivos XFS
Uno de los beneficios de los volúmenes lógicos es la capacidad para aumentar su tamaño sin
experimentar tiempo de inactividad. Las extensiones físicas libres en un grupo de volúmenes se
pueden agregar a un volumen lógico para ampliar su capacidad, que, luego, se puede usar para
ampliar el sistema de archivos que contiene.
Ampliación de un volumen lógico
Para ampliar un volumen lógico, realice los siguientes pasos:
Verifique que el grupo de volúmenes tenga espacio disponible.
Use vgdisplay para verificar que haya suficientes extensiones físicas disponibles:
[root@host ~]# vgdisplay vg01
--- Volume group --VG Name
vg01
...output omitted...
Free PE / Size
178 / 712.00 MiB
...output omitted...
Revise el Free PE / Size (PE libre/tamaño) en la salida. Confirme que el grupo de volúmenes
tenga suficiente espacio libre para la extensión del LV. Si no hay suficiente espacio disponible,
amplíe el grupo de volúmenes como corresponda. Consulte “Ampliación y reducción de un grupo
de volúmenes”.
Amplíe el volumen lógico.
Use lvextendLV_DEVICE_NAME para ampliar el volumen lógico a un nuevo tamaño.
[root@host ~]# lvextend -L +300M /dev/vg01/lv01
Esto aumenta el tamaño del volumen lógico lv01 en 300 MiB. Observe el signo "(+)" delante del
tamaño: significa agregar este valor al tamaño existente; de lo contrario, el valor define el tamaño
final del LV.
Al igual que con lvcreate, existen diferentes métodos para especificar el tamaño: la opción l espera la cantidad de extensiones físicas como argumento. La opción -L espera tamaños en
bytes, mebibytes, gibibytes y similares.
En la siguiente lista, se proporcionan algunos ejemplos de ampliación de LV.
Ampliación de ejemplos de LV
Comando
Resultados
lvextend -l 128
Cambia el tamaño del volumen lógico a exactamente 128
extensiones.
lvextend -l +128
Agrega 128 extensiones al tamaño actual del volumen lógico.
lvextend -L 128M
Cambia el tamaño del volumen lógico a exactamente 128 MiB.
RH134-RHEL8.2-es-1-20200928
207
capítulo 7 | Administración de volúmenes lógicos
Comando
Resultados
lvextend -L +128M
Agrega 128 MiB al tamaño actual del volumen lógico.
lvextend -l +50%FREE
Agrega el 50% del espacio libre actual en el VG al LV.
Amplíe el sistema de archivos.
Use xfs_growfs mountpoint para ampliar el sistema de archivos para que ocupe el
LV ampliado. El sistema de archivos de destino se debe montar cuando use el comando
xfs_growfs. Puede seguir usando el sistema de archivos mientras se está cambiando el tamaño.
[root@host ~]# xfs_growfs /mnt/data
nota
Un error común es ejecutar lvextend y olvidarse de ejecutar xfs_growfs. Una
alternativa a ejecutar estos pasos de forma consecutiva es incluir la opción -r con
el comando lvextend. Esto modifica el tamaño del sistema de archivos después
de que el LV se amplíe, usando fsadm(8). Funciona con varios sistemas de archivos
diferentes.
Verifique el nuevo tamaño del sistema de archivos montado.
[root@host ~]# df -h /mountpoint
Ampliación de un volumen lógico y el sistema de
archivos ext4
Los pasos para ampliar un volumen lógico basado en ext4 son básicamente los mismos que para
un LV basado en XFS, excepto por el paso para cambiar el tamaño del sistema de archivos. Revise
“Ampliación de un volumen lógico y el sistema de archivos XFS”.
Verifique que el grupo de volúmenes tenga espacio disponible.
Use vgdisplay VGNAME para verificar que el grupo de volúmenes tenga una cantidad suficiente
de extensiones físicas disponibles.
Amplíe el volumen lógico.
Use lvextend -l +extents /dev/vgname/lvname para ampliar el volumen lógico /dev/
vgname/lvname en el valor de las extensiones.
Amplíe el sistema de archivos.
Use resize2fs /dev/vgname/lvname para ampliar el sistema de archivos para que ocupe el
nuevo LV ampliado. El sistema de archivos se puede montar y usar mientras se ejecuta el comando
de extensión. Puede incluir la opción -p para monitorear el progreso de la operación de cambio de
tamaño.
[root@host ~]# resize2fs /dev/vg01/lv01
208
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
nota
La principal diferencia entre xfs_growfs y resize2fs es el argumento que se
pasó para identificar el sistema de archivos. xfs_growfs toma el punto de montaje
y resize2fs toma el nombre del volumen lógico.
Ampliar un volumen lógico y el espacio de intercambio
Los volúmenes lógicos formateados como espacio de intercambio también se pueden ampliar; sin
embargo, el proceso es diferente al de la ampliación de un sistema de archivos, como ext4 o XFS.
Los volúmenes lógicos formateados con un sistema de archivos pueden ampliarse dinámicamente
sin tiempo de inactividad. Los volúmenes lógicos formateados con espacio de intercambio se
deben desconectar para ampliarse.
Verifique que el grupo de volúmenes tenga espacio disponible.
Use vgdisplay vgname para verificar que haya una cantidad suficiente de extensiones físicas
disponibles.
Desactive el espacio de intercambio.
Use swapoff -v /dev/vgname/lvname para desactivar el espacio de intercambio en el
volumen lógico.
Advertencia
Su sistema debe tener suficiente espacio libre en la memoria o en el espacio de
intercambio para aceptar cualquier cosa que deba paginar cuando el espacio de
intercambio en el volumen lógico está desactivado.
Amplíe el volumen lógico.
lvextend -l +extents /dev/vgname/lvname amplía el volumen lógico /dev/vgname/
lvname en el valor de las extensiones.
Formatee el volumen lógico como espacio de intercambio.
mkswap /dev/vgname/lvname formatea todo el volumen lógico como espacio de intercambio.
Active el espacio de intercambio.
Use swapon -va /dev/vgname/lvname para activar el espacio de intercambio en el volumen
lógico.
Referencias
Páginas del manual: lvm(8), pvcreate(8), pvmove(8), vgdisplay(8),
vgextend(8), vgreduce(8), vgdisplay(8), vgextend(8), vgreduce(8),
lvextend(8), fdisk(8), gdisk(8), parted(8), partprobe(8), xfs_growfs(8)
y resize2fs(8) swapoff(8) swapon(8) mkswap(8)
RH134-RHEL8.2-es-1-20200928
209
capítulo 7 | Administración de volúmenes lógicos
Ejercicio Guiado
Ampliación de volúmenes lógicos
En este trabajo de laboratorio, ampliará el volumen lógico agregado en el ejercicio de
práctica anterior.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Ampliar el grupo de volúmenes para incluir un volumen físico adicional.
• Cambiar el tamaño del volumen lógico mientras el sistema de archivos aún está montado y
en uso.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab lvm-extending start. Este comando
ejecuta un script de inicio que determina si el host servera es accesible en la red y
garantiza que el almacenamiento del ejercicio guiado anterior esté disponible.
[student@workstation ~]$ lab lvm-extending start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar a root en el prompt de shell.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Use vgdisplay para determinar si el VG tiene suficiente espacio libre para ampliar el LV
hasta un tamaño total de 700 MiB.
[root@servera ~]# vgdisplay servera_01_vg
--- Volume group --VG Name
servera_01_vg
System ID
Format
lvm2
...output omitted...
VG Size
504.00 MiB
PE Size
4.00 MiB
210
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Total PE
Alloc PE / Size
Free PE / Size
VG UUID
126
100 / 400.00 MiB
26 / 104.00 MiB
OBBAtU-2nBS-4SW1-khmF-yJzi-z7bD-DpCrAV
Hay solo 104 MiB disponibles (26 PE x extensiones de 4 MiB) y necesita al menos 300 MiB
para tener 700 MiB en total. Necesita ampliar el VG.
Para una posterior comparación, use df para registrar el espacio libre en el disco actual:
[root@servera ~]# df -h /data
Filesystem
/dev/mapper/servera_01_vg-servera_01_lv
Size
395M
Used Avail Use% Mounted on
24M 372M
6% /data
4. Cree el recurso físico.
4.1.
Use parted para crear una partición adicional de 512 MiB y configúrela con el tipo
Linux LVM.
[root@servera ~]# parted -s /dev/vdb mkpart primary 515MiB 1027MiB
[root@servera ~]# parted -s /dev/vdb set 3 lvm on
4.2.
Use udevadm settle para que el sistema registre la nueva partición.
[root@servera ~]# udevadm settle
5.
Use pvcreate para agregar la nueva partición como un PV.
[root@servera ~]# pvcreate /dev/vdb3
Physical volume "/dev/vdb3" successfully created.
6. Amplíe un grupo de volúmenes.
6.1.
Use vgextend para ampliar el VG denominado servera_01_vg, mediante el nuevo
PV /dev/vdb3.
[root@servera ~]# vgextend servera_01_vg /dev/vdb3
Volume group "servera_01_vg" successfully extended
6.2.
Use vgdisplay para inspeccionar el espacio libre del VG servera_01_vg
nuevamente. Ahora, debe haber suficiente espacio libre.
[root@servera ~]# vgdisplay servera_01_vg
--- Volume group --VG Name
servera_01_vg
System ID
Format
lvm2
...output omitted...
VG Size
1012.00 MiB
PE Size
4.00 MiB
Total PE
253
RH134-RHEL8.2-es-1-20200928
211
capítulo 7 | Administración de volúmenes lógicos
Alloc PE / Size
Free PE / Size
VG UUID
100 / 400.00 MiB
153 / 612.00 MiB
OBBAtU-2nBS-4SW1-khmF-yJzi-z7bD-DpCrAV
Hay 612 MiB de espacio libre disponible (153 PE x extensiones de 4 MiB).
7.
Use lvextend para ampliar el LV existente a 700 MiB.
[root@servera ~]# lvextend -L 700M /dev/servera_01_vg/servera_01_lv
Size of logical volume servera_01_vg/servera_01_lv changed from 400.00 MiB (100
extents) to 700.00 MiB (175 extents).
Logical volume servera_01_vg/servera_01_lv successfully resized.
nota
El ejemplo especifica el tamaño exacto para crear el LV final, pero podría haber
especificado la cantidad de espacio adicional deseada:
• -L +300M para agregar el nuevo espacio usando el tamaño en MiB.
• -l 175 para especificar el número total de extensiones (175 PE x 4 MiB).
• -l +75 para agregar las extensiones adicionales necesarias.
8. Use xfs_growfs para ampliar el sistema de archivos XFS hasta el resto del espacio libre
del LV.
[root@servera ~]# xfs_growfs /data
meta-data=/dev/mapper/servera_01_vg-servera_01_lv isize=512
agsize=25600 blks
...output omitted...
agcount=4,
9. Use df y ls | wc para revisar el nuevo tamaño del sistema de archivos y verifique que los
archivos existentes anteriormente aún estén presentes.
[root@servera ~]# df -h /data
Filesystem
/dev/mapper/servera_01_vg-servera_01_lv
[root@servera ~]# ls /data | wc -l
34
Size
695M
Used Avail Use% Mounted on
26M 670M
4% /data
Los archivos aún existen y el sistema de archivos se aproxima al tamaño especificado.
10. Cierre sesión en servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
212
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Finalizar
En workstation, ejecute el comando lab lvm-extending finish para terminar este
ejercicio. Este script elimina el almacenamiento configurado en servera durante el ejercicio.
[student@workstation ~]$ lab lvm-extending finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
213
capítulo 7 | Administración de volúmenes lógicos
Trabajo de laboratorio
Administración de volúmenes lógicos
Lista de verificación de rendimiento
En este trabajo de laboratorio, modificará el tamaño de un volumen lógico existente,
agregará recursos de LVM según sea necesario y, luego, agregará un nuevo volumen lógico
con un sistema de archivos XFS montado de manera persistente en este.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Cambiar el tamaño del volumen lógico serverb_01_lv a 768 MiB.
• Crear un nuevo volumen lógico de 128 MiB denominado serverb_02_lv con un sistema
de archivos XFS, montado de forma persistente en /storage/data2.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab lvm-review start. Este comando ejecuta
un script de inicio que determina si la máquina serverb es accesible en la red. También
prepara el almacenamiento en serverb para el ejercicio.
[student@workstation ~]$ lab lvm-review start
En serverb, un volumen lógico denominado serverb_01_lv montado en /storage/data1
se está quedando sin espacio en disco y se le ha solicitado que amplíe su tamaño a 768 MiB. Debe
asegurarse de que serverb_01_lv permanece montado de forma persistente en /storage/
data1.
También se le ha solicitado que cree un nuevo volumen lógico de 128 MiB denominado
serverb_02_lv, montado en /storage/data2. Se le ha indicado que formatee el nuevo
volumen lógico con el sistema de archivos XFS.
El grupo de volúmenes serverb_01_vg contiene los volúmenes lógicos. Desafortunadamente,
no tiene espacio suficiente para ampliar el volumen lógico existente y agregar el nuevo. Se creó
una partición de 512 MiB previamente en /dev/vdb. Se le ha indicado que use 512 MiB adicionales
en /dev/vdb. Debe crear la nueva partición.
1.
Cree una partición de 512 MiB en /dev/vdb; inicialícela como un volumen físico y amplíe el
grupo de volúmenes serverb_01_vg con esta.
2.
Amplíe el volumen lógico serverb_01_lv a 768 MiB, que incluye el sistema de archivos.
3.
En el grupo de volúmenes existente, cree un nuevo volumen lógico denominado
serverb_02_lv con un tamaño de 128 MiB. Agregue un sistema de archivos XFS y móntelo
de forma persistente en /storage/data2.
4.
Cuando haya finalizado, reinicie su máquina serverb y, luego, ejecute el comando lab
lvm-review grade desde su máquina workstation para verificar su trabajo.
214
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Espere hasta que serverb está completamente encendido y luego proceda a ejecutar la
evaluación.
Evaluación
En workstation, ejecute el script lab lvm-review grade para confirmar que ha realizado
correctamente este ejercicio.
[student@workstation ~]$ lab lvm-review grade
Finalizar
En workstation, ejecute el script lab lvm-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab lvm-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
215
capítulo 7 | Administración de volúmenes lógicos
Solución
Administración de volúmenes lógicos
Lista de verificación de rendimiento
En este trabajo de laboratorio, modificará el tamaño de un volumen lógico existente,
agregará recursos de LVM según sea necesario y, luego, agregará un nuevo volumen lógico
con un sistema de archivos XFS montado de manera persistente en este.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Cambiar el tamaño del volumen lógico serverb_01_lv a 768 MiB.
• Crear un nuevo volumen lógico de 128 MiB denominado serverb_02_lv con un sistema
de archivos XFS, montado de forma persistente en /storage/data2.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab lvm-review start. Este comando ejecuta
un script de inicio que determina si la máquina serverb es accesible en la red. También
prepara el almacenamiento en serverb para el ejercicio.
[student@workstation ~]$ lab lvm-review start
En serverb, un volumen lógico denominado serverb_01_lv montado en /storage/data1
se está quedando sin espacio en disco y se le ha solicitado que amplíe su tamaño a 768 MiB. Debe
asegurarse de que serverb_01_lv permanece montado de forma persistente en /storage/
data1.
También se le ha solicitado que cree un nuevo volumen lógico de 128 MiB denominado
serverb_02_lv, montado en /storage/data2. Se le ha indicado que formatee el nuevo
volumen lógico con el sistema de archivos XFS.
El grupo de volúmenes serverb_01_vg contiene los volúmenes lógicos. Desafortunadamente,
no tiene espacio suficiente para ampliar el volumen lógico existente y agregar el nuevo. Se creó
una partición de 512 MiB previamente en /dev/vdb. Se le ha indicado que use 512 MiB adicionales
en /dev/vdb. Debe crear la nueva partición.
Cree una partición de 512 MiB en /dev/vdb; inicialícela como un volumen físico y amplíe el
grupo de volúmenes serverb_01_vg con esta.
1.
1.1.
Inicie sesión en serverb como el usuario student.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
216
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
1.2.
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
Use parted para crear una partición de 512 MiB y configúrela con el tipo Linux LVM.
1.3.
[root@serverb ~]# parted -s /dev/vdb mkpart primary 514MiB 1026MiB
[root@serverb ~]# parted -s /dev/vdb set 2 lvm on
Use udevadm settle para que el sistema registre la nueva partición.
1.4.
[root@servera ~]# udevadm settle
Use pvcreate para inicializar la partición como un PV.
1.5.
[root@serverb ~]# pvcreate /dev/vdb2
Physical volume "/dev/vdb2" successfully created.
Use vgextend para ampliar el VG denominado serverb_01_vg, mediante el nuevo
PV /dev/vdb2.
1.6.
[root@serverb ~]# vgextend serverb_01_vg /dev/vdb2
Volume group "serverb_01_vg" successfully extended
2.
Amplíe el volumen lógico serverb_01_lv a 768 MiB, que incluye el sistema de archivos.
Use lvextend para ampliar el LV serverb_01_lv a 768 MiB.
2.1.
[root@serverb ~]# lvextend -L 768M /dev/serverb_01_vg/serverb_01_lv
Size of logical volume serverb_01_vg/serverb_01_lv changed from 256.00 MiB (64
extents) to 768.00 MiB (192 extents).
Logical volume serverb_01_vg/serverb_01_lv successfully resized.
nota
O podría haber usado la opción -L +512M para cambiar el tamaño del LV.
2.2.
Use xfs_growfs para ampliar el sistema de archivos XFS hasta el resto del espacio
libre del LV.
[root@serverb ~]# xfs_growfs /storage/data1
meta-data=/dev/mapper/serverb_01_vg-serverb_01_lv isize=512
agsize=16384 blks
...output omitted...
RH134-RHEL8.2-es-1-20200928
agcount=4,
217
capítulo 7 | Administración de volúmenes lógicos
nota
En este ejemplo, se muestra el paso xfs_growfs para ampliar el sistema de
archivos. Una alternativa hubiese sido agregar la opción -r al comando lvextend.
3.
En el grupo de volúmenes existente, cree un nuevo volumen lógico denominado
serverb_02_lv con un tamaño de 128 MiB. Agregue un sistema de archivos XFS y móntelo
de forma persistente en /storage/data2.
3.1.
Use lvcreate para crear un LV de 128 MiB denominado serverb_02_lv desde el
VG serverb_01_vg.
[root@serverb ~]# lvcreate -n serverb_02_lv -L 128M serverb_01_vg
Logical volume "serverb_02_lv" created
3.2.
Use mkfs para colocar un sistema de archivos xfs en el LV serverb_02_lv. Use el
nombre del dispositivo LV.
[root@serverb ~]# mkfs -t xfs /dev/serverb_01_vg/serverb_02_lv
meta-data=/dev/serverb_01_vg/serverb_02_lv isize=512
agcount=4, agsize=8192
blks
...output omitted...
3.3.
Use mkdir para crear un punto de montaje en /storage/data2.
[root@serverb ~]# mkdir /storage/data2
3.4.
Agregue la siguiente línea al final de /etc/fstab en serverb:
/dev/serverb_01_vg/serverb_02_lv
3.5.
/storage/data2
xfs
defaults
1 2
Use systemctl daemon-reload para actualizar systemd con la nueva
configuración de /etc/fstab.
[root@servera ~]# systemctl daemon-reload
3.6.
Use mount para verificar la entrada /etc/fstab y monte el nuevo dispositivo del LV
serverb_02_lv.
[root@serverb ~]# mount /storage/data2
Cuando haya finalizado, reinicie su máquina serverb y, luego, ejecute el comando lab
lvm-review grade desde su máquina workstation para verificar su trabajo.
4.
[root@serverb ~]# systemctl reboot
Espere hasta que serverb está completamente encendido y luego proceda a ejecutar la
evaluación.
218
RH134-RHEL8.2-es-1-20200928
capítulo 7 | Administración de volúmenes lógicos
Evaluación
En workstation, ejecute el script lab lvm-review grade para confirmar que ha realizado
correctamente este ejercicio.
[student@workstation ~]$ lab lvm-review grade
Finalizar
En workstation, ejecute el script lab lvm-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab lvm-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
219
capítulo 7 | Administración de volúmenes lógicos
Resumen
En este capítulo, aprendió lo siguiente:
• LVM le permite crear un almacenamiento flexible al asignar espacio en múltiples dispositivos de
almacenamiento.
• Los volúmenes físicos, los grupos de volúmenes y los volúmenes lógicos se administran
mediante diversas herramientas, como pvcreate, vgreduce y lvextend.
• Los volúmenes lógicos se pueden formatear con un sistema de archivos o espacio de
intercambio, y se pueden montar de forma persistente.
• Se puede agregar almacenamiento adicional a los grupos de volúmenes y los volúmenes lógicos
pueden ampliarse de forma dinámica.
220
RH134-RHEL8.2-es-1-20200928
capítulo 8
Implementación de funciones
avanzadas de almacenamiento
Meta
Administrar el almacenamiento con el sistema de
administración de almacenamiento local Stratis y
usar los volúmenes VDO para optimizar el espacio
de almacenamiento en uso.
Objetivos
•
Administrar múltiples capas de almacenamiento
con la administración de almacenamiento local
Stratis.
•
Optimizar el uso del espacio de
almacenamiento con VDO para comprimir
y desduplicar datos en dispositivos de
almacenamiento.
•
Gestión de almacenamiento en capas con
Stratis (y ejercicio guiado)
•
Compresión y desduplicación de
almacenamiento con VDO (y ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Implementación de funciones avanzadas de
almacenamiento
221
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Gestión de almacenamiento en capas con
Stratis
Objetivos
Tras completar esta sección, debería ser capaz de administrar múltiples capas de almacenamiento
con la administración de almacenamiento local Stratis.
Descripción de la arquitectura de Stratis
Stratis es una nueva solución de gestión de almacenamiento local para Linux. Stratis está
diseñado para facilitar la configuración inicial del almacenamiento, realizar cambios en la
configuración del almacenamiento y utilizar funciones avanzadas de almacenamiento.
Importante
Stratis está disponible como preestreno tecnológico. Para obtener información
sobre el alcance de soporte de Red Hat para funciones de vista previa de la
tecnología, consulte el documento Alcance del soporte de las prestaciones de
tecnología [https://access.redhat.com/support/offerings/techpreview].
Se recomienda a los clientes que implementen Stratis que envíen sus comentarios a
Red Hat.
Stratis se ejecuta como un servicio que administra pools (conjuntos) de dispositivos de
almacenamiento físico, y crea y administra de forma transparente los volúmenes para los sistemas
de archivos recién creados.
En Stratis, los sistemas de archivos se compilan desde los conjuntos de dispositivos de disco
compartidos utilizando un concepto conocido como aprovisionamiento ligero. En lugar de asignar
inmediatamente espacio físico de almacenamiento al sistema de archivos cuando se crea, Stratis
dinámicamente asigna ese espacio del conjunto a medida que el sistema de archivos almacena
más datos. Por lo tanto, puede parecer que el sistema de archivos tiene un tamaño de 1 TiB, pero
solo puede tener 100 GiB de almacenamiento real, que se le asignó realmente desde el conjunto.
Puede crear múltiples conjuntos con diferentes dispositivos de almacenamiento. Desde cada pool
(conjunto), puede crear uno o más sistemas de archivos. Actualmente, puedes crear hasta 224
sistemas de archivos por pool (conjunto).
Los componentes que conforman un sistema de archivos administrado por Stratis se crean a partir
de componentes estándar de Linux. Internamente, Stratis se implementa mediante el uso de la
infraestructura del asignador de dispositivos que también se usa para implementar LVM, y los
sistemas de archivos gestionados por Stratis se formatean con XFS.
En el siguiente diagrama, se ilustra cómo se ensamblan los elementos de la solución de
administración de almacenamiento Stratis. Los dispositivos de almacenamiento de bloques,
como discos duros o SSD, se asignan a grupos, cada uno de los cuales contribuye a un
almacenamiento físico en el conjunto. Los sistemas de archivos se crean a partir de los conjuntos, y
el almacenamiento físico se asigna a cada sistema de archivos según sea necesario.
222
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Figura 8.1: Elementos de Stratis
Trabajo con Stratis Storage
Para gestionar los sistemas de archivos con la solución de administración de almacenamiento
Stratis, instale los paquetes stratis-cli y stratisd. El paquete stratis-cli proporciona el comando
stratis, que envía solicitudes de reconfiguración al daemon del sistema stratisd. El paquete
stratisd proporciona el servicio stratisd, que maneja los pedidos de reconfiguración y administra
y monitorea los dispositivos de bloque, los conjuntos y los sistemas de archivos que utiliza Stratis.
Advertencia
Los sistemas de archivos creados por Stratis solo deben volver a configurarse con
herramientas y comandos de Stratis.
Stratis usa metadatos almacenados para reconocer pools (conjuntos)
administrados, volúmenes y sistemas de archivos. La configuración manual de los
sistemas de archivos Stratis con comandos que no son de Stratis podría causar la
pérdida de esos metadatos e impedir que Stratis reconozca los sistemas de archivos
que ha creado.
Instalación y habilitación de Stratis
Para usar Stratis, asegúrese de que el software esté instalado y de que el servicio stratisd se
esté ejecutando.
• Instale stratis-cli y stratisd con el comando yum install.
RH134-RHEL8.2-es-1-20200928
223
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
[root@host ~]# yum install stratis-cli stratisd
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
• Active el servicio stratisd con el comando systemctl.
[root@host ~]# systemctl enable --now stratisd
Montaje de almacenamiento de bloques en grupos de Stratis
Las siguientes son operaciones de administración comunes realizadas con la solución de
administración de almacenamiento Stratis.
• Crear pools (conjuntos) de uno o más dispositivos de bloque con el comando stratis pool
create.
[root@host ~]# stratis pool create pool1 /dev/vdb
Cada pool (conjunto) es un subdirectorio en el directorio /stratis.
• Usar el comando stratis pool list para ver la lista de pools (conjuntos) disponibles.
[root@host ~]# stratis pool list
Name
Total Physical Size Total Physical Used
pool1
5 GiB
52 MiB
Advertencia
El comando stratis pool list es muy importante porque le muestra cuánto
espacio de almacenamiento está en uso (y, por lo tanto, cuánto aún está disponible)
en los conjuntos.
Si un conjunto se queda sin almacenamiento, los datos escritos en los sistemas de
archivos que pertenecen a ese conjunto se pierden en silencio.
• Usar el comando stratis pool add-data para agregar dispositivos de bloque adicionales a
un pool (conjunto).
[root@host ~]# stratis pool add-data pool1 /dev/vdc
• Usar el comando stratis blockdev list para ver los dispositivos de bloque de un pool
(conjunto).
[root@host ~]# stratis blockdev list pool1
Pool Name Device Node
Physical Size
State
pool1
/dev/vdb
5 GiB In-use
pool1
/dev/vdc
5 GiB In-use
224
Tier
Data
Data
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Administración de sistemas de archivos de Stratis
• Usar el comando stratis filesystem create para crear un sistema de archivos de un
conjunto.
[root@host ~]# stratis filesystem create pool1 fs1
Los enlaces a los sistemas de archivos Stratis están en el directorio /stratis/pool1.
• Usar el comando stratis filesystem list para ver la lista de sistemas de archivos
disponibles.
[root@host ~]# stratis filesystem list
Pool Name Name Used
Created
pool1
fs1
546 MiB Sep 23 2020 13:11
Device
/stratis/pool1/fs1
UUID
31b9363badd...
Advertencia
El comando df informará que los nuevos sistemas de archivos XFS administrados
por Stratis tienen un tamaño de 1 TiB, independientemente de la cantidad de
almacenamiento físico que esté actualmente asignada al sistema de archivos.
Debido a que el sistema de archivos se aprovisiona de forma ligera, es posible
que el conjunto no tenga suficiente almacenamiento real para hacer una copia
de seguridad de todo el sistema de archivos, especialmente si otros sistemas de
archivos en el conjunto utilizan todo el almacenamiento disponible.
Por lo tanto, es posible utilizar todo el espacio en el grupo de almacenamiento,
mientras que df aún informa que el sistema de archivos tiene espacio disponible.
Si el conjunto no tiene almacenamiento disponible para el sistema de archivos, es
posible que se produzca un error al intentar escribir en ese sistema de archivos, lo
que provocará la pérdida de datos.
Utilice stratis pool list para monitorear el almacenamiento real restante
disponible para los conjuntos de Stratis.
• Puede crear una snapshot de un sistema de archivos administrado por Stratis con el comando
stratis filesystem snapshot. Las capturas de instantáneas son independientes de los
sistemas de archivos de origen.
[root@host ~]# stratis filesystem snapshot pool1 fs1 snapshot1
Montaje de forma persistente de sistemas de archivos de
Stratis
Para asegurarse de que los sistemas de archivos Stratis se monten de forma persistente, edite
/etc/fstab y especifique los detalles del sistema de archivos. En el siguiente comando, se
muestra el UUID del sistema de archivos que debe usar en /etc/fstab para identificar el sistema
de archivos.
[root@host ~]# lsblk --output=UUID /stratis/pool1/fs1
UUID
31b9363b-add8-4b46-a4bf-c199cd478c55
RH134-RHEL8.2-es-1-20200928
225
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
La siguiente es una entrada de ejemplo en el archivo /etc/fstab para montar de forma
persistente un sistema de archivos Stratis. Esta entrada de ejemplo es una sola línea extensa en el
archivo.
UUID=31b9363b-add8-4b46-a4bf-c199cd478c55 /dir1 xfs defaults,xsystemd.requires=stratisd.service 0 0
La opción de montaje x-systemd.requires=stratisd.service retrasa el montaje del
sistema de archivos hasta después de que systemd inicia stratisd.service durante el
proceso de arranque.
Importante
Si no incluye la opción de montaje x-systemd.requires=stratisd.service
en /etc/fstab para cada sistema de archivos Stratis, la máquina no se iniciará
correctamente y se abortará en caso de emergencia.target la próxima vez que
se reinicie.
Referencias
Para obtener más información, consulte el capítulo Gestión de almacenamiento local
en capas con Stratis de la Guía de configuración y administración de sistemas de
archivos con Red Hat Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/configuring_and_managing_file_systems/
Almacenamiento de Stratis
https://stratis-storage.github.io/
Lecciones que Stratis aprendió de ZFS, Btrfs y Linux Volume Manager
https://opensource.com/article/18/4/stratis-lessons-learned
226
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Ejercicio Guiado
Gestión de almacenamiento en capas con
Stratis
En este ejercicio, usará Stratis para crear sistemas de archivos a partir de grupos de
almacenamiento provistos por dispositivos de almacenamiento físicos.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un sistema de archivos con aprovisionamiento ligero (thin provisioned) con la
solución de administración de almacenamiento Stratis.
• Verificar que los volúmenes Stratis crezcan dinámicamente para admitir crecimiento de
datos en tiempo real.
• Acceder a los datos desde la instantánea de un sistema de archivos con aprovisionamiento
ligero (thin provisioned).
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation , ejecute lab advstorage-stratis start para iniciar el ejercicio.
Este script configura el entorno correctamente y garantiza que los discos adicionales en
servera estén limpios.
[student@workstation ~]$ lab advstorage-stratis start
1.
Desde workstation, abra una sesión de SSH en servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Cambie al usuario root.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Instale los paquetes stratisd y stratis-cli con el comando yum.
RH134-RHEL8.2-es-1-20200928
227
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
[root@servera ~]# yum install stratisd stratis-cli
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
4. Active el servicio stratisd con el comando systemctl.
[root@servera ~]# systemctl enable --now stratisd
5.
Asegúrese de que el pool (conjunto) de Stratis stratispool1 existe con el dispositivo de
bloque /dev/vdb.
5.1.
Cree un pool (conjunto) de Stratis denominado stratispool1 con el comando
stratis pool create.
[root@servera ~]# stratis pool create stratispool1 /dev/vdb
5.2.
Verifique la disponibilidad de stratispool1 con el comando stratis pool
list.
[root@servera ~]# stratis pool list
Name
Total Physical
stratispool1 5 GiB / 37.63 MiB / 4.96 GiB
Observe el tamaño del pool (conjunto) en la salida anterior.
6. Amplíe la capacidad de stratispool1 con el dispositivo de bloque /dev/vdc.
6.1.
Agregue el dispositivo de bloque /dev/vdc a stratispool1 con el comando
stratis pool add-data.
[root@servera ~]# stratis pool add-data stratispool1 /dev/vdc
6.2.
Verifique el tamaño de stratispool1 con el comando stratis pool list.
[root@servera ~]# stratis pool list
Name
Total Physical
stratispool1 10 GiB / 41.63 MiB / 9.96 GiB
Como se muestra arriba, el tamaño del pool (conjunto) stratispool1 aumentó
cuando agregó el dispositivo de bloque.
6.3.
Verifique los dispositivos de bloque que son actualmente miembros de
stratispool1 con el comando stratis blockdev list.
[root@servera ~]# stratis blockdev list stratispool1
Pool Name
Device Node Physical Size Tier
stratispool1 /dev/vdb
5 GiB Data
stratispool1 /dev/vdc
5 GiB Data
228
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
7.
Agregue un sistema de archivos con aprovisionamiento ligero (thin provisioned)
denominado stratis-filesystem1 en el pool (conjunto) stratispool1. Monte el
sistema de archivos en /stratisvol. Cree un archivo en el sistema de archivos stratisfilesystem1 denominado file1 que contenga el texto Hello World!.
7.1.
Cree el sistema de archivos con aprovisionamiento ligero (thin provisioned)
stratis-filesystem1 en stratispool1 con el comando stratis
filesystem create. Puede tardar hasta un minuto para que se complete el
comando.
[root@servera ~]# stratis filesystem create stratispool1 stratis-filesystem1
7.2.
Verifique la disponibilidad de stratis-filesystem1 con el comando stratis
filesystem list.
[root@servera ~]# stratis filesystem list
Pool Name
Name
Used
Created
UUID
stratispool1 stratis-filesystem1 546 MiB Mar 29 2019 07:48
stratispool1/stratis-filesystem1 8714...e7db
Device
/stratis/
Observe el uso actual de stratis-filesystem1. Este uso del sistema de archivos
aumenta a pedido en los siguientes pasos.
7.3.
Cree un directorio denominado /stratisvol con el comando mkdir.
[root@servera ~]# mkdir /stratisvol
7.4.
Monte stratis-filesystem1 en /stratisvol con el comando mount.
[root@servera ~]# mount /stratis/stratispool1/stratis-filesystem1 /stratisvol
7.5.
Verifique que el volumen stratis-filesystem1 esté montado n /stratisvol
con el comando mount.
[root@servera ~]# mount
...output omitted...
/dev/mapper/stratis-1-5c0e...12b9-thin-fs-8714...e7db on /stratisvol type xfs
(rw,relatime,seclabel,attr2,inode64,sunit=2048,swidth=2048,noquota)
7.6.
Cree un archivo de texto /stratisvol/file1 con el comando echo.
[root@servera ~]# echo "Hello World!" > /stratisvol/file1
8. Verifique que el sistema de archivos con aprovisionamiento ligero (thin provisioned)
stratis-filesystem1 crece dinámicamente a medida que crecen los datos en el
sistema de archivos.
8.1.
Vea el uso actual de stratis-filesystem1 con el comando stratis
filesystem list.
RH134-RHEL8.2-es-1-20200928
229
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
[root@servera ~]# stratis filesystem list
Pool Name
Name
Used
Created
UUID
stratispool1 stratis-filesystem1 546 MiB Mar 29 2019 07:48
stratispool1/stratis-filesystem1 8714...e7db
8.2.
Device
/stratis/
Cree un archivo de 2 GiB en stratis-filesystem1 con el comando dd. Puede
tardar hasta un minuto para que se complete el comando.
[root@servera ~]# dd if=/dev/urandom of=/stratisvol/file2 bs=1M count=2048
8.3.
Verifique el uso de stratis-filesystem1 con el comando stratis
filesystem list.
[root@servera ~]# stratis filesystem list
Pool Name
Name
Used
Created
UUID
stratispool1 stratis-filesystem1 2.53 GiB Mar 29 2019 07:48
stratispool1/stratis-filesystem1 8714...e7db
Device
/stratis/
La salida anterior muestra que aumentó el uso de stratis-filesystem1. El
aumento en el uso confirma que el sistema de archivos con aprovisionamiento ligero
(thin provisioned) se amplió dinámicamente para alojar el crecimiento de datos en
tiempo real que causó al crear /stratisvol/file2.
9. Cree una instantánea de stratis-filesystem1 denominada stratis-filesystem1snap. La instantánea le proporcionará acceso a cualquier archivo que se elimine de
stratis-filesystem1.
9.1.
Cree una instantánea de stratis-filesystem1 con el comando stratis
filesystem snapshot. Puede tardar hasta un minuto para que se complete el
comando.
El siguiente comando es muy extenso y debe ingresarse en una sola línea.
[root@servera ~]# stratis filesystem snapshot stratispool1 stratis-filesystem1
stratis-filesystem1-snap
9.2.
Verifique la disponibilidad de la instantánea con el comando stratis filesystem
list.
[root@servera ~]# stratis filesystem list
...output omitted...
stratispool1 stratis-filesystem1-snap 2.53 GiB Mar 29 2019 10:28
stratispool1/stratis-filesystem1-snap 291d...8a16
9.3.
/stratis/
Elimine el archivo /stratisvol/file1.
[root@servera ~]# rm /stratisvol/file1
rm: remove regular file '/stratisvol/file1'? y
230
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
9.4. Cree el directorio /stratisvol-snap con el comando mkdir.
[root@servera ~]# mkdir /stratisvol-snap
9.5.
Monte la instantánea stratis-filesystem1-snap en /stratisvol-snap con
el comando mount.
El siguiente comando es muy extenso y debe ingresarse en una sola línea.
[root@servera ~]# mount /stratis/stratispool1/stratis-filesystem1-snap /
stratisvol-snap
9.6. Confirme que aún puede acceder al archivo que eliminó de stratis-filesystem1
con la instantánea stratis-filesystem1-snap.
[root@servera ~]# cat /stratisvol-snap/file1
Hello World!
10. Desmonte /stratisvol y /stratisvol-Snap con el comando umount.
[root@servera ~]# umount /stratisvol-snap
[root@servera ~]# umount /stratisvol
11. Elimine el sistema de archivos con aprovisionamiento ligero (thin provisioned) stratisfilesystem1 y su instantánea stratis-filesystem1-snap del sistema.
11.1.
Destruya stratis-filesystem1-snap con el comando stratis filesystem
destroy.
[root@servera ~]# stratis filesystem destroy stratispool1 stratis-filesystem1-snap
11.2. Destruya stratis-filesystem1 con el comando stratis filesystem
destroy.
[root@servera ~]# stratis filesystem destroy stratispool1 stratis-filesystem1
11.3. Salga de la shell del usuario root y cierre sesión en servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el comando lab advstorage-stratis finish para terminar
este ejercicio. Este script elimina las particiones y los archivos creados durante el ejercicio para
garantizar que el entorno quede limpio.
RH134-RHEL8.2-es-1-20200928
231
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
[student@workstation ~]$ lab advstorage-stratis finish
Esto concluye el ejercicio guiado.
232
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Compresión y desduplicación de
almacenamiento con VDO
Objetivos
Tras completar esta sección, debería ser capaz de optimizar el uso del espacio de almacenamiento
con VDO para comprimir y desduplicar datos en dispositivos de almacenamiento.
Descripción del optimizador de datos virtual
Red Hat Enterprise Linux 8 incluye el controlador del optimizador de datos virtual (VDO), que
optimiza la huella de datos en dispositivos de bloque. VDO es un controlador de asignación de
dispositivos Linux que reduce el uso de espacio en disco en dispositivos de bloque y minimiza la
replicación de datos, lo que ahorra espacio en disco e incluso aumenta el rendimiento de datos.
VDO incluye dos módulos de kernel, el módulo kvdo para controlar la compresión de datos de
forma transparente y el módulo uds para la desduplicación.
La capa de VDO se coloca encima de un dispositivo de almacenamiento de bloque existente,
como un dispositivo RAID o un disco local. Esos dispositivos de bloque también pueden ser
dispositivos cifrados. Las capas de almacenamiento, como los volúmenes lógicos LVM y los
sistemas de archivos, se colocan sobre un dispositivo VDO. En el siguiente diagrama, se muestra
la ubicación de VDO en una infraestructura que consiste en máquinas virtuales KVM que utilizan
dispositivos de almacenamiento optimizados.
Figura 8.2: Máquinas virtuales basadas en VDO
VDO aplica tres fases a los datos en el siguiente orden para reducir la huella en los dispositivos de
almacenamiento:
1.
La eliminación de bloque cero filtra los bloques de datos que contienen solo ceros (0) y
registra la información de esos bloques solo en los metadatos. Los bloques de datos distintos
de cero se pasan a la siguiente fase de procesamiento. Esta fase habilita la función de
aprovisionamiento ligero (thin provisioning) en los dispositivos de VDO.
2.
La desduplicación elimina los bloques de datos redundantes. Cuando crea múltiples copias
de los mismos datos, VDO detecta los bloques de datos duplicados y actualiza los metadatos
para usar esos bloques duplicados como referencias al bloque de datos original sin crear
bloques de datos redundantes. El módulo del kernel del servicio de desduplicación universal
RH134-RHEL8.2-es-1-20200928
233
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
(UDS) comprueba la redundancia de los datos a través de los metadatos que mantiene. Este
módulo de kernel se envía como parte del VDO.
3.
La compresión es la última fase. El módulo de kernel kvdo comprime los bloques de datos con
la compresión LZ4 y los agrupa en bloques de 4 KB.
Implementación del optimizador de datos virtual
Los dispositivos lógicos que crea con VDO se denominan volúmenes de VDO. Los volúmenes
de VDO son similares a las particiones de disco; puede formatear los volúmenes con el tipo de
sistema de archivos deseado y montarlo como un sistema de archivos regular. También puede usar
un volumen de VDO como un volumen físico de LVM.
Para crear un volumen de VDO, especifique un dispositivo de bloque y el nombre del dispositivo
lógico que VDO presenta al usuario. O puede especificar el tamaño lógico del volumen de VDO.
El tamaño lógico del volumen de VDO puede ser mayor que el tamaño físico del dispositivo de
bloque real.
Dado que los volúmenes de VDO se aprovisionan de forma ligera (thin provisioned), los usuarios
solo pueden ver el espacio lógico en uso y desconocen el espacio físico real disponible. Si
no especifica el tamaño lógico al crear el volumen, VDO asume el tamaño físico real como el
tamaño lógico del volumen. Esta relación 1:1 entre la asignación del tamaño lógico y el tamaño
físico proporciona un mejor rendimiento, pero también un uso menos eficiente del espacio de
almacenamiento. De acuerdo con los requisitos de su infraestructura, debe priorizar el rendimiento
o la eficiencia del espacio.
Cuando el tamaño lógico de un volumen de VDO es mayor que el tamaño físico real, debe
monitorear de forma proactiva las estadísticas del volumen para ver el uso real con el comando
vdostats --verbose.
Habilitación de VDO
Instale los paquetes vdo y kmod-kvdo para habilitar VDO en el sistema.
[root@host ~]# yum install vdo kmod-kvdo
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
Creación de un volumen de VDO
Para crear un volumen de VDO, ejecute el comando vdo create.
[root@host ~]# vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=50G
...output omitted...
Si omite el tamaño lógico, el volumen de VDO resultante tiene el mismo tamaño que su dispositivo
físico.
Cuando el volumen de VDO está en su lugar, puede formatearlo con el tipo de sistema de archivos
deseado y montarlo conforme a la jerarquía del sistema de archivos en su sistema.
234
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Análisis de un volumen de VDO
Para analizar un volumen de VDO, ejecute el comando vdo status. Este comando muestra un
informe sobre el sistema de VDO y el estado del volumen de VDO en formato YAML. También
muestra los atributos del volumen de VDO. Use la opción --name= para especificar el nombre
de un volumen específico. Si omite el nombre del volumen específico, la salida del comando vdo
status muestra el estado de todos los volúmenes de VDO.
[root@host ~]# vdo status --name=vdo1
...output omitted...
El comando vdo list muestra la lista de volúmenes de VDO que se han iniciado actualmente.
Puede iniciar y detener un volumen de VDO con los comandos vdo start y vdo stop,
respectivamente.
Referencias
Para obtener más información, consulte el capítulo Cómo empezar con VDO
de la Guía de desduplicación y compresión de almacenamiento de Red Hat
Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/deduplicating_and_compressing_storage/
Introducción al optimizador de datos virtual
https://rhelblog.redhat.com/2018/04/11/introducing-virtual-data-optimizer-toreduce-cloud-and-on-premise-storage-costs/
RH134-RHEL8.2-es-1-20200928
235
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Ejercicio Guiado
Compresión y desduplicación de
almacenamiento con VDO
En este ejercicio, creará un volumen de VDO, lo formateará con un sistema de archivos,
lo montará, almacenará datos en él e investigará el impacto de la compresión y la
desduplicación en el espacio de almacenamiento realmente usado.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un volumen con el optimizador de datos virtual, formatearlo con un tipo de sistema
de archivos y montar un sistema de archivos en él.
• Investigar el impacto de la desduplicación y compresión de datos en un volumen del
optimizador de datos virtual.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab advstorage-vdo start para iniciar el ejercicio. Este
script garantiza que no haya particiones en el disco /dev/vdd y configura el entorno
correctamente.
[student@workstation ~]$ lab advstorage-vdo start
1.
Desde workstation, abra una sesión de SSH en servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Cree el volumen de VDO vdo1, con el dispositivo /dev/vdd. Establezca su tamaño lógico
en 50 GB.
2.1.
Cambie al usuario root.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
2.2.
Confirme que el paquete vdo esté instalado con el comando yum.
[root@servera ~]# yum list installed vdo
Installed Packages
vdo.x86_64
6.2.2.117-13.el8
236
@rhel-8-for-x86_64-baseos-rpms
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
2.3.
Cree el volumen vdo1 con el comando vdo create.
[root@servera ~]# vdo create --name=vdo1 \
--device=/dev/vdd --vdoLogicalSize=50G
...output omitted...
2.4.
Verifique la disponibilidad del volumen vdo1 con el comando vdo list.
[root@servera ~]# vdo list
vdo1
3.
Verifique que el volumen vdo1 tenga las funciones de compresión y desduplicación
habilitadas.
Use grep para buscar las líneas que contienen la cadena Deduplication y
Compression en la salida del comando vdo status --name=vdo1.
[root@servera ~]# vdo status --name=vdo1 \
| grep -E 'Deduplication|Compression'
Compression: enabled
Deduplication: enabled
4. Asigne al volumen vdo1 el formato de tipo de sistema de archivos XFS y móntelo en /mnt/
vdo1.
4.1.
Use el comando udevadm para verificar que se haya creado el nuevo archivo de
dispositivo VDO.
[root@servera ~]# udevadm settle
4.2.
Asigne al volumen vdo1 el formato del sistema de archivos XFS con el comando
mkfs.
[root@servera ~]# mkfs.xfs -K /dev/mapper/vdo1
...output omitted...
La opción -K en el comando mkfs.xfs anterior evita que los bloques no usados en
el sistema de archivos se desechen inmediatamente, lo que permite que el comando
regrese más rápidamente.
4.3. Cree un directorio /mnt/vdo1 con el comando mkdir.
[root@servera ~]# mkdir /mnt/vdo1
4.4. Monte el volumen vdo1 en /mnt/vdo1 con el comando mount.
[root@servera ~]# mount /dev/mapper/vdo1 /mnt/vdo1
4.5.
Verifique que el volumen vdo1 esté correctamente montado con el comando mount.
RH134-RHEL8.2-es-1-20200928
237
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
[root@servera ~]# mount
...output omitted...
/dev/mapper/vdo1 on /mnt/vdo1 type xfs
(rw,relatime,seclabel,attr2,inode64,noquota)
5.
Cree tres copias del mismo archivo denominado /root/install.img en el volumen
vdo1. Compare las estadísticas del volumen para verificar la desduplicación y la
compresión de datos que tienen lugar en el volumen. La salida anterior puede variar en su
sistema.
5.1.
Vea las estadísticas iniciales y el estado del volumen con el comando vdostats.
[root@servera ~]# vdostats --human-readable
Device
Size
Used Available Use% Space saving%
/dev/mapper/vdo1
5.0G
3.0G
2.0G 60%
99%
Observe que 3 GB del volumen ya están en uso porque cuando se crea, el volumen
VDO reserva 3-4 GB para sí mismo. También observe que el valor 99% en el campo
Space saving% (% de ahorro de espacio) indica que no ha creado ningún contenido
hasta el momento en el volumen, lo que contribuye a todo el espacio del volumen
guardado.
5.2.
Copie /root/install.img en /mnt/vdo1/install.img.1 y verifique las
estadísticas del volumen. Puede tardar hasta un minuto para copiar el archivo.
[root@servera ~]# cp /root/install.img /mnt/vdo1/install.img.1
[root@servera ~]# vdostats --human-readable
Device
Size
Used Available Use% Space saving%
/dev/mapper/vdo1
5.0G
3.4G
1.6G 68%
5%
Observe que el valor del campo Used (Usado) aumentó de 3,0G a 3,4G porque
copió un archivo en el volumen, y eso ocupa un poco de espacio. Además, observe
que el valor del campo Space saving% (% de ahorro de espacio) disminuyó de 99%
a 5% porque inicialmente no había contenido en el volumen, lo que contribuía al poco
uso del espacio del volumen y al gran ahorro de espacio del volumen hasta que creó
un archivo. El ahorro de espacio del volumen es considerablemente bajo porque creó
una copia única del archivo en el volumen y no hay nada que desduplicar.
5.3.
Copie /root/install.img en /mnt/vdo1/install.img.2 y verifique las
estadísticas del volumen. Puede tardar hasta un minuto para copiar el archivo.
[root@servera ~]# cp /root/install.img /mnt/vdo1/install.img.2
[root@servera ~]# vdostats --human-readable
Device
Size
Used Available Use% Space saving%
/dev/mapper/vdo1
5.0G
3.4G
1.6G 68%
51%
Observe que el espacio de volumen usado no cambió, en su lugar, el porcentaje
del espacio de volumen guardado aumentó, lo que demuestra que se produjo
la desduplicación de datos para reducir el consumo de espacio para las copias
redundantes del mismo archivo. El valor de Space saving% (% de ahorro de
espacio) en la salida anterior puede variar en su sistema.
5.4.
238
Salga de la shell del usuario root y cierre sesión en servera.
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecutelab advstorage-vdo finish para terminar este ejercicio. Este
script elimina los archivos creados durante el ejercicio para garantizar que el entorno quede limpio.
[student@workstation ~]$ lab advstorage-vdo finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
239
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Trabajo de laboratorio
Implementación de funciones avanzadas
de almacenamiento
En este ejercicio, utilizará la solución de administración de almacenamiento Stratis para crear
sistemas de archivos que crecen para adaptarse a las crecientes demandas de datos, y el
optimizador de datos virtual para crear volúmenes para la utilización eficiente del espacio de
almacenamiento.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un sistema de archivos con aprovisionamiento ligero (thin provisioned) utilizando la
solución de administración de almacenamiento Stratis.
• Verificar que los volúmenes Stratis crezcan dinámicamente para admitir crecimiento de
datos en tiempo real.
• Acceder a los datos desde la instantánea de un sistema de archivos con aprovisionamiento
ligero (thin provisioned).
• Crear un volumen con el optimizador de datos virtual y montarlo en un sistema de
archivos.
• Investigar el impacto de la desduplicación y compresión de datos en un volumen del
optimizador de datos virtual.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab advstorage-review start para iniciar el ejercicio. Este
script configura el entorno correctamente y garantiza que los discos adicionales en serverb
estén limpios.
[student@workstation ~]$ lab advstorage-review start
1.
Desde workstation, abra una sesión de SSH en serverb como student.
2.
Cambie al usuario root.
3.
Instale los paquetes stratisd y stratis-cli con yum.
4.
Inicie y habilite el servicio stratisd con el comando systemctl.
5.
Cree un pool (conjunto) de Stratis labpool que contiene el dispositivo de bloque /dev/
vdb.
6.
Amplíe la capacidad de labpool con el disco /dev/vdc disponible en el sistema.
7.
Cree un sistema de archivos con aprovisionamiento ligero (thin provisioned) denominado
labfs en el pool (conjunto) labpool. Monte este sistema de archivos en /
240
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
labstratisvol para que persista tras los reinicios. Cree un archivo denominado labfile1
que contenga el textoHello World! en el sistema de archivos labfs. No olvide usar la
opción de montaje x-systemd. requires=stratisd.service en /etc/fstab.
8.
Verifique que el sistema de archivos con aprovisionamiento ligero (thin provisioned) labfs
crece dinámicamente a medida que crecen los datos en el sistema de archivos agregando
labfile2 de 2 GiB.
9.
Cree una instantánea denominada labfs-snap del sistema de archivos labfs. La
instantánea le permite acceder a cualquier archivo que se elimina de labfs.
10.
Cree el volumen de VDO labvdo con el dispositivo /dev/vdd. Establezca su tamaño lógico
en 50 GB.
11.
Monte el volumen labvdo en /labvdovol con el sistema de archivos XFS
para que persista tras los reinicios. No olvide usar la opción de montaje xsystemd.requires=vdo.service en /etc/fstab.
12.
Cree tres copias del mismo archivo denominado /root/install.img en el volumen
labvdo. Compare las estadísticas del volumen para verificar la desduplicación y la
compresión de datos que tienen lugar en el volumen.
13.
Reinicie serverb. Verifique que el volumen labvdo esté montado en /labvdovol después
de que el sistema se inicie nuevamente.
Evaluación
En workstation, ejecute el comando lab advstorage-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab advstorage-review grade
Finalizar
En workstation, ejecutelab advstorage-review finish para terminar este ejercicio.
Este script elimina las particiones y los archivos creados durante el ejercicio para garantizar que el
entorno quede limpio.
[student@workstation ~]$ lab advstorage-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
241
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Solución
Implementación de funciones avanzadas
de almacenamiento
En este ejercicio, utilizará la solución de administración de almacenamiento Stratis para crear
sistemas de archivos que crecen para adaptarse a las crecientes demandas de datos, y el
optimizador de datos virtual para crear volúmenes para la utilización eficiente del espacio de
almacenamiento.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un sistema de archivos con aprovisionamiento ligero (thin provisioned) utilizando la
solución de administración de almacenamiento Stratis.
• Verificar que los volúmenes Stratis crezcan dinámicamente para admitir crecimiento de
datos en tiempo real.
• Acceder a los datos desde la instantánea de un sistema de archivos con aprovisionamiento
ligero (thin provisioned).
• Crear un volumen con el optimizador de datos virtual y montarlo en un sistema de
archivos.
• Investigar el impacto de la desduplicación y compresión de datos en un volumen del
optimizador de datos virtual.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab advstorage-review start para iniciar el ejercicio. Este
script configura el entorno correctamente y garantiza que los discos adicionales en serverb
estén limpios.
[student@workstation ~]$ lab advstorage-review start
Desde workstation, abra una sesión de SSH en serverb como student.
1.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
Cambie al usuario root.
2.
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
242
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
3.
Instale los paquetes stratisd y stratis-cli con yum.
[root@serverb ~]# yum install stratisd stratis-cli
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
4.
Inicie y habilite el servicio stratisd con el comando systemctl.
[root@serverb ~]# systemctl enable --now stratisd
5.
Cree un pool (conjunto) de Stratis labpool que contiene el dispositivo de bloque /dev/
vdb.
5.1.
Cree el pool (conjunto) de Stratis labpool con el comando stratis pool create.
[root@serverb ~]# stratis pool create labpool /dev/vdb
5.2.
Verifique la disponibilidad de labpool con el comando stratis pool list.
[root@serverb ~]# stratis pool list
Name
Total Physical
labpool 5 GiB / 37.63 MiB / 4.96 GiB
Observe el tamaño del pool (conjunto) en la salida anterior.
6.
Amplíe la capacidad de labpool con el disco /dev/vdc disponible en el sistema.
6.1.
Agregue el dispositivo de bloque /dev/vdc a labpool con el comando stratis
pool add-data.
[root@serverb ~]# stratis pool add-data labpool /dev/vdc
6.2.
Verifique el tamaño de labpool con el comando stratis pool list.
[root@serverb ~]# stratis pool list
Name
Total Physical
labpool 10 GiB / 41.63 MiB / 9.96 GiB
La salida anterior muestra que el tamaño de labpool ha aumentado después de
agregar un nuevo disco al pool (conjunto).
6.3.
Use el comando stratis blockdev list para mostrar los dispositivos de bloque
que ahora son miembros de labpool.
[root@serverb ~]# stratis blockdev list labpool
Pool Name Device Node Physical Size Tier
labpool
/dev/vdb
5 GiB Data
labpool
/dev/vdc
5 GiB Data
7.
Cree un sistema de archivos con aprovisionamiento ligero (thin provisioned) denominado
labfs en el pool (conjunto) labpool. Monte este sistema de archivos en /
RH134-RHEL8.2-es-1-20200928
243
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
labstratisvol para que persista tras los reinicios. Cree un archivo denominado labfile1
que contenga el textoHello World! en el sistema de archivos labfs. No olvide usar la
opción de montaje x-systemd. requires=stratisd.service en /etc/fstab.
7.1.
Cree el sistema de archivos con aprovisionamiento ligero (thin provisioned)
denominado labfs en labpool con el comando stratis filesystem create.
Puede tardar hasta un minuto para que se complete el comando.
[root@serverb ~]# stratis filesystem create labpool labfs
7.2.
Verifique la disponibilidad de labfs con el comando stratis filesystem list.
[root@serverb ~]# stratis filesystem list
Pool Name
Name
Used
UUID
labpool labfs 546 MiB Mar 29 2019 07:48
Created
Device
/stratis/labpool/labfs
9825...d6ca
Observe el uso actual de labfs. Este uso del sistema de archivos aumenta a pedido en
los siguientes pasos.
7.3.
Determine el UUID de labfs con el comando lsblk.
[root@serverb ~]# lsblk --output=UUID /stratis/labpool/labfs
UUID
9825e289-fb08-4852-8290-44d1b8f0d6ca
7.4.
Edite /etc/fstab para que el sistema de archivos con aprovisionamiento ligero (thin
provisioned)labfs se monte en el momento de arranque. Use el UUID que determinó
en el paso anterior. A continuación se muestra la línea que debe agregar a /etc/
fstab. Puede usar el comando vi /etc/fstab para editar el archivo.
UUID=9825...d6ca /labstratisvol
0 0
7.5.
xfs defaults,x-systemd.requires=stratisd.service
Cree un directorio denominado /labstratisvol con el comando mkdir.
[root@serverb ~]# mkdir /labstratisvol
7.6.
Monte el sistema de archivos con aprovisionamiento ligero (thin provisioned) labfs
con el comando mount para confirmar que el archivo /etc/fstab contiene las
entradas correspondientes.
[root@serverb ~]# mount /labstratisvol
Si el comando anterior produce algún error, revise el archivo /etc/fstab y asegúrese
de que contenga las entradas correspondientes.
7.7.
Cree un archivo de texto denominado /labstratisvol/labfile1 con el comando
echo.
[root@serverb ~]# echo "Hello World!" > /labstratisvol/labfile1
244
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
8.
Verifique que el sistema de archivos con aprovisionamiento ligero (thin provisioned) labfs
crece dinámicamente a medida que crecen los datos en el sistema de archivos agregando
labfile2 de 2 GiB.
8.1.
Vea el uso actual de labfs con el comando stratis filesystem list.
[root@serverb ~]# stratis filesystem list
Pool Name
Name
Used
UUID
labpool labfs 546 MiB Mar 29 2019 07:48
8.2.
Created
Device
/stratis/labpool/labfs
9825...d6ca
Cree un archivo de 2 GiB en labfs con el comando dd. Puede tardar hasta un minuto
para que se complete el comando.
[root@serverb ~]# dd if=/dev/urandom of=/labstratisvol/labfile2 bs=1M count=2048
8.3.
Verifique que el uso de labfs ha aumentado con el comando stratis filesystem
list.
[root@serverb ~]# stratis filesystem list
Pool Name
Name
Used
UUID
labpool labfs 2.53 GiB Mar 29 2019 07:48
9.
Created
Device
/stratis/labpool/labfs
9825...d6ca
Cree una instantánea denominada labfs-snap del sistema de archivos labfs. La
instantánea le permite acceder a cualquier archivo que se elimina de labfs.
9.1.
Cree una instantánea de labfs con el comando stratis filesystem snapshot.
Puede tardar hasta un minuto para que se complete el comando.
[root@serverb ~]# stratis filesystem snapshot labpool \
labfs labfs-snap
9.2.
Verifique la disponibilidad de la instantánea con el comando stratis filesystem
list.
[root@serverb ~]# stratis filesystem list
...output omitted...
labpool labfs-snap 2.53 GiB Mar 29 2019 10:28
291d...8a16
9.3.
/stratis/labpool/labfs-snap
Elimine el archivo /labstratisvol/labfile1.
[root@serverb ~]# rm /labstratisvol/labfile1
rm: remove regular file '/labstratisvol/labfile1'? y
9.4. Cree el directorio /labstratisvol-snap con el comando mkdir.
[root@serverb ~]# mkdir /labstratisvol-snap
RH134-RHEL8.2-es-1-20200928
245
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
9.5.
Monte la instantánea labfs-snap en /labstratisvol-snap con el comando
mount.
[root@serverb ~]# mount /stratis/labpool/labfs-snap \
/labstratisvol-snap
9.6. Confirme que aún puede acceder al archivo que eliminó labfs con la instantánea
labfs-snap.
[root@serverb ~]# cat /labstratisvol-snap/labfile1
Hello World!
10.
Cree el volumen de VDO labvdo con el dispositivo /dev/vdd. Establezca su tamaño lógico
en 50 GB.
10.1. Cree el volumen labvdo con el comando vdo create.
[root@serverb ~]# vdo create --name=labvdo --device=/dev/vdd --vdoLogicalSize=50G
...output omitted...
10.2. Verifique la disponibilidad del volumen labvdo con el comando vdo list.
[root@serverb ~]# vdo list
labvdo
Monte el volumen labvdo en /labvdovol con el sistema de archivos XFS
para que persista tras los reinicios. No olvide usar la opción de montaje xsystemd.requires=vdo.service en /etc/fstab.
11.
11.1.
Formatee el volumen labvdo con el sistema de archivos XFS con el comando mkfs.
[root@serverb ~]# mkfs.xfs -K /dev/mapper/labvdo
...output omitted...
11.2. Use el comando udevadm para registrar el nuevo nodo de dispositivo.
[root@serverb ~]# udevadm settle
11.3. Cree un directorio /labvdovol con el comando mkdir.
[root@serverb ~]# mkdir /labvdovol
11.4. Determine el UUID de labvdo con el comando lsblk.
[root@serverb ~]# lsblk --output=UUID /dev/mapper/labvdo
UUID
ef8cce71-228a-478d-883d-5732176b39b1
11.5.
246
Edite /etc/fstab para que labvdo se monte en el momento de arranque. Use el
UUID del volumen que determinó en el paso anterior. A continuación, se muestra la
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
línea que debe agregar a /etc/fstab. Puede usar el comando vi /etc/fstab para
editar el archivo.
UUID=ef8c...39b1 /labvdovol xfs defaults,x-systemd.requires=vdo.service 0 0
11.6. Monte el volumen labvdo con el comando mount para confirmar que el archivo /etc/
fstab contiene las entradas correspondientes.
[root@serverb ~]# mount /labvdovol
Si el comando anterior produce algún error, revise el archivo /etc/fstab y asegúrese
de que contenga las entradas correspondientes.
12.
Cree tres copias del mismo archivo denominado /root/install.img en el volumen
labvdo. Compare las estadísticas del volumen para verificar la desduplicación y la
compresión de datos que tienen lugar en el volumen.
12.1.
Vea las estadísticas iniciales y el estado del volumen con el comando vdostats.
[root@serverb ~]# vdostats --human-readable
Device
Size
Used Available Use% Space saving%
/dev/mapper/labvdo
5.0G
3.0G
2.0G 60%
99%
Observe que 3 GB del volumen ya están en uso porque cuando se crea, el volumen
VDO reserva 3-4 GB para sí mismo. También observe que el valor 99% en el campo
Space saving% (% de ahorro de espacio) indica que no ha creado ningún contenido
hasta el momento en el volumen, lo que contribuye a todo el espacio del volumen
guardado.
12.2. Copie /root/install.img en /labvdovol/install.img.1 y verifique las
estadísticas del volumen. Puede tardar hasta un minuto para copiar el archivo.
[root@serverb ~]# cp /root/install.img /labvdovol/install.img.1
[root@serverb ~]# vdostats --human-readable
Device
Size
Used Available Use% Space saving%
/dev/mapper/labvdo
5.0G
3.4G
1.6G 68%
5%
Observe que el valor del campo Used (Usado) aumentó de 3,0G a 3,4G porque copió
un archivo en el volumen, y eso ocupa un poco de espacio. Además, observe que el
valor del campo Space saving% (% de ahorro de espacio) disminuyó de 99% a 5%
porque inicialmente no había contenido en el volumen, lo que contribuía al poco uso del
espacio del volumen y al gran ahorro de espacio del volumen hasta que creó un archivo
allí. El ahorro de espacio del volumen es bastante bajo porque creó una copia única del
archivo en el volumen y no hay nada que desduplicar.
12.3. Copie /root/install.img en /labvdovol/install.img.2 y verifique las
estadísticas del volumen. Puede tardar hasta un minuto para copiar el archivo.
[root@serverb ~]# cp /root/install.img /labvdovol/install.img.2
[root@serverb ~]# vdostats --human-readable
Device
Size
Used Available Use% Space saving%
/dev/mapper/labvdo
5.0G
3.4G
1.6G 68%
51%
Observe que el espacio del volumen utilizado no cambió. En cambio, el porcentaje
del espacio de volumen guardado aumentó, lo que demuestra que se produjo
RH134-RHEL8.2-es-1-20200928
247
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
la desduplicación de datos para reducir el consumo de espacio para las copias
redundantes del mismo archivo. El valor de Space saving% (% de ahorro de espacio)
en la salida anterior puede variar en su sistema.
13.
Reinicie serverb. Verifique que el volumen labvdo esté montado en /labvdovol después
de que el sistema se inicie nuevamente.
13.1.
Reinicie la máquina serverb.
[root@serverb ~]# systemctl reboot
nota
Nota: Si en un reinicio, serverb no arranca con un prompt de inicio de sesión
regular, sino que indica "Dar la contraseña root para mantenimiento (o presione
Control-D para continuar):" es probable que haya cometido un error en /etc/
fstab. Después de proporcionar la contraseña root de redhat , tendrá que volver
a montar el sistema de archivos raíz como lectura/escritura con:
[root@serverb ~]# mount -o remount,rw /
Verifique que /etc/fstab se configure correctamente como se especifica en
las soluciones. Preste especial atención a las opciones de montaje para las líneas
relacionadas con /labstratisvol y /labvdovol.
Evaluación
En workstation, ejecute el comando lab advstorage-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab advstorage-review grade
Finalizar
En workstation, ejecutelab advstorage-review finish para terminar este ejercicio.
Este script elimina las particiones y los archivos creados durante el ejercicio para garantizar que el
entorno quede limpio.
[student@workstation ~]$ lab advstorage-review finish
Esto concluye el trabajo de laboratorio.
248
RH134-RHEL8.2-es-1-20200928
capítulo 8 | Implementación de funciones avanzadas de almacenamiento
Resumen
En este capítulo, aprendió lo siguiente:
• La solución de administración de almacenamiento Stratis implementa sistemas de archivos
flexibles que crecen dinámicamente con datos.
• La solución de administración de almacenamiento Stratis es compatible con el
aprovisionamiento ligero (thin provisioning), la creación de instantáneas y el monitoreo.
• El optimizador de datos virtual (VDO) tiene como objetivo reducir el costo de almacenamiento
de datos.
• El optimizador de datos virtuales aplica la eliminación de bloque cero, la desduplicación de datos
y la compresión de datos para optimizar la eficiencia del espacio en disco.
RH134-RHEL8.2-es-1-20200928
249
250
RH134-RHEL8.2-es-1-20200928
capítulo 9
Acceso al almacenamiento
conectado a la red
Meta
Acceder al almacenamiento conectado a la red con
el protocolo NFS.
Objetivos
•
Montar, usar y desmontar una exportación
de NFS desde la línea de comandos y en el
momento del arranque.
•
Configurar el servicio de automontaje con
mapas directos e indirectos para montar
automáticamente un sistema de archivos NFS
a pedido, y desmontarlo cuando ya no esté en
uso.
•
Montaje de almacenamiento conectado a la red
con NFS (y ejercicio guiado)
•
Montaje automático de almacenamiento
conectado a la red (y ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Acceso al almacenamiento conectado a la red
251
capítulo 9 | Acceso al almacenamiento conectado a la red
Montaje de almacenamiento conectado a
la red con NFS
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Identificar la información de uso compartido de NFS.
• Crear un directorio para usarlo como punto de montaje.
• Montar un recurso compartido de NFS con el comando mount o configurando el archivo /etc/
fstab.
• Desmontar un recurso compartido de NFS con el comando umount.
Montaje y desmontaje de recursos compartidos de
NFS
NFS, el sistema de archivos de red, es un protocolo estándar de Internet usado por Linux, UNIX
y sistemas operativos similares como su sistema de archivos de red nativo. Es una norma abierta
que aún se mejora activamente y que admite características nativas de sistemas de archivos y
permisos de Linux.
La versión predeterminada de NFS en Red Hat Enterprise Linux 8 es 4.2. Se admiten las versiones
principales de NFSv4 y NFSv3. NFSv2 ya no se admite. NFSv4 usa solo el protocolo TCP para
comunicarse con el servidor; las versiones anteriores de NFS podían usar TCP o UDP.
Los servidores NFS exportan recursos compartidos (directorios). Los clientes NFS montan un
recurso compartido exportado a un punto de montaje local (directorio), que debe existir. Los
recursos compartidos de NFS se pueden montar de diversas maneras:
• Manualmente, con el comando mount.
• Automáticamente en el momento de arranque con las entradas /etc/fstab.
• A pedido, con el servicio autofs o la función systemd.automount.
Montaje de recursos compartidos de NFS
Para montar un recurso compartido de NFS, siga estos tres pasos:
1.
Identificar: El administrador del sistema cliente de NFS puede identificar los recursos
compartidos de NFS disponibles de diversas maneras:
El administrador del servidor NFS puede proporcionar detalles de exportación, incluidos los
requisitos de seguridad.
Como alternativa, el administrador del cliente puede identificar los recursos compartidos de
NFSv4 al montar el directorio root del servidor NFS y al explorar los directorios exportados.
Haga esto como usuario root. El acceso a recursos compartidos que usan Kerberos será
denegado, pero el nombre del recurso compartido (directorio) estará visible. Otros directorios
compartidos se podrán explorar.
252
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
[user@host ~]$ sudo mkdir mountpoint
[user@host ~]$ sudo mount serverb:/ mountpoint
[user@host ~]$ sudo ls mountpoint
2.
Punto de montaje: Use mkdir para crear un punto de montaje en una ubicación adecuada.
[user@host ~]$ mkdir -p mountpoint
3.
Montar: Al igual que con los sistemas de archivos en particiones, los recursos compartidos
de NFS deben montarse para estar disponibles. Para montar un recurso compartido de NFS,
seleccione una de las siguientes opciones. En cada caso, debe ejecutar estos comandos como
superusuario, ya sea iniciando sesión como root o con el comando sudo.
• Montar temporalmente: monte el recurso compartido de NFS con el comando mount:
[user@host ~]$ sudo mount -t nfs -o rw,sync serverb:/share mountpoint
La opción -t nfs es el tipo de sistema de archivos para recursos compartidos de NFS
(no es estrictamente obligatorio; se muestra para ofrecer una visión completa). La opción
-o sync indica a mount sincronizar inmediatamente las operaciones de escritura con el
servidor NFS (el valor predeterminado es asincrónico).
Este comando monta el recurso compartido de forma inmediata, pero no persistente; la
próxima vez que se inicie el sistema, este recurso compartido de NFS no estará disponible.
Esto es útil para acceder una sola vez a los datos. También es útil para la prueba de montaje
de un recurso compartido de NFS antes de que el recurso compartido esté disponible de
forma persistente.
• Montar de forma persistente: para asegurarse de que el recurso compartido de NFS se
monte en el momento del arranque, edite el archivo /etc/fstab para agregar la entrada
de montaje.
[user@host ~]$ sudo vim /etc/fstab
...
serverb:/share /mountpoint nfs rw,soft
0 0
Luego, monte el recurso compartido de NFS:
[user@host ~]$ sudo mount /mountpoint
Debido a que el servidor de NFS y las opciones de montaje se encuentran en el archivo
/etc/fstab por el servicio de cliente NFS, no es necesario especificarlos en la línea de
comandos.
Desmontaje de recursos compartidos de NFS
Como el usuario root (o con sudo), desmonte un recurso compartido de NFS con el comando
umount.
[user@host ~]$ sudo umount mountpoint
RH134-RHEL8.2-es-1-20200928
253
capítulo 9 | Acceso al almacenamiento conectado a la red
nota
Desmontar un recurso compartido no elimina su entrada /etc/fstab. A menos
que elimine o comente la entrada, el recurso compartido de NFS se volverá a
montar en el próximo inicio del sistema o cuando se reinicie el servicio de cliente
NFS.
Referencias
Páginas del manual mount(8), umount(8), fstab(5), mount.nfs(8) y
nfsconf(8)
254
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
Ejercicio Guiado
Administración de almacenamiento
conectado a la red con NFS
Lista de verificación de rendimiento
En este ejercicio, modificará el archivo /etc/fstab para montar de forma persistente una
exportación de NFS en el momento del arranque.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Probar un servidor NFS con el comando mount.
• Configurar recursos compartidos de NFS en el archivo de configuración /etc/fstab
para guardar los cambios incluso después de reiniciar el sistema.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab netstorage-nfs start. Este comando
ejecuta un script de inicio que determina si las máquinas servera y serverb son accesibles
en la red. El script le avisará si no están disponibles. El script de inicio configura serverb
como servidor NFSv4, configura los permisos y exporta los directorios. Crea los usuarios y
grupos necesarios en servera y serverb.
[student@workstation ~]$ lab netstorage-nfs start
Una empresa de transporte usa un servidor central, serverb, para alojar una serie de documentos
y directorios compartidos. Los usuarios de servera, que son todos miembros del grupo admin,
necesitan acceso al recurso compartido NFS montado de forma persistente.
Información importante:
• serverb comparte el directorio /shares/public, que contiene algunos archivos de texto.
• Los miembros del grupo admin (admin1, sysmanager1) tienen acceso de lectura y escritura al
directorio compartido /shares/public.
• El punto de montaje principal para servera es /public.
• Todas las contraseñas de usuario están configuradas en redhat.
1.
Inicie sesión en servera como el usuario student y cambie al usuario root.
1.1.
Inicie sesión en servera con el usuario student.
RH134-RHEL8.2-es-1-20200928
255
capítulo 9 | Acceso al almacenamiento conectado a la red
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
2.
Pruebe el servidor NFS en serverb con servera como cliente NFS.
2.1.
Cree el punto de montaje /public en servera.
[root@servera ~]# mkdir /public
2.2.
En servera, use el comando mount para verificar que el recurso compartido NFS
/share/public exportado por serverb se monta correctamente en el punto de
montaje /public.
[root@servera ~]# mount -t nfs \
serverb.lab.example.com:/shares/public /public
2.3.
Liste el contenido del recurso compartido NFS montado.
[root@servera ~]# ls -l /public
total 16
-rw-r--r--. 1 root admin 42 Apr
-rw-r--r--. 1 root admin 46 Apr
-rw-r--r--. 1 root admin 20 Apr
-rw-r--r--. 1 root admin 27 Apr
2.4.
8 22:36 Delivered.txt
8 22:36 NOTES.txt
8 22:36 README.txt
8 22:36 Trackings.txt
Explore las opciones de comando mount para el recurso compartido NFS montado.
[root@servera ~]# mount | grep public
serverb.lab.example.com:/shares/public on /public type nfs4
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,sync
,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,
local_lock=none,addr=172.25.250.11)
2.5.
Desmonte el recurso compartido NFS.
[root@servera ~]# umount /public
3.
Configure servera para garantizar que el recurso compartido usado anteriormente se
monta de forma persistente.
3.1.
256
Abra el archivo /etc/fstab para editarlo.
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
[root@servera ~]# vim /etc/fstab
Agregue la línea siguiente al final del archivo:
serverb.lab.example.com:/shares/public
3.2.
/public
nfs
rw,sync
0 0
Use el comando mount para montar el directorio compartido.
[root@servera ~]# mount /public
3.3.
Enumere el contenido del directorio compartido.
[root@servera ~]# ls -l /public
total 16
-rw-r--r--. 1 root
admin 42 Apr
-rw-r--r--. 1 root
admin 46 Apr
-rw-r--r--. 1 root
admin 20 Apr
-rw-r--r--. 1 root
admin 27 Apr
3.4.
8 22:36 Delivered.txt
8 22:36 NOTES.txt
8 22:36 README.txt
8 22:36 Trackings.txt
Reinicie la máquina servera.
[root@servera ~]# systemctl reboot
4. Una vez que servera haya finalizado el reinicio, inicie sesión en servera con el usuario
admin1 y pruebe el recurso compartido NFS montado de forma persistente.
4.1.
Inicie sesión en servera con el usuario admin1.
[student@workstation ~]$ ssh admin1@servera
[admin1@servera ~]$
4.2.
Pruebe el recurso compartido NFS montado en /public.
[admin1@servera ~]$ ls -l /public
total 16
-rw-r--r--. 1 root
admin 42 Apr 8 22:36 Delivered.txt
-rw-r--r--. 1 root
admin 46 Apr 8 22:36 NOTES.txt
-rw-r--r--. 1 root
admin 20 Apr 8 22:36 README.txt
-rw-r--r--. 1 root
admin 27 Apr 8 22:36 Trackings.txt
[admin1@servera ~]$ cat /public/NOTES.txt
###In this file you can log all your notes###
[admin1@servera ~]$ echo "This is a test" > /public/Test.txt
[admin1@servera ~]$ cat /public/Test.txt
This is a test
4.3. Cierre sesión en servera.
RH134-RHEL8.2-es-1-20200928
257
capítulo 9 | Acceso al almacenamiento conectado a la red
[admin1@servera ~]$ exit
logout
Connection to servera closed.
Finalizar
En workstation, ejecute el script lab netstorage-nfs finish para terminar este ejercicio.
[student@workstation ~]$ lab netstorage-nfs finish
Esto concluye el ejercicio guiado.
258
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
Montaje automático de almacenamiento
conectado a la red
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Describir los beneficios de usar el servicio de automontaje.
• Crear un automontaje de los recursos compartidos de NFS usando asignaciones directas e
indirectas, incluidos comodines.
Montaje de recursos compartidos de NFS con el
servicio de automontaje
El servicio de automontaje es un servicio (autofs) que monta automáticamente recursos
compartidos de NFS "a pedido", y desmontará automáticamente recursos compartidos de NFS
cuando ya no se usen.
Beneficios del servicio de automontaje
• Los usuarios no necesitan tener privilegios root para ejecutar los comandos mount y umount
• Los recursos compartidos de NFS configurados en el servicio de automontaje están disponibles
para todos los usuarios de la máquina, sujetos a los permisos de acceso.
• Los recursos compartidos de NFS no están conectados permanentemente como las entradas
en /etc/fstab, lo que libera recursos de red y sistemas.
• El servicio de automontaje se configura del lado del cliente; no se requiere configuración del
lado del servidor.
• El servicio de automontaje usa las mismas opciones que el comando mount, incluidas las
opciones de seguridad.
• El servicio de automontaje admite la asignación directa e indirecta de puntos de montaje, lo que
proporciona flexibilidad en las ubicaciones de los puntos de montaje.
• autofs crea y elimina puntos de montaje indirectos, lo que elimina la gestión manual.
• NFS es el sistema de archivos de red predeterminado del servicio de automontaje, pero otros
sistemas de archivos de red pueden montarse automáticamente.
• autofs es un servicio que se administra como otros servicios del sistema.
Crear un automontaje
La configuración de un automontaje es un proceso de varios pasos:
1.
Instale el paquete autofs.
[user@host ~]$ sudo yum install autofs
RH134-RHEL8.2-es-1-20200928
259
capítulo 9 | Acceso al almacenamiento conectado a la red
Este paquete contiene todo lo necesario para usar el servicio de automontaje para recursos
compartidos de NFS.
2.
Agregue un archivo de asignación maestra en /etc/auto.master.d. Este archivo identifica
el directorio de base usado para puntos de montaje e identifica el archivo de asignación
usado para crear los automontajes.
[user@host ~]$ sudo vim /etc/auto.master.d/demo.autofs
El nombre del archivo de asignación maestra es arbitrario (aunque suele tener un sentido),
pero debe tener una extensión de .autofs para que el subsistema lo reconozca. Puede
colocar varias entradas en un solo archivo de asignación maestra; como alternativa, puede
crear varios archivos de asignación maestra, cada uno con sus propias entradas agrupadas de
forma lógica.
Agregue la entrada de asignación maestra, en este caso, para montajes asignados
indirectamente:
/shares
/etc/auto.demo
Esta entrada usa el directorio /shares como la base para futuros automontajes indirectos.
El archivo /etc/auto.demo contiene los detalles de montaje. Use un nombre de archivo
absoluto. El archivo auto.demo debe crearse antes de comenzar el servicio autofs.
3.
Cree los archivos de asignación. Cada archivo de asignación identifica el punto de montaje,
las opciones de montaje y la ubicación de origen que se montará para un conjunto de
automontajes.
[user@host ~]$ sudo vim /etc/auto.demo
La convención de nomenclatura de archivos de asignación es /etc/auto.name, dónde el
nombre refleja el contenido de la asignación.
work
-rw,sync
serverb:/shares/work
El formato de una entrada es punto de montaje, opciones de montaje y ubicación de origen.
En este ejemplo, se muestra una entrada de asignación indirecta básica. Las asignaciones
directas y las asignaciones indirectas que usan comodines se tratan más adelante en esta
sección.
• Conocido como la "clave" en las páginas del manual, el punto de montaje se crea y elimina
automáticamente con el servicio autofs. En este caso, el punto de montaje totalmente
calificado es /shares/work (consulte el archivo de asignación maestra). El directorio /
shares y el directorio /shares/work se crean y eliminan según sea necesario mediante
el servicio autofs.
En este ejemplo, el punto de montaje local refleja la estructura de directorios del servidor,
pero esto no es necesario; el punto de montaje local puede tener cualquier nombre. El
servicio autofs no impone una estructura de nombres específica en el cliente.
• Las opciones de montaje comienzan con un carácter de guión (-) y se separan por comas
sin espacios en blanco. Las opciones de montaje disponibles para el montaje manual
de un sistema de archivos están disponibles al realizar el montaje automático. En este
260
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
ejemplo, el servicio de automontaje monta el recurso compartido con acceso de lectura y
escritura (opción rw), y el servidor se sincroniza inmediatamente durante las operaciones
de escritura (opción sync).
Algunas opciones útiles específicas del servicio de automontaje son -fstype= y -strict.
Use fstype para especificar el tipo de sistema de archivos, por ejemplo nfs4 o xfs, y use
strict para tratar errores como fatales cuando monte sistemas de archivos.
• La ubicación de origen para los recursos compartidos de NFS sigue el patrón host:/
pathname; en este ejemplo, serverb:/shares/work. Para que este montaje automático
tenga éxito, el servidor NFS, serverb, debe exportar el directorio con acceso de lectura
y escritura, y el usuario que solicita el acceso debe tener permisos de archivo estándar
de Linux en el directorio. Si serverb exporta el directorio con acceso de solo lectura,
entonces el cliente obtendrá acceso de solo lectura a pesar de que solicitó acceso de
lectura/escritura.
4.
Inicie y habilite el servicio de automontaje.
Use systemctl para iniciar y para habilitar el servicio autofs.
[user@host ~]$ sudo systemctl enable --now autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/
lib/systemd/system/autofs.service.
Asignaciones directas
Las asignaciones directas se usan para asignar un recurso compartido de NFS a un punto de
montaje de ruta absoluta existente.
Para usar puntos de montaje asignados directamente, el archivo de asignación maestra puede
tener la siguiente apariencia:
/-
/etc/auto.direct
Todas las entradas de asignación directa usan /- como el directorio de base. En este caso, el
archivo de asignación que contiene los detalles de montaje es /etc/auto.direct.
El contenido del archivo /etc/auto.direct puede verse de la siguiente forma:
/mnt/docs
-rw,sync
serverb:/shares/docs
El punto de montaje (o clave) es siempre una ruta absoluta. El resto del archivo de asignación usa
la misma estructura.
En este ejemplo, el directorio /mnt existe y no lo administra autofs. El servicio autofs creará y
eliminará automáticamente el directorio completo /mnt/docs.
Asignaciones indirectas de comodines
Cuando un servidor NFS exporta varios subdirectorios dentro de un directorio, el servicio de
automontaje se puede configurar para acceder a cualquiera de esos subdirectorios usando una
única entrada de asignación.
RH134-RHEL8.2-es-1-20200928
261
capítulo 9 | Acceso al almacenamiento conectado a la red
Para continuar con el ejemplo anterior, si serverb:/shares exporta dos o más subdirectorios y
se puede acceder a estos usando las mismas opciones de montaje, el contenido del archivo /etc/
auto.demo podría verse del siguiente modo:
*
-rw,sync
serverb:/shares/&
El punto de montaje (o clave) es un carácter de asterisco (*) y el subdirectorio en la ubicación de
origen es el carácter de ampersand (&). Todo lo demás en la entrada es igual.
Cuando un usuario intenta acceder a /shares/work, la clave * (que es work en este ejemplo)
reemplaza el símbolo & en la ubicación de origen y serverb:/shares/work se monta. Al igual
que con el ejemplo indirecto, autofs crea y elimina automáticamente el directorio work.
Referencias
Páginas del manual: autofs(5), automount(8), auto.master(5) y
mount.nfs(8)
262
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
Ejercicio Guiado
Montaje automático de almacenamiento
conectado a la red
Lista de verificación de rendimiento
En este ejercicio, creará puntos de montaje de asignación directa y de asignación indirecta
administrados por automontaje que montan sistemas de archivos NFS.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Instalar los paquetes necesarios para el servicio de automontaje.
• Configurar asignaciones directas e indirectas de automontaje con recursos de un servidor
NFSv4 preconfigurado.
• Comprender la diferencia entre las asignaciones directas e indirectas de automontaje.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab netstorage-autofs start. Este script de
inicio determina si servera y serverb son accesibles en la red. El script le avisará si no
están disponibles. El script de inicio configura serverb como servidor NFSv4, configura
los permisos y exporta los directorios. También crea los usuarios y grupos necesarios en
servera y serverb.
[student@workstation ~]$ lab netstorage-autofs start
Un proveedor de servicios de Internet usa un servidor central, serverb, para alojar directorios
compartidos que contienen documentos importantes que deben estar disponibles a pedido.
Cuando los usuarios inician sesión en servera necesitan acceso a los directorios compartidos
montados automáticamente.
Información importante:
• serverb exporta como un recurso compartido de NFS el directorio /shares/indirect, que
a su vez contiene los subdirectorios west , central y east.
• serverb también exporta como un recurso compartido de NFS el directorio /shares/
direct/external.
• El grupo operators está compuesto por los usuarios operator1 y operator2. Tienen
acceso de lectura y escritura a los directorios compartidos /shares/indirect/west, /
shares/indirect/central y /shares/indirect/east.
• El grupo contractors está compuesto por los usuarios contractor1 y contractor2.
Tienen acceso de lectura y escritura al directorio compartido /shares/direct/external.
RH134-RHEL8.2-es-1-20200928
263
capítulo 9 | Acceso al almacenamiento conectado a la red
• Los puntos de montaje esperados para servera son /external y /internal.
• El directorio compartido /shares/direct/external debe montarse automáticamente en
servera con una asignación directa en /external.
• El directorio compartido /shares/indirect/west debe montarse automáticamente en
servera con una asignación indirecta en /internal/west.
• El directorio compartido /shares/indirect/central debe montarse automáticamente en
servera con una asignación indirecta en /internal/central.
• El directorio compartido /shares/indirect/east debe montarse automáticamente en
servera con una asignación indirecta en /internal/east.
• Todas las contraseñas de usuario están configuradas en redhat.
1.
Inicie sesión en servera e instale los paquetes requeridos.
1.1.
Inicie sesión en servera con el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
1.3.
Instale el paquete autofs.
[root@servera ~]# yum install autofs
...output omitted...
Is this ok [y/N]: y
...output omitted...
2.
Configure una asignación directa de montaje automático en servera con los recursos
compartidos de serverb. Cree la asignación directa con los archivos denominados /etc/
auto.master.d/direct.autofs para la asignación maestra y /etc/auto.direct
para el archivo de asignación. Use el directorio /external como el punto de montaje
principal en servera.
2.1.
Pruebe el servidor NFS y comparta antes de proceder con la configuración del
servicio de automontaje.
[root@servera ~]# mount -t nfs \
serverb.lab.example.com:/shares/direct/external /mnt
[root@servera ~]# ls -l /mnt
total 4
-rw-r--r--. 1 root contractors 22 Apr 7 23:15 README.txt
[root@servera ~]# umount /mnt
264
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
2.2.
Cree un archivo de asignación maestra llamado /etc/auto.master.d/
direct.autofs, inserte el siguiente contenido y guarde los cambios.
/- /etc/auto.direct
2.3.
Cree un archivo de asignación directa llamado /etc/auto.direct, inserte el
siguiente contenido y guarde los cambios.
/external -rw,sync,fstype=nfs4 serverb.lab.example.com:/shares/direct/external
3.
Configure una asignación indirecta de montaje automático en servera con los recursos
compartidos de serverb. Cree la asignación indirecta con los archivos denominados
/etc/auto.master.d/indirect.autofs para la asignación maestra y /etc/
auto.indirect para el archivo de asignación. Use el directorio /internal como el
punto de montaje principal en servera.
3.1.
Pruebe el servidor NFS y comparta antes de proceder con la configuración del
servicio de automontaje.
[root@servera ~]# mount -t nfs \
serverb.lab.example.com:/shares/indirect /mnt
[root@servera ~]# ls -l /mnt
total 0
drwxrws---. 2 root operators 24 Apr 7 23:34 central
drwxrws---. 2 root operators 24 Apr 7 23:34 east
drwxrws---. 2 root operators 24 Apr 7 23:34 west
[root@servera ~]# umount /mnt
3.2.
Cree un archivo de asignación maestra llamado /etc/auto.master.d/
indirect.autofs, inserte el siguiente contenido y guarde los cambios.
/internal /etc/auto.indirect
3.3.
Cree un archivo de asignación indirecta llamado /etc/auto.indirect, inserte el
siguiente contenido y guarde los cambios.
* -rw,sync,fstype=nfs4 serverb.lab.example.com:/shares/indirect/&
4. Inicie el servicio autofs en servera y habilítelo para que se inicie automáticamente
durante el proceso de arranque. Reinicie servera para determinar si el servicio autofs se
inicia automáticamente.
4.1.
Inicie y habilite el servicio autofs en servera.
[root@servera ~]# systemctl enable --now autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/
lib/systemd/system/autofs.service.
4.2.
Reinicie la máquina servera.
RH134-RHEL8.2-es-1-20200928
265
capítulo 9 | Acceso al almacenamiento conectado a la red
[root@servera ~]# systemctl reboot
5.
Pruebe la asignación directa de automontaje con el usuario contractor1. Cuando haya
terminado, salga de la sesión de usuario contractor1 en servera.
5.1.
Después de que la máquina servera haya terminado de arrancar, inicie sesión en
servera con el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
5.2.
Cambie al usuario contractor1.
[student@servera ~]$ su - contractor1
Password: redhat
5.3.
Enumere el punto de montaje /external.
[contractor1@servera ~]$ ls -l /external
total 4
-rw-r--r--. 1 root contractors 22 Apr 7 23:34 README.txt
5.4.
Revise el contenido y pruebe el acceso del punto de montaje /external.
[contractor1@servera ~]$ cat /external/README.txt
###External Folder###
[contractor1@servera ~]$ echo testing-direct > /external/testing.txt
[contractor1@servera ~]$ cat /external/testing.txt
testing-direct
5.5.
Salga de la sesión de usuario contractor1.
[contractor1@servera ~]$ exit
logout
[student@servera ~]$
6. Pruebe la asignación indirecta de montaje automático como el usuario operator1.
Cuando finalice, cierre sesión en servera.
6.1.
Cambie al usuario operator1.
[student@servera ~]$ su - operator1
Password: redhat
6.2.
Enumere el punto de montaje /internal.
[operator1@servera ~]$ ls -l /internal
total 0
266
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
nota
Notará que en una asignación indirecta de automontaje, incluso si se encuentra
en el punto de montaje asignado, debe llamar a cada uno de los subdirectorios
o archivos compartidos a pedido para obtener acceso a ellos. En una asignación
directa del servicio de automontaje, después de abrir el punto de montaje asignado,
obtendrá acceso a los directorios y al contenido configurado en el directorio
compartido.
6.3.
Pruebe el acceso a directorio compartido del servicio de automontaje /internal/
west.
[operator1@servera ~]$ ls -l /internal/west/
total 4
-rw-r--r--. 1 root operators 18 Apr 7 23:34 README.txt
[operator1@servera ~]$ cat /internal/west/README.txt
###West Folder###
[operator1@servera ~]$ echo testing-1 > /internal/west/testing-1.txt
[operator1@servera ~]$ cat /internal/west/testing-1.txt
testing-1
[operator1@servera ~]$ ls -l /internal
total 0
drwxrws---. 2 root operators 24 Apr 7 23:34 west
6.4. Pruebe el acceso a directorio compartido del servicio de automontaje /internal/
central.
[operator1@servera ~]$ ls -l /internal/central
total 4
-rw-r--r--. 1 root operators 21 Apr 7 23:34 README.txt
[operator1@servera ~]$ cat /internal/central/README.txt
###Central Folder###
[operator1@servera ~]$ echo testing-2 > /internal/central/testing-2.txt
[operator1@servera ~]$ cat /internal/central/testing-2.txt
testing-2
[operator1@servera ~]$ ls -l /internal
total 0
drwxrws---. 2 root operators 24 Apr 7 23:34 central
drwxrws---. 2 root operators 24 Apr 7 23:34 west
6.5.
Pruebe el acceso a directorio compartido del servicio de automontaje /internal/
east.
[operator1@servera ~]$ ls -l /internal/east
total 4
-rw-r--r--. 1 root operators 18 Apr 7 23:34 README.txt
[operator1@servera ~]$ cat /internal/east/README.txt
###East Folder###
[operator1@servera ~]$ echo testing-3 > /internal/east/testing-3.txt
[operator1@servera ~]$ cat /internal/east/testing-3.txt
testing-3
[operator1@servera ~]$ ls -l /internal
RH134-RHEL8.2-es-1-20200928
267
capítulo 9 | Acceso al almacenamiento conectado a la red
total 0
drwxrws---. 2 root operators 24 Apr
drwxrws---. 2 root operators 24 Apr
drwxrws---. 2 root operators 24 Apr
7 23:34 central
7 23:34 east
7 23:34 west
6.6. Pruebe el acceso a directorio compartido del servicio de automontaje /external.
[operator1@servera ~]$ ls -l /external
ls: cannot open directory '/external': Permission denied
6.7.
Cierre sesión en servera.
[operator1@servera ~]$ exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
Finalizar
En workstation, ejecute el script lab netstorage-autofs finish para terminar este
ejercicio.
[student@workstation ~]$ lab netstorage-autofs finish
Esto concluye el ejercicio guiado.
268
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
Trabajo de laboratorio
Acceso al almacenamiento conectado a la
red
Lista de verificación de rendimiento
En este trabajo de laboratorio, configurará el servicio de automontaje con una asignación
indirecta, usando recursos compartidos de un servidor NFSv4.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Instalar los paquetes necesarios para configurar el servicio de automontaje.
• Configurar la asignación indirecta del servicio de automontaje con recursos de un servidor
NFSv4 preconfigurado.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab netstorage-review start. Este script
de inicio determina si los sistemas servera y serverb son accesibles en la red. El script
de inicio configura serverb como servidor NFSv4, configura los permisos y exporta los
directorios. También crea los usuarios y grupos necesarios en los sistemas servera y
serverb.
[student@workstation ~]$ lab netstorage-review start
Una empresa de soporte de TI usa un servidor central, serverb, para alojar algunos directorios
compartidos en /remote/shares para sus grupos y usuarios. Los usuarios deben ser capaces
de iniciar sesión y tener sus directorios compartidos montados a pedido y listos para usar, en el
directorio /shares en servera.
Información importante:
• serverb comparte el directorio /shares, que a su vez contiene los subdirectorios
management , production y operation.
• El grupo managers está compuesto por los usuarios manager1 y manager2. Tienen acceso de
lectura y escritura al directorio compartido /shares/management.
• El grupo production está compuesto por los usuarios dbuser1 y sysadmin1. Tienen acceso
de lectura y escritura al directorio compartido /shares/production.
• El grupo operators está compuesto por los usuarios contractor1 y consultant1. Tienen
acceso de lectura y escritura al directorio compartido /shares/operation.
• El punto de montaje principal para servera es el directorio /remote.
RH134-RHEL8.2-es-1-20200928
269
capítulo 9 | Acceso al almacenamiento conectado a la red
• El directorio compartido /shares/management debe montarse automáticamente en /
remote/management en servera.
• El directorio compartido /shares/production debe montarse automáticamente en /
remote/production en servera.
• El directorio compartido /shares/operation debe montarse automáticamente en /
remote/operation en servera.
• Todas las contraseñas de usuario están configuradas en redhat.
1.
Inicie sesión en servera e instale los paquetes requeridos.
2.
Configure una asignación indirecta de montaje automático en servera con los recursos
compartidos de serverb. Cree una asignación indirecta con los archivos denominados /
etc/auto.master.d/shares.autofs para la asignación maestra y /etc/auto.shares
para el archivo de asignación. Use el directorio /remote como el punto de montaje
principal en servera. Reinicie servera para determinar si el servicio autofs se inicia
automáticamente.
3.
Pruebe la configuración de autofs con los distintos usuarios. Cuando finalice, cierre sesión
en servera.
Evaluación
En workstation, ejecute el comando lab netstorage-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab netstorage-review grade
Finalizar
En workstation, ejecute el comando lab netstorage-review finish para terminar este
ejercicio.
[student@workstation ~]$ lab netstorage-review finish
Esto concluye el trabajo de laboratorio.
270
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
Solución
Acceso al almacenamiento conectado a la
red
Lista de verificación de rendimiento
En este trabajo de laboratorio, configurará el servicio de automontaje con una asignación
indirecta, usando recursos compartidos de un servidor NFSv4.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Instalar los paquetes necesarios para configurar el servicio de automontaje.
• Configurar la asignación indirecta del servicio de automontaje con recursos de un servidor
NFSv4 preconfigurado.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab netstorage-review start. Este script
de inicio determina si los sistemas servera y serverb son accesibles en la red. El script
de inicio configura serverb como servidor NFSv4, configura los permisos y exporta los
directorios. También crea los usuarios y grupos necesarios en los sistemas servera y
serverb.
[student@workstation ~]$ lab netstorage-review start
Una empresa de soporte de TI usa un servidor central, serverb, para alojar algunos directorios
compartidos en /remote/shares para sus grupos y usuarios. Los usuarios deben ser capaces
de iniciar sesión y tener sus directorios compartidos montados a pedido y listos para usar, en el
directorio /shares en servera.
Información importante:
• serverb comparte el directorio /shares, que a su vez contiene los subdirectorios
management , production y operation.
• El grupo managers está compuesto por los usuarios manager1 y manager2. Tienen acceso de
lectura y escritura al directorio compartido /shares/management.
• El grupo production está compuesto por los usuarios dbuser1 y sysadmin1. Tienen acceso
de lectura y escritura al directorio compartido /shares/production.
• El grupo operators está compuesto por los usuarios contractor1 y consultant1. Tienen
acceso de lectura y escritura al directorio compartido /shares/operation.
• El punto de montaje principal para servera es el directorio /remote.
RH134-RHEL8.2-es-1-20200928
271
capítulo 9 | Acceso al almacenamiento conectado a la red
• El directorio compartido /shares/management debe montarse automáticamente en /
remote/management en servera.
• El directorio compartido /shares/production debe montarse automáticamente en /
remote/production en servera.
• El directorio compartido /shares/operation debe montarse automáticamente en /
remote/operation en servera.
• Todas las contraseñas de usuario están configuradas en redhat.
Inicie sesión en servera e instale los paquetes requeridos.
1.
1.1.
Inicie sesión en servera con el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
1.3.
Instale el paquete autofs.
[root@servera ~]# yum install autofs
...output omitted...
Is this ok [y/N]: y
...output omitted...
Configure una asignación indirecta de montaje automático en servera con los recursos
compartidos de serverb. Cree una asignación indirecta con los archivos denominados /
etc/auto.master.d/shares.autofs para la asignación maestra y /etc/auto.shares
para el archivo de asignación. Use el directorio /remote como el punto de montaje
principal en servera. Reinicie servera para determinar si el servicio autofs se inicia
automáticamente.
2.
2.1.
Pruebe el servidor NFS antes de proceder con la configuración del servicio de
automontaje.
[root@servera ~]# mount -t nfs serverb.lab.example.com:/shares /mnt
[root@servera ~]# ls -l /mnt
total 0
drwxrwx---. 2 root managers
25 Apr 4 01:13 management
drwxrwx---. 2 root operators 25 Apr 4 01:13 operation
drwxrwx---. 2 root production 25 Apr 4 01:13 production
[root@servera ~]# umount /mnt
2.2.
272
Cree un archivo de asignación maestra llamado /etc/auto.master.d/
shares.autofs, inserte el siguiente contenido y guarde los cambios.
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
[root@servera ~]# vim /etc/auto.master.d/shares.autofs
/remote /etc/auto.shares
2.3.
Cree un archivo de asignación indirecta llamado /etc/auto.shares, inserte el
siguiente contenido y guarde los cambios.
[root@servera ~]# vim /etc/auto.shares
* -rw,sync,fstype=nfs4 serverb.lab.example.com:/shares/&
2.4.
Inicie y habilite el servicio autofs en servera.
[root@servera ~]# systemctl enable --now autofs
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/
lib/systemd/system/autofs.service.
2.5.
Reinicie la máquina servera.
[root@servera ~]# systemctl reboot
3.
Pruebe la configuración de autofs con los distintos usuarios. Cuando finalice, cierre sesión
en servera.
3.1.
Después de que la máquina servera haya terminado de arrancar, inicie sesión en
servera con el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
3.2.
Use el comando su - manager1 para cambiar al usuario manager1 y probar el
acceso.
[student@servera ~]$ su - manager1
Password: redhat
[manager1@servera ~]$ ls -l /remote/management/
total 4
-rw-r--r--. 1 root managers 46 Apr 4 01:13 Welcome.txt
[manager1@servera ~]$ cat /remote/management/Welcome.txt
###Welcome to Management Folder on SERVERB###
[manager1@servera ~]$ echo TEST1 > /remote/management/Test.txt
[manager1@servera ~]$ cat /remote/management/Test.txt
TEST1
[manager1@servera ~]$ ls -l /remote/operation/
ls: cannot open directory '/remote/operation/': Permission denied
[manager1@servera ~]$ ls -l /remote/production/
ls: cannot open directory '/remote/production/': Permission denied
[manager1@servera ~]$ exit
logout
[student@servera ~]$
3.3.
Cambie al usuario dbuser1 y pruebe el acceso.
RH134-RHEL8.2-es-1-20200928
273
capítulo 9 | Acceso al almacenamiento conectado a la red
[student@servera ~]$ su - dbuser1
Password: redhat
[dbuser1@servera ~]$ ls -l /remote/production/
total 4
-rw-r--r--. 1 root production 46 Apr 4 01:13 Welcome.txt
[dbuser1@servera ~]$ cat /remote/production/Welcome.txt
###Welcome to Production Folder on SERVERB###
[dbuser1@servera ~]$ echo TEST2 > /remote/production/Test.txt
[dbuser1@servera ~]$ cat /remote/production/Test.txt
TEST2
[dbuser1@servera ~]$ ls -l /remote/operation/
ls: cannot open directory '/remote/operation/': Permission denied
[dbuser1@servera ~]$ ls -l /remote/management/
ls: cannot open directory '/remote/management/': Permission denied
[dbuser1@servera ~]$ exit
logout
[student@servera ~]$
3.4.
Cambie al usuario contractor1 y pruebe el acceso.
[student@servera ~]$ su - contractor1
Password: redhat
[contractor1@servera ~]$ ls -l /remote/operation/
total 4
-rw-r--r--. 1 root operators 45 Apr 4 01:13 Welcome.txt
[contractor1@servera ~]$ cat /remote/operation/Welcome.txt
###Welcome to Operation Folder on SERVERB###
[contractor1@servera ~]$ echo TEST3 > /remote/operation/Test.txt
[contractor1@servera ~]$ cat /remote/operation/Test.txt
TEST3
[contractor1@servera ~]$ ls -l /remote/management/
ls: cannot open directory '/remote/management/': Permission denied
[contractor1@servera ~]$ ls -l /remote/production/
ls: cannot open directory '/remote/production/': Permission denied
[contractor1@servera ~]$ exit
logout
[student@servera ~]$
3.5.
Explore las opciones de mount para el recurso compartido NFS montado
automáticamente.
[student@servera ~]$ mount | grep nfs
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
serverb.lab.example.com:/shares/management on /remote/management type nfs4
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,
sync,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,
local_lock=none,addr=172.25.250.11)
serverb.lab.example.com:/shares/operation on /remote/operation type nfs4
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,
sync,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,
local_lock=none,addr=172.25.250.11)
serverb.lab.example.com:/shares/production on /remote/production type nfs4
274
RH134-RHEL8.2-es-1-20200928
capítulo 9 | Acceso al almacenamiento conectado a la red
(rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,
sync,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.25.250.10,
local_lock=none,addr=172.25.250.11)
3.6.
Cierre sesión en servera.
[student@servera ~]$ exit
logout
[student@workstation ~]$
Evaluación
En workstation, ejecute el comando lab netstorage-review grade para confirmar que ha
realizado correctamente este ejercicio.
[student@workstation ~]$ lab netstorage-review grade
Finalizar
En workstation, ejecute el comando lab netstorage-review finish para terminar este
ejercicio.
[student@workstation ~]$ lab netstorage-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
275
capítulo 9 | Acceso al almacenamiento conectado a la red
Resumen
En este capítulo, aprendió cómo hacer lo siguiente:
• Montar y desmontar una exportación de NFS desde la línea de comandos.
• Configurar una exportación de NFS para montarse automáticamente en el inicio.
• Configurar el servicio de automontaje con asignaciones directas e indirectas, así como describir
sus diferencias.
276
RH134-RHEL8.2-es-1-20200928
capítulo 10
Control del proceso de
arranque
Meta
Administrar el proceso de arranque para controlar
los servicios ofrecidos y para solucionar y reparar
problemas.
Objetivos
•
Describir el proceso de arranque de Red Hat
Enterprise Linux, configurar el objetivo
predeterminado que se usa en el arranque
e iniciar un sistema con un objetivo no
predeterminado.
•
Iniciar sesión en un sistema y cambiar la
contraseña de root cuando la actual se haya
perdido.
•
Reparar manualmente la configuración del
sistema de archivos o problemas de daños que
detengan el proceso de arranque.
•
Selección del objetivo de arranque (y ejercicio
guiado)
•
Restablecimiento de la contraseña de root (y
ejercicio guiado)
•
Reparación de problemas de sistemas de
archivos en el arranque (y ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Control del proceso de arranque
277
capítulo 10 | Control del proceso de arranque
Selección del objetivo de arranque
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Describir el proceso de arranque de Red Hat Enterprise Linux.
• Establecer el objetivo predeterminado usado en el arranque.
• Arrancar un sistema con un objetivo no predeterminado.
Descripción del proceso de arranque de Red Hat
Enterprise Linux 8
Los sistemas de computación modernos son combinaciones complejas de hardware y software.
Desde un estado de apagado no definido hasta un sistema de ejecución con un prompt de inicio
de sesión, se requiere una gran cantidad de piezas de hardware y software que funcionen en
conjunto. En la siguiente lista, se proporciona una descripción general de alto nivel de las tareas
de arranque de un sistema físico x86_64 de Red Hat Enterprise Linux 8. La lista de máquinas
virtuales x86_64 es prácticamente la misma, pero el hipervisor maneja algunos de los pasos
específicos del hardware en el software.
• La máquina se enciende. El firmware del sistema (UEFI moderno o BIOS anterior) ejecuta una
prueba automática de encendido (Power On Self Test, POST) y comienza a inicializar parte del
hardware.
Se ajusta por medio de las pantallas de configuración de BIOS o UEFI del sistema, a las cuales
se llega típicamente al presionar una determinada combinación de teclas (p. ej., F2) al principio
del proceso de arranque.
• El firmware del sistema busca un dispositivo con capacidad de arranque, ya sea configurado en
el firmware de arranque UEFI o al buscar un Master Boot Record (MBR) en todos los discos, en
el orden configurado en el BIOS.
Se ajusta por medio de las pantallas de configuración de BIOS o UEFI del sistema, a las cuales
se llega típicamente al presionar una determinada combinación de teclas (p. ej., F2) al principio
del proceso de arranque.
• El firmware del sistema lee un cargador de arranque desde el disco, luego pasa el control del
sistema al cargador de arranque. En un sistema de Red Hat Enterprise Linux 8, el cargador de
arranque es GRand Unified Bootloader versión 2 (GRUB2).
Se configura con el comando grub2-install, el cual instala GRUB2 como el cargador de
arranque en el disco.
• GRUB2 carga su configuración desde el archivo /boot/grub2/grub.cfg y muestra un menú
donde puede seleccionar qué kernel arrancar.
Se configura por medio del directorio /etc/grub.d/, el archivo /etc/default/grub y el
comando grub2-mkconfig para generar el archivo /boot/grub2/grub.cfg.
278
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
• Después de seleccionar un kernel, o después de que el tiempo de espera finaliza, el cargador de
arranque carga el kernel e initramfs desde el disco y los coloca en la memoria. Un initramfs es
una colección de archivos que contiene módulos del kernel para todo el hardware necesario en
el arranque, scripts de inicialización y más. En Red Hat Enterprise Linux 8, initramfs contiene
un sistema totalmente usable por sí solo.
Se configura por medio del directorio /etc/dracut.conf.d/, el comando dracut y el
comando lsinitrd para inspeccionar el archivo initramfs.
• El cargador de arranque pasa el control al kernel, y detalla todas las opciones especificadas en
la línea de comandos del kernel en el cargador de arranque, y la ubicación del initramfs en la
memoria.
Se configura por medio del directorio /etc/grub.d/, el archivo /etc/default/grub y el
comando grub2-mkconfig para generar el archivo /boot/grub2/grub.cfg.
• El kernel inicializa todo el hardware para el que puede encontrar un controlador en initramfs
y, luego, ejecuta /sbin/init desde initramfs como PID 1. En Red Hat Enterprise Linux 8, /
sbin/init es un enlace a systemd.
Se configura por medio del parámetro de la línea de comandos init= del kernel.
• La instancia systemd desde initramfs ejecuta todas las unidades para el objetivo
initrd.target. Esto incluye el montaje del sistema de archivos root en el disco en el
directorio /sysroot.
Se configura por medio de /etc/fstab
• El kernel cambia (articula) el sistema de archivos root desde initramfs al sistema de archivos
root en /sysroot. A continuación, systemd vuelve a ejecutarse usando la copia de systemd
instalada en el disco.
• systemd busca un objetivo predeterminado, ya sea especificado desde la línea de comandos
del kernel o configurado en el sistema; luego, inicia (y detiene) unidades para cumplir con la
configuración para ese objetivo, y resuelve dependencias entre unidades automáticamente.
Básicamente, un objetivo systemd es un conjunto de unidades que el sistema debe activar
para alcanzar un estado deseado. Por lo general, estos objetivos inician una pantalla de inicio de
sesión basado en texto o inicio de sesión gráfico.
Se configura por medio de /etc/systemd/system/default.target y /etc/systemd/
system/.
Reinicio y apagado
Para apagar o reiniciar un sistema en ejecución desde la línea de comandos, puede usar el
comando systemctl.
systemctl poweroff detiene todos los servicios en ejecución, desmonta todos los sistemas de
archivos (o vuelve a montarlos como solo lectura cuando no se puedan desmontar) y, luego, apaga
el sistema.
systemctl reboot detiene todos los servicios en ejecución, desmonta todos los sistemas de
archivos y, luego, reinicia el sistema.
También puede usar el atajo de estos comandos, poweroff y reboot, que son enlaces
simbólicos a sus equivalentes de systemctl.
RH134-RHEL8.2-es-1-20200928
279
capítulo 10 | Control del proceso de arranque
nota
systemctl halt y halt también están disponibles para detener el sistema, pero
a diferencia de poweroff, estos comandos no apagan el sistema, sino que lo llevan
hasta un punto donde es seguro apagarlo manualmente.
Selección de un objetivo de Systemd
Un objetivo de systemd es un conjunto de unidades de systemd que el sistema debe iniciar para
alcanzar un estado deseado. En la siguiente tabla, se detallan los objetivos más importantes.
Objetivos que se usan normalmente
Objetivo
Propósito
graphical.target
El sistema admite varios usuarios, e inicios de sesión gráficos y
basados en texto.
multi-user.target
El sistema admite varios usuarios y solo inicios de sesión
basados en texto.
rescue.target
Prompt sulogin, inicialización del sistema básica finalizada.
emergency.target
Prompt sulogin, cambio de initramfs completo y root de
sistema montado en / con acceso de solo lectura.
Un objetivo puede ser parte de otro objetivo. Por ejemplo, graphical.target incluye multiuser.target, que a su vez depende de basic.target y otros. Puede ver estas dependencias
con el siguiente comando.
[user@host ~]$ systemctl list-dependencies graphical.target | grep target
graphical.target
* └─multi-user.target
*
├─basic.target
*
│ ├─paths.target
*
│ ├─slices.target
*
│ ├─sockets.target
*
│ ├─sysinit.target
*
│ │ ├─cryptsetup.target
*
│ │ ├─local-fs.target
*
│ │ └─swap.target
...output omitted...
Para enumerar los objetivos disponibles, use el siguiente comando.
[user@host ~]$ systemctl list-units --type=target --all
UNIT
LOAD
ACTIVE
SUB
DESCRIPTION
--------------------------------------------------------------------------basic.target
loaded
active
active Basic System
cryptsetup.target
loaded
active
active Local Encrypted Volumes
emergency.target
loaded
inactive dead
Emergency Mode
getty-pre.target
loaded
inactive dead
Login Prompts (Pre)
280
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
getty.target
graphical.target
...output omitted...
loaded
loaded
active
active Login Prompts
inactive dead
Graphical Interface
Selección de un objetivo en el tiempo de ejecución
En un sistema en ejecución, los administradores pueden cambiar a un objetivo diferente usando el
comando systemctl isolate.
[root@host ~]# systemctl isolate multi-user.target
Si aísla un objetivo, detiene todos los servicios no requeridos por ese objetivo (y sus
dependencias), e inicia todos los servicios requeridos que aún no se hayan iniciado.
No todos los objetivos se pueden aislar. Solo puede aislar objetivos que tengan
AllowIsolate=yes establecido en sus archivos de unidad. Por ejemplo, puede aislar el objetivo
gráfico, pero no el objetivo cryptsetup.
[user@host ~]$ systemctl cat graphical.target
# /usr/lib/systemd/system/graphical.target
...output omitted...
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
[user@host ~]$ systemctl cat cryptsetup.target
# /usr/lib/systemd/system/cryptsetup.target
...output omitted...
[Unit]
Description=Local Encrypted Volumes
Documentation=man:systemd.special(7)
Configuración de un objetivo predeterminado
Cuando el sistema se inicia, systemd activa el objetivo default.target. Normalmente,
el objetivo predeterminado en /etc/systemd/system/ es un enlace simbólico a
graphical.target o multi-user.target. En lugar de editar este enlace simbólico
manualmente, el comando systemctl viene con dos subcomandos para administrar este enlace:
get-default y set-default.
[root@host ~]# systemctl get-default
multi-user.target
[root@host ~]# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/
graphical.target.
[root@host ~]# systemctl get-default
graphical.target
RH134-RHEL8.2-es-1-20200928
281
capítulo 10 | Control del proceso de arranque
Selección de un objetivo diferente en el momento del arranque
Para seleccionar un objetivo diferente en el momento del arranque, agregue la opción
systemd.unit=target.target a la línea de comandos del kernel desde el cargador de
arranque.
Por ejemplo, para iniciar el sistema en una shell de recuperación donde pueda cambiar la
configuración del sistema sin casi ningún servicio en ejecución, agregue la siguiente opción a la
línea de comandos del kernel desde el cargador de arranque.
systemd.unit=rescue.target
Este cambio de configuración solo afecta a un único arranque, lo que hace que sea una
herramienta útil para la solución de problemas en el proceso de arranque.
Para usar este método de selección de un objetivo diferente, use el siguiente procedimiento:
1.
Arranque o reinicie el sistema.
2.
Interrumpa la cuenta regresiva del menú del cargador de arranque presionando cualquier
tecla (excepto Enter que iniciaría un arranque normal).
3.
Mueva el cursor hasta la entrada del kernel que desea iniciar.
4.
Presione e para editar la entrada actual.
5.
Mueva el cursor hasta la línea que comienza con linux. Esta es la línea de comandos del
kernel.
6.
Anexe systemd.unit=target.target. Por ejemplo,
systemd.unit=emergency.target.
7.
Presione Ctrl+x para realizar el arranque con estos cambios.
Referencias
info grub2 (Manual GNU GRUB)
Páginas del manual: bootup(7), dracut.bootup(7), lsinitrd(1),
systemd.target(5), systemd.special(7), sulogin(8) y systemctl(1)
Para obtener más información, consulte el capítulo Administración de servicios con
systemd en la Guía de configuración básica de sistemas en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/configuring_basic_system_settings/#managing-services-with-systemd
282
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
Ejercicio Guiado
Selección del objetivo de arranque
En este ejercicio, determinará el objetivo predeterminado en el que se inicia un sistema, y
arrancará ese sistema en otros objetivos.
Resultados
Debe ser capaz de actualizar el objetivo predeterminado del sistema y usar un objetivo
temporal desde el cargador de arranque.
Andes De Comenzar
Inicie sesión con el usuario student en workstation con la contraseña student.
En workstation, ejecute el comando lab boot-selecting start. Este comando
ejecuta un script de inicio que prepara a workstation para el ejercicio.
[student@workstation ~]$ lab boot-selecting start
1.
En workstation, abra una terminal y confirme que el objetivo predeterminado sea
graphical.target.
[student@workstation ~]$ systemctl get-default
graphical.target
2.
En workstation, cambie al objetivo multi-user manualmente sin reiniciar. Use el
comando sudo y, si se le solicita, use student como la contraseña.
[student@workstation ~]$ sudo systemctl isolate multi-user.target
[sudo] password for student: student
3.
Acceda a una consola basada en texto. Use la secuencia de teclas Ctrl+Alt+F1 por medio
de la entrada del menú o el botón relevantes. Inicie sesión como root con redhat como
contraseña.
nota
Recordatorio: si está utilizando el terminal a través de una página web, puede hacer
clic en el ícono Mostrar teclado debajo de la barra de URL de su navegador web y
luego a la derecha de la dirección IP de la máquina.
workstation login: root
Password: redhat
[root@workstation ~]#
RH134-RHEL8.2-es-1-20200928
283
capítulo 10 | Control del proceso de arranque
4. Configure workstation para que arranque automáticamente en el objetivo multi-user
y, luego, reinicie workstation para verificarlo. Cuando haya finalizado, cambie el objetivo
systemd predeterminado al objetivo gráfico nuevamente.
4.1.
Use el comando systemctl set-default para establecer el objetivo
predeterminado.
[root@workstation ~]# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/
multi-user.target.
4.2.
Reinicie workstation.
[root@workstation ~]# systemctl reboot
Tenga en cuenta que, después del reinicio, el sistema presenta una consola basada en
texto, no un inicio de sesión gráfico.
4.3. Inicie sesión como root con redhat como contraseña.
workstation login: root
Password: redhat
Last login: Thu Mar 28 14:50:53 on tty1
[root@workstation ~]#
4.4. Configure el objetivo systemd predeterminado nuevamente al objetivo gráfico.
[root@workstation ~]# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/
graphical.target.
Esto concluye la primera parte del ejercicio donde practica la configuración del
objetivo systemd predeterminado.
5.
En esta segunda parte del ejercicio, practicará el modo de recuperación para recuperar el
sistema.
Reinicie workstation nuevamente para acceder al cargador de arranque. Desde el menú
del cargador de arranque, arranque en el objetivo rescue (recuperación).
5.1.
Active el reinicio.
[root@workstation ~]# systemctl reboot
284
5.2.
Cuando el menú del cargador de arranque aparezca, presione cualquier tecla
(excepto Enter que iniciaría un arranque normal) para interrumpir la cuenta
regresiva.
5.3.
Use las teclas de dirección para destacar la entrada del cargador de arranque
predeterminada.
5.4.
Presione e para editar la entrada actual.
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
5.5.
Con las teclas de dirección, navegue hacia la línea que comienza con linux.
5.6.
Presione End (Fin) para mover el cursor hasta el final de la línea.
5.7.
Agregue systemd.unit=rescue.target en el final de la línea.
5.8.
Presione Ctrl+x para realizar el arranque con la configuración modificada.
5.9.
Inicie sesión en el modo de recuperación. La contraseña root es redhat Es posible
que tenga que presionar Enter (Intro) para obtener un prompt limpio.
Give root password for maintenance
(or press Control-D to continue): redhat
[root@workstation ~]#
6. Confirme que, en el modo de recuperación, el sistema de archivos root se encuentre en el
modo de lectura/escritura.
[root@workstation ~]# mount
...output omitted...
/dev/vda3 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
...output omitted...
7.
Presione Ctrl+d para continuar con el proceso de arranque.
El sistema presenta un inicio de sesión gráfico. Inicie sesión como student usando
student como contraseña.
Finalizar
En workstation, ejecute el script lab boot-selecting finish para terminar este ejercicio.
[student@workstation ~]$ lab boot-selecting finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
285
capítulo 10 | Control del proceso de arranque
Restablecimiento de la contraseña de
root
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de iniciar sesión en un sistema y cambiar la
contraseña root cuando la contraseña root actual se haya perdido.
Restablecer la contraseña de root desde el cargador
de arranque.
Una tarea que todos los administradores de sistemas deben ser capaces de realizar es restablecer
una contraseña root perdida. Si el administrador aún tiene la sesión iniciada, ya sea como usuario
sin privilegios, pero con acceso sudo completo, o como root, esta tarea es sencilla. Cuando el
administrador no ha iniciado sesión, esta tarea es un poco más complicada.
Existen muchos métodos para establecer una nueva contraseña root. Un administrador de
sistemas podría, por ejemplo, arrancar el sistema usando un CD Live, montar el sistema de
archivos root desde allí y editar /etc/shadow. En esta sección, exploramos un método que no
requiere el uso de medios externos.
nota
En Red Hat Enterprise Linux 6 y en las versiones anteriores, los administradores
pueden arrancar el sistema en el nivel de ejecución 1 para obtener un prompt de
root. Los análogos más cercanos al nivel de ejecución 1 en una máquina Red Hat
Enterprise Linux 8 son los objetivos de recuperación y emergencia, y ambos
requieren la contraseña root para iniciar sesión.
En Red Hat Enterprise Linux 8, es posible tener scripts que se ejecuten desde la pausa de
initramfs en ciertos puntos, proporcionar una shell root y, luego, continuar cuando esa shell se
cierre. Esto se suele realizar principalmente para depuraciones, pero también se puede usar para
restablecer una contraseña root perdida.
Para acceder a la shell root, siga estos pasos:
1.
Reinicie el sistema.
2.
Interrumpa la cuenta regresiva del cargador de arranque presionando cualquier tecla (excepto
Enter).
3.
Mueva el cursor hasta la entrada del kernel que debe iniciarse.
4.
Presione e para editar la entrada seleccionada.
5.
Mueva el cursor hasta la línea de comandos del kernel (la línea que empieza con linux).
6.
Agregue rd.break. Con esa opción, se produce un quiebre en el sistema antes de que el
control se entregue de initramfs al sistema real.
7.
Presione Ctrl+x para realizar el arranque con los cambios.
286
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
En este punto, se presenta una shell root, con el sistema de archivos root real en el disco
montado para solo lectura en /sysroot. Debido a que la solución de problemas suele exigir
modificaciones en el sistema de archivos root, debe cambiar el sistema de archivos root para
que su acceso sea de lectura-escritura. En el siguiente paso, se muestra cómo la opción
remount,rw del comando mount vuelve a montar el sistema de archivos con la opción nueva,
(rw), configurada.
nota
Es posible que las imágenes compiladas previamente coloquen múltiples
argumentos console= en el kernel para respaldar una amplia variedad de
situaciones de implementación. Estos argumentos console= indican los
dispositivos que se deben usar para la salida por consola. La advertencia con
rd.break es que si bien el sistema envía los mensajes del kernel a todas las
consolas, el prompt usará en última instancia la última consola. Si no recibe el
prompt, es posible que desee reordenar temporalmente los argumentos console=
cuando edite la línea de comandos del kernel desde el cargador de arranque.
Importante
El sistema aún no ha habilitado SELinux, por lo que cualquier archivo que cree
no tiene un contexto SELinux. Algunas herramientas, como el comando passwd,
primero crean un archivo temporal, y, luego, lo trasladan al lugar del archivo que
intentan editar; y se crea así de manera efectiva un nuevo archivo sin un contexto
SELinux. Por este motivo, cuando usa el comando passwd con rd.break, el
archivo /etc/shadow no tiene un contexto SELinux.
Para restablecer la contraseña root desde este punto, realice el siguiente procedimiento:
1.
Vuelva a montar /sysroot con acceso de lectura-escritura.
switch_root:/# mount -o remount,rw /sysroot
2.
Cambie a jail de chroot, donde /sysroot se trata como la root de un árbol de sistemas de
archivos.
switch_root:/# chroot /sysroot
3.
Establezca una nueva contraseña root.
sh-4.4# passwd root
4.
Asegúrese de que todos los archivos no etiquetados, incluido /etc/shadow en este punto,
obtengan una nueva etiqueta durante el arranque.
sh-4.4# touch /.autorelabel
5.
Ingrese exit dos veces. El primer comando saldrá del jail de chroot y el segundo comando
saldrá de la shell de depuración de initramfs.
RH134-RHEL8.2-es-1-20200928
287
capítulo 10 | Control del proceso de arranque
En este punto, el sistema continúa con el arranque, realiza un nuevo etiquetado de SELinux
completo y, luego, realiza el arranque nuevamente.
Inspección de registros
Puede ser útil mirar los registros de arranques anteriores que fallaron. Si los diarios (journals)
del sistema son persistentes durante los reinicios, puede usar la herramienta journalctl para
inspeccionar esos registros.
Recuerde que, de manera predeterminada, los diarios (journals) del sistema se almacenan en
el directorio /run/log/journal, lo que significa que se borran cuando se reinicia el sistema.
Para almacenar diarios (journals) en el directorio /var/log/journal, que no se borra en los
reinicios, configure el parámetro Storage en persistent (persistente) en /etc/systemd/
journald.conf.
[root@host ~]# vim /etc/systemd/journald.conf
...output omitted...
[Journal]
Storage=persistent
...output omitted...
[root@host ~]# systemctl restart systemd-journald.service
Para inspeccionar los registros de un arranque anterior, use la opción -b de journalctl. Sin
ningún argumento, la opción -b solo muestra mensajes desde el último arranque. Si el argumento
es un número negativo, se muestran los registros de los arranques anteriores.
[root@host ~]# journalctl -b -1 -p err
Este comando muestra todos los mensajes calificados como error o peor del arranque anterior.
Reparación de problemas de arranque de Systemd
Para solucionar problemas de inicio del servicio en el momento del arranque, Red Hat
Enterprise Linux 8 ofrece las siguientes estrategias.
Habilitar la shell de depuración temprana
Al habilitar el servicio debug-shell con systemctl enable debug-shell.service, el
sistema genera una shell root en TTY9 (Ctrl+Alt+F9) al principio de la secuencia de arranque.
Esta shell inicia sesión automáticamente como root, de modo que los administradores pueden
depurar el sistema mientras el sistema operativo aún está arrancando.
Advertencia
No olvide deshabilitar el servicio debug-shell.service cuando haya finalizado
la depuración, ya que deja una shell root no autenticada abierta a cualquier usuario
con acceso a la consola local.
Usar los objetivos de emergencia y recuperación
Al agregar systemd.unit=rescue.target o systemd.unit=emergency.target delante
de la línea de comandos del kernel desde el cargador de arranque, el sistema indica una shell
de emergencia o recuperación en lugar de iniciarse normalmente. Estas dos shells requieren la
contraseña root.
288
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
El objetivo de emergencia mantiene el sistema de archivos root montado con solo lectura;
mientras que el objetivo de recuperación espera que sysinit.target se complete, para que
una mayor parte del sistema se inicie (p. ej., servicio de inicio de sesión o sistemas de archivos). El
usuario root en este punto no puede hacer cambios a /etc/fstab hasta que la unidad se vuelva a
montar en un estado de lectura/escritura mount -o remount,rw /
Los administradores pueden usar estas shells para corregir problemas que impiden que el sistema
arranque normalmente; por ejemplo, un bucle de dependencia entre servicios o una entrada
incorrecta en /etc/fstab. Cuando se sale de estas shells, continúa el proceso de arranque
regular.
Identificar trabajos atascados
Durante el inicio, systemd inicia una cantidad de trabajos. Si alguno de estos trabajos no se puede
completar, impide que otros trabajos se ejecuten. Para inspeccionar la lista de trabajos actual, los
administradores pueden usar el comando systemctl list-jobs. Todos los trabajos detallados
como en ejecución deben completarse para que los trabajos detallados como en espera puedan
continuar.
Referencias
Páginas del manual: dracut.cmdline(7), systemd-journald(8),
journald.conf(5), journalctl(1) y systemctl(1)
RH134-RHEL8.2-es-1-20200928
289
capítulo 10 | Control del proceso de arranque
Ejercicio Guiado
Restablecimiento de la contraseña de
root
En este ejercicio, restablecerá la contraseña root en un sistema.
Resultados
Deberá ser capaz de restablecer una contraseña root perdida.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab boot-resetting start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
También restablece la contraseña root a una cadena aleatoria y establece un tiempo de
espera mayor para el menú de GRUB2.
[student@workstation ~]$ lab boot-resetting start
1.
Vuelva a arrancar servera e interrumpa la cuenta regresiva en el menú del cargador de
arranque.
1.1.
Localice el icono de la consola de servera, según corresponda para el entorno del
aula. Abra la consola.
Envíe Ctrl+Alt+Del a su sistema usando la entrada del menú o el botón relevantes.
1.2.
2.
Cuando el menú del cargador de arranque aparezca, presione cualquier tecla
(excepto Enter) para interrumpir la cuenta regresiva.
Edite la entrada del cargador de arranque predeterminada (en la memoria) para anular el
proceso de arranque después de que todos los sistemas de archivos hayan sido montados
por el kernel, pero antes de que el control se entregue a systemd.
2.1.
Use las teclas de dirección para destacar la entrada del cargador de arranque
predeterminada.
2.2.
Presione e para editar la entrada actual.
2.3.
Use las teclas de dirección para navegar hacia la línea que comienza con linux.
2.4.
Presione End (Fin) para mover el cursor hasta el final de la línea.
2.5.
Agregue rd.break en el final de la línea.
2.6.
Presione Ctrl+x para realizar el arranque con la configuración modificada.
3.
En el prompt switch_root, vuelva a montar el sistema de archivos /sysroot con acceso
de lectura-escritura y, luego, use chroot para ir a un jail chroot en /sysroot.
290
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
4. Cambie la contraseña de root nuevamente a redhat.
sh-4.4# passwd root
Changing password for user root.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.
5.
Configure el sistema para que realice automáticamente un etiquetado nuevo de SELinux
completo después del arranque. Esto es necesario porque el comando passwd recrea el
archivo /etc/shadow sin un contexto SELinux.
sh-4.4# touch /.autorelabel
6. Escriba exit dos veces para continuar reiniciando su sistema de forma normal. El sistema
ejecuta un nuevo etiquetado SELinux y, luego, vuelve a arrancar nuevamente por sí solo.
Cuando el sistema esté funcionando, verifique su trabajo al iniciar sesión como root en la
consola. Use redhat como la contraseña.
Finalizar
En workstation, ejecute el script lab boot-resetting finish para terminar este ejercicio.
[student@workstation ~]$ lab boot-resetting finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
291
capítulo 10 | Control del proceso de arranque
Reparación de problemas del sistema de
archivos en el arranque
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de reparar manualmente la configuración del
sistema de archivos o problemas de daños que detengan el proceso de arranque.
Diagnosticar y corregir problemas del sistema de
archivos
Los errores en sistemas de archivos dañados y en /etc/fstab pueden impedir que un sistema
arranque. En la mayoría de los casos, systemd cae a una shell de reparación que requiere la
contraseña de root.
En la siguiente tabla, se detallan algunos errores comunes y sus resultados.
Problemas comunes del sistema de archivos
Problema
Resultado
Sistema de archivos dañado
systemd intenta reparar el sistema de archivos. Si el problema
es demasiado grave y no admite una corrección automática, el
sistema pasa al usuario a una shell de emergencia.
Dispositivo no existente o
UUID mencionado en /etc/
fstab
systemd espera un tiempo establecido a que el dispositivo
esté disponible. Si el dispositivo no aparece como disponible,
el sistema pasa al usuario a una shell de emergencia después
del tiempo de espera.
Punto de montaje no
existente en /etc/fstab
El sistema pasa al usuario a una shell de emergencia.
Opción de montaje incorrecta
especificada en /etc/fstab
El sistema pasa al usuario a una shell de emergencia.
En todos los casos, los administradores también pueden usar el objetivo de emergencia para
diagnosticar y corregir el problema, dado que ningún sistema de archivos se monta antes de que
se muestre la shell de emergencia.
nota
Cuando use la shell de emergencia para resolver problemas del sistema de archivos,
no olvide ejecutar systemctl daemon-reload después de editar /etc/fstab.
Sin esta recarga, systemd puede continuar usando la versión anterior.
La opción nofail en una entrada en el archivo /etc/fstab permite que el sistema arranque,
incluso si el montaje de ese sistema de archivos no se ejecuta de forma correcta. No use
esta opción en circunstancias normales. Con nofail, una aplicación se puede iniciar sin el
almacenamiento y generar posibles consecuencias graves.
292
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
Referencias
Páginas del manual: systemd-fsck(8), systemd-fstab-generator(8) y
systemd.mount(5)
RH134-RHEL8.2-es-1-20200928
293
capítulo 10 | Control del proceso de arranque
Ejercicio Guiado
Reparación de problemas del sistema de
archivos en el arranque
En este ejercicio, recuperará un sistema de una configuración incorrecta en /etc/fstab
que hace que el proceso de arranque falle.
Resultados
Debe ser capaz de diagnosticar problemas de /etc/fstab y usar el modo de emergencia
para recuperar el sistema.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab boot-repairing start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la red.
También introduce un problema del sistema de archivos, establece un tiempo de espera
mayor para el menú de GRUB2 y reinicia servera.
[student@workstation ~]$ lab boot-repairing start
1.
Acceda a la consola de servera y observe que el proceso de arranque no se ejecuta
correctamente desde el principio.
1.1.
Localice el icono de la consola de servera, según corresponda para el entorno del
aula. Abra la consola.
Advierta que, al parecer, un trabajo de inicio no se ejecuta por completo. Tómese un
momento para especular sobre la posible causa de este comportamiento.
1.2.
Para reiniciar, envíe Ctrl+Alt+Del a su sistema usando la entrada del menú o
el botón relevantes. En el caso de este problema de arranque en particular, esta
secuencia de teclas puede no detener inmediatamente el trabajo en ejecución, y es
posible que tenga que esperar a que finalice el tiempo de espera antes de que el
sistema se reinicie.
Si espera a que la tarea finalice el tiempo de espera sin enviar Ctrl+Alt+Del, el
sistema eventualmente genera por su cuenta una shell de emergencia.
1.3.
2.
294
Cuando el menú del cargador de arranque aparezca, presione cualquier tecla
(excepto Enter) para interrumpir la cuenta regresiva.
Si observa el error que tuvo en el arranque anterior, parece que al menos ciertas partes del
sistema aún están funcionando. Puesto que sabe la contraseña de root (redhat), intente
un arranque de emergencia.
2.1.
Use las teclas de dirección para destacar la entrada del cargador de arranque
predeterminada.
2.2.
Presione e para editar la entrada actual.
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
3.
2.3.
Use las teclas de dirección para navegar hacia la línea que comienza con linux.
2.4.
Presione End (Fin) para mover el cursor hasta el final de la línea.
2.5.
Agregue systemd.unit=emergency.target en el final de la línea.
2.6.
Presione Ctrl+x para realizar el arranque con la configuración modificada.
Inicie sesión en el modo de emergencia. La contraseña de root es redhat.
Give root password for maintenance
(or press Control-D to continue): redhat
[root@servera ~]#
4. Determine qué sistemas de archivos están montados actualmente.
[root@servera ~]# mount
...output omitted...
/dev/vda1 on / type xfs (ro,relatime,seclabel,attr2,inode64,noquota)
...output omitted...
Tenga en cuenta que el sistema de archivos root se monta con acceso de solo lectura.
5.
Vuelva a montar el sistema de archivos root con acceso de lectura-escritura.
[root@servera ~]# mount -o remount,rw /
6. Use el comando mount -a para intentar montar todos los demás sistemas de archivos.
Con la opción --all (-a), el comando monta todos los sistemas de archivos detallados en
/etc/fstab que todavía no están montados.
[root@servera ~]# mount -a
mount: /RemoveMe: mount point does not exist.
7.
Edite /etc/fstab para corregir el problema.
7.1.
Elimine o comente la línea incorrecta.
[root@servera ~]# vim /etc/fstab
...output omitted...
# /dev/sdz1
/RemoveMe
xfs
defaults
7.2.
0 0
Actualice systemd para que el sistema registre la configuración de /etc/fstab
nueva.
[root@servera ~]# systemctl daemon-reload
8. Intente montar todas las entradas para verificar que su /etc/fstab ahora sea correcto.
[root@servera ~]# mount -a
RH134-RHEL8.2-es-1-20200928
295
capítulo 10 | Control del proceso de arranque
9. Reinicie el sistema y espere a que el arranque finalice. Ahora el sistema debería arrancar
normalmente.
[root@servera ~]# systemctl reboot
Finalizar
En workstation, ejecute el script lab boot-repairing finish para terminar este ejercicio.
[student@workstation ~]$ lab boot-repairing finish
Esto concluye el ejercicio guiado.
296
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
Trabajo de laboratorio
Control del proceso de arranque
Lista de verificación de rendimiento
En este trabajo de laboratorio, restablecerá la contraseña de root en un sistema, corregirá
una configuración incorrecta y establecerá el objetivo de arranque predeterminado.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Restablecer una contraseña de root perdida.
• Diagnosticar y corregir problemas de arranque.
• Establecer el objetivo de systemd predeterminado.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab boot-review start. Este comando ejecuta
un script de inicio que determina si la máquina serverb es accesible en la red. También
introduce un problema del sistema de archivos, restablece la contraseña de root, establece
un tiempo de espera mayor para el menú de GRUB2 y reinicia serverb.
[student@workstation ~]$ lab boot-review start
1.
En serverb, restablezca la contraseña de root como redhat.
Localice el icono de la consola de serverb, según corresponda para el entorno del aula.
Trabaje desde esa consola.
2.
El sistema no arranca. Al parecer, un trabajo de inicio no se ejecuta por completo. Desde la
consola, corrija el problema.
3.
Cambie el objetivo de systemd predeterminado en serverb para que el sistema inicie
automáticamente una interfaz gráfica en el arranque.
Todavía no hay una interfaz gráfica instalada en serverb. Para este ejercicio, solo establezca
el objetivo predeterminado y no instale los paquetes.
Evaluación
En workstation, ejecute el script lab boot-review grade para confirmar que ha realizado
correctamente este ejercicio.
[student@workstation ~]$ lab boot-review grade
RH134-RHEL8.2-es-1-20200928
297
capítulo 10 | Control del proceso de arranque
Finalizar
En workstation, ejecute el script lab boot-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab boot-review finish
Esto concluye el trabajo de laboratorio.
298
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
Solución
Control del proceso de arranque
Lista de verificación de rendimiento
En este trabajo de laboratorio, restablecerá la contraseña de root en un sistema, corregirá
una configuración incorrecta y establecerá el objetivo de arranque predeterminado.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Restablecer una contraseña de root perdida.
• Diagnosticar y corregir problemas de arranque.
• Establecer el objetivo de systemd predeterminado.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab boot-review start. Este comando ejecuta
un script de inicio que determina si la máquina serverb es accesible en la red. También
introduce un problema del sistema de archivos, restablece la contraseña de root, establece
un tiempo de espera mayor para el menú de GRUB2 y reinicia serverb.
[student@workstation ~]$ lab boot-review start
1.
En serverb, restablezca la contraseña de root como redhat.
Localice el icono de la consola de serverb, según corresponda para el entorno del aula.
Trabaje desde esa consola.
1.1.
Envíe Ctrl+Alt+Del a su sistema usando la entrada del menú o el botón relevantes.
1.2.
Cuando el menú del cargador de arranque aparezca, presione cualquier tecla (excepto
Enter) para interrumpir la cuenta regresiva.
1.3.
Use las teclas de dirección para destacar la entrada del cargador de arranque
predeterminada.
1.4.
Presione e para editar la entrada actual.
1.5.
Use las teclas de dirección para navegar hacia la línea que comienza con linux.
1.6.
Presione End (Fin) para mover el cursor hasta el final de la línea.
1.7.
Agregue rd.break en el final de la línea.
1.8.
Presione Ctrl+x para realizar el arranque con la configuración modificada.
1.9.
En el prompt switch_root, vuelva a montar el sistema de archivos /sysroot con
acceso de lectura-escritura y, luego, use chroot para ir a un jail chroot en /sysroot.
RH134-RHEL8.2-es-1-20200928
299
capítulo 10 | Control del proceso de arranque
switch_root:/# mount -o remount,rw /sysroot
switch_root:/# chroot /sysroot
1.10. Establezca la contraseña de root en redhat.
sh-4.4# passwd root
Changing password for user root.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.
1.11.
Configure el sistema para que realice automáticamente un etiquetado nuevo de
SELinux completo después del arranque.
sh-4.4# touch /.autorelabel
1.12.
2.
Escriba exit dos veces para continuar reiniciando su sistema. El sistema no arranca
debido a un problema que resolverá en el siguiente paso.
El sistema no arranca. Al parecer, un trabajo de inicio no se ejecuta por completo. Desde la
consola, corrija el problema.
2.1.
Arranque el sistema en modo de emergencia. Para esto, reinicie serverb al enviar
Ctrl+Alt+Del a su sistema usando la entrada del menú o el botón relevantes.
2.2.
Cuando el menú del cargador de arranque aparezca, presione cualquier tecla (excepto
Enter) para interrumpir la cuenta regresiva.
2.3.
Use las teclas de dirección para destacar la entrada del cargador de arranque
predeterminada.
2.4.
Presione e para editar la entrada actual.
2.5.
Use las teclas de dirección para navegar hacia la línea que comienza con linux.
2.6.
Presione End (Fin) para mover el cursor hasta el final de la línea.
2.7.
Agregue systemd.unit=emergency.target en el final de la línea.
2.8.
Presione Ctrl+x para realizar el arranque con la configuración modificada.
2.9.
Inicie sesión en el modo de emergencia. La contraseña de root es redhat.
Give root password for maintenance
(or press Control-D to continue): redhat
[root@serverb ~]#
2.10. Vuelva a montar el sistema de archivos / con acceso de lectura-escritura.
[root@serverb ~]# mount -o remount,rw /
2.11.
300
Use el comando mount -a para intentar montar todos los demás sistemas de archivos.
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
[root@serverb ~]# mount -a
mount: /olddata: can't find UUID=4d5c85a5-8921-4a06-8aff-80567e9689bc.
2.12. Edite /etc/fstab para eliminar o comentar la línea incorrecta.
[root@serverb ~]# vim /etc/fstab
...output omitted...
#UUID=4d5c85a5-8921-4a06-8aff-80567e9689bc
/olddata
xfs
defaults
0 0
2.13. Actualice systemd para que el sistema registre la configuración de /etc/fstab
nueva.
[root@serverb ~]# systemctl daemon-reload
[root@serverb ~]#
2.14. Intente montar todas las entradas para verificar que su /etc/fstab ahora sea
correcto.
[root@serverb ~]# mount -a
[root@serverb ~]#
2.15. Reinicie el sistema y espere a que el arranque finalice. Puesto que creó el archivo
/.autorelabel en el primer paso, después de configurar la contraseña de root, el
sistema ejecuta un etiquetado nuevo de SELinux y, luego, se reinicia nuevamente por
su cuenta. Ahora el sistema debería arrancar normalmente.
[root@serverb ~]# systemctl reboot
3.
Cambie el objetivo de systemd predeterminado en serverb para que el sistema inicie
automáticamente una interfaz gráfica en el arranque.
Todavía no hay una interfaz gráfica instalada en serverb. Para este ejercicio, solo establezca
el objetivo predeterminado y no instale los paquetes.
3.1.
Inicie sesión en serverb como el usuario root. Use redhat como la contraseña.
3.2.
Use el comando systemctl set-default para establecer graphical.target
como el objetivo predeterminado.
[root@serverb ~]# systemctl set-default graphical.target
3.3.
Use el comando systemctl get-default para verificar su trabajo.
[root@serverb ~]# systemctl get-default
graphical.target
3.4.
Cierre sesión en serverb.
[root@serverb ~]# exit
RH134-RHEL8.2-es-1-20200928
301
capítulo 10 | Control del proceso de arranque
Evaluación
En workstation, ejecute el script lab boot-review grade para confirmar que ha realizado
correctamente este ejercicio.
[student@workstation ~]$ lab boot-review grade
Finalizar
En workstation, ejecute el script lab boot-review finish para terminar el trabajo de
laboratorio.
[student@workstation ~]$ lab boot-review finish
Esto concluye el trabajo de laboratorio.
302
RH134-RHEL8.2-es-1-20200928
capítulo 10 | Control del proceso de arranque
Resumen
En este capítulo, aprendió lo siguiente:
• systemctl reboot y systemctl poweroff reinician y apagan el sistema, respectivamente.
• systemctl isolate target-name.target cambia a un nuevo objetivo en tiempo de
ejecución.
• systemctl get-default y systemctl set-default se pueden usar para consultar y
establecer el objetivo predeterminado.
• Use rd.break en la línea de comandos del kernel para interrumpir el proceso de arranque
antes de que se entregue el control desde el initramfs. El sistema de archivos root se monta
como solo lectura en /sysroot.
• El objetivo de emergencia se puede usar para diagnosticar y corregir problemas de sistemas de
archivos.
RH134-RHEL8.2-es-1-20200928
303
304
RH134-RHEL8.2-es-1-20200928
capítulo 11
Administración de la seguridad
de redes
Meta
Controlar las conexiones de red a los servicios
mediante el firewall del sistema y las reglas de
SELinux.
Objetivos
•
Aceptar o rechazar las conexiones de red a los
servicios del sistema por medio de las reglas de
firewalld.
•
Controlar si los servicios de red pueden usar
puertos de red específicos al administrar las
etiquetas de puertos de SELinux.
•
Administración de firewalls del servidor (y
ejercicio guiado)
•
Control del etiquetado de puertos de SELinux
(y ejercicio guiado)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Administración de firewalls del servidor
305
capítulo 11 | Administración de la seguridad de redes
Administración de firewalls del servidor
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de aceptar o rechazar las conexiones de red a
los servicios del sistema por medio de las reglas de firewalld.
Conceptos de arquitectura del firewall
El kernel de Linux incluye netfilter, un marco (framework) para las operaciones de tráfico de
red, como el filtrado de paquetes, la traducción de direcciones de red y la traducción de puertos.
Al implementar manejadores en el kernel que interceptan invocaciones de funciones y mensajes,
netfilter permite que otros módulos del kernel interactúen directamente con la pila (stack)
de red del kernel. El software del firewall emplea estos enlaces para registrar reglas de filtro y
funciones que modifican al paquete, lo que permite procesar cada paquete que pasa a través de la
pila (stack) de red. Cualquier paquete de red entrante, saliente o reenviado se puede inspeccionar,
modificar, eliminar o enrutar mediante programación antes de llegar a los componentes o a las
aplicaciones del espacio de usuario. Netfilter es el componente primario en los firewalls de
Red Hat Enterprise Linux 8.
Nftables supera a netfilter
El kernel de Linux también incluye el marco nftables, un nuevo subsistema de clasificación
de paquetes y filtros que ha mejorado partes del código de netfilter, pero ha conservado la
arquitectura de netfilter (como los enlaces de la pila [stack] de red, el sistema de seguimiento
de la conexión y la utilidad de registro). Las ventajas de la actualización de nftables es que
ofrece un procesamiento de paquetes más veloz, actualizaciones del conjunto de reglas más
rápidas y el procesamiento simultáneo de IPv4 e IPv6 desde las mismas reglas. Otra gran
diferencia entre nftables y el marco netfilter original radica en sus interfaces. Netfilter
está configurado por medio de múltiples marcos (frameworks) de utilidad, incluidos iptables,
ip6tables, arptables y ebtables, que ahora están en desuso. Nftables emplea la utilidad
única del espacio de usuario nft, lo que permite que toda la gestión de protocolos se produzca
a través de una sola interfaz y elimina la contención histórica causada por diversos front-ends y
múltiples interfaces de netfilter.
Presentación de firewalld
Firewalld es un administrador de firewall dinámico, un front-end para el marco (framework)
nftables que usa el comando nft. Hasta la introducción de nftables, firewalld usaba el
comando iptables para configurar netfilter de forma directa, como una alternativa mejorada
del servicio de iptables. En RHEL 8, firewalld sigue siendo el front-end recomendado, ya
que gestiona conjuntos de reglas de firewall por medio de nft. Firewalld sigue siendo capaz
de leer y gestionar los archivos de configuración y los conjuntos de reglas de iptables y usa
xtables-nft-multi para traducir objetos de iptables directamente a reglas y objetos de
nftables. Si bien esto no se aconseja, firewalld se puede configurar para retornar al backend de iptables para casos de usos complejos en los que los conjuntos de reglas existentes de
iptables no se pueden procesar correctamente con traducciones de nft.
Las aplicaciones consultan el subsistema usando la interfaz de D-Bus. El subsistema de
firewalld (disponible desde el paquete RPM de firewalld) no se incluye en una instalación
mínima, pero se incluye en una instalación básica. Con firewalld, se simplifica la administración
306
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
del firewall al clasificar todo el tráfico de la red en zonas. En función de los criterios (como la
dirección IP de la fuente de un paquete o la interfaz de red entrante), el tráfico se desvía a las
reglas de firewall para la zona adecuada. Cada zona tiene su propia lista de puertos y servicios que
están abiertos o cerrados.
nota
En el caso de equipos portátiles u otras máquinas que cambian regularmente las
redes, NetworkManager se puede usar para configurar automáticamente la zona
de firewall para una conexión. Las zonas se personalizan con reglas adecuadas para
conexiones particulares.
Esto es especialmente útil en el traslado entre el hogar, el trabajo y las redes
inalámbricas públicas. Un usuario podría desear llegar al servicio sshd de su sistema
cuando se conecta a las redes de su hogar y corporativas, pero no cuando se
conecta a la red inalámbrica pública en la tienda de café local.
Firewalld verifica la dirección de origen para cada paquete que ingresa al sistema. Si esa dirección
de origen está asignada a una zona específica, rigen las reglas de esa zona. Si la dirección de
origen no está asignada a una zona, firewalld asocia el paquete con la zona para la interfaz de
red entrante, y rigen las reglas para esa zona. Si la interfaz de red no está asociada con una zona
por algún motivo, firewalld asocia el paquete con la zona predeterminada.
La zona predeterminada no es una zona separada, sino una designación para una zona existente.
Inicialmente, firewalld designa la zona public (pública) como la zona predeterminada y asigna
la interfaz de bucle invertido de lo a la zona trusted (de confianza).
La mayoría de las zonas permiten el tráfico a través del firewall que relaciona una lista de puertos
y protocolos particulares (como 631/udp) o servicios predefinidos (como ssh). Si el tráfico
no relaciona un puerto y protocolo o servicio permitidos, generalmente se rechaza. (La zona
trusted [de confianza], que permite todo el tráfico de forma predeterminada, es una excepción a
esto).
Zonas predefinidas
Firewalld cuenta con zonas predefinidas, cada una de las cuales se puede personalizar. De
forma predeterminada, todas las zonas permiten todo el tráfico entrante que sea parte de una
comunicación iniciada por el sistema y todo el tráfico saliente. En la siguiente tabla, se detalla esta
configuración de zona inicial.
Configuración predeterminada de zonas firewalld
Nombre de la zona
Configuración predeterminada
trusted (de
confianza)
Permite todo el tráfico entrante.
home (inicio)
Rechaza el tráfico entrante a menos que esté relacionado con tráfico
saliente o que relacione los servicios predefinidos ssh, mdns, ippclient, samba-client o dhcpv6-client.
RH134-RHEL8.2-es-1-20200928
307
capítulo 11 | Administración de la seguridad de redes
Nombre de la zona
Configuración predeterminada
internal
(interna)
Rechaza el tráfico entrante a menos que esté relacionado con tráfico
saliente o que relacione los servicios predefinidos ssh, mdns, ippclient, samba-client o dhcpv6-client (lo mismo que la zona
home para empezar).
work (trabajo)
Rechaza el tráfico entrante a menos que esté relacionado con tráfico
saliente o que relacione los servicios predefinidos ssh, ipp-client o
dhcpv6-client.
public
(pública)
Rechaza el tráfico entrante, a menos que esté relacionado con tráfico
saliente o que relacione los servicios predefinidos ssh o dhcpv6client. La zona predeterminada para interfaces de red recientemente
agregadas.
external
(externa)
Rechaza el tráfico entrante, a menos que esté relacionado con tráfico
saliente o que relacione el servicio predefinido ssh. El tráfico IPv4
saliente reenviado a través de esta zona es enmascarado para que
luzca como si se hubiera originado desde la dirección IPv4 de la
interfaz de red saliente.
dmz
Rechaza el tráfico entrante, a menos que esté relacionado con tráfico
saliente o que relacione el servicio predefinido ssh.
block (bloqueo)
Rechaza todo el tráfico entrante, a menos que esté relacionado con
tráfico saliente.
drop (caída)
Deja caer todo el tráfico entrante, a menos que esté relacionado con
tráfico saliente (ni siquiera responde con errores ICMP).
Para conocer una lista de las zonas predefinidas disponibles y sus usos previstos, consulte
firewalld.zones(5).
Servicios predefinidos
Firewalld incluye un número de servicios predefinidos. Estas definiciones de servicio lo ayudan a
identificar servicios de red particulares que puede configurar. En lugar de tener que buscar los
puertos relevantes para el servicio samba-client, por ejemplo, puede especificar el servicio
samba-client compilado previamente para configurar los puertos y protocolos correctos. En la
siguiente tabla, se detallan los servicios predefinidos que se emplean en la configuración inicial de
zonas de firewall.
Servicios firewalld predefinidos seleccionados
Nombre del servicio
Configuración
ssh
Servidor SSH local. Tráfico a 22/tcp
dhcpv6-client
Cliente DHCPv6 local. Tráfico a 546/udp en la red fe80::/64 IPv6
ipp-client
Impresión IPP local. Tráfico a 631/udp.
samba-client
Archivo Windows local y cliente de intercambio de impresión. Tráfico a
137/udp y 138/udp.
308
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
Nombre del servicio
Configuración
mdns
Resolución del nombre del enlace local DNS (mDNS) multidifusión
(multicast). Tráfico a 5353/udp a las direcciones de multidifusión
(multicast) 224.0.0.251 (IPv4) o ff02::fb (IPv6).
nota
Muchos servicios predefinidos se incluyen en el paquete firewalld. Use firewallcmd --get-services para enumerarlos. Los archivos de configuración para los
servicios predefinidos se encuentran en /usr/lib/firewalld/services, en un
formato definido por firewalld.zone(5).
Use los servicios predefinidos o especifique directamente el puerto y el protocolo
requeridos. La interfaz gráfica de la consola web se usa para revisar los servicios
predefinidos y para definir servicios adicionales.
Configuración del firewall
Los administradores de sistemas interactúan con firewalld de tres formas:
• mediante la edición directa de archivos de configuración en /etc/firewalld/ (no analizado
en este capítulo);
• mediante la interfaz gráfica de la consola web;
• mediante la herramienta de línea de comandos firewall-cmd.
Configuración de los servicios de firewall mediante la consola
web
Para configurar los servicios de firewall con la consola web, inicie sesión con acceso con privilegios
al hacer clic en la opción Reuse my password for privileged tasks (Volver a usar mi contraseña
para tareas con privilegios). Esto permite al usuario que ejecute comandos con privilegios de sudo
para modificar los servicios de firewall.
Figura 11.1: Inicio de sesión con privilegios con la consola web
Haga clic en la opción Networking (Redes) en el menú de navegación izquierdo para mostrar la
sección Firewall en la página principal de redes. Haga clic en el enlace de Firewall para acceder a
la lista de servicios permitidos.
RH134-RHEL8.2-es-1-20200928
309
capítulo 11 | Administración de la seguridad de redes
Figura 11.2: Redes de la consola web
Los servicios permitidos que se muestran en la lista son aquellos servicios que el firewall permite
actualmente. Haga clic en la flecha (>) a la izquierda del nombre del servicio para ver los detalles
del servicio. Para agregar un servicio, haga clic en el botón Add Services... (Agregar servicios) en
la esquina superior derecha de la página de Firewall Allowed Services (Servicios permitidos).
Figura 11.3: Lista de servicios permitidos por el firewall en la consola web
La página Add Services (Agregar servicios) muestra los servicios predefinidos disponibles.
310
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
Figura 11.4: Interfaz para agregar servicios de firewall en la consola web
Para seleccionar un servicio, desplácese por la lista o seleccione una opción en el cuadro de
texto Filter Services (Filtrar servicios). En el siguiente ejemplo, la cadena http se ingresa en el
cuadro de texto de búsqueda para buscar servicios que contengan esa cadena, es decir, servicios
relacionados con la web. Seleccione la casilla de verificación a la izquierda de los servicios para que
el firewall los permita. Haga clic en el botón Add Services (Agregar servicios) para completar el
proceso.
RH134-RHEL8.2-es-1-20200928
311
capítulo 11 | Administración de la seguridad de redes
Figura 11.5: Búsqueda por filtro de servicios de firewall en la consola web
La interfaz vuelve a la página de Firewall Allowed Services (Servicios permitidos), donde puede
revisar la lista actualizada de servicios permitidos.
Figura 11.6: Lista de servicios permitidos por el firewall en la consola web
Configuración de firewall desde la línea de comandos
El comando firewall-cmd interactúa con el administrador de firewall dinámico firewalld. Se
instala como parte del paquete firewalld principal y está disponible para los administradores que
prefieren trabajar en la línea de comandos a los fines de trabajar en sistemas sin un entorno gráfico
o ejecutar el scripting de la configuración de firewall.
312
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
En la siguiente tabla, se detallan varios comandos de firewall-cmd usados frecuentemente,
junto con una explicación. Observe que, a menos que se especifique lo contrario, casi todos los
comandos funcionarán en la configuración de tiempo de ejecución, a menos que se especifique
la opción --permanent. Si se especifica la opción --permanent, debe activar la configuración
ejecutando también el comando firewall-cmd --reload, que lee la configuración
permanente actual y la aplica como la nueva configuración de tiempo de ejecución. Muchos de los
comandos detallados toman la opción --zone=ZONE para determinar qué zona afectan. Cuando
se requiera una máscara de red, use la notación CIDR (como 192.168.1/24).
Comandos de firewall-cmd
Explicación
--get-default-zone
Consultar la zona predeterminada actual.
--set-default-zone=ZONE
Configurar la zona predeterminada. Esto
cambia tanto la configuración del tiempo de
ejecución como la permanente.
--get-zones
Mostrar todas las zonas disponibles.
--get-active-zones
Mostrar todas las zonas que están
actualmente en uso (tienen una interfaz
u origen conectados a esta), junto con la
información de su interfaz y origen.
--add-source=CIDR [--zone=ZONE]
Enrutar todo el tráfico que proviene de
la dirección IP o red/máscara de red a la
zona especificada. Si no se proporciona
ninguna opción --zone=, se usa la zona
predeterminada.
--remove-source=CIDR [--zone=ZONE]
Eliminar la regla que enruta todo el tráfico
que proviene de la red de la dirección IP o
red/máscara de red. Si no se proporciona
ninguna opción --zone=, se usa la zona
predeterminada.
--add-interface=INTERFACE [-zone=ZONE]
Enrutar todo el tráfico que proviene de
INTERFACE a la zona especificada. Si no se
proporciona ninguna opción --zone=, se usa
la zona predeterminada.
--change-interface=INTERFACE [-zone=ZONE]
Asociar la interfaz con ZONE en lugar
de su zona actual. Si no se proporciona
ninguna opción --zone=, se usa la zona
predeterminada.
--list-all [--zone=ZONE]
Mostrar todas las interfaces, fuentes, servicios
y puertos configurados para ZONE. Si no se
proporciona ninguna opción --zone=, se usa
la zona predeterminada.
--list-all-zones
Recuperar toda la información para todas las
zonas (interfaces, fuentes, puertos, servicios).
RH134-RHEL8.2-es-1-20200928
313
capítulo 11 | Administración de la seguridad de redes
Comandos de firewall-cmd
Explicación
--add-service=SERVICE [-zone=ZONE]
Permitir el tráfico a SERVICE. Si no se
proporciona ninguna opción --zone=, se usa
la zona predeterminada.
--add-port=PORT/PROTOCOL [-zone=ZONE]
Permitir el tráfico a los puertos PORT/
PROTOCOL. Si no se proporciona
ninguna opción --zone=, se usa la zona
predeterminada.
--remove-service=SERVICE [-zone=ZONE]
Eliminar SERVICE de la lista permitida para la
zona. Si no se proporciona ninguna opción -zone=, se usa la zona predeterminada.
--remove-port=PORT/PROTOCOL [-zone=ZONE]
Eliminar los puertos PORT/PROTOCOL
de la lista permitida para la zona. Si no se
proporciona ninguna opción --zone=, se usa
la zona predeterminada.
--reload
Dejar caer la configuración del tiempo
de ejecución y aplicar la configuración
persistente.
Los siguientes ejemplos de comandos configuran la zona predeterminada para dmz, asignan
todo el tráfico proveniente de la red 192.168.0.0/24 a la zona internal (interna) y abren los
puertos de red para el servicio mysql en la zona internal (interna).
[root@host ~]# firewall-cmd --set-default-zone=dmz
[root@host ~]# firewall-cmd --permanent --zone=internal \
--add-source=192.168.0.0/24
[root@host ~]# firewall-cmd --permanent --zone=internal --add-service=mysql
[root@host ~]# firewall-cmd --reload
nota
En situaciones donde la sintaxis básica de firewalld no es suficiente, también
puede agregar rich-rules (reglas enriquecidas), una sintaxis más expresiva, para
escribir reglas complejas. Si aun así la sintaxis de las reglas enriquecidas no es
suficiente, también puede usar reglas de Direct Configuration (Configuración
directa), la sintaxis de nft sin formato mezclada con las reglas de firewalld.
Estos modos avanzados no están incluidos en el alcance de este capítulo.
Referencias
Páginas del manual: firewall-cmd(1), firewalld(1), firewalld.zone(5),
firewalld.zones(5) y nft(8)
314
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
Ejercicio Guiado
Administración de firewalls del servidor
En este ejercicio, controlará el acceso a los servicios del sistema mediante el ajuste de las
reglas del firewall del sistema con firewalld.
Resultados
Debe ser capaz de configurar reglas de firewall para controlar el acceso a los servicios.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
Desde workstation, ejecute el comando lab netsecurity-firewalls start. El
comando ejecuta un script de inicio que determina si el host servera es accesible en la red.
[student@workstation ~]$ lab netsecurity-firewalls start
1.
Desde workstation, use SSH para iniciar sesión en servera con el usuario student.
Los sistemas se configuran para que usen claves SSH para la autenticación, por lo que no
se necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
En el sistema servera, asegúrese de que tanto el paquete httpd como el paquete mod_ssl
estén instalados. Estos paquetes proporcionan el servidor web Apache que usted protegerá
con un firewall, y las extensiones necesarias para que el servidor web sirva contenido
mediante SSL.
[student@servera ~]$ sudo yum install httpd mod_ssl
[sudo] password for student: student
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
3.
Con el usuario student en servera, cree el archivo /var/www/html/index.html.
Agregue la siguiente línea de texto: I am servera. (Soy servera).
[student@servera ~]$ sudo bash -c \
"echo 'I am servera.' > /var/www/html/index.html"
4. Inicie y habilite el servicio httpd en su sistema servera.
RH134-RHEL8.2-es-1-20200928
315
capítulo 11 | Administración de la seguridad de redes
[student@servera ~]$ sudo systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/
lib/systemd/system/httpd.service.
5.
Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
6. Desde workstation, intente acceder a su servidor web en servera por medio del puerto
no cifrado 80/TCP y del puerto encapsulado SSL 443/TCP. Ambos intentos deberían fallar.
6.1.
Este comando debería fallar:
[student@workstation ~]$ curl http://servera.lab.example.com
curl: (7) Failed to connect to servera.lab.example.com port 80: No route to host
6.2.
Este comando también debería fallar:
[student@workstation ~]$ curl -k https://servera.lab.example.com
curl: (7) Failed to connect to servera.lab.example.com port 443: No route to host
7.
Inicie sesión en servera con el usuario student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
8. En servera, asegúrese de que el servicio nftables esté enmascarado y de que el
servicio firewalld esté habilitado y en ejecución.
8.1.
Determine si el estado del servicio nftables está enmascarado.
[student@servera ~]$ sudo systemctl status nftables
[sudo] password for student: student
● nftables.service - Netfilter Tables
Loaded: loaded (/usr/lib/systemd/system/nftables.service; disabled; vendor
preset: disabled)
Active: inactive (dead)
Docs: man:nft(8)
Los resultados muestran que nftables está deshabilitado e inactivo pero no
enmascarado. Ejecute el siguiente comando para enmascarar el servicio.
[student@servera ~]$ sudo systemctl mask nftables
Created symlink /etc/systemd/system/nftables.service → /dev/null.
8.2.
316
Verifique que el estado del servicio nftables esté enmascarado.
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
[student@servera ~]$ sudo systemctl status nftables
● nftables.service
Loaded: masked (Reason: Unit nftables.service is masked.)
Active: inactive (dead)
8.3.
Verifique que el estado del servicio firewall esté habilitado y en ejecución.
[student@servera ~]$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor
preset: enabled)
Active: active (running) since Wed 2019-05-22 15:36:02 CDT; 5min ago
Docs: man:firewalld(1)
Main PID: 703 (firewalld)
Tasks: 2 (limit: 11405)
Memory: 29.8M
CGroup: /system.slice/firewalld.service
└─703 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork -nopid
May 22 15:36:01 servera.lab.example.com systemd[1]: Starting firewalld - dynamic
firewall daemon...
May 22 15:36:02 servera.lab.example.com systemd[1]: Started firewalld - dynamic
firewall daemon.
8.4. Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
9. Desde workstation, abra Firefox e inicie sesión en la consola web que se ejecuta en
servera para agregar el servicio httpd a la zona de red public (pública).
9.1.
Abra Firefox y navegue hasta https://servera.lab.example.com:9090 para
acceder a la consola web. Acepte el certificado autofirmado usado por servera
agregándolo como una excepción.
9.2.
Seleccione la casilla de verificación junto a Reuse my password for privileged
tasks (Volver a usar mi contraseña para tareas con privilegios) para garantizar los
privilegios administrativos.
Inicie sesión como student con la contraseña student.
9.3.
Haga clic en Networking (Redes) en la barra de navegación izquierda.
9.4. Haga clic en el enlace de Firewall en la página principal de Networking (Redes).
9.5.
Haga clic en el botón Add Services... (Agregar servicios) ubicado en el margen
superior derecho de la página de Firewall.
RH134-RHEL8.2-es-1-20200928
317
capítulo 11 | Administración de la seguridad de redes
9.6. En la interfaz de usuario de Add Services (Agregar servicios), desplácese hacia
abajo o use Filter Services (Filtrar servicios) para ubicar y seleccionar la casilla de
verificación junto al servicio Secure WWW (HTTPS).
9.7.
Haga clic en el botón Add Services (Agregar servicios) ubicado en el margen inferior
derecho de la interfaz de usuario de Add Services (Agregar servicios).
10. Regrese a un terminal en workstation y verifique su trabajo intentando ver el contenido
del servidor web de servera.
10.1. Este comando debería fallar:
[student@workstation ~]$ curl http://servera.lab.example.com
curl: (7) Failed to connect to servera.lab.example.com port 80: No route to host
10.2. Este comando debe arrojar resultados satisfactorios:
[student@workstation ~]$ curl -k https://servera.lab.example.com
I am servera.
nota
Si usa Firefox para conectarse al servidor web, le solicitará la verificación del
certificado del host si pasa el firewall satisfactoriamente.
Finalizar
En workstation, ejecute el script lab netsecurity-firewalls finish para terminar este
ejercicio.
[student@workstation ~]$ lab netsecurity-firewalls finish
Esto concluye el ejercicio guiado.
318
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
Control del etiquetado de puertos de
SELinux
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de verificar que los puertos de red tengan el
tipo de SELinux correcto para que los servicios puedan hacer referencia a ellos.
Etiquetado de puertos de SELinux
SELinux no se limita al etiquetado de archivos y procesos. La política SELinux también rige
estrictamente el tráfico de red. Uno de los métodos que SELinux usa para el control del tráfico de
red es el etiquetado de puertos de red; por ejemplo, en la política targeted, el puerto 22/TCP
tiene asociada la etiqueta ssh_port_t. Los puertos HTTP predeterminados, 80/TCP y 443/TCP,
tienen asociada la etiqueta http_port_t.
Siempre que un proceso desee escuchar en un puerto, SELinux verifica si la etiqueta asociada
con ese proceso (el dominio) tiene permitido hacer referencia a la etiqueta de dicho puerto. Este
proceso puede evitar que un servicio no autorizado use puertos de otra manera usados por otros
servicios de red (legítimos).
Administración del etiquetado de puertos de SELinux
Si decide ejecutar un servicio en un puerto no estándar, es casi seguro que SELinux bloqueará
el tráfico. En este caso, debe actualizar las etiquetas de puertos de SELinux. En algunos casos,
la política targeted ya ha etiquetado el puerto con un tipo que puede usarse; por ejemplo,
dado que el puerto 8008/TCP suele emplearse para aplicaciones web, dicho puerto ya ha sido
etiquetado con http_port_t, el tipo de puerto predeterminado para el servidor web.
Listado de etiquetas de puertos
Para obtener una descripción general de todas las asignaciones de etiquetas de puertos actuales,
ejecute el comando semanage port -l. La opción -l incluye todas las asignaciones actuales
de la siguiente manera:
port_label_t
tcp|udp
comma,separated,list,of,ports
Ejemplo de salida:
[root@host ~]# semanage port -l
...output omitted...
http_cache_port_t
tcp
8080, 8118, 8123, 10001-10010
http_cache_port_t
udp
3130
http_port_t
tcp
80, 81, 443, 488, 8008, 8009, 8443, 9000
...output omitted...
Pare refinar la búsqueda, use el comando grep:
RH134-RHEL8.2-es-1-20200928
319
capítulo 11 | Administración de la seguridad de redes
[root@host ~]# semanage port -l | grep ftp
ftp_data_port_t
tcp
20
ftp_port_t
tcp
21, 989, 990
ftp_port_t
udp
989, 990
tftp_port_t
udp
69
Observe que una etiqueta de puerto puede aparecer dos veces en la salida, una para TCP y otra
para UDP.
Administración de etiquetas de puertos
Use el comando semanage para asignar etiquetas de puertos nuevas, quitar etiquetas de puertos
o modificar las existentes.
Importante
La mayoría de los servicios estándares disponibles en la distribución de Linux
proporcionan un módulo de políticas de SELinux que establece etiquetas en
los puertos. No puede cambiar las etiquetas en esos puertos por medio de
semanage. Para cambiarlas, debe reemplazar el módulo de políticas. La escritura y
la generación de módulos de políticas no se abordan en este curso.
A fin de agregar un puerto a una etiqueta de puerto existente (tipo), use la siguiente sintaxis. -a
agrega una nueva etiqueta de puerto, -t denota el tipo y -p denota el protocolo.
[root@host ~]# semanage port -a -t port_label -p tcp|udp PORTNUMBER
Por ejemplo, para permitir que un servicio gopher escuche en el puerto 71/TCP:
[root@host~]# semanage port -a -t gopher_port_t -p tcp 71
Para ver los cambios locales realizados en la política predeterminada, los administradores pueden
agregar la opción -C al comando semanage.
[root@host~]# semanage port -l -C
SELinux Port Type
Proto
Port Number
gopher_port_t
71
tcp
nota
La política targeted se envía con una gran cantidad de tipos de puerto.
Las páginas del manual de SELinux específicas de los servicios que se encuentran
en el paquete selinux-policy-doc incluyen documentación sobre tipos de SELinux,
booleanos y tipos de puertos. Si las páginas del manual antes mencionadas todavía
no están instaladas en su sistema, realice este procedimiento:
[root@host ~]# yum -y install selinux-policy-doc
[root@host ~]# man -k _selinux
320
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
Eliminación de etiquetas de puertos
La sintaxis para quitar una etiqueta de puerto personalizada es la misma que para la adición de
una etiqueta de puerto, solo que, en lugar de usar la opción -a (para agregar), se usa la opción -d
(para quitar).
Por ejemplo, para quitar la referencia del puerto 71/TCP con gopher_port_t:
[root@host ~]# semanage port -d -t gopher_port_t -p tcp 71
Modificación de referencias de puertos
Para cambiar una referencia de puerto, tal vez porque los requisitos han cambiado, use la opción m (Modificar). Este es un proceso más eficiente que quitar un enlace antiguo y agregar uno nuevo.
Por ejemplo, para modificar el puerto 71/TCP desde gopher_port_t hasta http_port_t, un
administrador puede usar el siguiente comando:
[root@server ~]# semanage port -m -t http_port_t -p tcp 71
Como antes, visualice la modificación con el comando semanage.
[root@server ~]# semanage port -l -C
SELinux Port Type
Proto
Port Number
http_port_t
tcp
71
[root@server ~]# semanage port -l | grep http
http_cache_port_t
tcp
8080, 8118, 8123, 10001-10010
http_cache_port_t
udp
3130
http_port_t
tcp
71, 80, 81, 443, 488, 8008, 8009, 8443,
9000
pegasus_http_port_t
tcp
5988
pegasus_https_port_t
tcp
5989
Referencias
Páginas del manual: semanage(8), semanage-port(8), *_selinux(8)
RH134-RHEL8.2-es-1-20200928
321
capítulo 11 | Administración de la seguridad de redes
Ejercicio Guiado
Control del etiquetado de puertos de
SELinux
En este trabajo de laboratorio, configurará su sistema servera para permitir el acceso
HTTP en un puerto no estándar.
Resultados:
Configurará un servidor web que se ejecuta en servera de manera correcta y ofrece
contenido por medio de un puerto no estándar.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab netsecurity-ports start. Este comando
ejecuta un script de inicio que determina si la máquina servera es accesible en la
red. También instala el servicio httpd y configura el firewall en servera para permitir
conexiones http.
[student@workstation ~]$ lab netsecurity-ports start
Su organización está implementando una nueva aplicación web personalizada. La aplicación web
se ejecuta en un puerto no estándar; en este caso 82/TCP.
Uno de sus administradores júniores ya ha configurado la aplicación en servera. Sin embargo, no
se puede acceder al contenido del servidor web.
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Intente corregir el problema del contenido web al reiniciar el servicio httpd.
3.1.
322
Use el comando systemctl para reiniciar httpd.service. Se espera que este
comando falle.
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
[root@servera ~]# systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
3.2.
Use el comando systemctl status -l para visualizar el estado del servicio
httpd. Advierta el error permission denied (permiso denegado).
[root@servera ~]# systemctl status -l httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset:
disabled)
Active: failed (Result: exit-code) since Mon 2019-04-08 14:23:29 CEST; 3min 33s
ago
Docs: man:httpd.service(8)
Process: 28078 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited,
status=1/FAILURE)
Main PID: 28078 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
Apr 08 14:23:29 servera.lab.example.com systemd[1]: Starting The Apache HTTP
Server...
Apr 08 14:23:29 servera.lab.example.com httpd[28078]: (13)Permission denied:
AH00072: make_sock: could not bind to address [::]:82
Apr 08 14:23:29 servera.lab.example.com httpd[28078]: (13)Permission denied:
AH00072: make_sock: could not bind to address 0.0.0.0:82
Apr 08 14:23:29 servera.lab.example.com httpd[28078]: no listening sockets
available, shutting down
Apr 08 14:23:29 servera.lab.example.com httpd[28078]: AH00015: Unable to open logs
Apr 08 14:23:29 servera.lab.example.com systemd[1]: httpd.service: Main process
exited, code=exited, status=1/FAILURE
Apr 08 14:23:29 servera.lab.example.com systemd[1]: httpd.service: Failed with
result 'exit-code'.
Apr 08 14:23:29 servera.lab.example.com systemd[1]: Failed to start The Apache
HTTP Server.
3.3.
Use el comando sealert para verificar si SELinux está impidiendo que httpd haga
referencia al puerto 82/TCP.
[root@servera ~]# sudo sealert -a /var/log/audit/audit.log
100% done
found 1 alerts in /var/log/audit/audit.log
-------------------------------------------------------------------------------SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port
82.
*****
Plugin bind_ports (99.5 confidence) suggests
************************
If you want to allow /usr/sbin/httpd to bind to network port 82
Then you need to modify the port type.
Do
# semanage port -a -t PORT_TYPE -p tcp 82
RH134-RHEL8.2-es-1-20200928
323
capítulo 11 | Administración de la seguridad de redes
where PORT_TYPE is one of the following: http_cache_port_t, http_port_t,
jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t.
...output omitted...
Raw Audit Messages
type=AVC msg=audit(1554726569.188:852): avc: denied { name_bind } for
pid=28393 comm="httpd" src=82 scontext=system_u:system_r:httpd_t:s0
tcontext=system_u:object_r:reserved_port_t:s0 tclass=tcp_socket permissive=0
...output omitted...
4. Configure SELinux para que permita que httpd haga referencia al puerto 82/TCP y, luego,
reinicie el servicio httpd.service.
4.1.
Use el comando semanage para buscar un tipo de puerto apropiado para el puerto
82/TCP.
[root@servera ~]# semanage port -l | grep http
http_cache_port_t
tcp
8080, 8118, 8123, 10001-10010
http_cache_port_t
udp
3130
http_port_t
tcp
80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t
tcp
5988
pegasus_https_port_t
tcp
5989
http_port_t contiene los puertos HTTP predeterminados: 80/TCP y 443/TCP.
Este es el tipo de puerto correcto para el servidor web.
4.2.
Use el comando semanage para asignar al puerto 82/TCP el tipo http_port_t.
[root@servera ~]# semanage port -a -t http_port_t -p tcp 82
4.3. Use el comando systemctl para reiniciar el servicio httpd.service. Este
comando debe arrojar resultados satisfactorios.
[root@servera ~]# systemctl restart httpd.service
5.
Verifique si ahora puede acceder al servidor web que se ejecuta en el puerto 82/TCP. Use
el comando curl para acceder al servicio web desde servera.
[root@servera ~]# curl http://servera.lab.example.com:82
Hello
6. En una ventana de terminal diferente, verifique si puede acceder al nuevo servicio
web desde workstation. Use el comando curl para acceder al servicio web desde
workstation.
[student@workstation ~]$ curl http://servera.lab.example.com:82
curl: (7) Failed to connect to servera.example.com:82; No route to host
Ese error significa que todavía no puede conectarse al servicio web desde workstation.
7.
En servera, abra un puerto 82/TCP en el firewall.
7.1.
324
Use el comando firewall-cmd para abrir el puerto 82/TCP en la configuración
permanente para la zona predeterminada en el firewall en servera.
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
[root@servera ~]# firewall-cmd --permanent --add-port=82/tcp
success
7.2.
Active sus cambios del firewall en servera.
[root@servera ~]# firewall-cmd --reload
success
8. Use el comando curl para acceder al servicio web desde workstation.
[student@workstation ~]$ curl http://servera.lab.example.com:82
Hello
9. Salga de servera.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab netsecurity-ports finish para terminar este
ejercicio.
[student@workstation ~]$ lab netsecurity-ports finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
325
capítulo 11 | Administración de la seguridad de redes
Trabajo de laboratorio
Administración de la seguridad de redes
Lista de verificación de rendimiento
En este trabajo de laboratorio, configurará un firewall y los ajustes de SELinux para permitir
el acceso a múltiples servidores web que se ejecutan en serverb.
Resultados
Deberá ser capaz de configurar el firewall y los ajustes de SELinux en un host del servidor
web.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
Desde workstation, ejecute el comando lab netsecurity-review start. Este
comando ejecuta un script de inicio para determinar si el host serverb es accesible en la
red.
[student@workstation ~]$ lab netsecurity-review start
Su empresa ha decidido ejecutar una nueva aplicación web. Esta aplicación escucha en puertos
80/TCP y 1001/TCP. El puerto 22/TCP para el acceso mediante ssh también debe estar
disponible. Todos los cambios que hace deben persistir en un reinicio.
Si sudo se lo solicita, use student como contraseña.
Importante: La interfaz gráfica usada en el entorno de Aprendizaje en línea de Red Hat necesita
un puerto 5900/TCP para permanecer disponible también. Este puerto también es conocido
bajo el nombre del servicio vnc-server. Si accidentalmente bloquea su acceso a serverb,
puede intentar recuperar el acceso al usar ssh para su máquina serverb desde su máquina
workstation o restablecer su máquina serverb. Si elige restablecer su máquina serverb,
debe ejecutar los scripts de configuración para este trabajo de laboratorio nuevamente. La
configuración de sus máquinas ya incluye una zona personalizada denominada ROL que abre estos
puertos.
1.
Desde workstation, pruebe acceder al servidor web predeterminado
en http://serverb.lab.example.com y al host virtual en http://
serverb.lab.example.com:1001.
2.
Inicie sesión en serverb para determinar qué está impidiendo el acceso a los servidores
web.
3.
Configure SELinux para que permita que el servicio httpd escuche en el puerto 1001/TCP.
4.
Desde workstation, pruebe acceder al servidor web predeterminado
en http://serverb.lab.example.com y al host virtual en http://
serverb.lab.example.com:1001.
5.
Inicie sesión en serverb para determinar si los puertos correctos están asignados al firewall.
326
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
6.
Agregue el puerto 1001/TCP a la configuración permanente para la zona de red public
(pública). Confirme su configuración.
7.
Desde workstation, confirme que el servidor web predeterminado en
serverb.lab.example.com vuelva a SERVER B y que el host virtual en
serverb.lab.example.com:1001 vuelva a VHOST 1.
Evaluación
En workstation, ejecute el comando lab netsecurity-review grade para confirmar que
ha realizado correctamente este ejercicio del trabajo de laboratorio.
[student@workstation ~]$ lab netsecurity-review grade
Finalizar
En workstation, ejecute el script lab netsecurity-review finish para terminar este
ejercicio.
[student@workstation ~]$ lab netsecurity-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
327
capítulo 11 | Administración de la seguridad de redes
Solución
Administración de la seguridad de redes
Lista de verificación de rendimiento
En este trabajo de laboratorio, configurará un firewall y los ajustes de SELinux para permitir
el acceso a múltiples servidores web que se ejecutan en serverb.
Resultados
Deberá ser capaz de configurar el firewall y los ajustes de SELinux en un host del servidor
web.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
Desde workstation, ejecute el comando lab netsecurity-review start. Este
comando ejecuta un script de inicio para determinar si el host serverb es accesible en la
red.
[student@workstation ~]$ lab netsecurity-review start
Su empresa ha decidido ejecutar una nueva aplicación web. Esta aplicación escucha en puertos
80/TCP y 1001/TCP. El puerto 22/TCP para el acceso mediante ssh también debe estar
disponible. Todos los cambios que hace deben persistir en un reinicio.
Si sudo se lo solicita, use student como contraseña.
Importante: La interfaz gráfica usada en el entorno de Aprendizaje en línea de Red Hat necesita
un puerto 5900/TCP para permanecer disponible también. Este puerto también es conocido
bajo el nombre del servicio vnc-server. Si accidentalmente bloquea su acceso a serverb,
puede intentar recuperar el acceso al usar ssh para su máquina serverb desde su máquina
workstation o restablecer su máquina serverb. Si elige restablecer su máquina serverb,
debe ejecutar los scripts de configuración para este trabajo de laboratorio nuevamente. La
configuración de sus máquinas ya incluye una zona personalizada denominada ROL que abre estos
puertos.
Desde workstation, pruebe acceder al servidor web predeterminado
en http://serverb.lab.example.com y al host virtual en http://
serverb.lab.example.com:1001.
1.
1.1.
Pruebe acceder al servidor web en http://serverb.lab.example.com. La prueba
falla actualmente. El servidor web debería volver a SERVER B.
[student@workstation ~]$ curl http://serverb.lab.example.com
curl: (7) Failed to connect to serverb.lab.example.com port 80: Connection refused
1.2.
328
Pruebe acceder al host virtual en http://serverb.lab.example.com:1001. La
prueba falla actualmente. El host virtual debería volver a VHOST 1.
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
[student@workstation ~]$ curl http://serverb.lab.example.com:1001
curl: (7) Failed to connect to serverb.lab.example.com port 1001: No route to host
2.
Inicie sesión en serverb para determinar qué está impidiendo el acceso a los servidores
web.
2.1.
Desde workstation, abra una sesión de SSH en serverb como el usuario student.
Los sistemas se configuran para que usen claves SSH para la autenticación, por lo que
no se necesita una contraseña.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
2.2.
Determine si el servicio httpd está activo.
[student@serverb ~]$ systemctl is-active httpd
inactive
2.3.
Habilite e inicie el servicio httpd. El servicio httpd no puede iniciarse.
[student@serverb ~]$ sudo systemctl enable --now httpd
[sudo] password for student: student
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/
lib/systemd/system/httpd.service.
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
2.4.
Investigue los motivos que hicieron que el servicio httpd.service no se haya podido
iniciar.
[student@serverb ~]$ systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset:
disabled)
Active: failed (Result: exit-code) since Thu 2019-04-11 19:25:36 CDT; 19s ago
Docs: man:httpd.service(8)
Process: 9615 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited,
status=1/FAILURE)
Main PID: 9615 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
Apr 11 19:25:36 serverb.lab.example.com systemd[1]: Starting The Apache HTTP
Server...
Apr 11 19:25:36 serverb.lab.example.com httpd[9615]: (13)Permission denied:
AH00072: make_sock: could not bind to address [::]:1001
Apr 11 19:25:36 serverb.lab.example.com httpd[9615]: (13)Permission denied:
AH00072: make_sock: could not bind to address 0.0.0.0:1001
Apr 11 19:25:36 serverb.lab.example.com httpd[9615]: no listening sockets
available, shutting down
Apr 11 19:25:36 serverb.lab.example.com httpd[9615]: AH00015: Unable to open logs
RH134-RHEL8.2-es-1-20200928
329
capítulo 11 | Administración de la seguridad de redes
Apr 11 19:25:36 serverb.lab.example.com systemd[1]: httpd.service: Main process
exited, code=exited, status=1/FAILURE
Apr 11 19:25:36 serverb.lab.example.com systemd[1]: httpd.service: Failed with
result 'exit-code'.
Apr 11 19:25:36 serverb.lab.example.com systemd[1]: Failed to start The Apache
HTTP Server.
2.5.
Use el comando sealert para verificar si SELinux está impidiendo que el servicio
httpd haga referencia al puerto 1001/TCP.
[student@serverb ~]$ sudo sealert -a /var/log/audit/audit.log
100% done
found 1 alerts in /var/log/audit/audit.log
-------------------------------------------------------------------------------SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port
1001.
*****
Plugin bind_ports (99.5 confidence) suggests
************************
If you want to allow /usr/sbin/httpd to bind to network port 1001
Then you need to modify the port type.
Do
# semanage port -a -t PORT_TYPE -p tcp 1001
where PORT_TYPE is one of the following: http_cache_port_t, http_port_t,
jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t.
*****
Plugin catchall (1.49 confidence) suggests
**************************
...output omitted...
Configure SELinux para que permita que el servicio httpd escuche en el puerto 1001/TCP.
3.
3.1.
Use el comando semanage para encontrar el tipo de puerto correcto.
[student@serverb ~]$ sudo semanage port -l | grep 'http'
http_cache_port_t
tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t
udp 3130
http_port_t
tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t
tcp 5988
pegasus_https_port_t
tcp 5989
3.2.
Use el comando semanage para hacer referencia al puerto 1001/TCP con el tipo
http_port_t.
[student@serverb ~]$ sudo semanage port -a -t http_port_t -p tcp 1001
[student@serverb ~]$
3.3.
Confirme si ese puerto 1001/TCP está enlazado con el tipo de puerto http_port_t.
[student@serverb ~]$ sudo semanage port -l | grep '^http_port_t'
http_port_t
tcp 1001, 80, 81, 443, 488, 8008, 8009, 8443, 9000
330
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
3.4.
Habilite e inicie el servicio httpd.
[student@serverb ~]$ sudo systemctl enable --now httpd
3.5.
Verifique si el servicio httpd está en ejecución.
[student@serverb ~]$ systemctl is-active httpd; systemctl is-enabled httpd
active
enabled
3.6.
Salga de serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
4.
Desde workstation, pruebe acceder al servidor web predeterminado
en http://serverb.lab.example.com y al host virtual en http://
serverb.lab.example.com:1001.
4.1.
Pruebe acceder al servidor web en http://serverb.lab.example.com. El servidor
web debería volver a SERVER B.
[student@workstation ~]$ curl http://serverb.lab.example.com
SERVER B
4.2.
Pruebe acceder al host virtual en http://serverb.lab.example.com:1001. La
prueba sigue fallando.
[student@workstation ~]$ curl http://serverb.lab.example.com:1001
curl: (7) Failed to connect to serverb.lab.example.com port 1001: No route to host
5.
Inicie sesión en serverb para determinar si los puertos correctos están asignados al firewall.
5.1.
Desde workstation, inicie sesión en serverb con el usuario student.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
5.2.
Verifique que la zona de firewall predeterminada esté configurada en public
(pública).
[student@serverb ~]$ firewall-cmd --get-default-zone
public
5.3.
Si el paso anterior no estableció la zona public (pública) nuevamente como la zona
predeterminada, corríjala con el siguiente comando:
[student@serverb ~]$ sudo firewall-cmd --set-default-zone public
RH134-RHEL8.2-es-1-20200928
331
capítulo 11 | Administración de la seguridad de redes
5.4.
Determine los puertos abiertos listados en la zona de red public (pública).
[student@serverb ~]$ sudo firewall-cmd --permanent --zone=public --list-all
[sudo] password for student: student
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Agregue el puerto 1001/TCP a la configuración permanente para la zona de red public
(pública). Confirme su configuración.
6.
6.1.
Agregue el puerto 1001/TCP a la zona de red public (pública).
[student@serverb ~]$ sudo firewall-cmd --permanent --zone=public \
--add-port=1001/tcp
success
6.2.
Vuelva a cargar la configuración de firewall.
[student@serverb ~]$ sudo firewall-cmd --reload
success
6.3.
Confirme su configuración.
[student@serverb ~]$ sudo firewall-cmd --permanent --zone=public --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports: 1001/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
6.4. Salga de serverb.
332
RH134-RHEL8.2-es-1-20200928
capítulo 11 | Administración de la seguridad de redes
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
7.
Desde workstation, confirme que el servidor web predeterminado en
serverb.lab.example.com vuelva a SERVER B y que el host virtual en
serverb.lab.example.com:1001 vuelva a VHOST 1.
7.1.
Pruebe acceder al servidor web en http://serverb.lab.example.com.
[student@workstation ~]$ curl http://serverb.lab.example.com
SERVER B
7.2.
Pruebe acceder al host virtual en http://serverb.lab.example.com:1001.
[student@workstation ~]$ curl http://serverb.lab.example.com:1001
VHOST 1
Evaluación
En workstation, ejecute el comando lab netsecurity-review grade para confirmar que
ha realizado correctamente este ejercicio del trabajo de laboratorio.
[student@workstation ~]$ lab netsecurity-review grade
Finalizar
En workstation, ejecute el script lab netsecurity-review finish para terminar este
ejercicio.
[student@workstation ~]$ lab netsecurity-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
333
capítulo 11 | Administración de la seguridad de redes
Resumen
En este capítulo, aprendió lo siguiente:
• El subsistema netfilter permite a los módulos del kernel inspeccionar cada paquete
que atraviese el sistema. Se inspeccionan todos los paquetes de red entrantes, salientes o
reenviados.
• El uso de firewalld ha simplificado la administración al clasificar todo el tráfico de la red
en zonas. Cada zona tiene su propia lista de puertos y servicios. La zona public (pública) se
establece como la zona predeterminada.
• El servicio firewalld incluye un número de servicios predefinidos. Se pueden mostrar por
medio del comando firewall-cmd --get-services.
• La política SELinux controla estrictamente el tráfico de red. Los puertos de red están
etiquetados. Por ejemplo, el puerto 22/TCP tiene asociada la etiqueta ssh_port_t. Cuando
un proceso desea escuchar en un puerto, SELinux verifica si la etiqueta asociada puede hacer
referencia a la etiqueta de dicho puerto.
• El comando semanage se usa para agregar, eliminar y modificar etiquetas.
334
RH134-RHEL8.2-es-1-20200928
capítulo 12
Instalación de Red Hat
Enterprise Linux
Meta
Instalar Red Hat Enterprise Linux en servidores y
máquinas virtuales.
Objetivos
•
Instalar Red Hat Enterprise Linux en un
servidor.
•
Automatizar el proceso de instalación por
medio de Kickstart.
•
Instalar una máquina virtual en su servidor
Red Hat Enterprise Linux por medio de Cockpit.
•
Instalación de Red Hat Enterprise Linux (y
ejercicio guiado)
•
Automatización de la instalación con Kickstart
(y ejercicio guiado)
•
Instalación y configuración de máquinas
virtuales (y cuestionario)
Secciones
Trabajo de
laboratorio
RH134-RHEL8.2-es-1-20200928
Instalación de Red Hat Enterprise Linux
335
capítulo 12 | Instalación de Red Hat Enterprise Linux
Instalación de Red Hat Enterprise Linux
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de instalar Red Hat Enterprise Linux en un
servidor.
Selección de los medios de instalación
Red Hat proporciona varias formas distintas de instalación que puede descargar desde el sitio web
del Portal de Clientes con su suscripción activa.
• Un archivo de imagen binario en formato ISO 9660 que contiene Anaconda, el programa
de instalación de Red Hat Enterprise Linux y los repositorios de paquetes de BaseOS y
AppStream. Estos repositorios contienen los paquetes necesarios para completar la instalación
sin materiales adicionales.
• Un archivo de imagen "ISO de arranque" que contiene Anaconda y requiere una red configurada
para acceder a los repositorios de paquetes disponibles mediante HTTP, FTP o NFS.
• Una imagen QCOW2 que contiene un disco del sistema compilado previamente, listo para
implementarse como máquina virtual en la nube o en entornos virtuales empresariales. QCOW2
es el formato de imagen estándar utilizado por Red Hat con la virtualización basada en KVM.
Red Hat proporciona medios de instalación para cuatro arquitecturas de procesadores
compatibles: x86 de 64 bits (AMD e Intel), IBM Power Systems (Little Endian), IBM Z y ARM de 64
bits.
Después de la descarga, cree medios de instalación de arranque según las instrucciones en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/
performing_a_standard_rhel_installation/index#making-media_preparing-for-your-installation.
Compilación de imágenes con Composer
Composer es una herramienta nueva disponible en RHEL 8. Para casos de uso especializados,
Composer permite a los administradores compilar imágenes de sistema personalizadas para su
implementación en plataformas en la nube o entornos virtuales.
Composer usa la consola web gráfica de Cockpit. También puede invocar a Composer desde una
línea de comandos con el comando composer-cli.
Instalación manual de Red Hat Enterprise Linux
Por medio del DVD binario o archivo ISO de arranque, los administradores pueden instalar un
nuevo sistema RHEL en un servidor sin sistema operativo (bare-metal) o en una máquina virtual.
El programa Anaconda es compatible con dos métodos de instalación:
• La instalación manual interactúa con el usuario para consultar cómo Anaconda debe instalar y
configurar el sistema.
• La instalación automatizada usa un archivo Kickstart que le dice a Anaconda cómo instalar el
sistema. En una sección posterior, se detallan las instalaciones Kickstart.
336
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Instalación de RHEL con la interfaz gráfica
Cuando arranca el sistema desde el DVD binario o el archivo ISO de arranque, Anaconda se inicia
como una aplicación gráfica.
En la pantalla Welcome to Red Hat Enterprise Linux 8 (Bienvenido a Red Hat Enterprise
Linux 8), seleccione el idioma que usará durante la instalación. Esto también establece el idioma
predeterminado del sistema después de la instalación. Los usuarios individuales pueden elegir el
idioma de preferencia después de la instalación.
Anaconda muestra la ventana Installation Summary (Resumen de la instalación), el lugar central
para personalizar los parámetros antes de comenzar la instalación.
Figura 12.1: Ventana Installation Summary (Resumen de la instalación)
Desde esta ventana, seleccione los iconos en cualquier orden para configurar los parámetros de
instalación. Seleccione un ítem para ver o editar. Haga clic en Done (Finalizado) en cualquier ítem
para volver a esta pantalla central.
Anaconda marca los ítems obligatorios con un símbolo de advertencia con forma de triángulo y un
mensaje. La barra de estado naranja en la parte inferior de la pantalla advierte que existen ítems
obligatorios que deben completarse antes de que comience la instalación.
Complete los siguientes ítems según sea necesario:
• Keyboard (Teclado): agregue configuraciones de teclado adicionales.
• Language Support (Idioma): seleccione los idiomas adicionales que desee instalar.
RH134-RHEL8.2-es-1-20200928
337
capítulo 12 | Instalación de Red Hat Enterprise Linux
• Time & Date (Hora y fecha): para seleccionar la ciudad del sistema, haga clic en el mapa
interactivo o use las listas. Especifique la zona horaria local incluso al usar el protocolo de hora
de red (NTP).
• Installation Source (Fuente de instalación): ingrese la ubicación del paquete fuente que
Anaconda necesita para la instalación. Si usa el DVD binario, el campo de fuente de instalación
hace referencia directa al DVD.
• Software Selection (Selección de software): seleccione el entorno base que desea instalar
y cualquier complemento adicional. El entorno Minimal Install (Instalación mínima) instala
solamente los paquetes esenciales para ejecutar Red Hat Enterprise Linux.
• Installation Destination (Destino de instalación): seleccione y divida los discos donde se
instalará Red Hat Enterprise Linux. El administrador debe entender los esquemas de partición
y los criterios de selección del sistema de archivos para realizar la tarea. El botón de radio
predeterminado para la partición automática asigna los dispositivos de almacenamiento
seleccionados usando todo el espacio disponible.
• Conéctese a Red Hat: registre el sistema con su cuenta de Red Hat y seleccione el propósito
del sistema. La función del propósito del sistema permite al proceso de registro asociar
automáticamente la suscripción más adecuada al sistema. Para registrar el sistema, primero
debe conectarse a la red mediante el icono Network & Host Name (Red y nombre del host).
• KDUMP: la función de volcado de error del kernel, KDUMP, recopila información acerca del
estado de la memoria del sistema cuando el kernel se bloquea. Los ingenieros de Red Hat
pueden analizar un archivo kdump para identificar la causa del error. Use este ítem de Anaconda
para habilitar o deshabilitar kdump.
• Network & Host Name (Nombre del host y de la red): las conexiones de red detectadas se
enumeran a la izquierda. Seleccione una conexión para visualizar sus detalles. Para configurar la
conexión de red seleccionada, haga clic en Configure (Configurar).
• Security Policy (Política de seguridad): al activar un perfil de política de seguridad, como el
perfil Norma de seguridad de datos del sector de tarjetas de pago (PCI DSS), Anaconda aplica
restricciones y recomendaciones durante la instalación en función del perfil seleccionado.
Después de completar la configuración de la instalación y resolver todas las advertencias, haga
clic en Begin Installation (Comenzar la instalación). Si hace clic en Quit (Salir), la instalación se
interrumpe sin aplicar los cambios al sistema.
Mientras el sistema se está instalando, complete los siguientes elementos cuando se visualicen:
• Root Password (Contraseña root): el programa de instalación solicita que se configure una
contraseña de root. La etapa final del proceso de instalación no continuará hasta que defina
una contraseña root.
• User Creation (Creación de usuario): cree una cuenta opcional que no corresponda al usuario
root. Se recomienda mantener una cuenta local de uso general. También puede crear cuentas
después de que se complete la instalación.
338
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Figura 12.2: Configuración de la contraseña root y creación de usuario
Cuando la instalación haya finalizado, haga clic en Reboot (Reiniciar). Anaconda muestra
la pantalla Initial Setup (Configuración inicial) si se instaló un escritorio gráfico. Acepte
la información de la licencia y, opcionalmente, registre el sistema en el administrador de
suscripciones. Puede omitir el registro del sistema y realizarlo más tarde.
Resolución de problemas durante la instalación
Durante la instalación de Red Hat Enterprise Linux 8, Anaconda proporciona dos consolas
virtuales. La primera tiene cinco ventanas provistas por el multiplexor del terminal de software
tmux. Puede acceder a la consola con Ctrl+Alt+F1. La segunda consola virtual, que se
muestra de forma predeterminada, muestra la interfaz gráfica de Anaconda. Puede acceder con
Ctrl+Alt+F6.
En la primera consola virtual, tmux proporciona un prompt de shell en la segunda ventana. Puede
usarlo para ingresar comandos para inspeccionar y solucionar problemas del sistema mientras
la instalación continúa. Las otras ventanas muestran mensajes de diagnóstico, registros y otra
información.
En la siguiente tabla, se detallan las combinaciones de teclas para acceder a las consolas virtuales
y a las ventanas de tmux. En el caso de tmux, los atajos de teclado se realizan en dos pasos:
presionar y soltar Ctrl+B; luego, presionar la tecla numérica de la ventana a la cual desea acceder.
Para tmux, también puede usar Alt+Tab para rotar entre las diferentes ventanas.
Secuencia de
teclas
contenidos
Ctrl+Alt+F1
Acceder al multiplexor del terminal de tmux.
RH134-RHEL8.2-es-1-20200928
339
capítulo 12 | Instalación de Red Hat Enterprise Linux
Secuencia de
teclas
contenidos
Ctrl+B 1
Cuando se encuentre en tmux, esto le permite acceder a la página de
información principal del proceso de instalación.
Ctrl+B 2
Cuando se encuentre en tmux, proporcione una shell root. Anaconda
almacena los archivos de registro de instalación en el directorio /tmp.
Ctrl+B 3
Cuando se encuentre en tmux, visualice el contenido del archivo /tmp/
anaconda.log.
Ctrl+B 4
Cuando se encuentre en tmux, visualice el contenido del archivo /tmp/
storage.log.
Ctrl+B 5
Cuando se encuentre en tmux, visualice el contenido del archivo /tmp/
program.log.
Ctrl+Alt+F6
Le permite acceder a la interfaz gráfica de Anaconda.
nota
A los fines de que exista compatibilidad con versiones anteriores de Red Hat
Enterprise Linux, las consolas virtuales de Ctrl+Alt+F2 a Ctrl+Alt+F5 también
presentan shells root durante la instalación.
Referencias
Para obtener más información, consulte la guía Realización de una instalación
estándar de RHEL en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/performing_a_standard_rhel_installation/index
340
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Ejercicio Guiado
Instalación de Red Hat Enterprise Linux
En este ejercicio, reinstalará uno de sus servidores con una instalación mínima de Red Hat
Enterprise Linux.
Resultados
Debe ser capaz de instalar manualmente Red Hat Enterprise Linux 8.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab installing-install start.
Este comando ejecuta un script de inicio para determinar si la máquina servera es
accesible en la red. También agrega una nueva entrada en el menú de GRUB2 para arrancar
servera en los medios de instalación.
[student@workstation ~]$ lab installing-install start
Instrucciones
1.
Acceda a la consola de servera y reinicie el sistema en los medios de instalación.
1.1.
Localice el icono de la consola de servera para el entorno del aula. Abra la consola.
1.2.
Para reiniciar, envíe Ctrl+Alt+Del a su sistema usando la entrada del teclado, del
menú o la entrada virtual relevantes.
1.3.
Cuando aparezca el menú del cargador de arranque, seleccione Install Red Hat
Enterprise Linux 8 (Instalar Red Hat Enterprise Linux 8).
1.4.
Espere a que aparezca la ventana de selección de idioma.
2.
Deje seleccionado el idioma predeterminado y haga clic en Continue (Continuar).
3.
Use la partición automática en el disco /dev/vdapredeterminado.
3.1.
Haga clic en Installation Destination (Destino de la instalación).
3.2.
Haga clic en el primer disco, vda, para seleccionarlo. Haga clic en Done (Finalizado)
para usar la opción predeterminada de partición automática.
3.3.
En la ventana Installation Options (Opciones de instalación), haga clic en Reclaim
space (Recuperar espacio). Dado que el disco /dev/vda ya tiene particiones y
sistemas de archivos de la instalación anterior, esta selección le permite borrar el
disco para la nueva instalación. En la ventana Reclaim Disk Space (Recuperar
espacio del disco), haga clic en Delete all (Borrar todo) y, luego, en Reclaim space
(Recuperar espacio).
RH134-RHEL8.2-es-1-20200928
341
capítulo 12 | Instalación de Red Hat Enterprise Linux
4. Establezca el nombre de host del servidor en servera.lab.example.com y verifique la
configuración de la interfaz de red.
4.1.
Haga clic en Network & Host Name (Nombre del host y de la red).
4.2.
En el campo Host Name (Nombre del host), ingrese servera.lab.example.com
y, luego, haga clic en Apply (Aplicar).
4.3. Haga clic en Configure (Configurar) y, luego, haga clic en la pestaña IPv4 Settings
(Configuración de IPv4).
4.4. Confirme que los parámetros de red sean correctos. La dirección IP es 172.25.250.10,
la máscara de red es 24 y la puerta de enlace y el servidor de nombres están
configurados en 172.25.250.254. Haga clic en Save (Guardar).
4.5.
Confirme que la interfaz de red esté habilitada al configurar ON/OFF (Habilitar/
Deshabilitar) en ON (Habilitar).
4.6. Haga clic en Done (Finalizado).
5.
Configure el campo Installation Source (Fuente de instalación) en http://
content.example.com/rhel8.2/x86_64/dvd.
5.1.
Haga clic en Installation Source (Fuente de instalación).
5.2.
Seleccione en la red.
5.3.
En el campo http://, ingrese content.example.com/rhel8.2/x86_64/dvd
5.4.
Haga clic en Done (Finalizado).
6. Seleccione el software requerido para ejecutar una instalación mínima.
7.
6.1.
Haga clic en Software Selection (Selección de software).
6.2.
Seleccione Minimal Install (Instalación mínima) de la lista Base Environment
(Entorno base).
6.3.
Haga clic en Done (Finalizado).
Configure el propósito del sistema.
7.1.
Haga clic en Connect to Red Hat.
7.2.
Seleccione Purpose (Propósito).
7.3.
Seleccione el rol Red Hat Enterprise Linux Server.
7.4.
Seleccione un nivel de SLA de Self-Support (Autosoporte).
7.5.
Seleccione el uso Development/Test (Desarrollo/Prueba).
7.6.
No cambie ningún otro parámetro. Haga clic en Done (Finalizado).
8. Haga clic en Begin Installation (Comenzar la instalación).
9. Mientras la instalación avanza, establezca la contraseña para root en redhat.
342
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
9.1.
Haga clic en Root Password (Contraseña de root).
9.2.
Ingrese redhat en el campo Root Password (Contraseña de root).
9.3.
Ingrese redhat en el campo Confirm (Confirmar).
9.4. La contraseña es débil, por lo que tendrá que hacer clic en Done (Finalizado) dos
veces.
10. Mientras la instalación avanza, agregue el usuario student.
10.1. Haga clic en User Creation (Creación del usuario).
10.2. Ingrese student en el campo Full Name (Nombre completo).
10.3. Marque la opción Make this user administrator (Hacer administrador a este
usuario) para que student pueda usar sudo para ejecutar comandos como root.
10.4. Ingrese student en el campo Password (Contraseña).
10.5. Ingrese student en el campo Confirm password (Confirmar contraseña).
10.6. La contraseña es débil, por lo que tendrá que hacer clic en Done (Finalizado) dos
veces.
11. Cuando la instalación esté completa, haga clic en Reboot (Reiniciar).
12. Cuando el sistema muestre el prompt de inicio de sesión, inicie sesión como student con
la contraseña student.
Finalizar
Use el método apropiado para el entorno del aula para restablecer su máquina servera.
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
343
capítulo 12 | Instalación de Red Hat Enterprise Linux
Automatización de la instalación con
Kickstart
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de realizar lo siguiente:
• Explicar los conceptos y la arquitectura de Kickstart.
• Crear un archivo Kickstart con el sitio web de Kickstart Generator.
• Modificar un archivo Kickstart existente con un editor de textos y revisar su sintaxis con
ksvalidator.
• Publicar un archivo Kickstart para el instalador.
• Realizar una instalación Kickstart de red.
Creación de un perfil Kickstart
Puede automatizar la instalación de Red Hat Enterprise Linux por medio de una función que
se denomina Kickstart. Al usar Kickstart, usted especifica todo lo que Anaconda necesita para
completar una instalación, incluida la partición del disco, la configuración de la interfaz de red, la
selección de paquetes y otros parámetros, en un archivo de texto de Kickstart. Al hacer referencia
al archivo de texto, Anaconda realiza la instalación sin la interacción del usuario.
nota
Kickstart en Red Hat Enterprise Linux es similar a la utilidad Jumpstart en Oracle
Solaris, o similar a emplear un archivo de respuesta de configuración desatendida
para Microsoft Windows.
Los archivos Kickstart comienzan con una lista de comandos que definen cómo se instalará la
máquina de destino. Las líneas que comienzan con caracteres # son comentarios que el instalador
omite. Las secciones adicionales comienzan con una directiva (que se puede reconocer gracias al
primer carácter %) y terminan en una línea con la directiva %end.
La sección %packages especifica el software que se instalará en el sistema de destino. Los
paquetes individuales se especifican por nombre (sin versiones). Los grupos de paquetes,
especificados por nombre o identificación, se reconocen porque comienzan con el carácter
@. Los grupos del entorno (grupos de grupos de paquetes) se reconocen porque comienzan
con los caracteres @^. Los módulos, las secuencias y los perfiles se especifican con la sintaxis
@module:stream/profile.
Los grupos tienen componentes obligatorios, predeterminados y opcionales. Normalmente,
Kickstart instala los componentes obligatorios y predeterminados. Para excluir un paquete o
grupo de paquetes de la instalación, incluya antes un carácter -. Sin embargo, es posible que los
paquetes o grupos de paquetes excluidos se instalen si son dependencias obligatorias de otros
paquetes obligatorios.
Una configuración de Kickstart generalmente usa dos secciones adicionales, %pre y %post, que
contienen comandos de scripting de shell que ajustan otras configuraciones del sistema. El script
%pre se ejecuta antes de que haga alguna partición del disco. Por lo general, esta sección se usa
344
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
solo si es necesario tomar medidas para reconocer o inicializar un dispositivo antes de la partición
del disco. El script %post se ejecuta después de que la instalación se ha completado.
Debe especificar los comandos principales de Kickstart antes de las secciones %pre, %post y
%packages pero, por lo demás, puede colocar estas secciones en cualquier orden en el archivo.
Comandos de archivos Kickstart
Comandos de instalación
Definen la fuente de instalación y cómo realizar la instalación. Se muestra un ejemplo para cada
uno.
• url: Especifica la URL que apunta a los medios de instalación.
url --url="http://classroom.example.com/content/rhel8.2/x86_64/dvd/"
• repo: Especifica dónde encontrar paquetes adicionales para la instalación. Esta opción debe
apuntar a un repositorio yum válido.
repo --name="appstream" --baseurl=http://classroom.example.com/content/rhel8.2/
x86_64/dvd/AppStream/
• text: Fuerza una instalación del modo de texto.
• vnc: Permite la visualización de forma remota de la instalación gráfica mediante VNC.
vnc --password=redhat
Comandos de partición
Definen los dispositivos y el esquema de partición que se usarán.
• clearpart: Elimina particiones del sistema antes de la creación de particiones nuevas. De
manera predeterminada, no se elimina ninguna partición.
clearpart --all --drives=sda,sdb --initlabel
• part: Especifica el tamaño, el formato y el nombre de una partición.
part /home --fstype=ext4 --label=homes --size=4096 --maxsize=8192 --grow
• autopart: Crea automáticamente una partición de root, una partición de intercambio y una
partición de arranque adecuada para la arquitectura. En unidades con un tamaño grande
adecuado, esto también crea una partición de /home.
• ignoredisk: Controla el acceso de Anaconda a los discos conectados al sistema.
ignoredisk --drives=sdc
• bootloader: Define dónde instalar el cargador de arranque.
bootloader --location=mbr --boot-drive=sda
RH134-RHEL8.2-es-1-20200928
345
capítulo 12 | Instalación de Red Hat Enterprise Linux
• volgroup, logvol: Crea grupos de volúmenes LVM y volúmenes lógicos.
part pv.01 --size=8192
volgroup myvg pv.01
logvol / --vgname=myvg --fstype=xfs --size=2048 --name=rootvol --grow
logvol /var --vgname=myvg --fstype=xfs --size=4096 --name=varvol
• zerombr: Inicializa los discos cuyo formato no se reconoce.
Comandos de red
Definen las funciones de red usadas por el host.
• network: Configura la información de la red para el sistema de destino. Activa los dispositivos
de red en el entorno del instalador.
network --device=eth0 --bootproto=dhcp
• firewall: Define la configuración del firewall para el sistema de destino.
firewall --enabled --service=ssh,http
Comandos de ubicación y seguridad
Configuran los ajustes relacionados con la seguridad, el idioma y las regiones.
• lang: Establece el idioma para usar durante la instalación y el idioma predeterminado del
sistema instalado. Obligatorio.
lang en_US.UTF-8
• keyboard: Establece el tipo de teclado del sistema. Obligatorio.
keyboard --vckeymap=us --xlayouts=''
• timezone: Define la zona horaria, los servidores NTP y si el reloj del hardware usa UTC.
timezone --utc --ntpservers=time.example.com Europe/Amsterdam
• authselect: Establece opciones de autenticación. Las opciones reconocidas por
authselect son válidas para este comando. Consulte authselect(8).
• rootpw: Define la contraseña inicial de root.
rootpw --plaintext redhat
or
rootpw --iscrypted $6$KUnFfrTzO8jv.PiH$YlBbOtXBkWzoMuRfb0.SpbQ....XDR1UuchoMG1
• selinux: Establece el modo de SELinux para el sistema instalado.
selinux --enforcing
346
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
• services: Modifica el conjunto de servicios predeterminado que se ejecutan en el destino
systemd predeterminado.
services --disabled=network,iptables,ip6tables --enabled=NetworkManager,firewalld
• group, user: Crea un grupo o usuario locales en el sistema.
group --name=admins --gid=10001
user --name=jdoe --gecos="John Doe" --groups=admins --password=changeme -plaintext
Comandos varios
Configuran diversos ítems relacionados con el registro durante la instalación y el estado de energía
del host al finalizar.
• logging: Este comando define cómo Anaconda realizará el registro durante la instalación.
logging --host=loghost.example.com --level=info
• firstboot: Si está habilitado, el Agente de configuración se inicia la primera vez que el sistema
arranca. Se debe instalar el paquete initial-setup.
firstboot --disabled
• reboot, poweroff, halt: Especifican la medida final que se tomará cuando finalice la
instalación.
nota
La utilidad ksverdiff del paquete pykickstart sirve para identificar cambios en
la sintaxis del archivo Kickstart entre dos versiones de Red Hat Enterprise Linux o
Fedora.
Por ejemplo, ksverdiff -f RHEL7 -t RHEL8 identifica cambios en la
sintaxis de RHEL 7 a RHEL 8. Las versiones disponibles se enumeran en la parte
superior del archivo /usr/lib/python3.6/site-packages/pykickstart/
version.py.
Ejemplo de un archivo Kickstart
La primera parte del archivo consta de los comandos de instalación, como la partición del disco y
la fuente de instalación.
#version=RHEL8
ignoredisk --only-use=vda
# System bootloader configuration
bootloader --append="console=ttyS0 console=ttyS0,115200n8 no_timer_check
net.ifnames=0 crashkernel=auto" --location=mbr --timeout=1 --boot-drive=vda
# Clear the Master Boot Record
zerombr
# Partition clearing information
RH134-RHEL8.2-es-1-20200928
347
capítulo 12 | Instalación de Red Hat Enterprise Linux
clearpart --all --initlabel
# Use text mode install
text
repo --name="appstream" --baseurl=http://classroom.example.com/content/rhel8.2/
x86_64/dvd/AppStream/
# Use network installation
url --url="http://classroom.example.com/content/rhel8.2/x86_64/dvd/"
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts=''
# System language
lang en_US.UTF-8
# Root password
rootpw --plaintext redhat
# System authorization information
auth --enableshadow --passalgo=sha512
# SELinux configuration
selinux --enforcing
firstboot --disable
# Do not configure the X Window System
skipx
# System services
services --disabled="kdump,rhsmcertd" --enabled="sshd,rngd,chronyd"
# System timezone
timezone America/New_York --isUtc
# Disk partitioning information
part / --fstype="xfs" --ondisk=vda --size=10000
La segunda parte contiene la sección %packages, que detalla qué paquetes y grupo de paquetes
deben instalarse y qué paquetes no deben instalarse.
%packages
@core
chrony
cloud-init
dracut-config-generic
dracut-norescue
firewalld
grub2
kernel
rsync
tar
-plymouth
%end
La última parte contiene todos los scripts de instalación %pre y %post.
%post --erroronfail
# For cloud images, 'eth0' _is_ the predictable device name, since
# we don't want to be tied to specific virtual (!) hardware
348
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
rm -f /etc/udev/rules.d/70*
ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules
# simple eth0 config, again not hard-coded to the build hardware
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL="yes"
PEERDNS="yes"
IPV6INIT="no"
EOF
%end
nota
En un archivo Kickstart, si no se determinan los valores obligatorios, el instalador
solicitará una repuesta interactivamente o abortará la instalación por completo.
Pasos de instalación Kickstart
Para automatizar correctamente la instalación de Red Hat Enterprise Linux, siga estos pasos:
1.
2.
3.
Cree un archivo Kickstart.
Publique un archivo Kickstart para el instalador.
Arranque Anaconda y apúntelo al archivo Kickstart.
Creación de un archivo Kickstart
Use cualquiera de estos métodos para crear un archivo Kickstart:
• Usar el sitio web de Kickstart Generator.
• Usar un editor de textos.
El sitio web de Kickstart Generator en https://access.redhat.com/labs/
kickstartconfig/ presenta cuadros de diálogo para las entradas del usuario y crea un
archivo de texto con directivas Kickstart con las opciones del usuario. Cada cuadro de diálogo
corresponde a los ítems del instalador de Anaconda que se pueden configurar.
RH134-RHEL8.2-es-1-20200928
349
capítulo 12 | Instalación de Red Hat Enterprise Linux
Figura 12.3: Configuración básica con Kickstart Generator
nota
Al momento de la escritura, el sitio web de Kickstart Generator no proporcionaba
Red Hat Enterprise Linux 8 como opción de menú. Red Hat Enterprise Linux 8 Beta
era una selección válida.
La creación de un archivo Kickstart desde cero suele ser demasiado compleja, pero la edición
de un archivo Kickstart existente es común y útil. Cada instalación crea un archivo /root/
anaconda-ks.cfg que contiene las directivas Kickstart que se usan en la instalación. Este
archivo es un buen punto de inicio al crear un archivo Kickstart de forma manual.
ksvalidator es una utilidad que revisa errores de sintaxis en un archivo Kickstart. Asegura
que las palabras clave y las opciones se usen adecuadamente, pero no garantiza que las rutas
URL, ni los paquetes individuales, ni los grupos, ni ninguna parte de los scripts %post o %pre
se ejecutarán de forma correcta. Por ejemplo, si la directiva firewall --disabled está mal
escrita, ksvalidator podría producir uno de los siguientes errores:
[user@host ~]$ ksvalidator /tmp/anaconda-ks.cfg
The following problem occurred on line 10 of the kickstart file:
Unknown command: frewall
[user@host ~]$ ksvalidator /tmp/anaconda-ks.cfg
The following problem occurred on line 10 of the kickstart file:
no such option: --dsabled
350
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
El paquete pykickstart proporciona ksvalidator.
Publicar el archivo Kickstart para Anaconda
Para que el archivo Kickstart esté disponible para el instalador, colóquelo en una de las siguientes
ubicaciones:
• un servidor de red disponible en el momento de la instalación mediante FTP, HTTP o NFS;
• un disco USB o CD-ROM disponibles;
• un disco duro local en el sistema que se instalará.
El instalador debe acceder al archivo Kickstart para iniciar una instalación automatizada. El método
de automatización más común usa un servidor de red, como un servidor FTP, web o NFS. Los
servidores de red facilitan el mantenimiento del archivo Kickstart porque los cambios se pueden
hacer solo una vez y, luego, se usan para múltiples instalaciones futuras.
También es conveniente proporcionar archivos Kickstart en USB o CD-ROM. El archivo Kickstart
se puede integrar en los medios de arranque usados para iniciar la instalación. Sin embargo,
cuando se cambia el archivo Kickstart, debe generar nuevos medios de instalación.
Si proporciona el archivo Kickstart en un disco local, puede volver a compilar rápidamente un
sistema.
Arrancar Anaconda y apuntarlo al archivo Kickstart
Una vez elegido un método de Kickstart, se le indica al instalador dónde ubicar el archivo Kickstart
al pasar el parámetro inst.ks=LOCATION al kernel de instalación. Algunos ejemplos:
• inst.ks=http://server/dir/file
• inst.ks=ftp://server/dir/file
• inst.ks=nfs:server:/dir/file
• inst.ks=hd:device:/dir/file
• inst.ks=cdrom: dispositivo
RH134-RHEL8.2-es-1-20200928
351
capítulo 12 | Instalación de Red Hat Enterprise Linux
Figura 12.4: Especificación de la ubicación del archivo Kickstart durante la instalación
En el caso de instalaciones en máquinas virtuales mediante el uso de Virtual Machine Manager
o virt-manager, la URL Kickstart se puede especificar en una caja (box) debajo de URL
Options (Opciones de URL). Cuando realice una instalación en máquinas físicas, realice el
arranque usando medios de instalación y presione la tecla de tabulación para interrumpir el
proceso de arranque. Agregue un parámetro inst.ks=LOCATION para el kernel de instalación.
Referencias
Capítulo Conceptos básicos de instalación de Kickstart en Realización de una
instalación avanzada de RHEL en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/
html-single/performing_an_advanced_rhel_installation/kickstart-installationbasics_installing-rhel-as-an-experienced-user#kickstart-installationbasics_installing-rhel-as-an-experienced-user
Sección Comandos Kickstart para la configuración del programa de instalación y
control de flujo en el Apéndice B. Referencia de comandos y opciones de Kickstart
en Realización de una instalación avanzada de RHEL en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/
html-single/performing_an_advanced_rhel_installation/kickstart-installationbasics_installing-rhel-as-an-experienced-user#kickstart-commands-forinstallation-program-configuration-and-flow-control_kickstart-commands-andoptions-reference
Capítulo Opciones de arranque en Realización de una instalación avanzada de RHEL
en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/
html-single/performing_an_advanced_rhel_installation/kickstart-installationbasics_installing-rhel-as-an-experienced-user#kickstart-and-advanced-bootoptions_installing-rhel-as-an-experienced-user
352
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Ejercicio Guiado
Automatización de la instalación con
Kickstart
En este trabajo de laboratorio, creará un archivo kickstart y validará la sintaxis.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un archivo kickstart.
• Usar ksvalidator para validar la sintaxis del archivo kickstart.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab installing-kickstart start. Este
comando ejecuta un script de inicio para determinar si la máquina servera es accesible en
la red. También verifica que Apache está instalado y configurado en servera.
[student@workstation ~]$ lab installing-kickstart start
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran para que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Copie /root/anaconda-ks.cfg en servera en un archivo denominado /home/
student/kickstart.cfg de modo que student pueda realizar ediciones. Use el
comando sudo cat /root/anaconda-ks.cfg > ~/kickstart.cfg para copiar
los contenidos de /root/anaconda-ks.cfg en /home/student/kickstart.cfg.
Introduzca la contraseña student cuando se le solicite la contraseña para el usuario
student en sudoserverb.
[student@servera ~]$ sudo cat /root/anaconda-ks.cfg > ~/kickstart.cfg
[sudo] password for student: student
3.
Haga los siguientes cambios en /home/student/kickstart.cfg.
3.1.
Comente la directiva reboot (reiniciar):
#reboot
RH134-RHEL8.2-es-1-20200928
353
capítulo 12 | Instalación de Red Hat Enterprise Linux
3.2.
Comente el comando repo para el repositorio de BaseOS. Modifique el comando
repo para que AppStream apunte al repositorio de AppStream del aula:
#repo --name="koji-override-0" --baseurl=http://downloadnode-02.eng.bos.redhat.com/rhel-8/devel/candidate-trees/RHEL-8/RHEL-8.2.0updates-20200423.0/compose/BaseOS/x86_64/os
repo --name="appstream" --baseurl=http://classroom.example.com/content/rhel8.2/
x86_64/dvd/AppStream/
3.3.
Cambie el comando url para especificar los medios de fuentes de instalación HTTP
del aula:
url --url="http://classroom.example.com/content/rhel8.2/x86_64/dvd/"
3.4.
#network
3.5.
Comente el comando network:
--bootproto=dhcp --device=link --activate
Establezca la contraseña de root en redhat. Cambie la línea que comienza con
rootpw por:
rootpw --plaintext redhat
3.6.
Elimine la línea que usa el comando auth y agregue la línea authselect select
sssd para configurar el servicio sssd como la fuente de identidad y autenticación.
authselect select sssd
En Red Hat Enterprise Linux 8, el comando authselect reemplaza el comando
authconfig.
3.7.
Simplifique el comando services para que se vea de la siguiente manera:
services --disabled="kdump,rhsmcertd" --enabled="sshd,rngd,chronyd"
3.8.
Comente los comandos part. Agregue el comando autopart:
# Disk partitioning information
#part biosboot --fstype="biosboot" --size=1
#part /boot/efi --fstype="efi" --size=100 --fsoptions="..."
#part / --fstype="xfs
autopart
3.9.
Elimine todo el contenido entre la sección %post y su %end. Agregue la siguiente
línea: echo "Kickstarted on $(date)" >> /etc/issue
La sección %post debe aparecer de la siguiente manera:
%post --erroronfail
echo "Kickstarted on $(date)" >> /etc/issue
%end
354
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
3.10. Simplifique la especificación del paquete para que se vea exactamente de la
siguiente manera:
%packages
@core
chrony
dracut-config-generic
dracut-norescue
firewalld
grub2
kernel
rsync
tar
httpd
-plymouth
%end
Al finalizar la edición del archivo, guárdelo y salga.
4. Use el comando ksvalidator para comprobar si hay errores de sintaxis en el archivo
Kickstart.
[student@servera ~]$ ksvalidator kickstart.cfg
5.
Copie kickstart.cfg en el directorio /var/www/html/ks-config.
[student@servera ~]$ sudo cp ~/kickstart.cfg /var/www/html/ks-config
6. Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En workstation, ejecute el script lab installing-kickstart finish para terminar este
ejercicio.
[student@workstation ~]$ lab installing-kickstart finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
355
capítulo 12 | Instalación de Red Hat Enterprise Linux
Instalación y configuración de máquinas
virtuales
Objetivos
Tras finalizar esta sección, usted deberá ser capaz de instalar una máquina virtual en su servidor
Red Hat Enterprise Linux por medio de Cockpit.
Presentación de la virtualización de KVM
La virtualización es una característica que permite que una sola máquina física se divida en
varias máquinas virtuales (VM), cada una de las cuales puede ejecutar un sistema operativo
independiente.
Red Hat Enterprise Linux 8 es compatible con la máquina virtual basada en el kernel (KVM),
una solución de virtualización completa compilada como parte del kernel de Linux. KMV puede
ejecutar múltiples sistemas operativos guest Windows y Linux.
Figura 12.5: Virtualización de KVM
En Red Hat Enterprise Linux, administre KVM con el comando virsh o con la herramienta Virtual
Machines de Cockpit.
La tecnología de máquinas virtuales de KVM está disponible en todos los productos Red Hat,
que van desde instancias físicas independientes de Red Hat Enterprise Linux hasta Red Hat
OpenStack Platform:
• Los sistemas de hardware físico ejecutan Red Hat Enterprise Linux para proporcionar la
virtualización de KVM. Red Hat Enterprise Linux normalmente es un thick host, un sistema
que admite máquinas virtuales y que, al mismo tiempo, presta otros servicios locales y de red,
aplicaciones y funciones de administración.
• Red Hat Virtualization (RHV) proporciona una interfaz web centralizada que permite a los
administradores administrar una infraestructura virtual completa. Incluye características
avanzadas, como la migración de KVM, la redundancia y la alta disponibilidad. Red Hat
356
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Virtualization Hypervisor es una versión optimizada de Red Hat Enterprise Linux dedicada
específicamente al aprovisionamiento y al soporte de máquinas virtuales.
• Red Hat OpenStack Platform (RHOSP) es la base para crear, implementar y escalar una nube
pública o privada.
Red Hat es compatible con máquinas virtuales que ejecutan estos sistemas operativos:
• Red Hat Enterprise Linux 6 y versiones posteriores
• Microsoft Windows 10 y versiones posteriores
• Microsoft Windows Server 2016 y versiones posteriores
Configuración de un sistema físico Red Hat
Enterprise Linux como host de virtualización
Los administradores pueden configurar un sistema Red Hat Enterprise Linux como host de
virtualización para poder realizar tareas de desarrollo, pruebas o capacitación, o cuando se
necesite trabajar en múltiples sistemas operativos simultáneamente.
Instalación de las herramientas de virtualización
Instale el módulo de Yum virt para preparar un sistema para que se convierta en un host de
virtualización.
[root@host ~]# yum module list virt
Name
Stream
Profiles
virt
rhel [d][e]
common [d]
Summary
Virtualization module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@host ~]# yum module install virt
...output omitted...
Verificación de los requisitos del sistema
KVM requiere un procesador Intel con las extensiones Intel VT-x e Intel 64 para los sistemas
basados en x86, o un procesador AMD con las extensiones AMD-V y AMD64. Para verificar su
hardware y los requisitos del sistema, use el comando virt-host-validate.
[root@host ~]# virt-host-validate
QEMU: Checking for hardware virtualization
: PASS
QEMU: Checking if device /dev/kvm exists
: PASS
QEMU: Checking if device /dev/kvm is accessible
: PASS
QEMU: Checking if device /dev/vhost-net exists
: PASS
QEMU: Checking if device /dev/net/tun exists
: PASS
QEMU: Checking for cgroup 'memory' controller support
: PASS
QEMU: Checking for cgroup 'memory' controller mount-point : PASS
QEMU: Checking for cgroup 'cpu' controller support
: PASS
QEMU: Checking for cgroup 'cpu' controller mount-point
: PASS
QEMU: Checking for cgroup 'cpuacct' controller support
: PASS
QEMU: Checking for cgroup 'cpuacct' controller mount-point : PASS
QEMU: Checking for cgroup 'cpuset' controller support
: PASS
QEMU: Checking for cgroup 'cpuset' controller mount-point : PASS
QEMU: Checking for cgroup 'devices' controller support
: PASS
QEMU: Checking for cgroup 'devices' controller mount-point : PASS
RH134-RHEL8.2-es-1-20200928
357
capítulo 12 | Instalación de Red Hat Enterprise Linux
QEMU: Checking for cgroup 'blkio' controller support
QEMU: Checking for cgroup 'blkio' controller mount-point
QEMU: Checking for device assignment IOMMU support
: PASS
: PASS
: PASS
El sistema debe aprobar todos los ítems de validación para poder ser un host KVM.
Administración de máquinas virtuales con Cockpit
El módulo de Yum virt proporciona el comando virsh para administrar sus máquinas virtuales. La
herramienta Cockpit proporciona una interfaz de consola web para la gestión de KVM y la creación
de máquinas virtuales.
Figura 12.6: Administración de máquinas virtuales en Cockpit
Instale el paquete cockpit-machines para agregar el menú Virtual Machines (Máquinas
virtuales) en Cockpit.
[root@host ~]# yum install cockpit-machines
Si Cockpit no se está ejecutando, inícielo y habilítelo.
[root@host ~]# systemctl enable --now cockpit.socket
Para crear una nueva máquina virtual con Cockpit, acceda al menú Virtual Machines (Máquinas
virtuales) en la interfaz web de Cockpit. Desde allí, haga clic en Create VM (Crear máquina
358
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
virtual) e ingrese la configuración de la máquina virtual en la ventana Create New Virtual
Machine (Crear nueva máquina virtual).
Figura 12.7: Creación de una máquina virtual en Cockpit
• Name (Nombre) establece un nombre de dominio para la configuración de la máquina virtual.
Este nombre no está relacionado con el nombre del host de red que le da al sistema en la
máquina virtual instalada.
• Installation Source Type (Tipo de fuente de instalación) es el método para recuperar el
archivo ISO de instalación. Las opciones incluyen el sistema de archivos local o una URL de
HTTPS, FTP o NFS.
• Installation Source (Fuente de instalación) proporciona la ruta de la fuente de instalación.
• OS Vendor (Proveedor de SO) y Operating System (Sistema operativo) indican el sistema
operativo de la máquina virtual. La capa de virtualización presenta una emulación de hardware
compatible con el sistema operativo elegido.
• Memory (Memoria) es la cantidad de RAM disponible para la máquina virtual nueva.
• Storage Size (Tamaño de almacenamiento) es el tamaño del disco de la máquina virtual nueva.
Asocie discos adicionales con la máquina virtual después de la instalación.
• Immediately Start VM (Iniciar máquina virtual de inmediato) indica si la máquina virtual se
debe iniciar inmediatamente después de hacer clic en Create (Crear).
Haga clic en Create (Crear) para crear la máquina virtual y en Install (Instalar) para iniciar la
instalación del sistema operativo. Cockpit muestra la consola de la máquina virtual desde la que
puede instalar el sistema.
RH134-RHEL8.2-es-1-20200928
359
capítulo 12 | Instalación de Red Hat Enterprise Linux
Figura 12.8: Instalación del sistema operativo de la máquina virtual
Referencias
Para obtener más información, consulte la guía Configuración y administración de la
virtualización en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/configuring_and_managing_virtualization/index
¿Qué es la virtualización?
https://www.redhat.com/en/topics/virtualization/what-is-virtualization
360
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Cuestionario
Instalación y configuración de máquinas
virtuales
Elija las respuestas correctas para las siguientes preguntas:
1. ¿Qué tres sistemas operativos guest admite Red Hat como máquinas virtuales KVM?
(Elija tres opciones).
a. Fedora 28 y versiones posteriores
b. Red Hat Enterprise Linux 6 y versiones posteriores
c. CoreOS Container Linux 2023 y versiones posteriores
d. Microsoft Windows 7 SP1
e. Microsoft Windows 10 y versiones posteriores
f. Microsoft Windows Server 2016 y versiones posteriores
2. ¿Qué dos componentes se requieren para configurar su sistema como un host de
virtualización y gestionar máquinas virtuales con la consola web? (Elija dos opciones).
a. El módulo de Yum virt
b. El grupo de paquetes de openstack
c. El paquete cockpit-machines
d. El grupo de paquetes de Virtualization Platform
e. El módulo de Yum kvm
f. El paquete cockpit-virtualization
3. ¿Qué comando verifica si su sistema es compatible con la virtualización?
a. grep kvm /proc/cpuinfo
b. virsh validate
c. virt-host-validate
d. rhv-validate
e. cockpit-validate
4. ¿Qué dos herramientas puede usar para iniciar y detener sus máquinas virtuales en un
sistema Red Hat Enterprise Linux? (Elija dos opciones).
a. vmctl
b. libvirtd
c. virsh
d. openstack
e. Consola web
RH134-RHEL8.2-es-1-20200928
361
capítulo 12 | Instalación de Red Hat Enterprise Linux
Solución
Instalación y configuración de máquinas
virtuales
Elija las respuestas correctas para las siguientes preguntas:
1. ¿Qué tres sistemas operativos guest admite Red Hat como máquinas virtuales KVM?
(Elija tres opciones).
a. Fedora 28 y versiones posteriores
b. Red Hat Enterprise Linux 6 y versiones posteriores
c. CoreOS Container Linux 2023 y versiones posteriores
d. Microsoft Windows 7 SP1
e. Microsoft Windows 10 y versiones posteriores
f. Microsoft Windows Server 2016 y versiones posteriores
2. ¿Qué dos componentes se requieren para configurar su sistema como un host de
virtualización y gestionar máquinas virtuales con la consola web? (Elija dos opciones).
a. El módulo de Yum virt
b. El grupo de paquetes de openstack
c. El paquete cockpit-machines
d. El grupo de paquetes de Virtualization Platform
e. El módulo de Yum kvm
f. El paquete cockpit-virtualization
3. ¿Qué comando verifica si su sistema es compatible con la virtualización?
a. grep kvm /proc/cpuinfo
b. virsh validate
c. virt-host-validate
d. rhv-validate
e. cockpit-validate
4. ¿Qué dos herramientas puede usar para iniciar y detener sus máquinas virtuales en un
sistema Red Hat Enterprise Linux? (Elija dos opciones).
a. vmctl
b. libvirtd
c. virsh
d. openstack
e. Consola web
362
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Trabajo de laboratorio
Instalación de Red Hat Enterprise Linux
Lista de verificación de rendimiento
En este trabajo de laboratorio, creará un archivo kickstart y realizará una instalación kickstart
en serverb.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un archivo kickstart.
• Poner el archivo kickstart a disposición del instalador.
• Realizar una instalación kickstart.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab installing-review start. Este comando
ejecuta un script de inicio para determinar si las máquinas servera y serverb son
accesibles en la red, y configura Apache en serverb. También configura el menú de
arranque en serverb para que el ejercicio realice una instalación kickstart.
[student@workstation ~]$ lab installing-review start
Prepare un archivo kickstart en serverb según lo especificado y póngalo a disposición en
http://serverb.lab.example.com/ks-config/kickstart.cfg . Ejecute una instalación
kickstart en servera usando el archivo kickstart que preparó.
1.
En serverb, copie /root/anaconda-ks.cfg en /home/student/kickstart.cfg,
para que el usuario student pueda editarlo.
2.
Haga los siguientes cambios en /home/student/kickstart.cfg.
• Comente el comando reboot.
• Comente el comando repo para el repositorio de BaseOS. Modifique el comando repo
para que el repositorio de AppStream apunte a http://classroom.example.com/
content/rhel8.2/x86_64/dvd/AppStream/. El nombre del repositorio se debe
establecer en appstream.
• Cambie el comando url para usar http://classroom.example.com/content/
rhel8.2/x86_64/dvd/ como la fuente de instalación.
• Comente el comando network.
• Cambie el comando rootpw para usar plaintext y establezca la contraseña de root en
redhat.
RH134-RHEL8.2-es-1-20200928
363
capítulo 12 | Instalación de Red Hat Enterprise Linux
• Elimine la línea que usa el comando auth y agregue la línea authselect select sssd
para configurar el servicio sssd como la fuente de identidad y autenticación.
• Simplifique el comando services para que se deshabiliten solo los servicios kdump y
rhsmcertd. Deje habilitados solo sshd, rngd y chronyd.
• Agregue el comando autopart. Los comandos part ya debe estar comentados.
• Simplifique la sección %post para que solo ejecute un script para agregar el texto
Kickstarted on DATE en el final del archivo /etc/issue. DATE es información
variable y se debe generar a través del script con el comando date sin opciones
adicionales.
• Simplifique la sección %package de la siguiente manera: incluya los paquetes @core,
chrony, dracut-config-generic, dracut-norescue, firewalld, grub2, kernel, rsync, tar y httpd.
Asegúrese de que no se instale el paquete plymouth.
3.
Valide la sintaxis de kickstart.cfg.
4.
Ponga a disposición el archivo /home/student/kickstart.cfg en http://
serverb.lab.example.com/ks-config/kickstart.cfg
5.
Vuelva al sistema workstation para verificar su trabajo.
Evaluación
En workstation, ejecute el script lab installing-review grade para calificar este
ejercicio. Reinicie servera para realizar una instalación kickstart.
[student@workstation ~]$ lab installing-review grade
Corrija cualquier falla en kickstart.cfg que se comparta desde el servidor web serverb ya
sea al modificar /var/www/html/ks-config/kickstart.cfg directamente o al modificar ~/
kickstart.cfg y copiarlo en /var/www/html/ks-config/.
Reinicie servera para ejecutar una instalación kickstart. En el menú de GRUB, seleccione
Kickstart Red Hat Enterprise Linux 8 y presione Enter.
Finalizar
En workstation, ejecute el script lab installing-review finish para terminar este
ejercicio. Este script elimina el servidor web configurado en serverb durante el ejercicio.
[student@workstation ~]$ lab installing-review finish
Restablezca el sistema servera para regresarlo al estado predeterminado.
Esto concluye el trabajo de laboratorio.
364
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Solución
Instalación de Red Hat Enterprise Linux
Lista de verificación de rendimiento
En este trabajo de laboratorio, creará un archivo kickstart y realizará una instalación kickstart
en serverb.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un archivo kickstart.
• Poner el archivo kickstart a disposición del instalador.
• Realizar una instalación kickstart.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute el comando lab installing-review start. Este comando
ejecuta un script de inicio para determinar si las máquinas servera y serverb son
accesibles en la red, y configura Apache en serverb. También configura el menú de
arranque en serverb para que el ejercicio realice una instalación kickstart.
[student@workstation ~]$ lab installing-review start
Prepare un archivo kickstart en serverb según lo especificado y póngalo a disposición en
http://serverb.lab.example.com/ks-config/kickstart.cfg . Ejecute una instalación
kickstart en servera usando el archivo kickstart que preparó.
1.
En serverb, copie /root/anaconda-ks.cfg en /home/student/kickstart.cfg,
para que el usuario student pueda editarlo.
1.1.
Use el comando ssh para iniciar sesión en serverb con el usuario student.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
1.2.
Copie /root/anaconda-ks.cfg en serverb en un archivo denominado /home/
student/kickstart.cfg de modo que student pueda realizar ediciones. Use
el comando sudo cat /root/anaconda-ks.cfg > ~/kickstart.cfg para
copiar el archivo /root/anaconda-ks.cfg en /home/student/kickstart.cfg.
Introduzca la contraseña student cuando se le solicite la contraseña para el usuario
student en sudoserverb.
RH134-RHEL8.2-es-1-20200928
365
capítulo 12 | Instalación de Red Hat Enterprise Linux
[student@serverb ~]$ sudo cat /root/anaconda-ks.cfg > ~/kickstart.cfg
[sudo] password for student: student
Haga los siguientes cambios en /home/student/kickstart.cfg.
2.
• Comente el comando reboot.
• Comente el comando repo para el repositorio de BaseOS. Modifique el comando repo
para que el repositorio de AppStream apunte a http://classroom.example.com/
content/rhel8.2/x86_64/dvd/AppStream/. El nombre del repositorio se debe
establecer en appstream.
• Cambie el comando url para usar http://classroom.example.com/content/
rhel8.2/x86_64/dvd/ como la fuente de instalación.
• Comente el comando network.
• Cambie el comando rootpw para usar plaintext y establezca la contraseña de root en
redhat.
• Elimine la línea que usa el comando auth y agregue la línea authselect select sssd
para configurar el servicio sssd como la fuente de identidad y autenticación.
• Simplifique el comando services para que se deshabiliten solo los servicios kdump y
rhsmcertd. Deje habilitados solo sshd, rngd y chronyd.
• Agregue el comando autopart. Los comandos part ya debe estar comentados.
• Simplifique la sección %post para que solo ejecute un script para agregar el texto
Kickstarted on DATE en el final del archivo /etc/issue. DATE es información
variable y se debe generar a través del script con el comando date sin opciones
adicionales.
• Simplifique la sección %package de la siguiente manera: incluya los paquetes @core,
chrony, dracut-config-generic, dracut-norescue, firewalld, grub2, kernel, rsync, tar y httpd.
Asegúrese de que no se instale el paquete plymouth.
2.1.
Comente la directiva reboot (reiniciar):
#reboot
2.2.
El comando repo se encuentra dos veces en kickstart.cfg. Comente el comando
repo para el repositorio de BaseOS. Modifique el comando repo para que el
repositorio de AppStream apunte al repositorio de AppStream del aula:
#repo --name="koji-override-0" --baseurl=http://downloadnode-02.eng.bos.redhat.com/rhel-8/devel/candidate-trees/RHEL-8/RHEL-8.2.0updates-20200423.0/compose/BaseOS/x86_64/os
repo --name="appstream" --baseurl=http://classroom.example.com/content/rhel8.2/
x86_64/dvd/AppStream/
2.3.
366
Cambie el comando url para especificar los medios de fuentes de instalación HTTP
usados en el aula:
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
url --url="http://classroom.example.com/content/rhel8.2/x86_64/dvd/"
2.4.
Comente el comando network:
#network
2.5.
--bootproto=dhcp --device=link --activate
Establezca la contraseña de root en redhat. Cambie la línea que comienza con
rootpw por:
rootpw --plaintext redhat
2.6.
Elimine la línea que usa el comando auth y agregue la línea authselect select
sssd para configurar el servicio sssd como la fuente de identidad y autenticación.
authselect select sssd
2.7.
Simplifique el comando services para que se vea de la siguiente manera:
services --disabled="kdump,rhsmcertd" --enabled="sshd,rngd,chronyd"
2.8.
Comente los comandos part. Agregue el comando autopart:
# Disk partitioning information
#part biosboot --fstype="biosboot" --size=1
#part /boot/efi --fstype="efi" --size=100 --fsoptions="..."
#part / --fstype="xfs" --size=10137 --label=root
autopart
2.9.
Elimine todo el contenido entre la sección %post y su %end. Agregue la siguiente línea:
echo "Kickstarted on $(date)" >> /etc/issue
La sección %post debe aparecer de la siguiente manera:
%post --erroronfail
echo "Kickstarted on $(date)" >> /etc/issue
%end
2.10. Simplifique la especificación del paquete para que se vea de la siguiente manera:
%packages
@core
chrony
dracut-config-generic
dracut-norescue
firewalld
grub2
kernel
rsync
tar
RH134-RHEL8.2-es-1-20200928
367
capítulo 12 | Instalación de Red Hat Enterprise Linux
httpd
-plymouth
%end
Valide la sintaxis de kickstart.cfg.
3.
3.1.
Use el comando ksvalidator para comprobar si hay errores de sintaxis en el archivo
Kickstart.
[student@serverb ~]$ ksvalidator kickstart.cfg
Ponga a disposición el archivo /home/student/kickstart.cfg en http://
serverb.lab.example.com/ks-config/kickstart.cfg
4.
4.1.
Copie kickstart.cfg en el directorio /var/www/html/ks-config/.
[student@serverb ~]$ sudo cp ~/kickstart.cfg /var/www/html/ks-config
Vuelva al sistema workstation para verificar su trabajo.
5.
5.1.
Salga de serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
Evaluación
En workstation, ejecute el script lab installing-review grade para calificar este
ejercicio. Reinicie servera para realizar una instalación kickstart.
[student@workstation ~]$ lab installing-review grade
Corrija cualquier falla en kickstart.cfg que se comparta desde el servidor web serverb ya
sea al modificar /var/www/html/ks-config/kickstart.cfg directamente o al modificar ~/
kickstart.cfg y copiarlo en /var/www/html/ks-config/.
Reinicie servera para ejecutar una instalación kickstart. En el menú de GRUB, seleccione
Kickstart Red Hat Enterprise Linux 8 y presione Enter.
Finalizar
En workstation, ejecute el script lab installing-review finish para terminar este
ejercicio. Este script elimina el servidor web configurado en serverb durante el ejercicio.
[student@workstation ~]$ lab installing-review finish
Restablezca el sistema servera para regresarlo al estado predeterminado.
Esto concluye el trabajo de laboratorio.
368
RH134-RHEL8.2-es-1-20200928
capítulo 12 | Instalación de Red Hat Enterprise Linux
Resumen
En este capítulo, aprendió lo siguiente:
• El DVD binario de RHEL 8 incluye Anaconda y todos los repositorios necesarios para la
instalación.
• El archivo ISO de arranque de RHEL 8 incluye el instalador de Anaconda, que permite acceder a
los repositorios por medio de la red durante la instalación.
• El sistema Kickstart ejecuta instalaciones desatendidas.
• Los archivos Kickstart se pueden crear por medio del sitio web de Kickstart Generator o al
copiar y editar /root/anaconda-ks.cfg.
• El módulo de Yum virt proporciona los paquetes para que un sistema RHEL se convierta en un
host de virtualización.
• El paquete cockpit-machines agrega el menú Virtual Machines (Máquinas virtuales) en
Cockpit.
RH134-RHEL8.2-es-1-20200928
369
370
RH134-RHEL8.2-es-1-20200928
capítulo 13
Ejecución de contenedores
Meta
Obtener, ejecutar y administrar servicios livianos
simples como contenedores en un único servidor
de Red Hat Enterprise Linux.
Objetivos
•
Explicar qué es un contenedor y cómo usar uno
para administrar e implementar aplicaciones
con dependencias y librerías de software que
necesitan las aplicaciones para funcionar.
•
Instalar las herramientas de administración
de contenedores y ejecutar un contenedor
rootless simple.
•
Buscar, recuperar, inspeccionar y administrar
imágenes de contenedores obtenidas de
un registro de contenedores remoto y
almacenadas en su servidor.
•
Ejecutar contenedores con opciones
avanzadas, enumerar los contenedores que
se ejecutan en el sistema e iniciar, detener y
finalizar contenedores.
•
Proporcionar almacenamiento persistente para
los datos del contenedor mediante el montaje
de un directorio desde el host del contenedor
dentro de un contenedor en ejecución.
•
Iniciar, detener y verificar el estado de un
contenedor como un servicio systemd.
RH134-RHEL8.2-es-1-20200928
371
capítulo 13 | Ejecución de contenedores
Secciones
Trabajo de
laboratorio
372
•
Introducción a los contenedores (y
cuestionario)
•
Ejecución de un contenedor básico (y ejercicio
guiado)
•
Búsqueda y administración de imágenes de
contenedores (y ejercicio guiado)
•
Realización de una administración avanzada de
contenedores (y ejercicio guiado)
•
Conexión del almacenamiento persistente a un
contenedor (y ejercicio guiado)
•
Administración de contenedores como servicios
(y ejercicio guiado)
Ejecución de contenedores
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Introducción a los contenedores
Objetivos
Tras completar esta sección, deberá ser capaz de explicar qué es un contenedor y cómo usar uno
para administrar e implementar aplicaciones con dependencias y librerías de software con soporte.
Introducción a la tecnología de contenedores
Por lo general, las aplicaciones de software dependen de otras librerías, archivos de configuración
o servicios proporcionados por el entorno de tiempo de ejecución. En general, el entorno de
tiempo de ejecución para una aplicación de software se instala en un sistema operativo que se
ejecuta en un host físico o una máquina virtual. Todas las dependencias de la aplicación se instalan
junto con ese sistema operativo en el host.
En Red Hat Enterprise Linux, los sistemas de paquetes como RPM se usan para ayudar a
administrar las dependencias de las aplicaciones. Cuando instala el paquete httpd, el sistema
RPM garantiza que también se instalen las librerías y las demás dependencias correspondientes
para ese paquete.
El principal inconveniente de las aplicaciones de software implementadas tradicionalmente es que
estas dependencias están entremezcladas con el entorno de tiempo de ejecución. Una aplicación
puede necesitar versiones de software que sean anteriores o posteriores al software provisto con
el sistema operativo. De manera similar, dos aplicaciones en el mismo sistema pueden requerir
diferentes versiones del mismo software que son incompatibles entre sí.
Una forma de resolver estos conflictos es empaquetar e implementar la aplicación como un
contenedor. Un contenedor es un conjunto de uno o más procesos que están aislados del resto del
sistema.
Piense en un contenedor de transporte físico. Un contenedor de envío es una forma estándar
de empaquetar y enviar mercancías. Se etiqueta, se carga, se descarga y se transporta de una
ubicación a otra como si se tratase de una sola caja. El contenido del contenedor se aísla del
contenido de otros contenedores para que no se afecten unos a otros.
Los contenedores de software son una forma de empaquetar aplicaciones para simplificar la
implementación y la administración.
Comparación de contenedores y máquinas virtuales
Los contenedores ofrecen muchos de los mismos beneficios de las máquinas virtuales, como
seguridad, almacenamiento y aislamiento de redes.
Ambas tecnologías aíslan las librerías de aplicaciones y los recursos de tiempo de ejecución del
sistema operativo del host o del hipervisor y viceversa.
RH134-RHEL8.2-es-1-20200928
373
capítulo 13 | Ejecución de contenedores
Los contenedores y las máquinas virtuales son diferentes en la forma en que interactúan con el
hardware y el sistema operativo subyacente.
Virtualización:
• Permite que varios sistemas operativos se ejecuten simultáneamente en una única plataforma
de hardware.
• Usa un hipervisor para dividir el hardware en varios sistemas de hardware virtuales, lo que
permite que varios sistemas operativos se ejecuten en paralelo.
• Requiere un entorno de sistema operativo completo para dar soporte a la aplicación.
Compare y contraste estas características con las de los contenedores, que:
• Se ejecutan directamente en el sistema operativo y comparten tanto el hardware como los
recursos del sistema operativo en todos los contenedores del sistema. Esto permite que las
aplicaciones permanezcan livianas y se ejecuten rápidamente en paralelo.
• Comparten el mismo kernel del sistema operativo, aíslan los procesos de aplicaciones
contenedorizadas del resto del sistema y usan cualquier software compatible con ese kernel.
• Requieren muchos menos recursos de hardware que las máquinas virtuales, lo que también les
permite iniciarse y detenerse rápidamente, además de reducir los requisitos de almacenamiento.
nota
Es posible que algunas aplicaciones no sean adecuadas para ejecutarse como un
contenedor. Por ejemplo, en general, es posible que las aplicaciones que acceden a
información de hardware de bajo nivel necesiten un acceso de hardware más directo
que los contenedores.
Exploración de la implementación de contenedores
Red Hat Enterprise Linux implementa contenedores mediante el uso de tecnologías core
(centrales) como:
• Grupos de control (cgroups) para administrar recursos.
• Espacios de nombres (Namespaces) para aislar procesos.
• SELinux y Seccomp (modo de computación segura) para proporcionar límites de seguridad.
374
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
nota
Para obtener un análisis más exhaustivo de la arquitectura y seguridad del
contenedor, consulte el informe técnico "Diez capas de seguridad de contenedores"
[https://www.redhat.com/en/resources/container-security-openshift-clouddevops-whitepaper].
Planificación para contenedores
Los contenedores son una manera eficaz de proporcionar reutilización y portabilidad de las
aplicaciones alojadas. Se pueden trasladar fácilmente de un entorno a otro, como de desarrollo a
producción. Puede guardar varias versiones de un contenedor y acceder rápidamente a cada una
según sea necesario.
Por lo general, los contenedores son temporales, o efímeros. Puede guardar de forma permanente
los datos generados por un contenedor en ejecución en un almacenamiento persistente, pero los
contenedores, por lo general, se ejecutan cuando es necesario; luego, se detienen y se eliminan.
Se inicia un nuevo proceso de contenedor la próxima vez que se necesita un contenedor en
particular.
Ejecución de contenedores a partir de imágenes de
contenedores
Los contenedores se ejecutan a partir de imágenes de contenedores. Las imágenes de
contenedores sirven como modelos para crear contenedores.
Las imágenes de contenedores empaquetan una aplicación junto con todas sus dependencias,
tales como:
• Librerías del sistema
• Tiempos de ejecución de lenguajes de programación
• Librerías de lenguajes de programación
• Parámetros de configuración
• Archivos de datos estáticos
Las imágenes de contenedores son archivos inalterables o inmutables, que incluyen todo el código
requerido y las dependencias para ejecutar un contenedor.
Las imágenes de contenedores se compilan de acuerdo con las especificaciones, como la
especificación de formato de imagen de Open Container Initiative (OCI). Estas especificaciones
definen el formato para las imágenes de contenedores, así como los metadatos acerca de los
sistemas operativos del host de contenedores y las arquitecturas de hardware que soporta la
imagen.
Diseño de arquitecturas basadas en contenedores
Podría instalar una aplicación de software compleja formada por varios servicios en un único
contenedor. Por ejemplo, puede tener un servidor web que necesite usar una base de datos y un
sistema de mensajería. Sin embargo, el uso de un contenedor para varios servicios es difícil de
gestionar.
Un mejor diseño ejecuta cada componente, el servidor web, la base de datos y el sistema de
mensajería en contenedores separados. De esta manera, las actualizaciones y el mantenimiento de
los componentes de las aplicaciones individuales no afectan otros componentes ni la stack (pila)
de aplicaciones.
RH134-RHEL8.2-es-1-20200928
375
capítulo 13 | Ejecución de contenedores
Administración de contenedores con Podman
Una buena manera de empezar a aprender acerca de los contenedores es trabajar con
contenedores individuales en un único servidor que actúa como host de contenedores. Red Hat
Enterprise Linux proporciona un conjunto de herramientas de contenedores que puede usar para
hacer esto, que incluyen:
• podman, que administra directamente contenedores e imágenes de contenedores.
• skopeo, que puede usar para inspeccionar, copiar, eliminar y firmar imágenes.
• buildah, que puede usar para crear nuevas imágenes de contenedores.
Estas herramientas son compatibles con Open Container Initiative (OCI). Se pueden usar para
administrar los contenedores de Linux creados por motores de contenedores compatibles
con OCI, como Docker. Estas herramientas están diseñadas específicamente para ejecutar
contenedores en Red Hat Enterprise Linux en un host de contenedores de un solo nodo.
En este capítulo, usará los comandos podman y skopeo para ejecutar y administrar contenedores
e imágenes de contenedores existentes.
nota
El uso de buildah para crear sus propias imágenes de contenedores no está
incluido en el alcance de este curso, pero se trata en el curso de capacitación de
Red Hat Red Hat OpenShift I: contenedores y kubernetes (DO180).
Ejecución de contenedores rootless
En el host de contenedores, puede ejecutar contenedores como usuario root o como usuario
normal sin privilegios. Los contenedores ejecutados por usuarios sin privilegios se denominan
contenedores rootless.
Los contenedores rootless son más seguros, pero tienen algunas restricciones. Por ejemplo,
los contenedores rootless no pueden publicar sus servicios de red a través de los puertos con
privilegios del host de contenedores (los puertos inferiores a 1024).
Puede ejecutar contenedores directamente como root, si es necesario, pero esto debilita la
seguridad del sistema si un error permite que un atacante comprometa el contenedor.
Administración de contenedores a escala
Las nuevas aplicaciones implementan cada vez más componentes funcionales mediante
contenedores. Estos contenedores proporcionan servicios que consumen otras partes de
la aplicación. En una organización, la administración de una cantidad cada vez mayor de
contenedores puede convertirse rápidamente en una tarea abrumadora.
La implementación de contenedores a escala en la producción requiere un entorno que se pueda
adaptar a algunos de los siguientes desafíos:
• La plataforma debe garantizar la disponibilidad de contenedores que proporcionen servicios
esenciales a los clientes.
• El entorno debe responder a los picos de uso de la aplicación mediante el aumento o la
reducción de los contenedores en ejecución y el balanceo de carga del tráfico.
• La plataforma debería detectar la falla de un contenedor o un host y reaccionar en
consecuencia.
376
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
• Es posible que los desarrolladores necesiten un flujo de trabajo automatizado para ofrecer
nuevas versiones de aplicaciones a los clientes de forma transparente y segura.
Kubernetes es un servicio de orquestación que facilita la implementación, la administración y la
escalabilidad de aplicaciones basadas en contenedores en un clúster de hosts de contenedores.
Ayuda a gestionar las actualizaciones de DNS al iniciar nuevos contenedores. Ayuda a redirigir el
tráfico a sus contenedores mediante un balanceador de carga, que también le permite escalar
y reducir verticalmente la cantidad de contenedores que proporcionan un servicio de forma
manual o automática. También soporta comprobaciones de estado definidas por el usuario para
monitorear sus contenedores y reiniciarlos en caso de que fallen.
Red Hat proporciona una distribución de Kubernetes denominada Red Hat OpenShift. OpenShift
es un conjunto de componentes y servicios modulares desarrollado sobre la base de una
infraestructura de Kubernetes. Agrega características adicionales, como administración remota
basada en la Web, multiinquilino (multitenancy), monitoreo y auditoría, administración del ciclo de
vida de la aplicación e instancias de autoservicio para desarrolladores, entre otras.
Red Hat OpenShift no está incluido en el alcance de este curso, pero puede obtener más
información sobre este en https://www.openshift.com.
nota
En una empresa, los contenedores individuales no se ejecutan generalmente desde
la línea de comandos. En cambio, se prefiere ejecutar contenedores en producción
mediante una plataforma basada en Kubernetes, como Red Hat OpenShift.
Sin embargo, es posible que necesite usar comandos para trabajar con
contenedores e imágenes de forma manual o a escala pequeña. Para ello,
puede instalar un conjunto de herramientas de contenedores en un sistema
Red Hat Enterprise Linux 8.
Este capítulo se centra en este caso de uso para ayudarlo a comprender mejor
los conceptos básicos subyacentes de los contenedores, cómo funcionan y cómo
pueden ser útiles.
Referencias
Páginas del manual cgroups(7), namespaces(7), seccomp(2).
Especificación de imágenes de Open Container Initiative (OCI)
https://github.com/opencontainers/image-spec/blob/master/spec.md
Para obtener más información, consulte el capítulo Comenzar con contenedores
en la Guía de creación, ejecución y administración de contenedores de Red Hat
Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/
html-single/building_running_and_managing_containers/index#starting-withcontainers_building-running-and-managing-containers
RH134-RHEL8.2-es-1-20200928
377
capítulo 13 | Ejecución de contenedores
Cuestionario
Introducción a los contenedores
Elija las respuestas correctas para las siguientes preguntas:
1. ¿Qué herramienta proporciona Red Hat Enterprise Linux que se usa para ejecutar
contenedores?
a. buildah
b. container
c. podman
d. skopeo
2. ¿Cuáles de los siguientes son los dos enunciados que describen la tecnología de
contenedores? (Elija dos opciones).
a. Los contenedores empaquetan sistemas operativos completos, como las máquinas
virtuales.
b. Los contenedores ejecutan un conjunto de uno o más procesos que están aislados del
resto del sistema.
c. Cada contenedor incluye su propio kernel.
d. Los contenedores proporcionan una forma estándar de empaquetar aplicaciones para
facilitar la implementación y la administración.
3. ¿Cuáles de los siguientes son los dos enunciados verdaderos sobre las imágenes de
contenedores? (Elija dos opciones).
a. Las imágenes de contenedores empaquetan una aplicación con todas las dependencias
del tiempo de ejecución que necesita.
b. Las imágenes de contenedores que funcionan con Docker no pueden funcionar con
Podman.
c. Las imágenes de contenedores solo se pueden ejecutar en un host de contenedores que
se instala con la misma versión exacta del software en la imagen.
d. Las imágenes de contenedores sirven como modelos para crear contenedores.
4. ¿Cuáles son las tres tecnologías core (centrales) que se usan para implementar
contenedores en Red Hat Enterprise Linux? (Elija tres opciones).
a. Código de hipervisor para alojar máquinas virtuales.
b. Grupos de control (cgroups) para administrar recursos.
c. Espacios de nombres para aislar procesos.
d. Sistema operativo completo para compatibilidad con el host de contenedores.
e. SELinux y Seccomp para la seguridad.
378
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Solución
Introducción a los contenedores
Elija las respuestas correctas para las siguientes preguntas:
1. ¿Qué herramienta proporciona Red Hat Enterprise Linux que se usa para ejecutar
contenedores?
a. buildah
b. container
c. podman
d. skopeo
2. ¿Cuáles de los siguientes son los dos enunciados que describen la tecnología de
contenedores? (Elija dos opciones).
a. Los contenedores empaquetan sistemas operativos completos, como las máquinas
virtuales.
b. Los contenedores ejecutan un conjunto de uno o más procesos que están aislados del
resto del sistema.
c. Cada contenedor incluye su propio kernel.
d. Los contenedores proporcionan una forma estándar de empaquetar aplicaciones para
facilitar la implementación y la administración.
3. ¿Cuáles de los siguientes son los dos enunciados verdaderos sobre las imágenes de
contenedores? (Elija dos opciones).
a. Las imágenes de contenedores empaquetan una aplicación con todas las dependencias
del tiempo de ejecución que necesita.
b. Las imágenes de contenedores que funcionan con Docker no pueden funcionar con
Podman.
c. Las imágenes de contenedores solo se pueden ejecutar en un host de contenedores que
se instala con la misma versión exacta del software en la imagen.
d. Las imágenes de contenedores sirven como modelos para crear contenedores.
4. ¿Cuáles son las tres tecnologías core (centrales) que se usan para implementar
contenedores en Red Hat Enterprise Linux? (Elija tres opciones).
a. Código de hipervisor para alojar máquinas virtuales.
b. Grupos de control (cgroups) para administrar recursos.
c. Espacios de nombres para aislar procesos.
d. Sistema operativo completo para compatibilidad con el host de contenedores.
e. SELinux y Seccomp para la seguridad.
RH134-RHEL8.2-es-1-20200928
379
capítulo 13 | Ejecución de contenedores
Ejecución de un contenedor básico
Objetivos
Tras completar esta sección, deberá ser capaz de instalar las herramientas de administración de
contenedores y ejecutar un contenedor rootless simple.
Instalación de herramientas de administración de
contenedores
Para comenzar a ejecutar y gestionar contenedores en su sistema, debe instalar las herramientas
de la línea de comandos necesarias. Instala el módulo container-tools con el comando yum.
[root@host ~]# yum module install container-tools
El módulo container-tools incluye paquetes de software que instalan varias herramientas. Las
herramientas usadas en este capítulo son podman y skopeo.
nota
De manera predeterminada, el sistema instala las herramientas de flujo rápido,
container-tools:rhel8 que se basan en la versión de la versión anterior
estable de las herramientas del contenedor cada tres meses.
Las secuencias estables alternativas que se bloquean en una versión específica
de las herramientas no obtienen actualizaciones de características. Red Hat tiene
previsto lanzar nuevos flujos estables una vez al año con soporte durante dos años.
Selección de imágenes de contenedores y registros
Un registro de contenedor es un repositorio para almacenar y recuperar imágenes de
contenedores. Un desarrollador carga o envía las imágenes de contenedores a un registro de
contenedores. Puede descargar, o extraer, esas imágenes de contenedores del registro a un
sistema local, de modo que pueda usarlas para ejecutar contenedores.
Puede usar un registro público que contenga imágenes de terceros o puede usar un registro
privado controlado por su organización. El origen de las imágenes de contenedores es importante.
Al igual que cualquier otro paquete de software, debe saber si puede confiar en el código de la
imagen de contenedor. Los diferentes registros tienen diferentes políticas sobre si proporcionan,
evalúan y prueban las imágenes de contenedores que se les envían, y cómo lo hacen.
Red Hat distribuye las imágenes de contenedores certificadas a través de dos registros de
contenedores principales a los que puede acceder con sus credenciales de inicio de sesión de
Red Hat.
• registry.redhat.io para contenedores basados en productos oficiales de Red Hat.
• registry.connect.redhat.com para contenedores basados en productos de terceros.
380
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Red Hat está eliminando gradualmente un registro más antiguo,
registry.access.redhat.com.
Red Hat Container Catalog (https://access.redhat.com/containers) proporciona una interfaz
basada en la Web que puede usar para buscar contenido certificado en estos registros.
nota
En el aula se ejecuta un registro privado basado en Red Hat Quay para proporcionar
imágenes de contenedores. Consulte https://access.redhat.com/products/red-hatquay para obtener más información sobre este software.
Convenciones de nombres de contenedores
Los nombres de las imágenes de contenedores se asignan según la siguiente sintaxis nombre de
imagen completamente calificado:
registry_name/user_name/image_name:tag
• registry_name es el nombre del registro que almacena la imagen. Por lo general, es el
nombre de dominio completamente calificado del registro.
• user_name representa el usuario o la organización a la que pertenece la imagen.
• image_name debe ser único en el espacio de nombres del usuario.
• tag identifica la versión de la imagen. Si el nombre de la imagen no incluye etiqueta de imagen,
se supone que es latest.
Ejecución de contenedores
Para ejecutar un contenedor en su sistema local, primero debe extraer una imagen de contenedor.
Use Podman para extraer una imagen de un registro. Debe usar siempre el nombre de la imagen
completamente calificado cuando descarga imágenes. El comando podman pull extrae la
imagen que usted especifica del registro y la guarda localmente:
[user@host ~]$ podman pull registry.access.redhat.com/ubi8/ubi:latest
Trying to pull registry.access.redhat.com/ubi8/ubi:latest...Getting image source
signatures
Copying blob 77c58f19bd6e: 70.54 MiB / 70.54 MiB [=========================] 10s
Copying blob 47db82df7f3f: 1.68 KiB / 1.68 KiB [===========================] 10s
Copying config a1f8c9699786: 4.26 KiB / 4.26 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
a1f8c969978652a6d1b2dfb265ae0c6c346da69000160cd3ecd5f619e26fa9f3
Después de descargarla, Podman almacena las imágenes localmente y se las puede listar con el
comando podman images:
[user@host ~]$ podman images
REPOSITORY
registry.access.redhat.com/ubi8/ubi
TAG
latest
IMAGE ID
a1f8c9699786
CREATED
5 weeks ago
SIZE
211 MB
En la salida anterior, se muestra que la etiqueta de la imagen es latest y que el ID de la imagen
es a1f8c96699786.
RH134-RHEL8.2-es-1-20200928
381
capítulo 13 | Ejecución de contenedores
Para ejecutar un contenedor a partir de esta imagen, use el comando podman run. Cuando
ejecuta un comando podman run, crea e inicia un nuevo contenedor a partir de una imagen
de contenedor. Use las opciones -it para interactuar con el contenedor, si es necesario. Las
opciones -it asignan un terminal al contenedor y le permiten enviar pulsaciones de teclas a este.
[user@host ~]$ podman run -it registry.access.redhat.com/ubi8/ubi:latest
[root@8b032455db1a /]#
Importante
Si ejecuta un contenedor con el nombre de la imagen completamente calificado,
pero la imagen aún no está almacenada localmente, el comando podman run
primero extrae la imagen del registro y, luego, se ejecuta.
nota
Muchas opciones de Podman también tienen una forma larga alternativa; algunas
de estas se explican a continuación.
• -t es equivalente a --tty, lo que significa que se debe asignar pseudo-tty
(pseudoterminal) para el contenedor.
• -i es lo mismo que --interactive. Cuando se usa esta opción, el contenedor
acepta la entrada estándar.
• -d, o su forma larga --detach, significa que el contenedor se ejecuta en
segundo plano (independiente). Cuando se usa esta opción, Podman ejecuta el
contenedor en segundo plano y muestra su ID de contenedor generado.
Consulte la página del manual podman-run(1) para ver la lista completa de
indicadores.
Cuando se hace referencia a un contenedor, Podman reconoce el nombre del contenedor o el
ID del contenedor generado. Use la opción --name para establecer el nombre del contenedor
al ejecutar el contenedor con Podman. Los nombres de los contenedores deben ser únicos. Si
el comando podman run no incluye ningún nombre de contenedor, Podman genera un nombre
aleatorio único.
En el siguiente ejemplo, se asigna un nombre al contenedor, se inicia un terminal de Bash de forma
explícita dentro del contenedor y se ejecuta un comando en él de forma interactiva:
nota
Tenga en cuenta que la etiqueta latest se supone cuando no se especifica
ninguna etiqueta explícitamente.
El comando en el siguiente ejemplo se ingresa en una sola línea.
[user@host ~]$ podman run -it --name=rhel8 registry.access.redhat.com/ubi8/
ubi /bin/bash
[root@c20631116955 /]# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
382
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
VERSION="8.2 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.2
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.2"
[root@c20631116955 /]# exit
exit
[user@host ~]$
También puede ejecutar un comando rápido en un contenedor sin interactuar con él y, luego,
eliminar el contenedor una vez que se haya completado el comando. Para ello, use podman run
--rm seguido de la imagen de contenedor y un comando.
[user@host ~]$ podman run --rm registry.access.redhat.com/ubi8/ubi cat /etc/osrelease
NAME="Red Hat Enterprise Linux"
VERSION="8.2 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.2
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.2"
[user@host ~]$
Análisis del aislamiento de contenedores
Los contenedores proporcionan aislamiento del tiempo de ejecución de los recursos. Los
contenedores usan espacios de nombres de Linux para proporcionar entornos independientes y
aislados para recursos, como procesos, comunicaciones de red y volúmenes. Los procesos que se
ejecutan dentro de un contenedor se aíslan de todos los otros procesos en la máquina del host.
Vea los procesos que se ejecutan dentro del contenedor:
RH134-RHEL8.2-es-1-20200928
383
capítulo 13 | Ejecución de contenedores
[user@host ~]$ podman run -it registry.access.redhat.com/ubi7/ubi /bin/bash
[root@ef2550ed815d /]# ps aux
USER
PID %CPU %MEM
VSZ
RSS TTY
STAT START
TIME COMMAND
root
1 4.5 0.1 11840 2904 pts/0
Ss
22:10
0:00 /bin/bash
root
15 0.0 0.1 51768 3388 pts/0
R+
22:10
0:00 ps aux
Tenga en cuenta que el nombre de usuario y el ID dentro del contenedor son diferentes del
nombre de usuario y el ID en la máquina del host:
[root@ef2550ed815d /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@ef2550ed815d /]# exit
exit
[user@host ~]$ id
uid=1000(user) gid=1000(user) groups=1000(user),10(wheel)
Referencias
Páginas del manual podman-pull(1), podman-images(1) y podman-run(1).
Para obtener más información, consulte el capítulo Comenzar con contenedores
en la Guía de creación, ejecución y administración de contenedores de Red Hat
Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/
html-single/building_running_and_managing_containers/index#starting-withcontainers_building-running-and-managing-containers
384
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Ejercicio Guiado
Ejecución de un contenedor básico
En este ejercicio, instalará herramientas de contenedores y las probará mediante la ejecución
de un contenedor rootless simple.
Resultados
Deberá ser capaz de instalar herramientas de administración de contenedores y usarlas para
ejecutar un contenedor.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab containers-basic start. Este
comando ejecuta un script de inicio para determinar si la máquina servera es accesible en
la red. Además, verifica y configura el registro de contenedores y garantiza que la imagen de
contenedor usada para este ejercicio esté almacenada allí.
[student@workstation ~]$ lab containers-basic start
Instrucciones
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Instale el módulo de Yum container-tools con el comando yum.
[student@servera ~]$ sudo yum module install container-tools
[sudo] password for student: student
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
3.
Inicie sesión en el registro de contenedores con el comando podman login.
RH134-RHEL8.2-es-1-20200928
385
capítulo 13 | Ejecución de contenedores
[student@servera ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
4. Extraiga una imagen de contenedor del registro con el nombre completamente calificado
con el comando podman pull.
[student@servera ~]$ podman pull registry.lab.example.com/rhel8/httpd-24:latest
Trying to pull registry.lab.example.com/rhel8/httpd-24:latest...
Getting image source signatures
Copying blob 77c58f19bd6e done
Copying blob 47db82df7f3f done
Copying blob 9d20433efa0c done
Copying blob 71391dc11a78 done
Copying config 7e93f25a94 done
Writing manifest to image destination
Storing signatures
7e93f25a946892c9c175b74a0915c96469e3b4845a6da9f214fd3ec19c3d7070
5.
Ejecute un contenedor a partir la imagen, conéctelo al terminal, asígnele un nombre y
luego, inicie una shell de bash interactiva con el comando podman run. Se supone la
etiqueta latest, ya que no se especifica ninguna etiqueta:
El siguiente comando podman run es muy extenso y debe ingresarse como una sola línea.
[student@servera ~]$ podman run --name myweb -it registry.lab.example.com/rhel8/
httpd-24 /bin/bash
bash-4.4$
6. Enumere los procesos en ejecución dentro del contenedor. Solo verá aquellos procesos que
se ejecutan en el contenedor. No verá ningún otro proceso que se esté ejecutando en el
servidor.
bash-4.4$ ps aux
USER
PID %CPU %MEM
default
1 6.6 0.1
default
6 0.0 0.1
7.
VSZ
12020
44596
RSS TTY
3120 pts/0
3296 pts/0
STAT START
Ss
21:52
R+
21:52
TIME COMMAND
0:00 /bin/bash
0:00 ps aux
Visualice el nombre de usuario y el ID actuales dentro del contenedor.
bash-4.4$ id
uid=1001(default) gid=0(root) groups=0(root)
8. Salga de la shell del contenedor.
bash-4.4$ exit
exit
386
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
9. Ejecute el comando httpd -v en un contenedor, con la imagen de contenedor rhel8/
httpd-24 y elimine el contenedor cuando salga el comando:
El siguiente comando podman run es muy extenso y debe ingresarse como una sola línea.
[student@servera ~]$ podman run --rm registry.lab.example.com/rhel8/httpd-24 httpd
-v
Server version: Apache/2.4.37 (Red Hat Enterprise Linux)
Server built:
Dec 2 2019 14:15:24
10. Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En la máquina workstation, ejecute el script lab containers-basic finish para terminar
este ejercicio.
[student@workstation ~]$ lab containers-basic finish
Esto concluye el ejercicio guiado.
RH134-RHEL8.2-es-1-20200928
387
capítulo 13 | Ejecución de contenedores
Búsqueda y administración de imágenes
de contenedores
Objetivos
Tras completar esta sección, deberá ser capaz de buscar, recuperar, inspeccionar y administrar
imágenes de contenedores obtenidas de un registro de contenedores remoto y almacenadas en su
servidor.
Configuración de registros de contenedores
Podman usa un archivo registries.conf en su sistema host para obtener información acerca
de los registros de contenedores que puede usar.
[user@host ~]$ cat /etc/containers/registries.conf
# This is a system-wide configuration file used to
# keep track of registries for various container backends.
# It adheres to TOML format and does not support recursive
# lists of registries.
# The default location for this configuration file is /etc/containers/
registries.conf.
# The only valid categories are: 'registries.search', 'registries.insecure',
# and 'registries.block'.
[registries.search]
registries = ['registry.redhat.io', 'quay.io', 'docker.io']
# If you need to access insecure registries, add the registry's fully-qualified
name.
# An insecure registry is one that does not have a valid SSL certificate or only
does HTTP.
[registries.insecure]
registries = []
# If you need to block pull access from a registry, uncomment the section below
# and add the registries fully-qualified name.
#
[registries.block]
registries = []
Importante
Para un usuario normal (rootless) de Podman, este archivo se almacena en el
directorio $HOME/.config/containers. Los valores de configuración en
este archivo reemplazan la configuración de todo el sistema en el archivo /etc/
containers/registries.conf.
388
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
La lista de registros en los que Podman puede buscar se configura en la sección
[registries.search] de este archivo. Si no especifica una imagen completamente calificada
en la línea de comandos, Podman buscará en esta sección en el orden detallado para determinar
cómo formar una ruta de imagen completa.
El comando podman info muestra la información de configuración para Podman, incluidos sus
registros configurados.
[user@host ~]$ podman info
...output omitted...
insecure registries:
registries: []
registries:
registries:
- registry.redhat.io
- quay.io
- docker.io
...output omitted...
Seguridad de registros
Los registros no seguros se enumeran en la sección [registries.insecure] del archivo
registries.conf. Si un registro se detalla como no seguro, las conexiones a ese registro no
están protegidas con cifrado TLS. Si un registro admite búsqueda y no es seguro, puede mostrarse
en [registries.search] y en [registries.insecure].
Los registros de contenedores también se pueden configurar para requerir autenticación. Como
se analizó anteriormente, usa el comando podman login para iniciar sesión en un registro de
contenedores que requiere autenticación.
Búsqueda de imágenes de contenedores
Use el comando podman search para buscar registros de contenedores para una imagen
de contenedor específica. En el siguiente ejemplo, se muestra cómo buscar en el registro de
contenedores registry.redhat.io todas las imágenes que incluyen el nombre rhel8:
[user@host ~]$ podman search registry.redhat.io/rhel8
INDEX
NAME
DESCRIPTION
STARS
OFFICIAL
AUTOMATED
redhat.io
registry.redhat.io/openj9/openj9-8-rhel8
OpenJ9 1.8 OpenShift S2I
image for Java Appl...
0
redhat.io
registry.redhat.io/openjdk/openjdk-8-rhel8
OpenJDK 1.8 Image for
Java Applications base...
0
redhat.io
registry.redhat.io/openj9/openj9-11-rhel8
OpenJ9 11 OpenShift S2I
image for Java Appli...
0
redhat.io
registry.redhat.io/openjdk/openjdk-11-rhel8
OpenJDK S2I image for
Java Applications on U...
0
redhat.io
registry.redhat.io/rhel8/memcached
Free and open source,
high-performance, dist...
0
redhat.io
registry.redhat.io/rhel8/llvm-toolset
The LLVM back-end
compiler and core librarie...
0
RH134-RHEL8.2-es-1-20200928
389
capítulo 13 | Ejecución de contenedores
redhat.io
registry.redhat.io/rhel8/rust-toolset
a build system and ...
0
redhat.io
registry.redhat.io/rhel8/go-toolset
will replace the curre...
0
...output omitted...
Rust and Cargo, which is
Golang compiler which
Ejecute el mismo comando con la opción --no-trunc para ver descripciones de imágenes más
largas:
[user@host ~]$ podman search --no-trunc registry.access.redhat.com/rhel8
INDEX
NAME
DESCRIPTION
STARS
OFFICIAL
AUTOMATED
...output omitted...
redhat.io
registry.redhat.io/rhel8/nodejs-10
Node.js 10 available
as container is a base platform for building and running various Node.js 10
applications and frameworks. Node.js is a platform built on Chrome's JavaScript
runtime for easily building fast, scalable network applications. Node.js uses
an event-driven, non-blocking I/O model that makes it lightweight and efficient,
perfect for data-intensive real-time applications that run across distributed
devices.
0
redhat.io
registry.redhat.io/rhel8/python-36
Python 3.6 available
as container is a base platform for building and running various Python 3.6
applications and frameworks. Python is an easy to learn, powerful programming
language. It has efficient high-level data structures and a simple but effective
approach to object-oriented programming.
0
redhat.io
registry.redhat.io/rhel8/perl-526
Perl 5.26 available
as container is a base platform for building and running various Perl 5.26
applications and frameworks. Perl is a high-level programming language with roots
in C, sed, awk and shell scripting. Perl is good at handling processes and files,
and is especially good at handling text.
0
...output omitted...
En la siguiente tabla, se muestran algunas otras opciones útiles para el comando podman
search:
Opciones de búsqueda de Podman útiles
Opción
Descripción
--limit <number>
Limita el número de imágenes enumeradas
por registro.
390
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Opción
Descripción
--filter <filter=value>
Filtra la salida en función de las condiciones
proporcionadas. Estos son los filtros
soportados:
• stars=<number>: mostrar solo imágenes
con al menos esta cantidad de estrellas.
• is-automated=<true|false>:
mostrar solo las imágenes creadas
automáticamente.
• is-official=<true|false>: mostrar
solo las imágenes marcadas como oficiales.
--tls-verify <true|false>
Habilita o deshabilita la validación de
certificados HTTPS para todos los registros
usados. Valor predeterminado=true
Uso de Red Hat Container Catalog
Red Hat mantiene repositorios que contienen imágenes de contenedores certificadas. Puede
acceder a una interfaz web para buscarlos en https://access.redhat.com/containers.
El uso de este repositorio proporciona a los clientes una capa de protección y confiabilidad contra
vulnerabilidades conocidas que podrían generarse por imágenes no sometidas a pruebas. El
comando estándar podman es compatible con los repositorios a los que hace referencia Red Hat
Container Catalog.
Inspección de imágenes de contenedores
Puede ver información acerca de una imagen antes de descargarla en su sistema. El comando
skopeo inspect puede inspeccionar una imagen de contenedor remota en un registro y
mostrar información sobre ella.
En el siguiente ejemplo, se inspecciona una imagen de contenedor y se devuelve información de la
imagen sin extraer la imagen al sistema local:
nota
El comando skopeo inspect puede inspeccionar diferentes formatos de imagen
de diferentes fuentes, como registros remotos o directorios locales. El mecanismo
de transporte docker:// le indica a skopeo que consulte un registro de imágenes
de contenedores.
[user@host ~]$ skopeo inspect docker://registry.redhat.io/rhel8/python-36
...output omitted...
"name": "ubi8/python-36",
"release": "107",
"summary": "Platform for building and running Python 3.6
applications",
...output omitted...
RH134-RHEL8.2-es-1-20200928
391
capítulo 13 | Ejecución de contenedores
También puede inspeccionar información de imágenes almacenadas localmente mediante el
comando podman inspect. Es posible que este comando proporcione más información que el
comando skopeo inspect.
Enumerar imágenes almacenadas localmente:
[user@host ~]$ podman images
REPOSITORY
quay.io/generic/rhel7
registry.redhat.io/rhel8/python-36
registry.redhat.io/ubi8/ubi
TAG
latest
latest
latest
IMAGE ID
1d3b6b7d01e4
e55cd9a2e0ca
a1f8c9699786
CREATED
3 weeks ago
6 weeks ago
6 weeks ago
SIZE
688 MB
811 MB
211 MB
Inspeccionar una imagen almacenada localmente y devolver información:
[user@host ~]$ podman inspect registry.redhat.io/rhel8/python-36
...output omitted...
"Config": {
"User": "1001",
"ExposedPorts": {
"8080/tcp": {}
...output omitted...
"name": "ubi8/python-36",
"release": "107",
"summary": "Platform for building and running Python 3.6
applications",
...output omitted...
Eliminación de imágenes de contenedores locales
Las imágenes de contenedores son inmutables; no cambian. Esto significa que las imágenes
antiguas no se actualizan, de modo que la actualización del software en un contenedor requiere
una nueva imagen que reemplace la anterior.
Cuando una imagen actualizada está disponible, el publicador cambia la etiqueta latest para
asociarla con la nueva imagen. Aún puede acceder a una imagen anterior si hace referencia a su
etiqueta de versión específica y puede ejecutar contenedores a partir de ella. También puede
eliminar la imagen anterior, extraer la imagen más reciente y usar solo la imagen más reciente
(actualizada) para ejecutar contenedores.
Por ejemplo, las imágenes proporcionadas por Red Hat se benefician de la larga experiencia
de Red Hat en la administración de vulnerabilidades de seguridad y defectos en Red Hat
Enterprise Linux y otros productos. El equipo de seguridad de Red Hat refuerza y controla estas
imágenes de alta calidad. Se reconstruyen cuando se descubren nuevas vulnerabilidades y pasan
por un proceso de control de calidad.
Para eliminar una imagen almacenada localmente, use el comando podman rmi.
Enumerar imágenes almacenadas localmente:
[user@host ~]$ podman images
REPOSITORY
quay.io/generic/rhel7
registry.redhat.io/rhel8/python-36
registry.redhat.io/ubi8/ubi
392
TAG
latest
latest
latest
IMAGE ID
1d3b6b7d01e4
e55cd9a2e0ca
a1f8c9699786
CREATED
3 weeks ago
6 weeks ago
6 weeks ago
SIZE
688 MB
811 MB
211 MB
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Elimine la imagen registry.redhat.io/rhel8/python-36:latest.
[user@host ~]$ podman rmi registry.redhat.io/rhel8/python-36:latest
e55cd9a2e0ca5f0f4e0249404d1abe3a69d4c6ffa5103d0512dd4263374063ad
[user@host ~]$
Enumerar las imágenes almacenadas localmente y verificar que se hayan eliminado:
[user@host ~]$ podman images
REPOSITORY
quay.io/generic/rhel7
registry.redhat.io/ubi8/ubi
TAG
latest
latest
IMAGE ID
1d3b6b7d01e4
a1f8c9699786
CREATED
3 weeks ago
6 weeks ago
SIZE
688 MB
211 MB
Referencias
Páginas del manual podman-search(1), podman-inspect(1) y skopeo(1).
Para obtener más información, consulte el capítulo Trabajo con imágenes de
contenedores en la Guía de creación, ejecución y administración de contenedores de
Red Hat Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/building_running_and_managing_containers/index#working-with-containerimages_building-running-and-managing-containers
RH134-RHEL8.2-es-1-20200928
393
capítulo 13 | Ejecución de contenedores
Ejercicio Guiado
Búsqueda y administración de imágenes
de contenedores
En este ejercicio, usará podman para recuperar, administrar y eliminar imágenes de
contenedores en su servidor.
Resultados
Deberá ser capaz de buscar, recuperar, inspeccionar y eliminar imágenes de contenedores
obtenidas de un registro de contenedores remoto y almacenadas en su servidor.
Andes De Comenzar
En la máquina workstation, ejecute el comando lab containers-managing start.
Este comando ejecuta un script de inicio para determinar si la máquina servera es
accesible en la red. Además, verifica y configura el registro de contenedores y garantiza que
la imagen de contenedor usada para este ejercicio esté almacenada allí.
[student@workstation ~]$ lab containers-managing start
Instrucciones
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Muestre el archivo de configuración del registro de contenedores y visualice los registros
configurados.
[student@servera ~]$ cat /home/student/.config/containers/registries.conf
unqualified-search-registries = ['registry.lab.example.com']
[[registry]]
location = "registry.lab.example.com"
insecure = true
blocked = false
3.
394
Busque en el registro imágenes con un nombre que comience con "ubi" mediante el
comando podman search.
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
[student@servera ~]$ podman search registry.lab.example.com/ubi
INDEX
NAME
DESCRIPTION
STARS
example.com
registry.lab.example.com/ubi7/ubi
0
example.com
registry.lab.example.com/ubi8/ubi
0
OFFICIAL
4. Inicie sesión en el registro de contenedores con el comando podman login.
[student@servera ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
5.
Use el comando skopeo inspect para ver información sobre una imagen en el registro
antes de descargarla.
El siguiente comando skopeo inspect es muy extenso y debe ingresarse como una sola
línea.
[student@servera ~]$ skopeo inspect docker://registry.lab.example.com/rhel8/
httpd-24
...output omitted...
"Config": {
"User": "1001",
"ExposedPorts": {
"8080/tcp": {},
"8443/tcp": {}
},
"Env": [
"PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/
usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"container=oci",
"SUMMARY=Platform for running Apache httpd 2.4 or building httpdbased application",
"DESCRIPTION=Apache httpd 2.4 available as container, is a
powerful, efficient, and extensible web server. Apache supports a variety
of features, many implemented as compiled modules which extend the core
functionality. These can range from server-side programming language support to
authentication schemes. Virtual hosting allows one Apache installation to serve
many different Web sites.",
"STI_SCRIPTS_URL=image:///usr/libexec/s2i",
"STI_SCRIPTS_PATH=/usr/libexec/s2i",
"APP_ROOT=/opt/app-root",
"HOME=/opt/app-root/src",
"PLATFORM=el8",
"HTTPD_VERSION=2.4",
"HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/
httpd/",
"HTTPD_APP_ROOT=/opt/app-root",
"HTTPD_CONFIGURATION_PATH=/opt/app-root/etc/httpd.d",
"HTTPD_MAIN_CONF_PATH=/etc/httpd/conf",
"HTTPD_MAIN_CONF_MODULES_D_PATH=/etc/httpd/conf.modules.d",
"HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d",
RH134-RHEL8.2-es-1-20200928
395
capítulo 13 | Ejecución de contenedores
"HTTPD_TLS_CERT_PATH=/etc/httpd/tls",
"HTTPD_VAR_RUN=/var/run/httpd",
"HTTPD_DATA_PATH=/var/www",
"HTTPD_DATA_ORIG_PATH=/var/www",
"HTTPD_LOG_PATH=/var/log/httpd"
],
"Entrypoint": [
"container-entrypoint"
],
"Cmd": [
"/usr/bin/run-httpd"
],
"WorkingDir": "/opt/app-root/src",
...output omitted...
6. Extraiga una imagen de contenedor del registro con el comando podman pull.
[student@servera ~]$ podman pull registry.lab.example.com/rhel8/httpd-24
Trying to pull registry.lab.example.com/rhel8/httpd-24...
Getting image source signatures
Copying blob 77c58f19bd6e done
Copying blob 47db82df7f3f done
Copying blob 9d20433efa0c done
Copying blob 71391dc11a78 done
Copying config 7e93f25a94 done
Writing manifest to image destination
Storing signatures
7e93f25a946892c9c175b74a0915c96469e3b4845a6da9f214fd3ec19c3d7070
7.
Use el comando podman images para ver imágenes almacenadas localmente.
[student@servera ~]$ podman images
REPOSITORY
TAG
registry.lab.example.com/rhel8/httpd-24 latest
IMAGE ID
7e93f25a9468
CREATED
4 weeks ago
SIZE
430 MB
8. Use el comando podman inspect para ver información acerca de una imagen
almacenada localmente.
[student@servera ~]$ podman inspect registry.lab.example.com/rhel8/httpd-24
...output omitted...
"Config": {
"User": "1001",
"ExposedPorts": {
"8080/tcp": {},
"8443/tcp": {}
},
"Env": [
"PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/
usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"container=oci",
"SUMMARY=Platform for running Apache httpd 2.4 or building httpdbased application",
396
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
"DESCRIPTION=Apache httpd 2.4 available as container, is a
powerful, efficient, and extensible web server. Apache supports a variety
of features, many implemented as compiled modules which extend the core
functionality. These can range from server-side programming language support to
authentication schemes. Virtual hosting allows one Apache installation to serve
many different Web sites.",
"STI_SCRIPTS_URL=image:///usr/libexec/s2i",
"STI_SCRIPTS_PATH=/usr/libexec/s2i",
"APP_ROOT=/opt/app-root",
"HOME=/opt/app-root/src",
"PLATFORM=el8",
"HTTPD_VERSION=2.4",
"HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/
httpd/",
"HTTPD_APP_ROOT=/opt/app-root",
"HTTPD_CONFIGURATION_PATH=/opt/app-root/etc/httpd.d",
"HTTPD_MAIN_CONF_PATH=/etc/httpd/conf",
"HTTPD_MAIN_CONF_MODULES_D_PATH=/etc/httpd/conf.modules.d",
"HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d",
"HTTPD_TLS_CERT_PATH=/etc/httpd/tls",
"HTTPD_VAR_RUN=/var/run/httpd",
"HTTPD_DATA_PATH=/var/www",
"HTTPD_DATA_ORIG_PATH=/var/www",
"HTTPD_LOG_PATH=/var/log/httpd"
],
"Entrypoint": [
"container-entrypoint"
],
"Cmd": [
"/usr/bin/run-httpd"
],
"WorkingDir": "/opt/app-root/src",
...output omitted...
9. Elimine una imagen almacenada localmente con el comando podman rmi.
[student@servera ~]$ podman rmi registry.lab.example.com/rhel8/httpd-24
Untagged: registry.lab.example.com/rhel8/httpd-24:latest
Deleted: 7e93...7070
10. Ejecute el comando podman images para verificar que se elimine la imagen almacenada
localmente.
[student@servera ~]$ podman images
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
11. Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
RH134-RHEL8.2-es-1-20200928
397
capítulo 13 | Ejecución de contenedores
Finalizar
En la máquina workstation, ejecute el script lab containers-managing finish para
terminar este ejercicio.
[student@workstation ~]$ lab containers-managing finish
Esto concluye el ejercicio guiado.
398
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Realización de una administración
avanzada de contenedores
Objetivos
Tras completar esta sección, deberá ser capaz de ejecutar contenedores con opciones
avanzadas, enumerar los contenedores que se ejecutan en el sistema e iniciar, detener y finalizar
contenedores.
Administración de contenedores con Podman
Puede usar Podman para ejecutar contenedores con opciones de configuración más avanzadas
y administrar contenedores en ejecución o detenidos. En esta sección, aprenderá a usar Podman
para administrar contenedores durante su ciclo de vida.
Configuración de contenedores
Usó el comando podman run para iniciar contenedores a partir de imágenes de contenedores
en otro ejercicio. Cuando ejecuta un contenedor, inicia un proceso dentro del nuevo contenedor.
El proceso podría ser una aplicación, como un servidor web o de base de datos. Es posible que
esta aplicación necesite comunicarse con otros sistemas a través de la red y, por lo tanto, puede
necesitar configuración.
Para proporcionar acceso de red al contenedor, los clientes deben conectarse a los puertos en el
host de contenedores que pasan el tráfico de red a través de los puertos en el contenedor. Para
configurar el contenedor, a menudo puede pasar al contenedor algunas variables de entorno con
parámetros personalizados en lugar de modificar la imagen de contenedor.
Mapeo de puertos de hosts de contenedores al contenedor
Cuando mapea un puerto de red en el host de contenedores a un puerto en el contenedor, el
contenedor recibe el tráfico de red enviado al puerto de red del host.
Por ejemplo, puede mapear el puerto 8000 en el host del contenedor al puerto 8080 en el
contenedor. Es posible que el contenedor esté ejecutando un proceso httpd que escucha en
el puerto 8080. Por lo tanto, el tráfico enviado al puerto del host de contenedores 8000 sería
recibido por el servidor web que se ejecuta en el contenedor.
Configure un mapeo de puertos con podman run mediante el uso de la opción -p. Toma dos
números de puerto separados por dos puntos, el puerto en el host de contenedores, seguido por
el puerto en el contenedor.
En el siguiente ejemplo, se usa la opción -d para ejecutar el contenedor en modo independiente
(como un daemon). Cuando se usa la opción -d, podman devuelve solo el ID de contenedor a la
pantalla. La opción -p 8000:8080 mapea el puerto 8000 en el host de contenedores al puerto
8080 en el contenedor. La imagen de contenedor registry.redhat.io/rhel8/httpd-24
ejecuta un servidor HTTP Apache que escucha las conexiones en el puerto 8080.
[user@host ~]$ podman run -d -p 8000:8080 registry.redhat.io/rhel8/httpd-24
4a24ee199b909cc7900f2cd73c07e6fce9bd3f53b14e6757e91368c561a8edf4
[user@host ~]$
RH134-RHEL8.2-es-1-20200928
399
capítulo 13 | Ejecución de contenedores
Puede usar el comando podman port con un nombre o ID de contenedor para enumerar
sus mapeos de puertos, o la opción -a para enumerar todos los mapeos de puertos en uso.
En el siguiente ejemplo, se enumeran todos los mapeos de puertos definidos en el host de
contenedores, y, en la salida, se muestra que el puerto 8000 en el host de contenedores se mapea
al puerto 8080/tcp en el contenedor que tiene el ID que comienza con 4a24ee199b90.
[user@host ~]$ podman port -a
4a24ee199b90
8080/tcp -> 0.0.0.0:8000
También debe asegurarse de que el firewall en su host de contenedores permita que los clientes
externos se conecten a su puerto mapeado. En el ejemplo anterior, es posible que también deba
agregar el puerto 8000/tcp a las reglas de firewall actuales en el host de contenedores:
[root@host ~]# firewall-cmd --add-port=8000/tcp
success
Importante
Un contenedor rootless no puede abrir un puerto en el host de contenedores
inferior a 1024 (un "puerto privilegiado"). Es decir, -p 80:8080 no funcionará
normalmente para un contenedor que sea ejecutado por un usuario que no sea
root. Esta es una restricción para los usuarios que no sean root en un sistema
Linux. Para mapear un puerto en el host de contenedores inferior a 1024 a un puerto
de contenedores, debe ejecutar podman como usuario root o realizar otros ajustes
en el sistema.
Puede mapear un puerto superior a 1024 en el host de contenedores a un puerto
con privilegios en el contenedor, incluso si está ejecutando un contenedor rootless.
El mapeo de -p 8080:80 funciona si el contenedor proporciona un servicio que
escucha en el puerto 80.
Paso de variables de entorno para configurar un contenedor
La configuración de un contenedor puede ser compleja porque, por lo general, no se desea
modificar la imagen de contenedor para la configuración. Sin embargo, puede pasar variables de
entorno al contenedor y el contenedor puede usar los valores de estas variables de entorno para
configurar su aplicación.
Para obtener información sobre las variables que están disponibles y sus funciones, use el
comando podman inspect para inspeccionar la imagen de contenedor. Por ejemplo, esta es una
imagen de contenedor de uno de los registros de Red Hat:
[user@host ~]$ podman inspect registry.redhat.io/rhel8/mariadb-103:1-102
[
{
...output omitted...
"Labels": {
...output omitted...
"name": "rhel8/mariadb-103",
"release": "102",
"summary": "MariaDB 10.3 SQL database server",
"url": "https://access.redhat.com/containers/#/registry.access.redhat.com/
rhel8/mariadb-103/images/1-102",
400
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
"usage": "podman run -d -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e
MYSQL_DATABASE=db -p 3306:3306 rhel8/mariadb-103",
"vcs-ref": "ab3c3f15b6180b967a312c93e82743e842a4ac7c",
"vcs-type": "git",
"vendor": "Red Hat, Inc.",
"version": "1"
},
...output omitted...
La etiqueta url apunta a una página web en Red Hat Container Catalog que documenta las
variables de entorno y otra información acerca de cómo usar la imagen de contenedor. La etiqueta
usage (uso) proporciona un ejemplo de un comando podman típico para ejecutar la imagen.
En la página provista en los documentos de etiquetas url para esta imagen, se muestra que el
contenedor usa el puerto 3306 para el servidor de la base de datos y que las siguientes variables
de entorno están disponibles para configurar el servicio de base de datos:
MYSQL_USER
Nombre de usuario para la cuenta MySQL que se creará
MYSQL_PASSWORD
Contraseña para la cuenta de usuario
MYSQL_DATABASE
Nombre de la base de datos
MYSQL_ROOT_PASSWORD
Contraseña para el usuario root (opcional)
Use el comando podman run con la opción -e para pasar variables de entorno a un proceso
dentro del contenedor. En el siguiente ejemplo, el entorno y las opciones de puerto aplican los
parámetros de configuración al contenedor.
[user@host ~]$ podman run -d --name container_name -e MYSQL_USER=user_name
-e MYSQL_PASSWORD=user_password -e MYSQL_DATABASE=database_name
-e MYSQL_ROOT_PASSWORD=mysql_root_password -p 3306:3306
registry.redhat.io/rhel8/mariadb-103:1-102
abcb42ef2ff1b85a50e3cd9bc15877ef823979c8166d0076ce5ebc5ea19c0815
La opción --name asigna un nombre de su elección al contenedor, lo que facilita la identificación
de un contenedor específico. Si no asigna un nombre a su contenedor, podman asignará un
nombre seleccionado de forma aleatoria.
Administración de contenedores
Crear e iniciar un contenedor es solo el primer paso del ciclo de vida del contenedor. Este ciclo
de vida también incluye detener, reiniciar o eliminar el contenedor. Los usuarios también pueden
examinar el estado y los metadatos del contenedor para fines de depuración, actualización o
informes.
El comando podman ps muestra los contenedores que se están ejecutando:
RH134-RHEL8.2-es-1-20200928
401
capítulo 13 | Ejecución de contenedores
[user@host ~]$ podman ps
CONTAINER ID
IMAGE
89dd9b6354ba
registry.redhat.io/rhel8/mariadb-103:1-102
COMMAND
run-mysqld
CREATED
10 minutes ago
NAMES
my-database
STATUS
Up 10 seconds
PORTS
0.0.0.0:3306->3306/tcp
A cada contenedor, cuando se crea, se le asigna un ID de contenedor hexadecimal único. El ID
del contenedor no está relacionado con el ID de la imagen.
La imagen de contenedor que se usó para iniciar el contenedor.
El comando que se ejecutó cuando se inició el contenedor.
La fecha y la hora en que se inició.
Tiempo de actividad total del contenedor, si aún se está ejecutando, o tiempo desde que se
finalizó.
Los puertos que expuso el contenedor o los reenvíos de puertos, si se configuraron.
Nombre del contenedor.
De forma predeterminada, Podman no descarta los contenedores detenidos de inmediato.
Podman conserva los sistemas de archivos locales y otros estados para facilitar el análisis post
mortem, a menos que reinicie el contenedor. Si inicia un contenedor con la opción --rm con
podman run, el contenedor se eliminará automáticamente cuando salga.
El comando podman ps -a enumera todos los contenedores, incluidos los detenidos:
[user@host ~]$ podman ps -a
CONTAINER ID
IMAGE
30b743973e98
registry.redhat.io/rhel8/httpd-24:1-105
COMMAND
/bin/bash
CREATED
17 minutes ago
NAMES
my-httpd
STATUS
PORTS
Exited (0) 18 minutes ago 80/tcp
nota
Al crear contenedores, podman se cancela si el nombre del contenedor ya está en
uso, incluso si el contenedor está en estado stopped (detenido). Esta protección
evita que los nombres de contenedores estén duplicados.
El comando podman stop detiene correctamente un contenedor que se está ejecutando.
El comando stop envía una señal SIGTERM para finalizar un contenedor en ejecución. Si
el contenedor no se detiene después de un período de gracia (10 segundos de manera
predeterminada), Podman envía una señal de SIGKILL.
[user@host ~]$ podman stop my-httpd-container
77d4b7b8ed1fd57449163bcb0b78d205e70d2314273263ab941c0c371ad56412
Importante
Si un contenedor que se detiene usa una imagen de contenedor, la imagen no se
puede eliminar con podman rmi ni podman image rm, a menos que incluya la
opción -f, que eliminará todos los contenedores que usan la imagen en primer
lugar.
402
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
El comando podman rm elimina un contenedor del host. El contenedor debe detenerse, a menos
que incluya la opción -f, que también elimina los contenedores en ejecución. El comando podman
rm -a elimina todos los contenedores detenidos del host. Se imprimen los ID de contenedor de
cualquier contenedor que se elimine.
[user@host ~]$ podman rm my-database
abcb42ef2ff1b85a50e3cd9bc15877ef823979c8166d0076ce5ebc5ea19c0815
El comando podman restart reinicia un contenedor detenido. El comando crea un nuevo
contenedor con el mismo ID de contenedor que el contenedor detenido y vuelve a usar su estado
y el sistema de archivos.
[user@host ~]$ podman restart my-httpd-container
77d4b7b8ed1fd57449163bcb0b78d205e70d2314273263ab941c0c371ad56412
El comando podman kill envía señales de UNIX al proceso principal del contenedor. Estas son
las mismas señales usadas por el comando kill.
Esto puede ser útil si el proceso principal en el contenedor puede realizar acciones cuando recibe
ciertas señales o para solucionar problemas. Si no se especifica ninguna señal, podman kill
envía la señal SIGKILL y finaliza el proceso principal y el contenedor.
[user@host ~]$ podman kill my-httpd-container
77d4b7b8ed1fd57449163bcb0b78d205e70d2314273263ab941c0c371ad56412
Especifica la señal con la opción -s:
[user@host ~]$ podman kill -s SIGKILL my-httpd-container
77d4b7b8ed1fd57449163bcb0b78d205e70d2314273263ab941c0c371ad56412
Cualquier señal de UNIX puede enviarse al proceso principal. El comando podman kill acepta el
número o el nombre de la señal.
nota
El comando podman stop intenta ejecutar el comando stop para la imagen
de contenedor, pero si el comando falla, envía señales SIGTERM y SIGKILL al
contenedor.
Ejecución de comandos en un contenedor
Cuando se inicia un contenedor, ejecuta el comando de punto de entrada (entrypoint) de
la imagen de contenedor. Sin embargo, es posible que deba ejecutar otros comandos para
administrar el contenedor que se está ejecutando. Por ejemplo, es posible que desee conectar una
shell interactiva a un contenedor en ejecución para inspeccionarlo o depurarlo.
El comando podman exec inicia un proceso adicional dentro de un contenedor que ya está en
ejecución:
RH134-RHEL8.2-es-1-20200928
403
capítulo 13 | Ejecución de contenedores
[user@host ~]$ podman exec 7ed6e671a600 cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[user@host ~]$
En el ejemplo anterior, se usa el ID de contenedor para ejecutar el comando. A menudo, es más
fácil usar el nombre del contenedor en su lugar. Si desea conectar una shell interactiva, debe
especificar las opciones -i y -t para abrir una sesión interactiva y asignar un pseudoterminal para
la shell.
[user@host ~]$ podman exec -it my_webserver /bin/bash
bash-4.4$ hostname
7ed6e671a600
bash-4.4$ exit
[user@host ~]$
Podman recuerda el último contenedor usado en cualquier comando. Puede usar la opción -l
para reemplazar el ID o nombre de contenedor anteriores en el comando Podman más reciente.
[user@host ~]$ podman exec -l cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
[user@host ~]$
Referencias
Páginas del manual podman-run(1), podman-exec(1), podman-ps(1), podmanstop(1), podman-restart(1), podman-kill(1), podman-rm(1), podman-rmi(1),
podman-images(1) y podman-port(1)
Para obtener más información, consulte el capítulo Trabajo con contenedores
en la Guía de creación, ejecución y administración de contenedores de Red Hat
Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/
html-single/building_running_and_managing_containers/index#working-withcontainers_building-running-and-managing-containers
404
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Ejercicio Guiado
Realización de una administración
avanzada de contenedores
En este ejercicio, usará podman para administrar contenedores que se ejecutan en su
servidor.
Resultados
Deberá ser capaz de crear y administrar contenedores.
Andes De Comenzar
En la máquina workstation, ejecute el comando lab containers-advanced start.
Este comando ejecuta un script de inicio para determinar si la máquina servera es
accesible en la red. Además, instala el cliente MariaDB en servera, verifica y configura el
registro de contenedores y garantiza que las imágenes de contenedores usadas para este
ejercicio estén almacenada allí.
[student@workstation ~]$ lab containers-advanced start
Instrucciones
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Inicie sesión en el registro de contenedores con el comando podman login.
[student@servera ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
3.
Cree un contenedor de base de datos MariaDB independiente según la especificación en
los siguientes subpasos con el comando podman run. Confirme que el contenedor se esté
ejecutando y publica los puertos correctos.
nota
Si inicia un contenedor con podman run y aún no ha extraído la imagen de
contenedor especificada de registry.lab.example.com, el comando enviará
automáticamente la imagen solicitada del registro.
RH134-RHEL8.2-es-1-20200928
405
capítulo 13 | Ejecución de contenedores
3.1.
Cree un contenedor independiente denominado mydb que use la imagen de
contenedor registry.lab.example.com/rhel8/mariadb-103:1-102. Su
comando debe publicar el puerto 3306 en el contenedor en el mismo número de
puerto en el host. También debe declarar los siguientes valores de variables para
configurar el contenedor con el usuario de la base de datos user1 (contraseña
redhat), establecer la contraseña de root en redhat y crear los items de la base
de datos.
Variable
Valor
MYSQL_USER
usuario1
MYSQL_PASSWORD
redhat
MYSQL_DATABASE
items
MYSQL_ROOT_PASSWORD
redhat
El siguiente comando podman run es muy extenso y debe ingresarse como una
sola línea. Para su conveniencia, puede copiar y pegar el siguiente comando desde el
archivo /tmp/containers-advanced/create-mydb.txt.
[student@servera ~]$ podman run -d --name mydb -e MYSQL_USER=user1 -e
MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=items -e MYSQL_ROOT_PASSWORD=redhat -p
3306:3306 registry.lab.example.com/rhel8/mariadb-103:1-102
Trying to pull registry.lab.example.com/rhel8/mariadb-103:1-102...
Getting image source signatures
Copying blob 71391dc11a78 done
Copying blob 77c58f19bd6e done
Copying blob 67b9f0b530d9 done
Copying blob 47db82df7f3f done
Copying config 11a47e0fbe done
Writing manifest to image destination
Storing signatures
abcb42ef2ff1b85a50e3cd9bc15877ef823979c8166d0076ce5ebc5ea19c0815
[student@servera ~]$
3.2.
Confirme que el contenedor se esté ejecutando y publica los puertos correctos con el
comando podman ps.
[student@servera ~]$ podman ps
CONTAINER ID IMAGE
abcb42ef2ff1 registry.lab.example.com/rhel8/mariadb-103:1-102
CREATED
STATUS
PORTS
bout a minute ago Up About a minute ago 0.0.0.0:3306->3306/tcp
COMMAND
run-mysqld
NAMES
mydb
4. Conéctese a la base de datos MariaDB en su contenedor mydb mediante el comando
mysql. Confirme que existe la base de datos items y, luego, salga de MariaDB y detenga
el contenedor mydb.
4.1.
406
Conéctese a MariaDB con el usuario user1 con redhat como contraseña.
Especifique el puerto 3306 y la dirección IP de localhost, que es su host de
contenedores (127.0.0.1).
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
[student@servera ~]$ mysql -u user1 -p --port=3306 --host=127.0.0.1
Enter password: redhat
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.17-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
4.2.
Confirme que existe la base de datos items y, luego, salga de MariaDB.
MariaDB [(none)]> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| items
|
| test
|
+--------------------+
3 rows in set (0.001 sec)
MariaDB [(none)]> exit
Bye
[student@servera ~]$
4.3. Detenga el contenedor mydb: Su ID de contenedor será diferente del siguiente:
[student@servera ~]$ podman stop mydb
abcb42ef2ff1b85a50e3cd9bc15877ef823979c8166d0076ce5ebc5ea19c0815
5.
Cree un contenedor que ejecute un servidor HTTP Apache que también inicie una shell de
Bash interactiva en el contenedor. Ejecute un comando mediante la shell del contenedor y,
luego, salga del contenedor y verifique que este ya no se esté ejecutando.
5.1.
Cree un contenedor denominado myweb que ejecute un servidor HTTP Apache
2.4 que también inicie una shell interactiva en el contenedor. Use la imagen de
contenedor registry.lab.example.com/rhel8/httpd-24:1-105. El
siguiente comando podman run es muy extenso y debe ingresarse como una sola
línea.
[student@servera ~]$ podman run --name myweb -it registry.lab.example.com/rhel8/
httpd-24:1-105 /bin/bash
...output omitted...
bash-4.4$
5.2.
En el prompt de la shell interactiva en el contenedor, ejecute el comando cat/etc/
redhat-release para mostrar el contenido del archivo /etc/redhat-release
en el contenedor. Salga del contenedor.
RH134-RHEL8.2-es-1-20200928
407
capítulo 13 | Ejecución de contenedores
bash-4.4$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
bash-4.4$ exit
exit
[student@servera ~]$
5.3.
Verifique que el contenedor myweb ya no se esté ejecutando.
[student@servera ~]$ podman ps -a
CONTAINER ID IMAGE
6d95bd8559de registry.lab.example.com/rhel8/httpd-24:1-105
abcb42ef2ff1 registry.lab.example.com/rhel8/mariadb-103:1-102
CREATED
About a minute ago
9 minutes ago
STATUS
Exited (0) 25 seconds ago
Exited (0) 3 minutes ago
COMMAND
/bin/bash
run-mysqld
PORTS
0.0.0.0:3306->3306/tcp
NAMES
myweb
mydb
6. Cree un contenedor de servidor web HTTPD independiente denominado mysecondweb.
Conéctese al contenedor con su nombre y, luego, muestre el nombre y la versión del kernel.
Conéctese al contenedor por segunda vez, pero use la opción (-l) para recordar el ID
del contenedor del comando anterior y mostrar el promedio de carga del sistema. Deje el
contenedor en ejecución.
6.1.
Cree un contenedor independiente con el nombre mysecondweb. Su salida será
diferente del ejemplo de este ejercicio.
[student@servera ~]$ podman run --name mysecondweb -d registry.lab.example.com/
rhel8/httpd-24:1-105
9e8f14e74fd4d82d95a765b8aaaeb1e93b9fe63c54c2cc805509017315460028
6.2.
Conéctese al contenedor mysecondweb para mostrar el nombre de Linux y la versión
del kernel con el comando podman exec.
[student@servera ~]$ podman exec mysecondweb uname -sr
Linux 4.18.0-193.el8.x86_64
6.3.
Ejecute el comando podman exec nuevamente, esta vez con la opción (-l) a fin de
usar el ID del contenedor del comando anterior para mostrar el promedio de carga del
sistema.
[student@servera ~]$ podman exec -l uptime
00:14:53 up 2:15, 0 users, load average: 0.08, 0.02, 0.01
6.4. Deje el contenedor mysecondweb en ejecución.
7.
Cree un contenedor con el nombre myquickweb que enumere el contenido del archivo /
etc/redhat-release y, luego, salga y elimine automáticamente el contenedor. Confirme
que el contenedor se haya eliminado.
7.1.
408
Cree el contenedor.
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
El siguiente comando podman run es muy extenso y debe ingresarse como una sola
línea.
[student@servera ~]$ podman run --name myquickweb --rm registry.lab.example.com/
rhel8/httpd-24:1-105 cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
7.2.
Use el comando podman ps -a para confirmar que se haya eliminado el contenedor
myquickweb. El contenedor myquickweb no debería mostrarse en la salida del
comando podman ps -a.
[student@servera ~]$ podman ps -a | grep myquickweb
[student@servera ~]$
8. Realizar operaciones masivas en contenedores existentes con el comando podman:
• Muestre todos los contenedores en ejecución o detenidos.
• Asegúrese de que se hayan detenido todos los contenedores existentes.
• Elimine todos los contenedores.
• Verifique que se hayan eliminado todos los contenedores.
8.1.
Muestre todos los contenedores en ejecución o detenidos. Su salida puede variar.
[student@servera ~]$ podman ps -a
CONTAINER ID IMAGE
9e8f14e74fd4 registry.lab.example.com/rhel8/httpd-24:1-105
6d95bd8559de registry.lab.example.com/rhel8/httpd-24:1-105
abcb42ef2ff1 registry.lab.example.com/rhel8/mariadb-103:1-102
CREATED
STATUS
5 minutes ago Up 5 minutes ago
18 minutes ago Exited (0) 17 minutes ago
26 minutes ago Exited (0) 19 minutes ago
8.2.
COMMAND
/usr/bin/run-http
/bin/bash
run-mysqld
PORTS
NAMES
mysecondweb
myweb
0.0.0.0:3306->3306/tcp mydb
Detenga todos los contenedores.
[student@servera ~]$ podman stop -a
6d95bd8559de81486b0876663e72260a8108d83aef5c5d660cb8f133f439c025
abcb42ef2ff1b85a50e3cd9bc15877ef823979c8166d0076ce5ebc5ea19c0815
9e8f14e74fd4d82d95a765b8aaaeb1e93b9fe63c54c2cc805509017315460028
8.3.
Elimine todos los contenedores.
[student@servera ~]$ podman rm -a
6d95bd8559de81486b0876663e72260a8108d83aef5c5d660cb8f133f439c025
9e8f14e74fd4d82d95a765b8aaaeb1e93b9fe63c54c2cc805509017315460028
abcb42ef2ff1b85a50e3cd9bc15877ef823979c8166d0076ce5ebc5ea19c0815
8.4. Verifique que se hayan eliminado todos los contenedores.
RH134-RHEL8.2-es-1-20200928
409
capítulo 13 | Ejecución de contenedores
[student@servera ~]$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED
[student@servera ~]$
STATUS
PORTS
NAMES
9. Salga de servera.
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En la máquina workstation, ejecute el script lab containers-advanced finish para
terminar este ejercicio.
[student@workstation ~]$ lab containers-advanced finish
Esto concluye el ejercicio guiado.
410
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Conexión de almacenamiento persistente
a un contenedor
Objetivos
Tras completar esta sección, deberá ser capaz de proporcionar almacenamiento persistente para
los datos del contenedor mediante el montaje de un directorio desde el host del contenedor
dentro de un contenedor en ejecución.
Preparación de las ubicaciones de almacenamiento
persistente
El almacenamiento en el contenedor es efímero, lo que significa que su contenido se pierde
después de eliminar el contenedor.
Si debe conservar los datos usados por su contenedor cuando este se reinicie, el almacenamiento
efímero no es suficiente. Por ejemplo, su contenedor podría ser un servidor de base de datos,
y usted debe conservar la base de datos cuando se reinicia el contenedor. Para soportar
aplicaciones contenedorizadas con este requisito, debe proporcionar el contenedor con
almacenamiento persistente.
Provisión de almacenamiento persistente desde el
host de contenedores
Una manera fácil de proporcionar un contenedor con almacenamiento persistente es usar un
directorio en el host de contenedores para almacenar los datos. Podman puede montar un
directorio del host dentro de un contenedor en ejecución. La aplicación contenedorizada ve los
directorios del host como parte del almacenamiento del contenedor, al igual que las aplicaciones
normales ven el volumen de red remoto como si fuera parte del sistema de archivos del host.
Cuando elimina el contenedor, el sistema no recupera el contenido del directorio del host de
contenedores. Un contenedor nuevo puede montarlo para acceder a los datos.
Por ejemplo, un contenedor de bases de datos puede usar un directorio de host para almacenar
archivos de la base de datos. Si este contenedor de bases de datos falla, puede crear un nuevo
contenedor con el mismo directorio de host y mantener los datos de la base de datos disponibles
para las aplicaciones de clientes. No es importante para el contenedor de base de datos dónde
se almacena este directorio de hosts. Puede residir en cualquier lugar, desde una partición de un
disco duro local hasta un sistema de archivos remoto en red.
Preparación del directorio del host
Cuando prepara un directorio de hosts, debe configurarlo para que los procesos dentro del
contenedor puedan acceder a él. La configuración del directorio incluye lo siguiente:
• Configuración de la propiedad y los permisos del directorio.
• Configuración del contexto de SELinux correspondiente.
La cuenta de usuario que usa la aplicación dentro del contenedor debe tener acceso al directorio
de hosts. Asegúrese de establecer los permisos correctos en el directorio de hosts para que la
aplicación pueda acceder a él.
RH134-RHEL8.2-es-1-20200928
411
capítulo 13 | Ejecución de contenedores
Debe configurar también el directorio de host con el tipo de contexto de SELinux correcto, que
es container_file_t. Podman usa el tipo de contexto de SELinux container_file_t
para controlar a qué archivos del sistema host puede acceder el contenedor. Si hay un error
de seguridad en la capa de contenedores, la protección adicional impide que la aplicación que
se ejecuta dentro del contenedor acceda a los archivos de host que se encuentran fuera del
directorio compartido. Esta protección es particularmente importante para las aplicaciones que se
ejecutan con el usuario root dentro de un contenedor raíz.
Sin esta protección adicional de SELinux, estas aplicaciones tendrían acceso root a todos los
archivos en el sistema host y podrían comprometer tanto el host como los otros contenedores.
Podman puede establecer por usted el contexto de SELinux del directorio de host cuando inicia el
contenedor.
Montaje de un volumen
Después de crear y configurar el directorio del host, el siguiente paso es montar este directorio
en un contenedor. Para montar un directorio de host en un contenedor, agregue la opción -volume (o -v) al comando podman run y especifique la ruta del directorio de host y la ruta de
almacenamiento del contenedor, separadas por dos puntos:
--volume host_dir:container_dir:Z
Con la opción Z, Podman aplica automáticamente el tipo de contexto container_file_t
SELinux al directorio de host.
Por ejemplo, para usar el directorio de host /home/user/dbfiles para los archivos de la base
de datos MariaDB como /var/lib/mysql dentro del contenedor, use el siguiente comando. El
siguiente comando podman run es muy extenso y debe ingresarse como una sola línea.
[user@host ~]$ podman run -d --name mydb -v /home/user/dbfiles:/var/lib/mysql:Z
-e MYSQL_USER=user -e MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=inventory
registry.redhat.io/rhel8/mariadb-103:1-102
Referencias
Página del manual podman-run(1)
Gestión de espacios de nombres de usuario y SELinux en contenedores
rootless
https://www.redhat.com/sysadmin/user-namespaces-selinux-rootless-containers
412
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Ejercicio Guiado
Conexión de almacenamiento persistente
a un contenedor
En este ejercicio, creará un contenedor que acceda al contenido web en el almacenamiento
persistente provisto por el host del contenedor.
Resultados
Deberá ser capaz de implementar un contenedor con un almacenamiento persistente.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab containers-storage start.
Este comando ejecuta un script de inicio que determina si la máquina servera es accesible
en la red. También instala las herramientas de contenedor en servera.
[student@workstation ~]$ lab containers-storage start
Instrucciones
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Cree el directorio /home/student/webcontent/html/ y, luego, cree una página de
prueba index.html. Usará este directorio como almacenamiento persistente cuando
implemente un contenedor de servidor web.
2.1.
Cree el directorio ~/webcontent/html/.
[student@servera ~]$ mkdir -p ~/webcontent/html/
[student@servera ~]$
2.2.
Cree el archivo index.html y agregue contenido.
[student@servera ~]$ echo "Hello World" > ~/webcontent/html/index.html
[student@servera ~]$
RH134-RHEL8.2-es-1-20200928
413
capítulo 13 | Ejecución de contenedores
2.3.
Confirme que todos tengan acceso al directorio y al archivo index.html.
El contenedor usa un usuario sin privilegios que debe poder leer el archivo
index.html.
[student@servera ~]$ ls -ld webcontent/html/
drwxrwxr-x. 2 student student 24 Aug 28 04:56 webcontent/html/
[student@servera ~]$ ls -l webcontent/html/index.html
-rw-rw-r--. 1 student student 12 Aug 28 04:56 webcontent/html/index.html
3.
Cree una instancia del contenedor del servidor HTTP Apache con almacenamiento
persistente.
3.1.
Inicie sesión en el registro registry.lab.example.com con el usuario admin y
redhat321 como contraseña.
[student@servera ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
3.2.
Cree una instancia del contenedor independiente con el nombre myweb. Redirija el
puerto 8080 en el host local al puerto del contenedor 8080. Monte el directorio
~/webcontent desde el host en el directorio /var/www del contenedor.
Agregue el sufijo :Z a la opción de montaje de volumen para indicar al comando
podman que vuelva a etiquetar el directorio y su contenido. Use la imagen
registry.lab.example.com/rhel8/httpd-24:1-98. El siguiente comando
podman run es muy extenso y debe ingresarse como una sola línea.
[student@servera ~]$ podman run -d --name myweb -p 8080:8080 -v ~/webcontent:/var/
www:Z registry.lab.example.com/rhel8/httpd-24:1-98
...output omitted...
3.3.
Ejecute el comando podman ps para confirmar que el contenedor se esté
ejecutando y, luego, use el comando curl para acceder al contenido web en el
puerto 8080.
[student@servera ~]$ podman ps
CONTAINER ID IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
2f4844b376b7 registry.lab.example.com/rhel8/httpd-24:1-98
/usr/bin/run-http...
About a minute ago Up About a minute ago 0.0.0.0:8080->8080/tcp myweb
[student@servera ~]$ curl http://localhost:8080/
Hello World
4. En el paso anterior, usó la etiqueta 1-98 para seleccionar una versión específica de
la imagen httpd-24. Hay una versión más reciente de esa imagen en el registro
del aula. Use el comando skopeo inspect para obtener los detalles de la imagen
registry.lab.example.com/rhel8/httpd-24 y recuperar la etiqueta para esa
versión. El siguiente comando skopeo inspect es muy extenso y debe ingresarse como
una sola línea.
414
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
[student@servera ~]$ skopeo inspect docker://registry.lab.example.com/rhel8/
httpd-24
{
"Name": "registry.lab.example.com/rhel8/httpd-24",
"Digest": "sha256:bafa...a12a",
"RepoTags": [
"1-98",
"1-104",
"1-105",
"latest"
],
...output omitted...
En la sección RepoTags, observe que hay una versión más reciente con la etiqueta 1-105.
5.
Detenga y elimine el contenedor myweb y, luego, inicie un nuevo contenedor con la etiqueta
de imagen 1-105. Confirme que el contenido web en el almacenamiento persistente no ha
cambiado.
5.1.
Detenga y, luego, elimine el contenedor.
[student@servera user]$ podman stop myweb
2f4844b376b78f8f7021fe3a4c077ae52fdc1caa6d877e84106ab783d78e1e1a
[student@servera user]$ podman rm myweb
2f4844b376b78f8f7021fe3a4c077ae52fdc1caa6d877e84106ab783d78e1e1a
5.2.
Vuelva a ejecutar el comando podman run que usó en un paso anterior para iniciar
el contenedor myweb, pero reemplace la etiqueta de imagen 1-98 con 1-105. El
siguiente comando podman run es muy extenso y debe ingresarse como una sola
línea.
[student@servera ~]$ podman run -d --name myweb -p 8080:8080 -v ~/webcontent:/var/
www:Z registry.lab.example.com/rhel8/httpd-24:1-105
...output omitted...
5.3.
Ejecute el comando podman ps para verificar que el contenedor se esté ejecutando.
Use el comando curl para confirmar que se mantengan los datos del volumen
persistente, incluso si inició un nuevo contenedor.
[student@servera ~]$ podman ps
CONTAINER ID IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
a648c286c653 registry.lab.example.com/rhel8/httpd-24:1-105 /usr/bin/run-http...
About a minute ago Up About a minute ago 0.0.0.0:8080->8080/tcp myweb
[student@servera ~]$ curl http://localhost:8080/
Hello World
5.4.
Salga de servera.
RH134-RHEL8.2-es-1-20200928
415
capítulo 13 | Ejecución de contenedores
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En la máquina workstation, ejecute el script lab containers-storage finish para
terminar este ejercicio.
[student@workstation ~]$ lab containers-storage finish
Esto concluye el ejercicio guiado.
416
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Administración de contenedores como
servicios
Objetivos
Tras completar esta sección, deberá ser capaz de iniciar, detener y verificar el estado de un
contenedor como un servicio systemd.
Inicio automático de contenedores con el servidor
Cuando implementa servicios, como bases de datos o servidores web como contenedores,
normalmente desea que esos contenedores se inicien automáticamente con el servidor.
Al crear archivos de unidad de usuario systemd para sus contenedores rootless, puede
administrarlos con comandos systemctl, de manera similar a los servicios normales. Al habilitar
esos servicios, se asegura de que los contenedores asociados se inicien cuando se inicia la
máquina host. Si su contenedor se ejecuta en modo "rootless", puede administrar estos servicios
desde una cuenta de usuario sin privilegios para aumentar la seguridad.
Para un escalamiento y una orquestación más sofisticados de muchas aplicaciones y servicios
basados en contenedores, puede usar una plataforma de orquestación empresarial basada en
Kubernetes, como Red Hat OpenShift Container Platform.
Ejecución de servicios systemd como usuario normal
Además de administrar servicios del sistema, systemd también puede administrar servicios de
usuario. Con los servicios de usuario systemd, los usuarios pueden crear archivos de unidad para
sus propios servicios y administrar esos servicios con comandos systemctl, sin necesidad de
acceso root.
Cuando habilita un servicio de usuario con un usuario que no es root, ese servicio se inicia
automáticamente cuando abre su primera sesión a través de consolas gráficas o de texto o
mediante SSH. El servicio se detiene cuando cierra la última sesión. Este comportamiento difiere
de los servicios del sistema, que se inician cuando el sistema se inicia y se detienen cuando el
sistema se apaga.
Sin embargo, puede cambiar este comportamiento predeterminado y obligar a los servicios
habilitados a que se inicien con el servidor y se detengan durante el apagado mediante la
ejecución del comando loginctl enable-linger. Para revertir la operación, use el comando
loginctl disable-linger. Para ver el estado actual, use el comando loginctl showuser username con su nombre de usuario como parámetro.
[user@host ~]$ loginctl enable-linger
[user@host ~]$ loginctl show-user user
...output omitted...
Linger=yes
[user@host ~]$ loginctl disable-linger
[user@host ~]$ loginctl show-user user
...output omitted...
Linger=no
RH134-RHEL8.2-es-1-20200928
417
capítulo 13 | Ejecución de contenedores
Creación y administración de servicios de usuario de systemd
Para definir los servicios de usuario systemd, cree el directorio ~/.config/systemd/user/
para almacenar sus archivos de unidad. La sintaxis de esos archivos es la misma que la de los
archivos de unidad del sistema. Para obtener más detalles, consulte las páginas del manual
systemd.unit(5) y systemd.service(5).
Para controlar los nuevos servicios de usuario, use el comando systemctl con la opción -user. En el siguiente ejemplo, se enumeran los archivos de unidad en el directorio ~/.config/
systemd/user/, se obliga a systemd a volver a cargar su configuración y, luego, se habilita y se
inicia el servicio de usuario myapp.
[user@host ~]$ ls ~/.config/systemd/user/
myapp.service
[user@host ~]$ systemctl --user daemon-reload
[user@host ~]$ systemctl --user enable myapp.service
[user@host ~]$ systemctl --user start myapp.service
nota
Para usar los comandos systemctl --user, debe iniciar sesión en la consola o
directamente a través de SSH. Los comandos sudo o su no funcionan.
El comando systemctl interactúa con un proceso systemd --user por usuario.
El sistema solo inicia ese proceso cuando el usuario inicia sesión por primera vez
desde la consola o SSH.
En la siguiente tabla, se resumen las diferencias entre los servicios de usuario y del sistema
systemd.
Comparación de servicios de usuario y del sistema
Almacenamiento
de archivos
de unidad
personalizados
Servicios del
sistema
/etc/systemd/system/unit.service
Servicios de
usuario
~/.config/systemd/user/unit.service
Recarga de
archivos de
unidad
Servicios del
sistema
# systemctl daemon-reload
Servicios de
usuario
$ systemctl --user daemon-reload
Inicio y
detención de un
servicio
Servicios del
sistema
Servicios de
usuario
418
# systemctl start UNIT
# systemctl stop UNIT
$ systemctl --user start UNIT
$ systemctl --user stop UNIT
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Inicio de un
servicio cuando
se inicia la
máquina
Servicios del
sistema
Servicios de
usuario
# systemctl enable UNIT
$ loginctl enable-linger
$ systemctl --user enable UNIT
Administración de contenedores con servicios
systemd
Si tiene un único host de contenedores que ejecuta una pequeña cantidad de contenedores,
puede configurar los archivos de unidad systemd basados en el usuario y configurarlos
para que inicien los contenedores automáticamente con el servidor. Este es un enfoque
simple, especialmente útil para implementaciones muy básicas y pequeñas que no necesitan
escalamiento. En el caso de instalaciones de producción más prácticas, considere la posibilidad de
usar Red Hat OpenShift Container Platform, que se analizará brevemente al final de esta sección.
Creación de una cuenta de usuario dedicada para ejecutar
contenedores
Para simplificar la administración de los contenedores rootless, puede crear una cuenta de usuario
dedicada que use para todos los contenedores. De esta manera, puede administrarlos desde una
sola cuenta de usuario.
nota
La cuenta que crea para agrupar todos los contenedores debe ser una cuenta
de usuario normal. Cuando crea una cuenta con useradd, el comando reserva
un rango de ID de usuario para los contenedores del usuario en el archivo /etc/
subuid. Sin embargo, cuando crea una cuenta del sistema con la opción --system
(o -r) de useradd, el comando no reserva un rango. Como consecuencia, no
puede iniciar contenedores rootless con cuentas del sistema.
Creación del archivo de unidad systemd
Desde un contenedor existente, el comando podman puede generar el archivo de unidad
systemd para usted. En el siguiente ejemplo, se usa el comando podman generate systemd
para crear el archivo de unidad para el contenedor web existente:
[user@host ~]$ cd ~/.config/systemd/user/
[user@host user]$ podman generate systemd --name web --files --new
/home/user/.config/systemd/user/container-web.service
El comando podman generate systemd usa un contenedor como modelo para crear el archivo
de configuración. Después de que se crea el archivo, debe eliminar el contenedor, ya que systemd
espera que el contenedor esté ausente inicialmente.
El comando podman generate systemd acepta las siguientes opciones:
--name container_name
La opción --name especifica el nombre de un contenedor existente para usar como modelo
para generar el archivo de unidad. Podman también usa ese nombre para compilar el nombre
del archivo de unidad: container-container_name.service.
RH134-RHEL8.2-es-1-20200928
419
capítulo 13 | Ejecución de contenedores
--files
La opción --files le indica a Podman que genere el archivo de unidad en el directorio
actual. Sin la opción, Podman muestra el archivo en su salida estándar.
--new
La opción --new le indica a Podman que configure el servicio systemd para crear el
contenedor cuando se inicie el servicio y eliminarlo cuando este se detenga. En este modo,
el contenedor es efímero y, por lo general, necesita almacenamiento persistente para
conservar los datos. Sin la opción --new, Podman configura el servicio para iniciar y detener
el contenedor existente sin eliminarlo.
En el siguiente ejemplo, se muestran las directivas start (iniciar) y stop (detener) en el archivo de
unidad cuando ejecuta el comando podman generate systemd con la opción --new:
[user@host ~]$ podman run -d --name web -v /home/user/www:/var/www:Z
registry.redhat.io/rhel8/httpd-24:1-105
[user@host ~]$ podman generate systemd --name web --new
...output omitted...
ExecStart=/usr/bin/podman run --conmon-pidfile %t/%n-pid --cidfile %t/%ncid --cgroups=no-conmon -d --name web -v /home/user/webcontent:/var/www:Z
registry.redhat.io/rhel8/httpd-24:1-105
ExecStop=/usr/bin/podman stop --ignore --cidfile %t/%n-cid -t 10
ExecStopPost=/usr/bin/podman rm --ignore -f --cidfile %t/%n-cid
...output omitted...
En start (iniciar), systemd ejecuta el comando podman run para crear y, luego, iniciar un
nuevo contenedor.
En stop (detener), systemd ejecuta el comando podman stop para detener el contenedor.
Después de que systemd haya detenido el contenedor, systemd lo elimina mediante el
comando podman rm.
En cambio, en el siguiente ejemplo, se muestran las directivas start (iniciar) y stop (detener)
cuando ejecuta el comando podman generate systemd sin la opción --new:
[user@host ~]$ podman run -d --name web -v /home/user/www:/var/www:Z
registry.redhat.io/rhel8/httpd-24:1-105
[user@host ~]$ podman generate systemd --name web
...output omitted...
ExecStart=/usr/bin/podman start web
ExecStop=/usr/bin/podman stop -t 10 web
...output omitted...
En start (iniciar), systemd ejecuta el comando podman start para iniciar el contenedor
existente.
En stop (detener), systemd ejecuta el comando podman stop para detener el contenedor.
Tenga en cuenta que systemd no elimina el contenedor.
Inicio y detención de contenedores con systemd
Use el comando systemctl para controlar sus contenedores.
• Inicio del contenedor:
[user@host ~]$ systemctl --user start container-web
420
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
• Detención del contenedor:
[user@host ~]$ systemctl --user stop container-web
• Obtención del estado del contenedor:
[user@host ~]$ systemctl --user status container-web
Importante
Los contenedores administrados con el comando systemctl son controlados por
systemd. systemd monitorea el estado de los contenedores y los reinicia si fallan.
No use el comando podman para iniciar o detener estos contenedores. Si lo hace,
puede interferir con el monitoreo de systemd.
Configuración de contenedores para que se inicien cuando se
inicia la máquina host
De forma predeterminada, los servicios de usuario systemd se inician cuando un usuario abre la
primera sesión y se detienen cuando el usuario cierra la última sesión. Para que los servicios de
usuario se inicien automáticamente con el servidor, ejecute el comando loginctl enablelinger:
[user@host ~]$ loginctl enable-linger
Para permitir que un contenedor se inicie cuando se inicia la máquina host, use el comando
systemctl:
[user@host ~]$ systemctl --user enable container-web
Para deshabilitar el inicio de un contenedor cuando se inicia la máquina host, use el comando
systemctl con la opción disable:
[user@host ~]$ systemctl --user disable container-web
Administración de contenedores que se ejecutan como
root con systemd
También puede configurar los contenedores que desea ejecutar como root para que se
administren con los archivos de unidad systemd. Una de las ventajas de este enfoque es que
puede configurar esos archivos de unidad para que funcionen exactamente igual que los archivos
de unidad normales del sistema, en lugar de como un usuario en particular.
El procedimiento para configurarlos es similar al que se detalló anteriormente para los
contenedores rootless, excepto:
• No es necesario que configure un usuario dedicado.
• Cuando cree el archivo de unidad con podman generate systemd, hágalo en el directorio /
etc/systemd/system, en lugar de en el directorio ~/.config/systemd/user.
RH134-RHEL8.2-es-1-20200928
421
capítulo 13 | Ejecución de contenedores
• Cuando configure el servicio del contenedor con systemctl, no usará la opción --user.
• No es necesario que ejecute loginctl enable-linger como root.
Para obtener una demostración, consulte el video de YouTube del canal de videos de Red Hat que
se detalla en las referencias al final de esta sección.
Orquestación de contenedores a escala
En este capítulo, aprendió a configurar y administrar manualmente contenedores desde la línea
de comandos en un solo host, y a configurar systemd para que los contenedores se inicien
automáticamente con el servidor. Esto es útil a una escala muy pequeña y para obtener más
información sobre los contenedores.
Sin embargo, en la práctica, la mayoría de las implementaciones empresariales necesita más. La
introducción a este capítulo menciona que Kubernetes generalmente se usa para administrar
aplicaciones complejas que constan de múltiples contenedores que cooperan entre sí. Red Hat
OpenShift es una plataforma de Kubernetes que agrega una interfaz de usuario basada en la Web,
monitoreo, la capacidad de ejecutar contenedores en cualquier lugar de un clúster de hosts de
contenedores, escalamiento automático, registro y auditoría, entre otras cosas.
La explicación de estas herramientas no está incluida en el alcance de este curso. Si desea
obtener más información, la capacitación de Red Hat Training ofrece otros cursos, que comienzan
con el curso de descripción general técnica gratuito Implementación de aplicaciones en
contenedores (DO080) y continúan con Red Hat OpenShift I: contenedores y kubernetes (DO180).
Si desea más información, visite https://www.redhat.com/training.
También puede obtener más información sobre Kubernetes y Red Hat OpenShift en https://
www.openshift.com. Allí hay una cantidad de recursos disponibles, que incluyen las formas
de probar OpenShift usted mismo mediante el uso de herramientas como Contenedores de
CodeReady [https://developers.redhat.com/products/codeready-containers/overview]. Consulte
https://www.openshift.com/try para obtener más información.
Referencias
Páginas del manual loginctl(1), systemd.unit(5), systemd.service(5),
subuid(5) y podman-generate-systemd(1)
Integración de systemd mejorada con Podman 2.0
https://www.redhat.com/sysadmin/improved-systemd-podman
Administración de contenedores en Podman con archivos de unidad systemd
https://www.youtube.com/watch?v=AGkM2jGT61Y
Qué es OpenShift
https://www.openshift.com/learn/what-is-openshift
Introducción a OpenShift
https://www.openshift.com/try
Para obtener más información, consulte el capítulo Ejecución de contenedores como
servicios systemd con Podman en la Guía de creación, ejecución y administración de
contenedores de Red Hat Enterprise Linux 8 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/htmlsingle/building_running_and_managing_containers/index#using-systemd-withcontainers_building-running-and-managing-containers
422
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Ejercicio Guiado
Administración de contenedores como
servicios
En este ejercicio, configurará un contenedor que se administra como un servicio systemd
y, luego, usa los comandos systemctl para administrar ese contenedor, de modo que se
inicie automáticamente cuando se inicia la máquina host.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear archivos de unidad systemd para administrar contenedores.
• Iniciar y detener contenedores con comandos systemctl.
• Configurar cuentas de usuario para que los servicios de usuario systemd se inicien
cuando se inicia la máquina host.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab containers-services start.
Este comando ejecuta un script de inicio que determina si la máquina servera es accesible
en la red. También instala las herramientas de contenedor en servera.
[student@workstation ~]$ lab containers-services start
Instrucciones
1.
Use el comando ssh para iniciar sesión en servera como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que no se
necesita una contraseña.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
2.
Use el comando sudo -i para cambiar al usuario root. La contraseña del usuario
student es student.
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#
3.
Cree una cuenta de usuario con el nombre contsvc con redhat como contraseña.
Configure la cuenta para acceder al registro de imágenes de contenedores en
RH134-RHEL8.2-es-1-20200928
423
capítulo 13 | Ejecución de contenedores
registry.lab.example.com. Usará esta cuenta para ejecutar contenedores como
servicios systemd, en lugar de usar su cuenta de usuario normal.
3.1.
Use el comando useradd para crear la cuenta y, luego, use el comando passwd para
establecer la contraseña en redhat.
[root@servera ~]# useradd contsvc
[root@servera ~]# passwd contsvc
Changing password for user contsvc.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.
3.2.
Para administrar los servicios de usuario systemd con la cuenta contsvc, debe
iniciar sesión directamente como el usuario contsvc. No puede usar los comandos
su y sudo.
Cierre sesión en servera y, luego, use el comando ssh para iniciar sesión con el
usuario contsvc. Los sistemas se configuran a fin de que usen claves SSH para la
autenticación, por lo que no se necesita una contraseña.
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$ ssh contsvc@servera
...output omitted...
[contsvc@servera ~]$
3.3.
Cree el directorio ~/.config/containers/.
[contsvc@servera ~]$ mkdir -p ~/.config/containers/
[contsvc@servera ~]$
3.4.
El script lab preparó el archivo registries.conf en el directorio /tmp/
containers-services/. Copie ese archivo en ~/.config/containers/. El
siguiente comando cp es muy extenso y debe ingresarse en una sola línea.
[contsvc@servera ~]$ cp /tmp/containers-services/registries.conf ~/.config/
containers/
3.5.
Para confirmar que puede acceder al registro registry.lab.example.com,
ejecute el comando podman search ubi como una prueba. Si todo funciona según
lo previsto, el comando debe enumerar algunas imágenes.
[contsvc@servera ~]$ podman search ubi
INDEX
NAME
DESCRIPTION
example.com
registry.lab.example.com/ubi8/ubi
example.com
registry.lab.example.com/ubi7/ubi
424
STARS
0
0
OFFICIAL
AUTOMATED
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
4. Cree el directorio /home/contsvc/webcontent/html/ y, luego, cree una página de
prueba index.html. Usará ese directorio como almacenamiento persistente cuando
implemente un contenedor de servidor web.
4.1.
Cree el directorio ~/webcontent/html/.
[contsvc@servera ~]$ mkdir -p ~/webcontent/html/
[contsvc@servera ~]$
4.2.
Cree el archivo index.html y agregue contenido.
[contsvc@servera ~]$ echo "Hello World" > ~/webcontent/html/index.html
[contsvc@servera ~]$
4.3. Confirme que todos tengan acceso al directorio y al archivo index.html.
El contenedor usa un usuario sin privilegios que debe poder leer el archivo
index.html.
[contsvc@servera ~]$ ls -ld webcontent/html/
drwxrwxr-x. 2 contsvc contsvc 24 Aug 28 04:56 webcontent/html/
[contsvc@servera ~]$ ls -l webcontent/html/index.html
-rw-rw-r--. 1 contsvc contsvc 12 Aug 28 04:56 webcontent/html/index.html
5.
Cree un contenedor independiente con el nombre myweb. Redirija el puerto
8080 en el host local al puerto del contenedor 8080. Monte el directorio ~/
webcontent desde el host en el directorio /var/www del contenedor. Use la imagen
registry.lab.example.com/rhel8/httpd-24:1-105.
5.1.
Inicie sesión en el registro registry.lab.example.com con el usuario admin y
redhat321 como contraseña.
[contsvc@servera ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
5.2.
Cree el contenedor. Puede copiar y pegar el siguiente comando desde el archivo /
tmp/containers-services/start-container.txt. El siguiente comando
podman run es muy extenso y debe ingresarse como una sola línea.
[contsvc@servera ~]$ podman run -d --name myweb -p 8080:8080 -v ~/webcontent:/var/
www:Z registry.lab.example.com/rhel8/httpd-24:1-105
...output omitted...
5.3.
Para verificar su trabajo, use el comando curl para acceder al contenido web en el
puerto 8080.
[contsvc@servera ~]$ curl http://localhost:8080/
Hello World
RH134-RHEL8.2-es-1-20200928
425
capítulo 13 | Ejecución de contenedores
6. Cree el archivo de unidad systemd para administrar el contenedor myweb con comandos
systemctl. Cuando finalice, detenga y, luego, elimine el contenedor myweb. Systemd
administra el contenedor y no espera que el contenedor exista inicialmente.
6.1.
Cree el directorio ~/.config/systemd/user/.
[contsvc@servera ~]$ mkdir -p ~/.config/systemd/user/
[contsvc@servera ~]$
6.2.
Cambie al directorio ~/.config/systemd/user/ y, luego, ejecute el comando
podman generate systemd para crear el archivo de unidad para el contenedor
myweb. Use la opción --new para que systemd cree un nuevo contenedor al iniciar el
servicio y elimine el contenedor al detenerlo.
[contsvc@servera ~]$ cd ~/.config/systemd/user
[contsvc@servera user]$ podman generate systemd --name myweb --files --new
/home/contsvc/.config/systemd/user/container-myweb.service
6.3.
Detenga y, luego, elimine el contenedor myweb.
[contsvc@servera user]$ podman stop myweb
2f4844b376b78f8f7021fe3a4c077ae52fdc1caa6d877e84106ab783d78e1e1a
[contsvc@servera user]$ podman rm myweb
2f4844b376b78f8f7021fe3a4c077ae52fdc1caa6d877e84106ab783d78e1e1a
7.
Fuerce systemd para que vuelva a cargar su configuración y, luego, habilite e inicie su
nuevo servicio de usuario container-myweb. Para probar su trabajo, detenga y, luego,
inicie el servicio y controle el estado del contenedor con los comandos curl y podman ps.
7.1.
Use el comando systemctl --user daemon-reload para systemd a fin de
tener en cuenta el nuevo archivo de unidad.
[contsvc@servera user]$ systemctl --user daemon-reload
[contsvc@servera user]$
7.2.
Habilite e inicie el servicio container-myweb.
[contsvc@servera user]$ systemctl --user enable --now container-myweb
Created symlink /home/contsvc/.config/systemd/user/multi-user.target.wants/
container-myweb.service → /home/contsvc/.config/systemd/user/containermyweb.service.
Created symlink /home/contsvc/.config/systemd/user/default.target.wants/containermyweb.service → /home/contsvc/.config/systemd/user/container-myweb.service.
7.3.
426
Use los comandos podman ps y curl para verificar que el contenedor se esté
ejecutando.
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
[contsvc@servera user]$ podman ps
CONTAINER ID IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
a648c286c653 registry.lab.example.com/rhel8/httpd-24:1-105 /usr/bin/run-http...
About a minute ago Up About a minute ago 0.0.0.0:8080->8080/tcp myweb
[contsvc@servera user]$ curl http://localhost:8080/
Hello World
Tome nota del ID del contenedor. Usará esta información para confirmar que
systemd crea un nuevo contenedor cuando reinicia el servicio.
7.4.
Detenga el servicio container-myweb y, luego, confirme que el contenedor ya
no existe. Cuando detenga el servicio, systemd se detiene y, luego, elimina el
contenedor.
[contsvc@servera user]$ systemctl --user stop container-myweb
[contsvc@servera user]$ podman ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7.5.
Inicie el servicio container-myweb y, luego, confirme que el contenedor se esté
ejecutando.
[contsvc@servera user]$ systemctl --user start container-myweb
[contsvc@servera user]$ podman ps
CONTAINER ID IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
6f5148b27726 registry.lab.example.com/rhel8/httpd-24:1-105 /usr/bin/run-http...
5 seconds ago Up 4 seconds ago 0.0.0.0:8080->8080/tcp myweb
Observe que el ID del contenedor ha cambiado. Cuando inicia el servicio, systemd
crea un nuevo contenedor.
8. Para garantizar que los servicios de usuario para el usuario contsvc se inicien con el
servidor, ejecute el comando loginctl enable-linger. Cuando finalice, reinicie
servera.
8.1.
Ejecute el comando loginctl enable-linger.
[contsvc@servera user]$ loginctl enable-linger
[contsvc@servera user]$
8.2.
Confirme que la opción Linger esté establecida para el usuario contsvc.
[contsvc@servera user]$ loginctl show-user contsvc
...output omitted...
Linger=yes
8.3.
Cambie al usuario root y, luego, use el comando systemctl reboot para reiniciar
servera.
RH134-RHEL8.2-es-1-20200928
427
capítulo 13 | Ejecución de contenedores
[contsvc@servera user]$ su Password: redhat
Last login: Fri Aug 28 07:43:40 EDT 2020 on pts/0
[root@servera ~]# systemctl reboot
Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$
9. Espere a que se reinicie la máquina servera, que tarda algunos minutos y, luego, inicie
sesión en servera con el usuario contsvc. Confirme que systemd inició el contenedor
myweb y que el contenido web esté disponible.
9.1.
En workstation, use el comando ssh para iniciar sesión en servera con el usuario
contsvc.
[student@workstation ~]$ ssh contsvc@servera
...output omitted...
[contsvc@servera ~]$
9.2.
Use el comando podman ps para confirmar que el contenedor se esté ejecutando.
[contsvc@servera ~]$ podman ps
CONTAINER ID IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
1d174e79f08b registry.lab.example.com/rhel8/httpd-24:1-105 /usr/bin/run-http...
3 minutes ago Up 3 minutes ago 0.0.0.0:8080->8080/tcp myweb
9.3.
Use el comando curl para acceder al contenido web.
[contsvc@servera ~]$ curl http://localhost:8080/
Hello World
9.4. Salga de servera.
[contsvc@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$
Finalizar
En la máquina workstation, ejecute el script lab containers-services finish para
terminar este ejercicio.
[student@workstation ~]$ lab containers-services finish
Esto concluye el ejercicio guiado.
428
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Trabajo de laboratorio
Ejecución de contenedores
En este trabajo de laboratorio, configurará un contenedor en su servidor que proporciona
un servicio de base de datos MariaDB, almacena su base de datos en un almacenamiento
persistente y se inicia automáticamente con el servidor.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear contenedores independientes.
• Configurar el redireccionamiento de puertos y el almacenamiento persistente.
• Configurar systemd para que los contenedores se inicien cuando se inicia la máquina
host.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab containers-review start.
Este comando ejecuta un script de inicio que determina si la máquina serverb es accesible
en la red. También instala el cliente MariaDB y crea la cuenta de usuario podsvc que usa
para ejecutar un contenedor MariaDB.
[student@workstation ~]$ lab containers-review start
Instrucciones
1.
En serverb, instale las herramientas del contenedor. Inicie sesión en serverb con el
usuario student y, luego, use el comando sudo. La contraseña del usuario student es
student.
2.
El registro de imágenes de contenedores en registry.lab.example.com almacena la
imagen rhel8/mariadb-103 con varias etiquetas. En serverb, con el usuario podsvc,
enumere esas etiquetas y tome nota de la etiqueta con el número de versión más bajo. Usará
esa etiqueta de imagen para iniciar un contenedor más adelante en este ejercicio.
La contraseña para el usuario podsvc es redhat. Para consultar el registro
registry.lab.example.com, use la cuenta admin con la contraseña redhat321.
3.
En serverb, con el usuario podsvc, cree el directorio /home/podsvc/db_data. Prepare
el directorio para que los contenedores tengan acceso de lectura/escritura. Usará este
directorio para el almacenamiento persistente.
4.
En serverb, con el usuario podsvc, cree un contenedor de MariaDB independiente
denominado inventorydb. Use la imagen rhel8/mariadb-103 del registro
registry.lab.example.com y especifique la etiqueta con el número de versión más bajo
de esa imagen, que encontró en un paso anterior. Mapee el puerto 3306 en el contenedor al
RH134-RHEL8.2-es-1-20200928
429
capítulo 13 | Ejecución de contenedores
puerto 13306 en el host. Monte el directorio /home/podsvc/db_data en el host como /
var/lib/mysql/data en el contenedor. Declare los siguientes valores de variables:
Variable
Valor
MYSQL_USER
operator1
MYSQL_PASSWORD
redhat
MYSQL_DATABASE
inventory
MYSQL_ROOT_PASSWORD
redhat
Puede copiar y pegar estos parámetros del archivo /home/podsvc/containersreview/variables en serverb.
Para confirmar que la base de datos de MariaDB se esté ejecutando, use el comando mysql.
Puede encontrar este comando en el script /home/podsvc/containers-review/
testdb.sh. También puede ejecutar directamente el script para probar la base de datos.
En serverb, con el usuario podsvc, configure systemd para que el contenedor
inventorydb se inicie automáticamente con el servidor.
5.
Evaluación
Inicie sesión con el usuario student en la máquina workstation y use el comando lab para
calificar su trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un
resultado satisfactorio.
[student@workstation ~]$ lab containers-review grade
Finalizar
En la máquina workstation, ejecute el script lab containers-services finish para
terminar este ejercicio.
[student@workstation ~]$ lab containers-review finish
Esto concluye el trabajo de laboratorio.
430
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
Solución
Ejecución de contenedores
En este trabajo de laboratorio, configurará un contenedor en su servidor que proporciona
un servicio de base de datos MariaDB, almacena su base de datos en un almacenamiento
persistente y se inicia automáticamente con el servidor.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear contenedores independientes.
• Configurar el redireccionamiento de puertos y el almacenamiento persistente.
• Configurar systemd para que los contenedores se inicien cuando se inicia la máquina
host.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab containers-review start.
Este comando ejecuta un script de inicio que determina si la máquina serverb es accesible
en la red. También instala el cliente MariaDB y crea la cuenta de usuario podsvc que usa
para ejecutar un contenedor MariaDB.
[student@workstation ~]$ lab containers-review start
Instrucciones
1.
En serverb, instale las herramientas del contenedor. Inicie sesión en serverb con el
usuario student y, luego, use el comando sudo. La contraseña del usuario student es
student.
1.1.
Use el comando ssh para iniciar sesión en serverb como el usuario student. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que
no se necesita una contraseña.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
1.2.
Instale el módulo de Yum container-tools con el comando yum.
RH134-RHEL8.2-es-1-20200928
431
capítulo 13 | Ejecución de contenedores
[student@serverb ~]$ sudo yum module install container-tools
[sudo] password for student: student
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
El registro de imágenes de contenedores en registry.lab.example.com almacena la
imagen rhel8/mariadb-103 con varias etiquetas. En serverb, con el usuario podsvc,
enumere esas etiquetas y tome nota de la etiqueta con el número de versión más bajo. Usará
esa etiqueta de imagen para iniciar un contenedor más adelante en este ejercicio.
2.
La contraseña para el usuario podsvc es redhat. Para consultar el registro
registry.lab.example.com, use la cuenta admin con la contraseña redhat321.
2.1.
Salga de la cuenta student en serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
2.2.
Use el comando ssh para iniciar sesión en serverb con el usuario podsvc. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que
no se necesita una contraseña.
[student@workstation ~]$ ssh podsvc@serverb
...output omitted...
[podsvc@serverb ~]$
2.3.
Inicie sesión en el registro de contenedores con el comando podman login.
[podsvc@serverb ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
2.4.
Use el comando skopeo inspect para ver información acerca de la imagen
registry.lab.example.com/rhel8/mariadb-103. El siguiente comando
skopeo inspect es muy extenso y debe ingresarse como una sola línea.
[podsvc@serverb ~]$ skopeo inspect docker://registry.lab.example.com/rhel8/
mariadb-103
{
"Name": "registry.lab.example.com/rhel8/mariadb-103",
"Digest": "sha256:a95b...4816",
"RepoTags": [
"1-86",
"1-102",
"latest"
],
...output omitted...
432
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
La etiqueta con el número más bajo es 1-86.
3.
En serverb, con el usuario podsvc, cree el directorio /home/podsvc/db_data. Prepare
el directorio para que los contenedores tengan acceso de lectura/escritura. Usará este
directorio para el almacenamiento persistente.
3.1.
Cree el directorio /home/podsvc/db_data.
[podsvc@serverb ~]$ mkdir /home/podsvc/db_data
[podsvc@serverb ~]$
3.2.
Establezca el modo de acceso del directorio en 777 para que todos tengan acceso de
lectura/escritura.
[podsvc@serverb ~]$ chmod 777 /home/podsvc/db_data
[podsvc@serverb ~]$
4.
En serverb, con el usuario podsvc, cree un contenedor de MariaDB independiente
denominado inventorydb. Use la imagen rhel8/mariadb-103 del registro
registry.lab.example.com y especifique la etiqueta con el número de versión más bajo
de esa imagen, que encontró en un paso anterior. Mapee el puerto 3306 en el contenedor al
puerto 13306 en el host. Monte el directorio /home/podsvc/db_data en el host como /
var/lib/mysql/data en el contenedor. Declare los siguientes valores de variables:
Variable
Valor
MYSQL_USER
operator1
MYSQL_PASSWORD
redhat
MYSQL_DATABASE
inventory
MYSQL_ROOT_PASSWORD
redhat
Puede copiar y pegar estos parámetros del archivo /home/podsvc/containersreview/variables en serverb.
Para confirmar que la base de datos de MariaDB se esté ejecutando, use el comando mysql.
Puede encontrar este comando en el script /home/podsvc/containers-review/
testdb.sh. También puede ejecutar directamente el script para probar la base de datos.
4.1.
Use el comando podman run para crear el contenedor. El siguiente comando podman
run es muy extenso y debe ingresarse como una sola línea.
[podsvc@serverb ~]$ podman run -d --name inventorydb -p 13306:3306 -v /
home/podsvc/db_data:/var/lib/mysql/data:Z -e MYSQL_USER=operator1 -e
MYSQL_PASSWORD=redhat -e MYSQL_DATABASE=inventory -e MYSQL_ROOT_PASSWORD=redhat
registry.lab.example.com/rhel8/mariadb-103:1-86
...output omitted...
4.2.
Confirme que la base de datos se esté ejecutando.
RH134-RHEL8.2-es-1-20200928
433
capítulo 13 | Ejecución de contenedores
[podsvc@serverb ~]$ ~/containers-review/testdb.sh
Testing the access to the database...
SUCCESS
En serverb, con el usuario podsvc, configure systemd para que el contenedor
inventorydb se inicie automáticamente con el servidor.
5.
5.1.
Si usó sudo o su para iniciar sesión con el usuario podsvc, salga de serverb y use
el comando ssh para iniciar sesión directamente en serverb con el usuario podsvc.
Recuerde que systemd requiere que el usuario abra una sesión directa desde la
consola o a través de SSH.
[student@workstation ~]$ ssh podsvc@serverb
...output omitted...
[podsvc@serverb ~]$
5.2.
Cree el directorio ~/.config/systemd/user/.
[podsvc@serverb ~]$ mkdir -p ~/.config/systemd/user/
[podsvc@serverb ~]$
5.3.
Use el comando podman generate systemd para crear el archivo de unidad
systemd desde el contenedor en ejecución.
[podsvc@serverb ~]$ cd ~/.config/systemd/user/
[podsvc@serverb user]$ podman generate systemd --name inventorydb --files --new
/home/podsvc/.config/systemd/user/container-inventorydb.service
5.4.
Detenga y, luego, elimine el contenedor inventorydb.
[podsvc@serverb user]$ podman stop inventorydb
0d28f0e0a4118ff019691e34afe09b4d28ee526079b58d19f03b324bd04fd545
[podsvc@serverb user]$ podman rm inventorydb
0d28f0e0a4118ff019691e34afe09b4d28ee526079b58d19f03b324bd04fd545
5.5.
Indique a systemd que vuelva a cargar su configuración y, luego, habilite e inicie el
servicio container-inventorydb.
[podsvc@serverb user]$ systemctl --user daemon-reload
[podsvc@serverb user]$ systemctl --user enable --now container-inventorydb.service
Created symlink /home/podsvc/.config/systemd/user/multi-user.target.wants/
container-inventorydb.service → /home/podsvc/.config/systemd/user/containerinventorydb.service.
Created symlink /home/podsvc/.config/systemd/user/default.target.wants/
container-inventorydb.service → /home/podsvc/.config/systemd/user/containerinventorydb.service.
5.6.
434
Confirme que el contenedor se esté ejecutando.
RH134-RHEL8.2-es-1-20200928
capítulo 13 | Ejecución de contenedores
[podsvc@serverb user]$ ~/containers-review/testdb.sh
Testing the access to the database...
SUCCESS
[podsvc@serverb user]$ podman ps
CONTAINER ID IMAGE
COMMAND
STATUS
PORTS
NAMES
3ab24e7f000d registry.lab.example.com/rhel8/mariadb-103:1-86 run-mysqld
seconds ago Up 46 seconds ago 0.0.0.0:13306->3306/tcp inventorydb
5.7.
CREATED
47
Ejecute el comando loginctl enable-linger para que los servicios de usuario se
inicien automáticamente cuando se inicia el servidor.
[podsvc@serverb ~]$ loginctl enable-linger
[podsvc@serverb ~]$
5.8.
Salga de serverb.
[podsvc@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
Evaluación
Inicie sesión con el usuario student en la máquina workstation y use el comando lab para
calificar su trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un
resultado satisfactorio.
[student@workstation ~]$ lab containers-review grade
Finalizar
En la máquina workstation, ejecute el script lab containers-services finish para
terminar este ejercicio.
[student@workstation ~]$ lab containers-review finish
Esto concluye el trabajo de laboratorio.
RH134-RHEL8.2-es-1-20200928
435
capítulo 13 | Ejecución de contenedores
Resumen
En este capítulo, aprendió lo siguiente:
• Los contenedores proporcionan una manera ligera de distribuir y ejecutar una aplicación y sus
dependencias que pueden entrar en conflicto con el software instalado en el host.
• Los contenedores se ejecutan desde imágenes de contenedores que puede descargar desde un
registro de contenedor o que puede crear usted mismo.
• Podman, provisto por Red Hat Enterprise Linux, ejecuta y administra directamente los
contenedores y las imágenes de contenedores en un único host.
• Los contenedores se pueden ejecutar como root o como contenedores rootless sin privilegios
para una mayor seguridad.
• Puede mapear puertos de red en el host del contenedor para pasar el tráfico a los servicios que
se ejecutan en sus contenedores. También puede usar variables de entorno para configurar el
software en contenedores.
• El almacenamiento de contenedores es temporal, pero puede conectar almacenamiento
persistente a un contenedor con el contenido de un directorio en el host del contenedor, por
ejemplo.
• Puede configurar systemd para ejecutar automáticamente contenedores cuando se inicia el
sistema.
436
RH134-RHEL8.2-es-1-20200928
capítulo 14
Revisión completa
Meta
Revisar tareas de Administración de sistemas Red
Hat II .
Objetivos
•
Revisar tareas de Administración de sistemas
Red Hat II .
Secciones
•
Revisión exhaustiva
Trabajo de
laboratorio
•
Trabajo de laboratorio: Corrección de
problemas de arranque y mantenimiento de
servidores
•
Trabajo de laboratorio: Configuración y
administración de sistemas de archivos y
almacenamiento
•
Trabajo de laboratorio: Configuración y
administración de seguridad del servidor
•
Trabajo de laboratorio: Ejecución de
contenedores
RH134-RHEL8.2-es-1-20200928
437
capítulo 14 | Revisión completa
Revisión completa
Objetivos
Tras finalizar esta sección, usted debería haber revisado y actualizado las habilidades y los
conocimientos aprendidos en Administración de sistemas Red Hat II .
Revisión de Administración de sistemas Red Hat II
Antes de comenzar la revisión completa de este curso, debe sentirse cómodo con los temas que
se abordaron en cada capítulo.
Puede consultar las secciones anteriores del libro de texto para realizar lecturas complementarias.
Capítulo 1, Mejora de la productividad con la línea de
comandos
Ejecutar los comandos de manera más eficiente mediante el uso de las funciones avanzadas
de la shell de Bash, los scripts de shell y diversas utilidades proporcionadas por Red Hat
Enterprise Linux.
• Automatizar las secuencias de comandos escribiendo un simple script de shell.
• Ejecutar comandos con eficiencia con listas de ítems en un script o desde la línea de comandos
usando bucles for y condicionales.
• Encontrar texto que coincida con un patrón en los archivos de registro y la salida del comando
con el comando grep y las expresiones regulares.
Capítulo 2, Programación de tareas futuras
Programar tareas para que se ejecuten automáticamente en el futuro
• Configurar un comando que se ejecute una vez en algún momento en el futuro
• Programar comandos para que se ejecuten en un horario de repetición usando el archivo
crontab de un usuario
• Programar comandos para que se ejecuten en un horario de repetición usando el archivo
crontab del sistema y directorios
• Habilitar y deshabilitar los temporizadores de systemd y configurar un temporizador que
administre archivos temporales
Capítulo 3, Ajuste del rendimiento del sistema
Mejorar el rendimiento del sistema estableciendo parámetros de ajuste y ajustando la prioridad de
programación de los procesos.
• Optimizar el rendimiento del sistema seleccionando un perfil de ajuste administrado por el
daemon tuned.
• Dar o quitar la prioridad a procesos específicos con los comandos nice y renice.
438
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
Capítulo 4, Control de acceso a archivos con ACL
Interpretar y establecer listas de control de acceso (ACL) en archivos para manejar situaciones
que requieren permisos complejos de acceso de usuarios y grupos.
• Describir los casos de uso de las ACL, identificar los archivos que tienen ACL configuradas e
interpretar el efecto de esas ACL.
• Establecer y eliminar las ACL de los archivos y definir las ACL predeterminadas establecidas
automáticamente por un directorio en los archivos recién creados.
Capítulo 5, Administración de seguridad de SELinux
Proteger y administrar la seguridad de un servidor con SELinux.
• Describir cómo SELinux protege los recursos y cómo seleccionar el modo de cumplimiento.
• Configurar el contexto de SELinux de un archivo para controlar la interacción de los procesos
con ese archivo.
• Configurar los booleanos de SELinux para permitir cambios en la política de tiempo de
ejecución para diferentes necesidades de acceso.
• Investigar los mensajes de registro de SELinux y solucionar los problemas de denegación de
AVC de SELinux.
Capítulo 6, Administración de almacenamiento básico
Crear y administrar dispositivos de almacenamiento, particiones, sistemas de archivos y espacios
de intercambio desde la línea de comandos.
• Crear particiones de almacenamiento, formatearlas con sistemas de archivos y montarlas para
su uso.
• Crear y administrar espacios de intercambio para complementar la memoria física.
Capítulo 7, Administración de volúmenes lógicos
Crear y administrar volúmenes lógicos que contengan sistemas de archivos y espacios de
intercambio desde la línea de comandos.
• Crear y administrar volúmenes lógicos desde dispositivos de almacenamiento y formatearlos
con sistemas de archivos o prepararlos con espacios de intercambio.
• Agregar y eliminar el almacenamiento asignado a los grupos de volúmenes y ampliar en forma
no destructiva el tamaño de un volumen lógico formateado con un sistema de archivos.
Capítulo 8, Implementación de funciones avanzadas de
almacenamiento
Administrar el almacenamiento con el sistema de administración de almacenamiento local Stratis y
usar los volúmenes VDO para optimizar el espacio de almacenamiento en uso.
• Administrar múltiples capas de almacenamiento con la administración de almacenamiento local
Stratis.
• Optimizar el uso del espacio de almacenamiento con VDO para comprimir y desduplicar datos
en dispositivos de almacenamiento.
RH134-RHEL8.2-es-1-20200928
439
capítulo 14 | Revisión completa
Capítulo 9, Acceso al almacenamiento conectado a la red
Acceder al almacenamiento conectado a la red con el protocolo NFS.
• Montar, usar y desmontar una exportación de NFS desde la línea de comandos y en el momento
del arranque.
• Configurar el servicio de automontaje con mapas directos e indirectos para montar
automáticamente un sistema de archivos NFS a pedido, y desmontarlo cuando ya no esté en
uso.
Capítulo 10, Control del proceso de arranque
Administrar el proceso de arranque para controlar los servicios ofrecidos y para solucionar y
reparar problemas.
• Describir el proceso de arranque de Red Hat Enterprise Linux, configurar el objetivo
predeterminado que se usa en el arranque e iniciar un sistema con un objetivo no
predeterminado.
• Iniciar sesión en un sistema y cambiar la contraseña de root cuando la actual se haya perdido.
• Reparar manualmente la configuración del sistema de archivos o problemas de daños que
detengan el proceso de arranque.
Capítulo 11, Administración de la seguridad de redes
Controlar las conexiones de red a los servicios mediante el firewall del sistema y las reglas de
SELinux.
• Aceptar o rechazar las conexiones de red a los servicios del sistema por medio de las reglas de
firewalld.
• Controlar si los servicios de red pueden usar puertos de red específicos al administrar las
etiquetas de puertos de SELinux.
Capítulo 12, Instalación de Red Hat Enterprise Linux
Instalar Red Hat Enterprise Linux en servidores y máquinas virtuales.
• Instalar Red Hat Enterprise Linux en un servidor.
• Automatizar el proceso de instalación por medio de Kickstart.
• Instalar una máquina virtual en su servidor Red Hat Enterprise Linux por medio de Cockpit.
Capítulo 13, Ejecución de contenedores
Obtener, ejecutar y administrar servicios livianos simples como contenedores en un único servidor
de Red Hat Enterprise Linux.
• Explicar qué es un contenedor y cómo usar uno para administrar e implementar aplicaciones con
dependencias y librerías de software que necesitan las aplicaciones para funcionar.
• Instalar las herramientas de administración de contenedores y ejecutar un contenedor rootless
simple.
• Buscar, recuperar, inspeccionar y administrar imágenes de contenedores obtenidas de un
registro de contenedores remoto y almacenadas en su servidor.
440
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
• Ejecutar contenedores con opciones avanzadas, enumerar los contenedores que se ejecutan en
el sistema e iniciar, detener y finalizar contenedores.
• Proporcionar almacenamiento persistente para los datos del contenedor mediante el montaje
de un directorio desde el host del contenedor dentro de un contenedor en ejecución.
• Iniciar, detener y verificar el estado de un contenedor como un servicio systemd.
RH134-RHEL8.2-es-1-20200928
441
capítulo 14 | Revisión completa
Trabajo de laboratorio
Corrección de problemas de arranque y
mantenimiento de servidores
En esta revisión, solucionará y reparará los problemas de arranque y actualizará el destino
predeterminado del sistema. También programará tareas para que se ejecuten en un
cronograma recurrente como un usuario normal.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Diagnosticar problemas y recuperar el sistema del modo de emergencia.
• Cambiar el destino predeterminado de graphical.target a multi-user.target.
• Programar trabajos recurrentes para que se ejecuten como un usuario normal.
Andes De Comenzar
Copie los archivos o el trabajo que desee preservar en otros sistemas antes de restablecer el
sistema. Restablezca los sistemas workstation, servera y serverb ahora.
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab rhcsa-compreview1 start para iniciar la revisión
completa. Este script crea los archivos necesarios para configurar el entorno correctamente.
[student@workstation ~]$ lab rhcsa-compreview1 start
Instrucciones
Realice las siguientes tareas en serverb para completar la revisión completa:
• En workstation, ejecute el comando lab rhcsa-compreview1 break1. Este script
de ruptura hace que el proceso de arranque falle en serverb. También establece un
tiempo de espera más largo en el menú GRUB2 para ayudar a interrumpir el proceso de
arranque, y reinicia serverb.
Solucione la causa posible y repare el error de arranque. La corrección debe garantizar
que serverb se reinicie sin intervención. Use la contraseña redhat para el superusuario
cuando sea necesario.
• En workstation, ejecute el comando lab rhcsa-compreview1 break2. Este script
de ruptura hace que el destino predeterminado cambie del destino multi-user al
destino graphical en serverb. También establece un tiempo de espera más largo para
el menú GRUB2 para ayudar a interrumpir el proceso de arranque, y reinicia serverb.
En serverb, corrija el destino predeterminado para usar el destino multi-user.
La configuración de destino predeterminada debe persistir después del reinicio sin
intervención manual.
Use el comando sudo como el usuario student con student como contraseña para
ejecutar comandos con privilegios.
442
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
• Programe un trabajo recurrente con el usuario student que ejecuta el script /home/
student/backup-home.sh por hora entre las 7 p. m. y las 9 p. m. todos los días excepto
sábados y domingos.
Descargue el script de copia de seguridad de http://materials.example.com/
labs/backup-home.sh. El script de copia de seguridad backup-home.sh realiza
una copia de seguridad del directorio /home/student de serverb a servera en el
directorio /home/student/serverb-backup. Use el script backup-home.sh para
programar el trabajo recurrente como el usuario student en serverb.
• Reinicie el sistema y espere a que el arranque finalice antes de calificar.
Evaluación
En workstation, ejecute el script lab rhcsa-compreview1 grade para confirmar que ha
realizado correctamente este ejercicio. Corrija los errores informados y vuelva a ejecutar el script
hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview1 grade
Finalizar
En workstation, ejecute lab rhcsa-compreview1 finish para terminar este ejercicio. Este
script elimina los archivos y recursos creados durante el ejercicio para garantizar que el entorno
esté limpio.
[student@workstation ~]$ lab rhcsa-compreview1 finish
Guarde los archivos o trabajos que desee conservar en otros sistemas y, luego, restablezca
workstation, servera y serverb antes del siguiente ejercicio.
Con esto concluye la revisión completa.
RH134-RHEL8.2-es-1-20200928
443
capítulo 14 | Revisión completa
Solución
Corrección de problemas de arranque y
mantenimiento de servidores
En esta revisión, solucionará y reparará los problemas de arranque y actualizará el destino
predeterminado del sistema. También programará tareas para que se ejecuten en un
cronograma recurrente como un usuario normal.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Diagnosticar problemas y recuperar el sistema del modo de emergencia.
• Cambiar el destino predeterminado de graphical.target a multi-user.target.
• Programar trabajos recurrentes para que se ejecuten como un usuario normal.
Andes De Comenzar
Copie los archivos o el trabajo que desee preservar en otros sistemas antes de restablecer el
sistema. Restablezca los sistemas workstation, servera y serverb ahora.
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab rhcsa-compreview1 start para iniciar la revisión
completa. Este script crea los archivos necesarios para configurar el entorno correctamente.
[student@workstation ~]$ lab rhcsa-compreview1 start
Instrucciones
Realice las siguientes tareas en serverb para completar la revisión completa:
• En workstation, ejecute el comando lab rhcsa-compreview1 break1. Este script
de ruptura hace que el proceso de arranque falle en serverb. También establece un
tiempo de espera más largo en el menú GRUB2 para ayudar a interrumpir el proceso de
arranque, y reinicia serverb.
Solucione la causa posible y repare el error de arranque. La corrección debe garantizar
que serverb se reinicie sin intervención. Use la contraseña redhat para el superusuario
cuando sea necesario.
• En workstation, ejecute el comando lab rhcsa-compreview1 break2. Este script
de ruptura hace que el destino predeterminado cambie del destino multi-user al
destino graphical en serverb. También establece un tiempo de espera más largo para
el menú GRUB2 para ayudar a interrumpir el proceso de arranque, y reinicia serverb.
En serverb, corrija el destino predeterminado para usar el destino multi-user.
La configuración de destino predeterminada debe persistir después del reinicio sin
intervención manual.
Use el comando sudo como el usuario student con student como contraseña para
ejecutar comandos con privilegios.
444
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
• Programe un trabajo recurrente con el usuario student que ejecuta el script /home/
student/backup-home.sh por hora entre las 7 p. m. y las 9 p. m. todos los días excepto
sábados y domingos.
Descargue el script de copia de seguridad de http://materials.example.com/
labs/backup-home.sh. El script de copia de seguridad backup-home.sh realiza
una copia de seguridad del directorio /home/student de serverb a servera en el
directorio /home/student/serverb-backup. Use el script backup-home.sh para
programar el trabajo recurrente como el usuario student en serverb.
• Reinicie el sistema y espere a que el arranque finalice antes de calificar.
1.
En workstation, ejecute el comando lab rhcsa-compreview1 break1.
1.1.
[student@workstation ~]$ lab rhcsa-compreview1 break1
2.
Una vez que serverb se haya iniciado, acceda a la consola y observe que el proceso de
arranque se detuvo antes de tiempo. Tómese un momento para especular sobre la posible
causa de este comportamiento.
2.1.
Localice el icono de la consola de serverb, según corresponda para el entorno del
aula. Abra la consola.
2.2.
Si observa el error, parece que al menos ciertas partes del sistema aún están
funcionando.
2.3.
Presione Ctrl+Alt+Del para reiniciar serverb.
Cuando el menú del cargador de arranque aparezca, presione cualquier tecla excepto
Enter para interrumpir la cuenta regresiva.
2.4.
Edite la entrada predeterminada del cargador de arranque en la memoria para iniciar
sesión en modo de emergencia.
Presione e para editar la entrada actual.
2.5.
Use las teclas de dirección para navegar hacia la línea que comienza con linux.
Agregue systemd.unit=emergency.target en el final de la línea.
2.6.
Presione Ctrl+x para realizar el arranque con la configuración modificada.
2.7.
Inicie sesión en el modo de emergencia. La contraseña de root es redhat.
Give root password for maintenance
(or press Control-D to continue): redhat
[root@serverb ~]#
3.
Vuelva a montar el sistema de archivos / con acceso de lectura-escritura. Use el comando
mount -a para intentar montar todos los demás sistemas de archivos.
3.1.
Vuelva a montar el sistema de archivos / con acceso de lectura-escritura para editarlo.
[root@serverb ~]# mount -o remount,rw /
RH134-RHEL8.2-es-1-20200928
445
capítulo 14 | Revisión completa
3.2.
Use el comando mount -a para intentar montar todos los demás sistemas de archivos.
Observe que uno de los sistemas de archivos no se puede montar.
[root@serverb ~]# mount -a
mount: /FakeMount: can't find UUID=fake.
3.3.
Edite /etc/fstab para corregir el problema. Elimine o comente la línea incorrecta.
[root@serverb ~]# vim /etc/fstab
...output omitted...
#UUID=fake
/FakeMount xfs
defaults
3.4.
0 0
Actualice systemd para que el sistema registre la configuración de /etc/fstab
nueva.
[root@serverb ~]# systemctl daemon-reload
[ 206.828912] systemd[1]: Reloading.
3.5.
Verifique que su /etc/fstab ahora sea correcto al intentar montar todas las entradas.
[root@serverb ~]# mount -a
3.6.
Reinicie serverb y espere a que el arranque finalice. Ahora el sistema debería arrancar
normalmente.
[root@serverb ~]# systemctl reboot
En workstation, ejecute el comando lab rhcsa-compreview1 break2.
4.
4.1.
[student@workstation ~]$ lab rhcsa-compreview1 break2
Espere a que se complete el reinicio antes de continuar.
En serverb, cambie al destino multi-user. Establezca el destino predeterminado en
multi-user. Use el comando sudo para ejecutar cualquier comando administrativo
requerido y, si se le solicita, use student como contraseña.
5.
5.1.
Desde workstation, abra una sesión de SSH en serverb con el usuario student.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$
5.2.
Como el usuario student en serverb, determine el destino predeterminado.
[student@serverb ~]$ systemctl get-default
graphical.target
5.3.
446
Cambie al destino multi-user. Use el comando sudo y, si se le solicita, use student
como la contraseña.
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
[student@serverb ~]$ sudo systemctl isolate multi-user.target
[sudo] password for student: student
5.4.
Configure serverb para que use el destino multi-user como destino
predeterminado.
[student@serverb ~]$ sudo systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/
multi-user.target.
5.5.
Reinicie serverb para verificar que el destino multi-user esté configurado como
destino predeterminado.
[student@serverb ~]$ sudo systemctl reboot
Connection to serverb closed by remote host.
Connection to serverb closed.
[student@workstation ~]$
5.6.
Después del reinicio, abra una sesión de SSH en serverb como el usuario student.
Verifique que el destino multi-user esté configurado como destino predeterminado.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$ systemctl get-default
multi-user.target
6.
Programe un trabajo recurrente con el usuario student que ejecuta el script /home/
student/backup-home.sh por hora entre las 7 p. m. y las 9 p. m. todos los días excepto
sábados y domingos.
Use el script backup-home.sh para programar el trabajo recurrente. Descargue el script de
copia de seguridad desde http://materials.example.com/labs/backup-home.sh.
6.1.
En serverb, descargue el script de copia de seguridad desde http://
materials.example.com/labs/backup-home.sh. Use chmod para hacer que el
script de copia de seguridad sea ejecutable.
[student@serverb ~]$ wget http://materials.example.com/labs/backup-home.sh
...output omitted...
[student@serverb ~]$ chmod +x backup-home.sh
6.2.
Use el comando crontab -e para abrir el archivo crontab con el editor de texto
predeterminado.
[student@serverb ~]$ crontab -e
6.3.
Edite el archivo y agregue la siguiente línea:
0 19-21 * * Mon-Fri /home/student/backup-home.sh
RH134-RHEL8.2-es-1-20200928
447
capítulo 14 | Revisión completa
Guarde los cambios y salga del editor.
6.4. Use el comando crontab -l para enumerar los trabajos recurrentes programados.
[student@serverb ~]$ crontab -l
0 19-21 * * Mon-Fri /home/student/backup-home.sh
Reinicie serverb y espere a que el arranque finalice antes de calificar.
7.
7.1.
[student@serverb ~]$ sudo systemctl reboot
[sudo] password for student: student
Connection to serverb closed by remote host.
Connection to serverb closed.
[student@workstation ~]$
Evaluación
En workstation, ejecute el script lab rhcsa-compreview1 grade para confirmar que ha
realizado correctamente este ejercicio. Corrija los errores informados y vuelva a ejecutar el script
hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview1 grade
Finalizar
En workstation, ejecute lab rhcsa-compreview1 finish para terminar este ejercicio. Este
script elimina los archivos y recursos creados durante el ejercicio para garantizar que el entorno
esté limpio.
[student@workstation ~]$ lab rhcsa-compreview1 finish
Guarde los archivos o trabajos que desee conservar en otros sistemas y, luego, restablezca
workstation, servera y serverb antes del siguiente ejercicio.
Con esto concluye la revisión completa.
448
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
Trabajo de laboratorio
Configuración y administración de
sistemas de archivos y almacenamiento
En esta revisión, creará un volumen lógico de LVM, montará un sistema de archivos de
red, creará una partición de intercambio que se activará automáticamente en el arranque,
configurará los archivos temporales no usados para que se limpien del sistema y usará las
ACL para proteger un directorio.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un volumen lógico de LVM.
• Montar un sistema de archivos de red
• Crear una partición de intercambio que se active automáticamente en el arranque.
• Configurar los archivos temporales no usados para que se limpien del sistema.
• Usar las ACL para proteger un directorio.
Andes De Comenzar
Copie los archivos o el trabajo que desee preservar en otros sistemas antes de restablecer el
sistema. Restablezca los sistemas workstation, servera y serverb ahora, a menos que
recién los haya restablecido al final del último ejercicio.
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab rhcsa-compreview2 start para iniciar la revisión
completa. Este script crea los archivos necesarios para configurar el entorno correctamente.
[student@workstation ~]$ lab rhcsa-compreview2 start
Instrucciones
Realice las siguientes tareas en serverb para completar la revisión completa.
• Configure un nuevo volumen lógico de 1 GiB denominado vol_home en un nuevo grupo
de volúmenes de 2 GiB denominado extra_storage. Use el disco sin particiones /dev/
vdb para crear particiones.
• El volumen lógico vol_home debe formatearse con el tipo de sistema de archivos XFS y
montarse en /home-directories de manera persistente.
• Asegúrese de que el sistema de archivos de red llamado /share esté montado
de manera persistente en /local-share después del reinicio. El servidor NFS
servera.lab.example.com exporta el sistema de archivos de red /share. La ruta de
exportación de NFS es servera.lab.example.com:/share.
• Cree una nueva partición de 512 MiB en el disco /dev/vdc para usarla como espacio de
intercambio. Este espacio de intercambio debe activarse automáticamente en el arranque.
RH134-RHEL8.2-es-1-20200928
449
capítulo 14 | Revisión completa
• Cree un nuevo grupo llamado production. Cree los usuarios production1,
production2, production3 y production4. Asegúrese de que usen el nuevo grupo
llamado production como su grupo adicional.
• Configure su sistema para que use un nuevo directorio llamado /run/volatile para
almacenar archivos temporales. Los archivos en este directorio deben estar sujetos a una
limpieza basada en el tiempo si no se accede a ellos durante más de 30 segundos. Los
permisos octales para el directorio deben ser 0700. Asegúrese de utilizar el archivo /etc/
tmpfiles.d/volatile.conf para configurar la limpieza basada en el tiempo para los
archivos en /run/volatile.
• Cree el nuevo directorio denominado /webcontent. Tanto el propietario como el grupo
del directorio deben ser root. Los miembros del grupo production deben ser capaces
de leer y escribir en este directorio. El usuario production1 solo debe ser capaz de leer
este directorio. Estos permisos se deben aplicar a todos los archivos y directorios nuevos
creados en el directorio /webcontent.
Evaluación
En workstation, ejecute el script lab rhcsa-compreview2 grade para confirmar que ha
realizado correctamente este ejercicio. Corrija los errores informados y vuelva a ejecutar el script
hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview2 grade
Finalizar
En workstation, ejecute lab rhcsa-compreview2 finish para terminar este ejercicio. Este
script elimina los archivos y recursos creados durante el ejercicio para garantizar que el entorno
esté limpio.
[student@workstation ~]$ lab rhcsa-compreview2 finish
Con esto concluye la revisión completa.
450
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
Solución
Configuración y administración de
sistemas de archivos y almacenamiento
En esta revisión, creará un volumen lógico de LVM, montará un sistema de archivos de
red, creará una partición de intercambio que se activará automáticamente en el arranque,
configurará los archivos temporales no usados para que se limpien del sistema y usará las
ACL para proteger un directorio.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear un volumen lógico de LVM.
• Montar un sistema de archivos de red
• Crear una partición de intercambio que se active automáticamente en el arranque.
• Configurar los archivos temporales no usados para que se limpien del sistema.
• Usar las ACL para proteger un directorio.
Andes De Comenzar
Copie los archivos o el trabajo que desee preservar en otros sistemas antes de restablecer el
sistema. Restablezca los sistemas workstation, servera y serverb ahora, a menos que
recién los haya restablecido al final del último ejercicio.
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab rhcsa-compreview2 start para iniciar la revisión
completa. Este script crea los archivos necesarios para configurar el entorno correctamente.
[student@workstation ~]$ lab rhcsa-compreview2 start
Instrucciones
Realice las siguientes tareas en serverb para completar la revisión completa.
• Configure un nuevo volumen lógico de 1 GiB denominado vol_home en un nuevo grupo
de volúmenes de 2 GiB denominado extra_storage. Use el disco sin particiones /dev/
vdb para crear particiones.
• El volumen lógico vol_home debe formatearse con el tipo de sistema de archivos XFS y
montarse en /home-directories de manera persistente.
• Asegúrese de que el sistema de archivos de red llamado /share esté montado
de manera persistente en /local-share después del reinicio. El servidor NFS
servera.lab.example.com exporta el sistema de archivos de red /share. La ruta de
exportación de NFS es servera.lab.example.com:/share.
• Cree una nueva partición de 512 MiB en el disco /dev/vdc para usarla como espacio de
intercambio. Este espacio de intercambio debe activarse automáticamente en el arranque.
RH134-RHEL8.2-es-1-20200928
451
capítulo 14 | Revisión completa
• Cree un nuevo grupo llamado production. Cree los usuarios production1,
production2, production3 y production4. Asegúrese de que usen el nuevo grupo
llamado production como su grupo adicional.
• Configure su sistema para que use un nuevo directorio llamado /run/volatile para
almacenar archivos temporales. Los archivos en este directorio deben estar sujetos a una
limpieza basada en el tiempo si no se accede a ellos durante más de 30 segundos. Los
permisos octales para el directorio deben ser 0700. Asegúrese de utilizar el archivo /etc/
tmpfiles.d/volatile.conf para configurar la limpieza basada en el tiempo para los
archivos en /run/volatile.
• Cree el nuevo directorio denominado /webcontent. Tanto el propietario como el grupo
del directorio deben ser root. Los miembros del grupo production deben ser capaces
de leer y escribir en este directorio. El usuario production1 solo debe ser capaz de leer
este directorio. Estos permisos se deben aplicar a todos los archivos y directorios nuevos
creados en el directorio /webcontent.
Desde workstation, abra una sesión de SSH en serverb como student.
1.
1.1.
[student@workstation ~]$ ssh student@serverb
...output omitted...
Cambie al usuario root.
2.
2.1.
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
Cree una partición de 2 GiB en /dev/vdb.
3.
3.1.
[root@serverb ~]# parted /dev/vdb mklabel msdos
[root@serverb ~]# parted /dev/vdb mkpart primary 1GiB 3GiB
[root@serverb ~]# parted /dev/vdb set 1 lvm on
Cree un volumen lógico llamado vol_home con la partición de 2 GiB que creó en /dev/vdb.
Asigne al grupo de volúmenes el nombre extra_storage.
4.
4.1.
Declare el dispositivo de bloque /dev/vdb1 como volumen físico.
[root@serverb ~]# pvcreate /dev/vdb1
...output omitted...
4.2.
Cree el grupo de volúmenes extra_storage con /dev/vdb1.
[root@serverb ~]# vgcreate extra_storage /dev/vdb1
...output omitted...
452
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
4.3. Cree un volumen lógico de 1 GiB llamado vol_home.
[root@serverb ~]# lvcreate -L 1GiB -n vol_home extra_storage
...output omitted...
5.
Asigne a vol_home el formato de tipo de sistema de archivos XFS y móntelo en /homedirectories.
5.1.
Cree un directorio denominado /home-directories.
[root@serverb ~]# mkdir /home-directories
5.2.
Asigne a /dev/extra_storage/vol_home el formato de tipo de sistema de
archivos XFS.
[root@serverb ~]# mkfs -t xfs /dev/extra_storage/vol_home
...output omitted...
5.3.
Monte de manera persistente /dev/extra_storage/vol_home en /homedirectories. Use el UUID de la estructura al crear la entrada en /etc/fstab.
[root@serverb ~]# lsblk -o UUID /dev/extra_storage/vol_home
UUID
988cf149-0667-4733-abca-f80c6ec50ab6
[root@serverb ~]# echo "UUID=988c...0ab6 /home-directories \
xfs defaults 0 0" >> /etc/fstab
[root@serverb ~]# mount -a
6.
Asegúrese de que el sistema de archivos de red llamado /share esté montado
de manera persistente en /local-share después del reinicio. El servidor NFS
servera.lab.example.com exporta el sistema de archivos de red /share. La ruta de
exportación de NFS es servera.lab.example.com:/share.
6.1.
Cree el directorio /local-share.
[root@serverb ~]# mkdir /local-share
6.2.
Adjunte la entrada correspondiente a /etc/fstab para que el sistema de archivos
de red disponible en servera.lab.example.com:/share monte de manera
persistente en /local-share después del reinicio.
[root@serverb ~]# echo "servera.lab.example.com:/share /local-share \
nfs rw,sync 0 0" >> /etc/fstab
6.3.
Monte el sistema de archivos de red en /local-share en función de la entrada en /
etc/fstab.
[root@serverb ~]# mount /local-share
7.
Cree una nueva partición de 512 MiB en el disco /dev/vdc para usarlo como espacio de
intercambio. Este espacio de intercambio debe activarse automáticamente en el momento
del arranque.
RH134-RHEL8.2-es-1-20200928
453
capítulo 14 | Revisión completa
7.1.
Cree una partición de 512 MiB en /dev/vdc.
[root@serverb ~]# parted /dev/vdc mklabel msdos
[root@serverb ~]# parted /dev/vdc mkpart primary linux-swap 1MiB 513MiB
7.2.
Cree el espacio de intercambio en /dev/vdc1.
[root@serverb ~]# mkswap /dev/vdc1
...output omitted...
7.3.
Active el espacio de intercambio para que persista después del reinicio. Use el UUID de
la estructura al crear la entrada en /etc/fstab.
[root@serverb ~]# lsblk -o UUID /dev/vdc1
UUID
cc18ccb6-bd29-48a5-8554-546bf3471b69
[root@serverb ~]# echo "UUID=cc18...1b69 swap \
swap defaults 0 0" >> /etc/fstab
[root@serverb ~]# swapon -a
Cree los usuarios production1, production2, production3 y production4. Asegúrese
de que usen el nuevo grupo llamado production como su grupo adicional.
8.
8.1.
[root@serverb ~]# groupadd production
[root@serverb ~]# for i in 1 2 3 4; do useradd -G production production$i; done
Configure su sistema para que use un nuevo directorio llamado /run/volatile para
almacenar archivos temporales. Los archivos en este directorio deben estar sujetos a una
limpieza basada en el tiempo si no se accede a ellos durante más de 30 segundos. Los
permisos octales para el directorio deben ser 0700. Asegúrese de utilizar el archivo /etc/
tmpfiles.d/volatile.conf para configurar la limpieza basada en el tiempo para los
archivos en /run/volatile.
9.
9.1.
Cree un nuevo archivo denominado /etc/tmpfiles.d/volatile.conf wcon el
siguiente contenido.
d /run/volatile 0700 root root 30s
9.2.
Use el comando systemd-tmpfiles --create para crear el directorio /run/
volatile si no existe.
[root@servera ~]# systemd-tmpfiles --create /etc/tmpfiles.d/volatile.conf
10.
Cree un nuevo directorio denominado /webcontent. Tanto el propietario como el
propietario del grupo del directorio deben ser root. Los miembros del grupo production
deben ser capaces de leer y escribir en este directorio. El usuario production1 solo debe
ser capaz de leer este directorio. Estos permisos se deben aplicar a todos los archivos y
directorios nuevos creados en el directorio /webcontent.
10.1. Cree el directorio /webcontent.
454
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
[root@serverb ~]# mkdir /webcontent
10.2. Use setfacl para configurar permisos en /webcontent de manera que los miembros
del grupo de productiontengan permisos de lectura y de escritura, con la excepción
del usuario production1, a quien solo se le debe otorgar permiso de lectura.
[root@serverb ~]# setfacl -m u:production1:rx /webcontent
[root@serverb ~]# setfacl -m g:production:rwx /webcontent
10.3. Use setfacl para establecer los permisos predeterminados en /webcontent de
modo que los permisos que aplicó en el paso anterior también se apliquen a todos los
archivos y directorios nuevos creados en el directorio /webcontent.
[root@serverb ~]# setfacl -m d:u:production1:rx /webcontent
[root@serverb ~]# setfacl -m d:g:production:rwx /webcontent
10.4. Salga de la shell del usuario root.
[root@serverb ~]# exit
logout
10.5. Cierre sesión en serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
Evaluación
En workstation, ejecute el script lab rhcsa-compreview2 grade para confirmar que ha
realizado correctamente este ejercicio. Corrija los errores informados y vuelva a ejecutar el script
hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview2 grade
Finalizar
En workstation, ejecute lab rhcsa-compreview2 finish para terminar este ejercicio. Este
script elimina los archivos y recursos creados durante el ejercicio para garantizar que el entorno
esté limpio.
[student@workstation ~]$ lab rhcsa-compreview2 finish
Con esto concluye la revisión completa.
RH134-RHEL8.2-es-1-20200928
455
capítulo 14 | Revisión completa
Trabajo de laboratorio
Configuración y administración de
seguridad del servidor
En esta revisión, configurará la autenticación basada en claves de SSH, cambiará la
configuración del cortafuegos, ajustará el modo de SELinux y un booleano de SELinux, y
solucionará problemas de SELinux.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Configurar claves de SSH para la autenticación basada en claves.
• Configurar parámetros de firewall.
• Ajustar el modo de SELinux y los booleanos de SELinux.
• Solucionar problemas de SELinux.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab rhcsa-compreview3 start para iniciar la revisión
completa. Este script crea los archivos necesarios para configurar el entorno correctamente.
[student@workstation ~]$ lab rhcsa-compreview3 start
Instrucciones
Realice las siguientes tareas para completar la revisión completa:
• Genere claves de SSH para el usuario student en serverb. No proteja la clave privada
con una frase de contraseña.
• En servera, configure el usuario student para que acepte la autenticación de inicio
de sesión con el par de claves de SSH creado para student en serverb. El usuario
student en serverb debe poder iniciar sesión en servera con SSH sin ingresar una
contraseña. Use student como la contraseña para el usuario student, si se le solicita.
• En servera, cambie el modo predeterminado de SELinux a permissive.
• Configure serverb para que monte automáticamente el directorio de inicio del usuario
production5 cuando el usuario inicie sesión, con el sistema de archivos de red /homedirectories/production5. Este sistema de archivos de red se exporta desde
servera.lab.example.com. Ajuste el booleano correspondiente de SELinux para que
production5 pueda usar el directorio de inicio montado en NFS en serverb después
de la autenticación basada en claves de SSH. La contraseña del usuario production5 es
redhat.
• En serverb, ajuste la configuración del firewall para que se rechacen las conexiones de
SSH que se originan en servera.
456
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
• En serverb, investigue y corrija el problema con el daemon HTTPD de Apache, que
está configurado para escuchar en el puerto 30080/TCP, pero que no se puede iniciar.
Ajuste la configuración del firewall según corresponda para que el puerto 30080/TCP esté
abierto para conexiones entrantes.
Evaluación
En workstation, ejecute el script lab rhcsa-compreview3 grade para confirmar que ha
realizado correctamente este ejercicio. Corrija los errores informados y vuelva a ejecutar el script
hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview3 grade
Finalizar
En workstation, ejecute lab rhcsa-compreview3 finish para terminar este ejercicio. Este
script elimina los archivos y recursos creados durante el ejercicio para garantizar que el entorno
esté limpio.
[student@workstation ~]$ lab rhcsa-compreview3 finish
Guarde los archivos o trabajos que desee conservar en otros sistemas y restablezca
workstation, servera y serverb.
Con esto concluye la revisión completa.
RH134-RHEL8.2-es-1-20200928
457
capítulo 14 | Revisión completa
Solución
Configuración y administración de
seguridad del servidor
En esta revisión, configurará la autenticación basada en claves de SSH, cambiará la
configuración del cortafuegos, ajustará el modo de SELinux y un booleano de SELinux, y
solucionará problemas de SELinux.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Configurar claves de SSH para la autenticación basada en claves.
• Configurar parámetros de firewall.
• Ajustar el modo de SELinux y los booleanos de SELinux.
• Solucionar problemas de SELinux.
Andes De Comenzar
Inicie sesión en workstation como student con la contraseña student.
En workstation, ejecute lab rhcsa-compreview3 start para iniciar la revisión
completa. Este script crea los archivos necesarios para configurar el entorno correctamente.
[student@workstation ~]$ lab rhcsa-compreview3 start
Instrucciones
Realice las siguientes tareas para completar la revisión completa:
• Genere claves de SSH para el usuario student en serverb. No proteja la clave privada
con una frase de contraseña.
• En servera, configure el usuario student para que acepte la autenticación de inicio
de sesión con el par de claves de SSH creado para student en serverb. El usuario
student en serverb debe poder iniciar sesión en servera con SSH sin ingresar una
contraseña. Use student como la contraseña para el usuario student, si se le solicita.
• En servera, cambie el modo predeterminado de SELinux a permissive.
• Configure serverb para que monte automáticamente el directorio de inicio del usuario
production5 cuando el usuario inicie sesión, con el sistema de archivos de red /homedirectories/production5. Este sistema de archivos de red se exporta desde
servera.lab.example.com. Ajuste el booleano correspondiente de SELinux para que
production5 pueda usar el directorio de inicio montado en NFS en serverb después
de la autenticación basada en claves de SSH. La contraseña del usuario production5 es
redhat.
• En serverb, ajuste la configuración del firewall para que se rechacen las conexiones de
SSH que se originan en servera.
458
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
• En serverb, investigue y corrija el problema con el daemon HTTPD de Apache, que
está configurado para escuchar en el puerto 30080/TCP, pero que no se puede iniciar.
Ajuste la configuración del firewall según corresponda para que el puerto 30080/TCP esté
abierto para conexiones entrantes.
1.
Desde workstation, abra una sesión de SSH en serverb como student.
1.1.
[student@workstation ~]$ ssh student@serverb
...output omitted...
2.
Genere claves de SSH para el usuario student en serverb con el comando ssh-keygen.
No proteja la clave privada con una frase de contraseña.
2.1.
[student@serverb ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa): Enter
Created directory '/home/student/.ssh'.
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/student/.ssh/id_rsa.
Your public key has been saved in /home/student/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1TPZ4TXYwiGWfExUGtRTHgfKQbF9hVuLa+VmH4vgkFY student@serverb.lab.example.com
The key's randomart image is:
+---[RSA 2048]----+
|
.+@BO**|
|
.=.#+B*|
|
. X.*o=|
|
. E +.+ |
|
S o
+ |
|
+ . o = |
|
. o o + +|
|
. . ..|
|
|
+----[SHA256]-----+
3.
En servera, configure el usuario student para que acepte la autenticación de inicio de
sesión con el par de claves de SSH que creó para student en serverb. El usuario student
en serverb debe poder iniciar sesión en servera con SSH sin ingresar una contraseña. Use
student como la contraseña para el usuario student, cuando se le solicite.
3.1.
Use el comando ssh-copy-id para transferir la clave pública del par de claves SSH de
student en serverb a student en servera. Use student como la contraseña para
el usuario student, si se le solicita.
[student@serverb ~]$ ssh-copy-id student@servera
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/student/.ssh/
id_rsa.pub"
The authenticity of host 'servera (172.25.250.10)' can't be established.
RH134-RHEL8.2-es-1-20200928
459
capítulo 14 | Revisión completa
ECDSA key fingerprint is SHA256:g/fIMtVzDWTbTi1l0OwC30sL6cHmro9Tf563NxmeyyE.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
student@servera's password: student
Number of key(s) added: 1
Now try logging into the machine, with:
"ssh 'student@servera'"
and check to make sure that only the key(s) you wanted were added.
3.2.
Use el comando ssh para verificar que el usuario student pueda iniciar sesión en
servera desde serverb sin introducir una contraseña.
[student@serverb ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
En servera, cambie el modo predeterminado de SELinux a permissive.
4.
4.1.
Edite /etc/sysconfig/selinux para establecer el valor del parámetro SELINUX en
permissive. Puede usar el comando sudo vi /etc/sysconfig/selinux para
editar el archivo de configuración como superusuario. Use la contraseña student, si se
le solicita.
...output omitted...
#SELINUX=enforcing
SELINUX=permissive
...output omitted...
4.2.
Use el comando sudo systemctl reboot para reiniciar el sistema como el
superusuario.
[student@servera ~]$ sudo systemctl reboot
Connection to servera closed by remote host.
Connection to servera closed.
[student@serverb ~]$
Configure serverb para que monte automáticamente el directorio de inicio del usuario
production5 cuando el usuario inicie sesión, con el sistema de archivos de red /homedirectories/production5. Este sistema de archivos de red se exporta desde
servera.lab.example.com. Ajuste el booleano correspondiente de SELinux para que
production5 pueda usar el directorio de inicio montado en NFS en serverb después
de la autenticación basada en claves de SSH. La contraseña del usuario production5 es
redhat.
5.
5.1.
En serverb, use el comando sudo -i para cambiar a la cuenta de usuario root.
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#
460
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
5.2.
Instale el paquete autofs.
[root@serverb ~]# yum install autofs
...output omitted...
Is this ok [y/N]: y
...output omitted...
Installed:
autofs-1:5.1.4-29.el8.x86_64
Complete!
5.3.
Cree el archivo de asignación maestro de autofs denominado /etc/
auto.master.d/production5.autofs con el siguiente contenido.
/- /etc/auto.production5
5.4.
Recupere los detalles del usuario production5 para obtener la ruta del directorio de
inicio.
[root@serverb ~]# getent passwd production5
production5:x:5001:5001::/localhome/production5:/bin/bash
5.5.
Cree el archivo /etc/auto.production5 con el siguiente contenido.
/localhome/production5 -rw servera.lab.example.com:/home-directories/production5
5.6.
Reinicie el servicio autofs.
[root@serverb ~]# systemctl restart autofs
6.
En servera, verifique que el usuario production5 no pueda iniciar sesión en serverb
con la autenticación de clave pública SSH. Un booleano SELinux causa este problema que
solucionará en los siguientes pasos.
6.1.
Desde workstation, abra una sesión de SSH para servera como student.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$
6.2.
Cambie al usuario production5 con redhat como contraseña.
[student@servera ~]$ su - production5
Password: redhat
[production5@servera ~]$
6.3.
Use el comando ssh-keygen para generar claves SSH como production5.
[production5@servera ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/production5/.ssh/id_rsa): Enter
RH134-RHEL8.2-es-1-20200928
461
capítulo 14 | Revisión completa
Created directory '/home/production5/.ssh'.
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/production5/.ssh/id_rsa.
Your public key has been saved in /home/production5/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:zmin1nmCt4H8LA+4FPimtdg81nl7ATbInUFW3HSPxk4
production5@servera.lab.example.com
The key's randomart image is:
+---[RSA 2048]----+
|
.oo.o. . |
|
.. . .o o |
|
. o o
E .|
|
. o *
+
|
| . . .So
. |
|
. + = .
|
|
*.*+=. .
|
|
Oo+***.o
|
| o.=o.=**
|
+----[SHA256]-----+
6.4. Use el comando ssh-copy-id para transferir la clave pública del par de claves SSH
de production5 en servera a production5 en serverb. Use redhat como la
contraseña para el usuario production5, si se le solicita.
[production5@servera ~]$ ssh-copy-id production5@serverb
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/
production5/.ssh/id_rsa.pub"
The authenticity of host 'serverb (172.25.250.11)' can't be established.
ECDSA key fingerprint is SHA256:ciCkaRWF4g6eR9nSdPxQ7KL8czpViXal6BousK544TY.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
production5@serverb's password: redhat
Number of key(s) added: 1
Now try logging into the machine, with:
"ssh 'production5@serverb'"
and check to make sure that only the key(s) you wanted were added.
6.5.
Use la autenticación basada en clave pública SSH en lugar de la autenticación basada
en contraseña para iniciar sesión en serverb como production5. Este comando
debería fallar.
[production5@servera ~]$ ssh -o pubkeyauthentication=yes \
-o passwordauthentication=no production5@serverb
production5@serverb: Permission denied (publickey,gssapi-keyex,gssapi-withmic,password).
462
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
7.
Establezca la configuración correspondiente del booleano de SELinux en serverb, de modo
que production5 pueda iniciar sesión en serverb con la autenticación basada en clave
pública SSH y use el directorio de inicio.
7.1.
En serverb como root, establezca el booleano de SELinux use_nfs_home_dirs en
true.
[root@serverb ~]# setsebool -P use_nfs_home_dirs true
7.2.
Use la autenticación basada en clave pública SSH en lugar de la autenticación basada
en contraseña para iniciar sesión en serverb como production5. Este comando
debe arrojar resultados satisfactorios.
[production5@servera ~]$ ssh -o pubkeyauthentication=yes \
-o passwordauthentication=no production5@serverb
...output omitted...
[production5@serverb ~]$
8.
En serverb, ajuste la configuración del firewall para que se rechacen las conexiones de SSH
que se originan en servera. El sistema servera usa la dirección IPv4 172.25.250.10.
8.1.
Use el comando firewall-cmd para agregar la dirección IPv4 de servera a la zona
de firewalld denominada block.
[root@serverb ~]# firewall-cmd --add-source=172.25.250.10/32 \
--zone=block --permanent
success
8.2.
Use el comando firewall-cmd --reload para volver a cargar los cambios en la
configuración del firewall.
[root@serverb ~]# firewall-cmd --reload
success
9.
En serverb, investigue y corrija el problema con el daemon HTTPD de Apache, que está
configurado para escuchar en el puerto 30080/TCP, pero que no se puede iniciar. Ajuste la
configuración del firewall según corresponda para que el puerto 30080/TCP esté abierto
para conexiones entrantes.
9.1.
Use el comando systemctl para reiniciar el servicio httpd. Este comando no puede
reiniciar el servicio.
[root@serverb ~]# systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
9.2.
Use el comando systemctl status para investigar el motivo del error del servicio
httpd.
[root@serverb ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset:
disabled)
RH134-RHEL8.2-es-1-20200928
463
capítulo 14 | Revisión completa
Active: failed (Result: exit-code) since Mon 2019-04-15 06:42:41 EDT; 5min ago
Docs: man:httpd.service(8)
Process: 27313 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited,
status=1/FAILURE)
Main PID: 27313 (code=exited, status=1/FAILURE)
Status: "Reading configuration..."
Apr 15 06:42:41 serverb.lab.example.com systemd[1]: Starting The Apache HTTP
Server...
Apr 15 06:42:41 serverb.lab.example.com httpd[27313]: (13)Permission denied:
AH00072: make_sock: could not bind to address [::]:30080
Apr 15 06:42:41 serverb.lab.example.com httpd[27313]: (13)Permission denied:
AH00072: make_sock: could not bind to address 0.0.0.0:30080
Apr 15 06:42:41 serverb.lab.example.com httpd[27313]: no listening sockets
available, shutting down
Apr 15 06:42:41 serverb.lab.example.com httpd[27313]: AH00015: Unable to open logs
Apr 15 06:42:41 serverb.lab.example.com systemd[1]: httpd.service: Main process
exited, code=exited, status=1/FAILURE
Apr 15 06:42:41 serverb.lab.example.com systemd[1]: httpd.service: Failed with
result 'exit-code'.
Apr 15 06:42:41 serverb.lab.example.com systemd[1]: Failed to start The Apache
HTTP Server.
Observe el error de permiso en la salida anterior, lo que significa que el daemon httpd
no pudo vincularse con el puerto 30080/TCP. La política de SELinux puede ser una
restricción potencial para que una aplicación se vincule con un puerto. Presione q para
salir del comando systemctl anterior.
9.3.
Use el comando sealert para determinar si una política de SELinux está impidiendo
que httpd se vincule con el puerto 30080/TCP.
[root@serverb ~]# sealert -a /var/log/audit/audit.log
100% done
found 1 alerts in /var/log/audit/audit.log
-------------------------------------------------------------------------------SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port
30080.
*****
Plugin bind_ports (92.2 confidence) suggests
************************
If you want to allow /usr/sbin/httpd to bind to network port 30080
Then you need to modify the port type.
Do
# semanage port -a -t PORT_TYPE -p tcp 30080
where PORT_TYPE is one of the following: http_cache_port_t, http_port_t,
jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t.
...output omitted...
El mensaje de registro anterior revela que el puerto 30080/TCP no tiene el contexto
apropiado de SELinux http_port_t, por lo que SELinux impide que httpd se vincule
con este puerto. El mensaje de registro también produce la sintaxis del comando
semanage port para que pueda corregir fácilmente el problema.
464
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
9.4. Use el comando semanage port para establecer el contexto apropiado de SELinux
en el puerto 30080/TCPpara que httpd se vincule con él.
[root@serverb ~]# semanage port -a -t http_port_t -p tcp 30080
9.5.
Use el comando systemctl para reiniciar httpd. Este comando debe reiniciar el
servicio correctamente.
[root@serverb ~]# systemctl restart httpd
9.6. Agregue el puerto 30080/TCP a la zona firewalld predeterminada llamada public
(público).
[root@serverb ~]# firewall-cmd --add-port=30080/tcp --permanent
success
[root@serverb ~]# firewall-cmd --reload
success
9.7.
Salga de la shell del usuario root.
[root@serverb ~]# exit
logout
9.8. Cierre sesión en serverb.
[student@serverb ~]$ exit
logout
Connection to serverb closed.
Evaluación
En workstation, ejecute el script lab rhcsa-compreview3 grade para confirmar que ha
realizado correctamente este ejercicio. Corrija los errores informados y vuelva a ejecutar el script
hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview3 grade
Finalizar
En workstation, ejecute lab rhcsa-compreview3 finish para terminar este ejercicio. Este
script elimina los archivos y recursos creados durante el ejercicio para garantizar que el entorno
esté limpio.
[student@workstation ~]$ lab rhcsa-compreview3 finish
Guarde los archivos o trabajos que desee conservar en otros sistemas y restablezca
workstation, servera y serverb.
Con esto concluye la revisión completa.
RH134-RHEL8.2-es-1-20200928
465
capítulo 14 | Revisión completa
Trabajo de laboratorio
Ejecución de contenedores
En esta revisión, configurará un contenedor en su servidor que proporciona contenido web
desde el almacenamiento persistente y se inicia automáticamente con el servidor.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear contenedores rootless independientes.
• Configurar el redireccionamiento de puertos y el almacenamiento persistente.
• Configurar systemd para que los contenedores se inicien cuando se inicia la máquina
host.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab rhcsa-compreview4 start.
Este comando ejecuta un script de inicio que determina si la máquina serverb es accesible
en la red. También crea una colección de archivos con cierto contenido web y la cuenta de
usuario containers que usa para ejecutar un contenedor de servidor HTTP Apache.
[student@workstation ~]$ lab rhcsa-compreview4 start
Instrucciones
Realice las siguientes tareas en serverb con el usuario containers para completar la
revisión integral:
• En serverb, cree el directorio /srv/web/ y, luego, extraiga la colección de archivos
/home/containers/rhcsa-compreview4/web-content.tgz en ese directorio.
Configure el directorio para que un contenedor rootless pueda usarlo para el
almacenamiento persistente.
• En serverb, instale las herramientas del contenedor.
• En serverb, con el usuario containers, cree un contenedor de servidor HTTP Apache
independiente con el nombre web. Use la imagen rhel8/httpd-24 con la etiqueta
1-105 desde el registro registry.lab.example.com. Mapee el puerto 8080 en el
contenedor al puerto 8888 en el host. Monte el directorio /srv/web en el host como /
var/www en el contenedor. Declare la variable de entorno HTTPD_MPM con el valor event.
• En serverb, con el usuario containers, configure systemd para que el contenedor
web se inicie automáticamente con el servidor.
La contraseña para el usuario containers es redhat. Para acceder al registro de
imágenes de contenedores en registry.lab.example.com, use la cuenta admin con la
contraseña redhat321. Puede copiar y pegar los parámetros del contenedor web desde el
archivo /home/containers/rhcsa-compreview4/variables en serverb.
466
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
Evaluación
Inicie sesión con el usuario student en la máquina workstation y use el comando lab rhcsacompreview4 grade para calificar su trabajo. Corrija los errores informados y vuelva a ejecutar
el comando hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview4 grade
Finalizar
Con el usuario student en la máquina workstation, use el comando lab rhcsacompreview4 finish para terminar este ejercicio.
[student@workstation ~]$ lab rhcsa-compreview4 finish
Con esto concluye la revisión exhaustiva.
RH134-RHEL8.2-es-1-20200928
467
capítulo 14 | Revisión completa
Solución
Ejecución de contenedores
En esta revisión, configurará un contenedor en su servidor que proporciona contenido web
desde el almacenamiento persistente y se inicia automáticamente con el servidor.
Resultados
Usted deberá ser capaz de realizar lo siguiente:
• Crear contenedores rootless independientes.
• Configurar el redireccionamiento de puertos y el almacenamiento persistente.
• Configurar systemd para que los contenedores se inicien cuando se inicia la máquina
host.
Andes De Comenzar
En la máquina workstation, inicie sesión con el usuario student con la contraseña
student.
En la máquina workstation, ejecute el comando lab rhcsa-compreview4 start.
Este comando ejecuta un script de inicio que determina si la máquina serverb es accesible
en la red. También crea una colección de archivos con cierto contenido web y la cuenta de
usuario containers que usa para ejecutar un contenedor de servidor HTTP Apache.
[student@workstation ~]$ lab rhcsa-compreview4 start
Instrucciones
Realice las siguientes tareas en serverb con el usuario containers para completar la
revisión integral:
• En serverb, cree el directorio /srv/web/ y, luego, extraiga la colección de archivos
/home/containers/rhcsa-compreview4/web-content.tgz en ese directorio.
Configure el directorio para que un contenedor rootless pueda usarlo para el
almacenamiento persistente.
• En serverb, instale las herramientas del contenedor.
• En serverb, con el usuario containers, cree un contenedor de servidor HTTP Apache
independiente con el nombre web. Use la imagen rhel8/httpd-24 con la etiqueta
1-105 desde el registro registry.lab.example.com. Mapee el puerto 8080 en el
contenedor al puerto 8888 en el host. Monte el directorio /srv/web en el host como /
var/www en el contenedor. Declare la variable de entorno HTTPD_MPM con el valor event.
• En serverb, con el usuario containers, configure systemd para que el contenedor
web se inicie automáticamente con el servidor.
La contraseña para el usuario containers es redhat. Para acceder al registro de
imágenes de contenedores en registry.lab.example.com, use la cuenta admin con la
contraseña redhat321. Puede copiar y pegar los parámetros del contenedor web desde el
archivo /home/containers/rhcsa-compreview4/variables en serverb.
468
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
1.
En serverb, cree el directorio /srv/web/ y, luego, extraiga la colección de archivos
/home/containers/rhcsa-compreview4/web-content.tgz en ese directorio.
Configure el directorio para que un contenedor rootless pueda usarlo para el
almacenamiento persistente.
1.1.
Use el comando ssh para iniciar sesión en serverb con el usuario containers. Los
sistemas se configuran a fin de que usen claves SSH para la autenticación, por lo que
no se necesita una contraseña.
[student@workstation ~]$ ssh containers@serverb
...output omitted...
[containers@serverb ~]$
1.2.
Use el comando sudo -i para cambiar al usuario root. La contraseña para el usuario
containers es redhat.
[containers@serverb ~]$ sudo -i
[sudo] password for containers: redhat
[root@serverb ~]#
1.3.
Cree el directorio /srv/web/.
[root@serverb ~]# mkdir /srv/web/
[root@serverb ~]#
1.4.
Extraiga la colección de archivos /home/containers/rhcsa-compreview4/webcontent.tgz en el directorio /srv/web/.
[root@serverb ~]# cd /srv/web/
[root@serverb web]# tar xvf /home/containers/rhcsa-compreview4/web-content.tgz
html/
html/index.html
[root@serverb web]#
1.5.
Los contenedores rootless requieren acceso de lectura al directorio /srv/web/ y a su
contenido. Además, el comando podman que se ejecuta con el usuario containers
debe ser capaz de volver a etiquetar el directorio para SELinux. Establezca el
propietario del directorio en containers y, luego, confirme que todos tengan acceso
al contenido.
[root@serverb web]# chown -R containers: /srv/web
[root@serverb web]# ls -ld /srv/web/
drwxr-xr-x. 3 containers containers 18 Sep 7 04:43 /srv/web/
[root@serverb web]# ls -ld /srv/web/html/
drwxr-xr-x. 2 containers containers 24 Sep 7 04:01 /srv/web/html/
[root@serverb web]# ls -l /srv/web/html/index.html
-rw-r--r--. 1 containers containers 546 Sep 7 04:01 /srv/web/html/index.html
2.
En serverb, instale las herramientas del contenedor.
2.1.
Instale el módulo de Yum container-tools con el comando yum.
RH134-RHEL8.2-es-1-20200928
469
capítulo 14 | Revisión completa
[root@serverb web]# yum module install container-tools
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!
2.2.
Salga de la cuenta root.
[root@serverb web]# exit
logout
[containers@serverb ~]$
En serverb, con el usuario containers, cree un contenedor independiente con el
nombre web. Use la imagen rhel8/httpd-24 con la etiqueta 1-105 desde el registro
registry.lab.example.com. Mapee el puerto 8080 en el contenedor al puerto 8888 en
el host. Monte el directorio /srv/web en el host como /var/www en el contenedor. Declare
la variable de entorno HTTPD_MPM con un valor event.
3.
Puede copiar y pegar estos parámetros desde el archivo /home/containers/rhcsacompreview4/variables en serverb.
3.1.
Inicie sesión en el registro de imágenes de contenedores en
registry.lab.example.com, con la cuenta admin con la contraseña redhat321.
[containers@serverb ~]$ podman login registry.lab.example.com
Username: admin
Password: redhat321
Login Succeeded!
3.2.
Use el comando podman run para crear el contenedor. El siguiente comando podman
run es muy extenso y debe ingresarse como una sola línea.
[containers@serverb ~]$ podman run -d --name web -p 8888:8080 -v /srv/web:/var/
www:Z -e HTTPD_MPM=event registry.lab.example.com/rhel8/httpd-24:1-105
...output omitted...
3.3.
Use el comando curl para confirmar que el servidor HTTP Apache se esté ejecutando.
[containers@serverb ~]$ curl http://localhost:8888/
Comprehensive Review Web Content Test
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed sit amet lacus vestibulum, varius magna sit amet, tempus neque.
...output omitted...
Ese contenido proviene de la colección de archivos web-content.tgz que extrajo
anteriormente.
4.
470
En serverb, con el usuario containers, configure systemd para que el contenedor web
se inicie automáticamente con el servidor.
RH134-RHEL8.2-es-1-20200928
capítulo 14 | Revisión completa
4.1.
Si usó sudo o su para iniciar sesión con el usuario containers, salga de serverb
y use el comando ssh para iniciar sesión directamente en serverb con el usuario
containers.
[student@workstation ~]$ ssh containers@serverb
...output omitted...
[containers@serverb ~]$
4.2.
Cree el directorio ~/.config/systemd/user/.
[containers@serverb ~]$ mkdir -p ~/.config/systemd/user/
[containers@serverb ~]$
4.3. Use el comando podman generate systemd para crear el archivo de unidad
systemd desde el contenedor en ejecución.
[containers@serverb ~]$ cd ~/.config/systemd/user/
[containers@serverb user]$ podman generate systemd --name web --files --new
/home/containers/.config/systemd/user/container-web.service
4.4. Detenga y, luego, elimine el contenedor web.
[containers@serverb user]$ podman stop web
d16a826c936efc7686d8d8e5617b727f5d272361c54f8a0ca65c57d012347784
[containers@serverb user]$ podman rm web
d16a826c936efc7686d8d8e5617b727f5d272361c54f8a0ca65c57d012347784
4.5.
Indique a systemd que vuelva a cargar su configuración y, luego, habilite e inicie el
servicio container-web.
[containers@serverb user]$ systemctl --user daemon-reload
[containers@serverb user]$ systemctl --user enable --now container-web.service
Created symlink /home/containers/.config/systemd/user/multi-user.target.wants/
container-web.service → /home/containers/.config/systemd/user/containerweb.service.
Created symlink /home/containers/.config/systemd/user/default.target.wants/
container-web.service → /home/containers/.config/systemd/user/containerweb.service.
4.6. Confirme que el contenedor se esté ejecutando.
[containers@serverb user]$ curl http://localhost:8888/
Comprehensive Review Web Content Test
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed sit amet lacus vestibulum, varius magna sit amet, tempus neque.
...output omitted...
4.7.
Ejecute el comando loginctl enable-linger para que los servicios de usuario se
inicien automáticamente con el servidor.
RH134-RHEL8.2-es-1-20200928
471
capítulo 14 | Revisión completa
[containers@serverb ~]$ loginctl enable-linger
[containers@serverb ~]$
4.8. Salga de serverb.
[containers@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$
Evaluación
Inicie sesión con el usuario student en la máquina workstation y use el comando lab rhcsacompreview4 grade para calificar su trabajo. Corrija los errores informados y vuelva a ejecutar
el comando hasta obtener un resultado satisfactorio.
[student@workstation ~]$ lab rhcsa-compreview4 grade
Finalizar
Con el usuario student en la máquina workstation, use el comando lab rhcsacompreview4 finish para terminar este ejercicio.
[student@workstation ~]$ lab rhcsa-compreview4 finish
Con esto concluye la revisión exhaustiva.
472
RH134-RHEL8.2-es-1-20200928
Download