Está en la página 1de 527

Gua de Estudio

LFS201: Fundamentos de Administracin de


Sistemas Linux

LFS201: Fundamentos de Administracin de Sistemas Linux

Contenido
Gua de Estudio..................................................................................................................................1
Captulo 1. Prlogo...........................................................................................................................23
1.1 Introduccin...........................................................................................................................24
1.2 Relacion con LFS101x2...........................................................................................................24
1.3

Uso como preparacin para el examen LFCS....................................................................25

1.4 Formato del curso...................................................................................................................27


1.5

La Documentacin............................................................................................................27

1.6

Plataforma de trabajo.......................................................................................................28

1.7

Linea de comandos vs. Interfaz Grafica............................................................................28

1.8 Distribuciones de Linux a utilizar............................................................................................29


1.9

Instalacion: que usar para este curso...............................................................................30

1.10

Calendario del curso.........................................................................................................30

1.11 Laboratorios y Ejercicios.......................................................................................................31


1.12

Cambio, repeticin y guerras santas.................................................................................32

1.13

Acerca de Linux Foundation.............................................................................................32

1.14 Eventos de Linux Foundation................................................................................................33


1.15

Certificaciones..................................................................................................................34

Laboratorio 1.1.............................................................................................................................35
Captulo 2. Inicio y Apagado del Sistema..........................................................................................37
Objetivos de aprendizaje..............................................................................................................37
2.1 Comprendiendo la secuencia de inicio...................................................................................38
2.2 Bios.........................................................................................................................................39
2.3 Gestores de arranque.............................................................................................................39
2.4 Archivos de Configuracion en /etc..........................................................................................40
2.5 /etc/sysconfig.........................................................................................................................40
2.6 /etc/default............................................................................................................................41
2.7 Apagado y Reinicio.................................................................................................................42
Comprobacin de conocimientos 2.1...........................................................................................43
2.8 Laboratorio 2.1.......................................................................................................................44
Objetivos de aprendizaje (revisin)..............................................................................................44
Captulo 3. GRUB..............................................................................................................................45
LFS201: Fundamentos de Administracin de Sistemas Linux

Objetivos de aprendizaje..............................................................................................................45
3.1 Que es GRUB?........................................................................................................................46
3.2 Selecciones Interactivas con GRUB en el arranque.................................................................47
3.3 Instalacin de GRUB...............................................................................................................48
3.4 Nomenclatura de dispositivos de GRUB.................................................................................49
3.5 Personalizando el archivo de configuracin GRUB.................................................................50
Comprobacin de conocimientos 3.1...........................................................................................52
3.6 Laboratorio 3.1.......................................................................................................................53
Objetivos de aprendizaje (revision)..............................................................................................54
Captulo 4. init: SystemV, Upstart, Systemd......................................................................................55
Objetivos de Aprendizaje.............................................................................................................55
4.1 Proceso init.............................................................................................................................56
4.2 Alternativas de arranque........................................................................................................57
4.3 Niveles de ejecucin de SysVinit.............................................................................................57
4.4 SysVinit y /etc/inittab.............................................................................................................59
4.5 Scripts de inicio de SysVinit....................................................................................................59
4.6 chkconfig................................................................................................................................61
4.7 .a. service...............................................................................................................................62
4.7 .b. service...............................................................................................................................63
4.8 chkconfig service en sistemas basados en debian..................................................................63
4.9 Upstart...................................................................................................................................64
4.10 Utilidades de Upstart............................................................................................................65
4.11 systemd................................................................................................................................65
4.12 Archivos de configuracin de systemd..................................................................................66
4.13 systemctl..............................................................................................................................66
Comprobacion de Conocimientos 4.1..........................................................................................69
4.14 Laboratorio 4.1.....................................................................................................................70
4.14 Laboratorio 4.2.....................................................................................................................72
Objetivos de aprendizaje (Revision).............................................................................................73
Captulo 5. Diseo del rbol del Sistema de Archivos de Linux........................................................74
Objetivos de aprendizaje..............................................................................................................74
5.1 Un sistema de archivos grande...............................................................................................75
5.2 Diferencia de los datos...........................................................................................................75
LFS201: Fundamentos de Administracin de Sistemas Linux

5.3 FHS Estandar de Jerarquia del sistema de Archivos................................................................76


5.4 Diseo del directorio principal...............................................................................................76
5.5 El directorio y sistema de archivos raz (/)..............................................................................77
5.6 /bin.........................................................................................................................................77
5.7 /boot......................................................................................................................................78
5.8 Otros archivos y directorios en /boot.....................................................................................79
5.9 /dev........................................................................................................................................80
5.10 /etc.......................................................................................................................................81
5.11 /home...................................................................................................................................81
5.12 /lib........................................................................................................................................82
5.13 /media..................................................................................................................................82
5.14 /mnt.....................................................................................................................................83
5.15 /opt.......................................................................................................................................83
5.16 /proc.....................................................................................................................................84
5.17 /root.....................................................................................................................................85
5.18 /sys.......................................................................................................................................85
5.19 /sbin.....................................................................................................................................85
5.20 /tmp.....................................................................................................................................86
5.21 /usr.......................................................................................................................................86
5.22 /var.......................................................................................................................................87
5.23 /run......................................................................................................................................88
Comprobacin de conocimientos 5.1...........................................................................................88
Comprobacin de conocimientos 5.2...........................................................................................89
5.24 Laboratorio 5.1.....................................................................................................................89
Objetivos de aprendizaje (revision)..............................................................................................93
Captulo 6. Servicios del Kernel y Configuracin...............................................................................94
Objetivos de Aprendizaje.............................................................................................................94
6.1 Informacin General del Kernel..............................................................................................95
6.2 Tareas Principales del Kernel..................................................................................................95
6.3 Lnea de comandos del Kernel................................................................................................95
6.4 Parametros de Inicio del Kernel..............................................................................................97
6.5 sysctl.......................................................................................................................................98
Comprobacin de Conocimientos 6.1..........................................................................................99
LFS201: Fundamentos de Administracin de Sistemas Linux

6.6 Laboratorio 6.1.......................................................................................................................99


6.6 Laboratortio 6.2....................................................................................................................100
Objetivos de aprendizaje (Revision)...........................................................................................101
Captulo 7. Mdulos del Kernel......................................................................................................102
Objetivos de Aprendizaje...........................................................................................................102
7.1 Ventajas de los mdulos del Kernel......................................................................................103
7.2 Herramientas de trabajo con mdulos.................................................................................103
7.3 Carga y descraga de msulos................................................................................................104
7.4 modprobe.............................................................................................................................105
7.5 Algunas consideraciones en relacin a los modulos.............................................................105
7.6 modinfo................................................................................................................................106
7.7 Parmetros en los Mdulos..................................................................................................107
7.8 Configuracion en los modulos del kernel..............................................................................107
Comprobacion de Conocimientos 7.1........................................................................................107
7.9 Laboratorio 7.1.....................................................................................................................108
Objetivos de aprendizaje (Revisin)...........................................................................................108
Captulo 8. Dispositivos y UDEV......................................................................................................109
Objetivos de aprendizaje............................................................................................................109
8.1 Nodos de dispositivo............................................................................................................110
8.2 Numeros mayor y menor......................................................................................................111
8.3 udev......................................................................................................................................112
8.4 Componentes de udev.........................................................................................................113
8.5 udev y hotplug......................................................................................................................113
8.6 El gestor de dispositivos udev...............................................................................................114
8.7 Archivos de reglas udev........................................................................................................114
8.8 Creando reglas udev.............................................................................................................115
8.9 Algunos ejemplos de archivos y reglas.................................................................................115
Comprobacion de Conocimientos 8.1........................................................................................116
Objetivos de aprendizaje (revision)............................................................................................116
Captulo 9. Particionamiento y Formateo de Discos...................................................................117
Objetivos de aprendizaje............................................................................................................117
9.1 Tipos comunes de discos......................................................................................................118
9.2 Geometria del disco.............................................................................................................119
LFS201: Fundamentos de Administracin de Sistemas Linux

9.3 Particionamiento..................................................................................................................120
9.4 Por qu particionar?.............................................................................................................121
9.5 Tabla de particiones..............................................................................................................122
9.6 Nombres de dispositivos de disco y nodos...........................................................................123
9.7 Ms cerca de nombres de dispositivos SCSI.........................................................................123
9.8 blkid y lsblk...........................................................................................................................124
9.9 Dimensionando particiones..................................................................................................125
9.10 Respaldar y restaurar tablas de particiones........................................................................126
9.11 Editores de la tabla de particiones.....................................................................................127
9.12 Uso de fdisk........................................................................................................................127
Comprobacion de conocimientos 9.1.........................................................................................128
Comprobacion de conocimientos 9.2.........................................................................................129
9.13 Lab 9.1................................................................................................................................129
9.13 Lab 9.2................................................................................................................................131
9.13 Lab 9.3................................................................................................................................134
9.13 Lab 9.4................................................................................................................................137
Objetivos de aprendizaje (Revision)...........................................................................................137
Captulo 10. Cifrado de Discos........................................................................................................138
Objetivos de aprendizaje............................................................................................................138
10.1 Por qu utilizar cifrado?......................................................................................................139
10.2 Luks....................................................................................................................................139
10.3 crypsetup............................................................................................................................139
10.4 uso de una particin cifrada...............................................................................................140
10.5 Montado en el arranque.....................................................................................................141
Comprobacion de conocimientos 10.1.......................................................................................141
10.6 Laboratorio 6.1...................................................................................................................142
10.6 Laboratorio 6.1...................................................................................................................144
Objetivos de aprendizaje (Revision)...........................................................................................145
Captulo 11. Sistemas de archivos Linux y el VFS............................................................................146
Objetivos de aprendizaje............................................................................................................146
11.1 Conceptos bsicos de un sistema de archivos....................................................................147
11.2 Configuracion del rbol del sistema de archivos.................................................................147
11.3 Virtual File System (VFS).....................................................................................................147
LFS201: Fundamentos de Administracin de Sistemas Linux

11.4 Sistemas de archivos disponbles........................................................................................149


11.5 Sistemas de archivos transaccionales.................................................................................150
11.6 Sistemas de archivos soportados en el sistema local..........................................................151
11.7 Sistemas de archivos especiales.........................................................................................151
Comprobacion de conocimientos 11.1.......................................................................................152
Comprobacion de conocimientos 11.2.......................................................................................153
11.8 Laboratorio 11.1.................................................................................................................154
Objetivos de aprendizaje (Revision)...........................................................................................156
Captulo 12. Caractersticas de los sistemas de archivos: atributos, creacin, verificacin, montado
.......................................................................................................................................................157
Objetivos de aprendizaje............................................................................................................157
12.1 Inodos.................................................................................................................................158
12.2 Archivos de directorio........................................................................................................159
12.3 Atributos extendidos y lsattr/chattr....................................................................................159
12.4 Crear y formatear sistemas de archivos..............................................................................160
12.5 Verificar y reparar sistemas de archivos.............................................................................161
12.6 Montar y desmontar sistemas de archivos.........................................................................162
12.7 mount.................................................................................................................................163
12.8 Opciones de mount............................................................................................................164
12.9 umount...............................................................................................................................165
12.10 Montar sistemas de archivos en el arranque....................................................................166
12.11 Lista de los sistemas de archivos montados actualmente................................................167
Comprobacion de conocimientos 12.1.......................................................................................168
Comprobacion de conocimientos 12.2.......................................................................................168
12.12 Laboratorio 12.1...............................................................................................................169
12.12 Laboratorio 12.2...............................................................................................................171
Objetivos de aprendizaje (Revision)...........................................................................................174
Captulo 13. Caractersticas del sistema de archivos: intercambio, cuotas, uso.............................175
Objetivo de aprendizaje.............................................................................................................175
13.1 Intercambio (swap).............................................................................................................176
13.2 Cuotas................................................................................................................................177
13.3 Configuracion del sistema de cuotas..................................................................................178
13.4 quotacheck.........................................................................................................................179
LFS201: Fundamentos de Administracin de Sistemas Linux

13.5 Habilitar y deshabilitar cuotas............................................................................................179


13.6 Examinar cuotas.................................................................................................................181
13.7 Configuracion de cuotas especificas...................................................................................181
13.8 Uso del sistema de archivos...............................................................................................182
13.9 Uso del espacio en disco....................................................................................................183
Comprobacion de conocimientos 13.1.......................................................................................183
Comprobacion de conocimientos 13.2.......................................................................................183
Comprobacion de conocimientos 13.3.......................................................................................184
13.10 Laboratorio 13.1...............................................................................................................184
13.10 Laboratorio 13.2...............................................................................................................185
Objetivos de aprendizaje (Revision)...........................................................................................187
Captulo 14. Los sistemas de archivos Ext2/Ext3/Ext4....................................................................188
Objetivos de aprendizaje............................................................................................................188
14.1 Historia de ext4 y datos bsicos.........................................................................................189
14.2 Caracteristica de ext4.........................................................................................................189
14.3 Diseo de ext4....................................................................................................................190
14.4 Grupos de bloques.............................................................................................................191
14.5 dumpe2fs...........................................................................................................................192
14.6 tune2fs...............................................................................................................................194
14.7 Informacion del superbloque.............................................................................................194
14.8 Bloques de datos e inodos..................................................................................................195
14.9 Mejoras del sistema de archivos ext4.................................................................................196
Comprobacion de conocimientos 14.1.......................................................................................196
14.10 Laboratorio 14.1...............................................................................................................197
14.10 Laboratorio 14.2...............................................................................................................199
Objetivos de aprendizaje (revision)............................................................................................200
Captulo 15. Los sistemas de archivos XFS y btrfs...........................................................................201
Objetivos de aprendizaje............................................................................................................201
15.1 Caracteristicas de XFS.........................................................................................................202
15.2 Mantenimiento del sistema de archivos XFS......................................................................202
15.3 El sistema de archivos btrfs................................................................................................203
Comprobacion de conocimientos 15.1.......................................................................................204
15.4 Laboratorio 15.1.................................................................................................................204
LFS201: Fundamentos de Administracin de Sistemas Linux

Objetivos de aprendizaje (Revision)...........................................................................................205


Captulo 16. Logical Volume Manager (LVM)..................................................................................206
Objetivos de aprendizaje............................................................................................................206
16.1 LVM....................................................................................................................................207
16.2 LVM y RAID.........................................................................................................................208
16.3 Columenes y Grupos de volmenes...................................................................................208
16.4 Herramientas de volmenes lgicos...................................................................................209
16.5 Creacion de volmenes lgicos..........................................................................................210
16.6 Desplegar informacin de los volmenes lgicos...............................................................211
16.7 Redimensionar volmenes lgicos.....................................................................................211
16.8 Ejemplos de rendimiento...................................................................................................212
16.9 Snapshots de LVM..............................................................................................................212
Comprobacion de conocimientos 16.1.......................................................................................213
Comprobacion de conocimientos 16.2.......................................................................................214
16.10 Laboratorio 16.1...............................................................................................................214
Objetivos de aprendizaje (Revision)...........................................................................................216
Captulo 17. RAID...........................................................................................................................217
Objetivos de aprendizaje............................................................................................................217
17.1 RAID....................................................................................................................................218
17.2 Niveles de RAID..................................................................................................................219
17.3 Configuracion de RAID de software....................................................................................219
17.4 Monitoreo de RAID.............................................................................................................220
17.5 Discos de reserva de RAID..................................................................................................221
Comprobacion de conocimientos 17.1.......................................................................................222
Comprobacion de conocimientos 17.2.......................................................................................222
17.6 Laboratorio 17.1.................................................................................................................223
Objetivos de aprendizaje (revision)............................................................................................225
Captulo 18. Seguridad del sistema local........................................................................................226
Objetivos de aprendizaje............................................................................................................226
18.1 Seguridad del sistema local................................................................................................227
18.2 Crear uan plotica de seguridad...........................................................................................227
18.3 Que incluir en la poltica de seguridad...............................................................................228
18.4 Riesgos a evaluar................................................................................................................228
LFS201: Fundamentos de Administracin de Sistemas Linux

18.5 Elegir una filosofa de seguridad.........................................................................................229


18.6 Guias generales de seguridad.............................................................................................229
18.7 Actualizaciones y seguridad................................................................................................230
18.8 Acceso al hardware y vulnerabilidades...............................................................................230
18.9 Directrices de acceso al hardware......................................................................................231
18.10 Proteccion de la BIOS.......................................................................................................231
18.11 Proteccion del cargador de arranque con contrasea......................................................232
18.12 Seguridad del sistema de archivos: opciones de mount...................................................233
18.13 setuid y setgid..................................................................................................................233
18.14 Configuracion de los bits setuid/setgid.............................................................................234
Comprobacion de conocimientos 18.1.......................................................................................234
18.15 Laboratorio 18.1...............................................................................................................235
18.15 Laboratorio 18.2...............................................................................................................236
Objetivos de aprendizaje (Revision)...........................................................................................237
Captulo 19. Mdulos de seguridad de Linux.................................................................................238
Objetivos de aprendizaje............................................................................................................238
19.1 Que son los modulos de seguridad de Linux?.....................................................................239
19.2 Alternativas de LSM............................................................................................................239
19.3 Resumen de SElinux...........................................................................................................240
19.4 Modulos de SELinux...........................................................................................................240
19.5 Politicas de SELinux............................................................................................................242
19.6 Herramientas de contexto..................................................................................................242
19.7 SELinux y herramientas estndar de lnea de comandos....................................................243
19.8 Herencia y preservacin de contecto de SELinux...............................................................244
19.9 restorecon..........................................................................................................................245
19.19 semanage fcontext...........................................................................................................245
19.11 Uso de booleanos de SELinux...........................................................................................246
19.12 getsebool y setsebool.......................................................................................................247
19.13 heramientas de resolucin de problemas........................................................................248
19.14 Recursos adicionales en lnea...........................................................................................251
19.15 AppArmor.........................................................................................................................251
Comprobacion de conocimientos 19.1.......................................................................................252
Comprobacion de conocimientos 19.2.......................................................................................252
LFS201: Fundamentos de Administracin de Sistemas Linux

10

19.16 laboratorio 19.1................................................................................................................253


Objetivos de aprendizaje (revision)............................................................................................255
Captulo 20. Procesos.....................................................................................................................256
Objetivos de aprendizaje............................................................................................................256
20.1 Procesos, programas y hebras............................................................................................257
20.2 El proceso init.....................................................................................................................257
20.3 Procesos.............................................................................................................................258
20.4 Atributos de un proceso.....................................................................................................259
20.5 Control de procesos con ulimit...........................................................................................259
20.6 Permisos de los procesos y setuid......................................................................................260
20.7 Estados de un proceso........................................................................................................261
20.8 Modos de ejecucin...........................................................................................................261
20.9 Modo usuario.....................................................................................................................262
20.10 Modo Kernel.....................................................................................................................262
20.11 Demonios.........................................................................................................................263
20.12 Procesos creados por el kernel.........................................................................................263
20.13 Creacion de procesos y forking.........................................................................................264
20.14 Creacion de procesos en una Shell...................................................................................265
20.15 Uso de nice para establecer prioridades..........................................................................265
20.16 Modificar el valor de nice.................................................................................................266
Comprobacion de conocimientos 20.1.......................................................................................266
Comprobacion de conocimientos 20.2.......................................................................................267
20.17 Laboratorio 20.1...............................................................................................................267
20.17 Laboratorio 20.2...............................................................................................................269
Objetivos de aprendizaje (revisin)............................................................................................271
Captulo 21. Seales.......................................................................................................................272
Objetivos de aprendizaje............................................................................................................272
21.1 Qu son las seales?..........................................................................................................273
21.2 Tipos de seales.................................................................................................................273
21.3 kill.......................................................................................................................................274
21.4 killall y pkill.........................................................................................................................276
Comprobacion de conocimientos 21.1.......................................................................................276
Comprobacion de conocimientos 21.2.......................................................................................276
LFS201: Fundamentos de Administracin de Sistemas Linux

11

Comprobacion de conocimientos 21.3.......................................................................................277


Comprobacion de conocimientos 21.4.......................................................................................277
Objetivos de aprendizaje (revisin)............................................................................................277
Captulo 22. Monitoreo del sistema...............................................................................................278
Objetivos de aprendizaje............................................................................................................278
22.1 Herramientas disponibles de monitoreo............................................................................279
22.2 Los pseudosistemas de archivos /proc y /sys......................................................................280
22.3 Conceptos bsicos de /proc................................................................................................280
22.4 un vistazo de /proc.............................................................................................................280
22.5 /proc/sys.............................................................................................................................284
22.6 Condeptos bsicos de /sys..................................................................................................285
22.7 Un vistazo de /sys...............................................................................................................286
22.8 sar.......................................................................................................................................288
Comprobacion de conocimientos 22.1.......................................................................................290
Comprobacion de conocimientos 22.2.......................................................................................290
Comprobacion de conocimientos 22.3.......................................................................................290
Comprobacion de conocimientos 22.4.......................................................................................291
22.9 Laboratorio 22.1.................................................................................................................291
Objetivos de aprendizaje (revision)............................................................................................292
Captulo 23. Monitoreo de procesos..............................................................................................293
Objetivos de aprendizaje............................................................................................................293
23.1 Herramientas de monitoreo...............................................................................................294
23.2 Visualizacion del estado de los procesos con ps.................................................................294
23.3 Opcion de formato BSD para ps..........................................................................................295
23.4 Campos de salida de ps......................................................................................................296
23.5 Opcion de formato UNIX para ps........................................................................................297
23.6 Personalizar la salida de ps.................................................................................................298
23.7 Uso de pstree.....................................................................................................................298
23.8 Visulaizar la carga del sistema con top...............................................................................299
23.9 Opciones de top.................................................................................................................300
Comprobacion de conocimientos 23.1.......................................................................................301
Comprobacion de conocimientos 23.2.......................................................................................301
23.10 Laboratorio 23.1...............................................................................................................301
LFS201: Fundamentos de Administracin de Sistemas Linux

12

23.10 Laboratorio 23.1...............................................................................................................302


Objetivos de aprendizaje (Revision)...........................................................................................304
Captulo 24. Monitoreo y ajuste de E/S..........................................................................................305
Objetivos de aprendizaje............................................................................................................305
24.1 Cuellos de botella de disco.................................................................................................306
24.2 iostat...................................................................................................................................306
24.3 Opciones de iostat..............................................................................................................307
24.4 Opciones extendidas de iostat............................................................................................308
24.5 iotop...................................................................................................................................309
24.6 Uso de ionice para ajustar prioridades de E/S....................................................................310
Comprobacion de conocimientos 24.1.......................................................................................311
24.7 Laboratorio 24.1.................................................................................................................311
24.7 Laboratorio 24.2.................................................................................................................314
Objetivos de aprendizaje (Revision)..........................................................................................316
Captulo 25. Planificacin de E/S....................................................................................................317
Objetivos de aprendizaje............................................................................................................317
25.1 Planificacion de E/S............................................................................................................318
25.2 Alternativas del Planificador de E/S....................................................................................318
25.3 Planificador de E/S y dispositivos SSD................................................................................319
25.4 Parametros y cambio del Planificador de E/S en tiempo de ejecucin...............................319
25.5 CFQ (Completely fair Queue Scheduler).............................................................................320
25.6 Parametros ajustables de CFQ............................................................................................321
25.7 Planificador Deadline.........................................................................................................321
25.8 Parametros ajustables de Deadline....................................................................................322
Comprobacion de conocimientos 25.1.......................................................................................322
Comprobacion de conocimientos 25.2.......................................................................................322
25.9 Laboratorio 25.1.................................................................................................................323
Objetivos de aprendizaje (revision)............................................................................................326
Captulo 26. Memoria: monitoreo y ajustes...................................................................................327
Objetivos de aprendizaje............................................................................................................327
26.1 Consideraciones al ajustar la memoria...............................................................................328
26.2 Herramientas de monitoreo de memoria...........................................................................328
26.3 /proc/sys/vm......................................................................................................................329
LFS201: Fundamentos de Administracin de Sistemas Linux

13

26.4 vmstat.................................................................................................................................331
26.5 /proc/meminfo...................................................................................................................335
26.6 OOM Killer..........................................................................................................................337
Comprobacion de conocimientos 26.1.......................................................................................339
Comprobacion de conocimientos 26.2.......................................................................................339
Comprobacion de conocimientos 26.3.......................................................................................339
Comprobacion de conocimientos 26.4.......................................................................................339
26.7 Laboratorio 26.1.................................................................................................................340
Objetivos de aprendizaje (revision)............................................................................................340
Captulo 27. Sistemas de gestin de paquetes...............................................................................341
Objetivos de aprendizaje............................................................................................................341
27.1 Conceptos de empaquetamiento de software...................................................................342
27.2 Razones por las cuales usar paquetes................................................................................342
27.3 Tipos de paquetes..............................................................................................................343
27.4 Sistemas disponibles para gestin de paquetes.................................................................343
27.5 Niveles de empaquetamiento y variedad de herramientas................................................344
27.6 Fuentes de paquetes..........................................................................................................344
27.7 Creacion de paquetes de software.....................................................................................345
Comprobacion de conocimientos 27.1.......................................................................................345
Objetivos de aprendizaje (revision)............................................................................................345
Captulo 28. RPM............................................................................................................................346
Objetivos de aprendizaje............................................................................................................346
28.1 RPM....................................................................................................................................347
28.2 Ventajas en el uso de RPM.................................................................................................347
28.3 Nombres de archivos de paquetes.....................................................................................348
28.4 Directorio de la base de datos............................................................................................348
28.5 Programas auxiliares y ajustes modificables.......................................................................349
28.6 Consultas............................................................................................................................349
28.7 Verificacion de paquetes....................................................................................................350
28.8 Instalacion de paquetes......................................................................................................352
28.10 Actualizacion de paquetes................................................................................................353
28.11 Refrescar paquetes...........................................................................................................353
28.12 Actualizacion de kernel.....................................................................................................354
LFS201: Fundamentos de Administracin de Sistemas Linux

14

28.13 uso de rpm2cpio...............................................................................................................354


Comprobacion de conocimiento 28.1........................................................................................355
Comprobacion de conocimiento 28.2........................................................................................355
28.14 Laboratorio 28.1...............................................................................................................355
28.14 Laboratorio 28.2...............................................................................................................357
Objetivos de aprendizaje (revision)............................................................................................358
Captulo 29. DPKG..........................................................................................................................359
Objetivos de aprendizaje............................................................................................................359
29.1 Conceptos bsicos de DPKG...............................................................................................360
29.2 Nombres de archivo de paquete........................................................................................360
29.3 Paquetes de cdigo fuente.................................................................................................360
29.4 Consultas DPKG..................................................................................................................361
29.5 Instalacion/Actualizacion/Desinstalacion...........................................................................362
Comprobacion de conocimientos 29.1.......................................................................................363
19.6 Laboratorio 29.1.................................................................................................................363
Objetivos de aprendizaje (revision)............................................................................................364
Captulo 30. yum............................................................................................................................365
Objetivos de aprendizaje............................................................................................................365
30.1 Instaladores de paquetes...................................................................................................366
30.2 Que es yum?.......................................................................................................................366
30.3 Ubicacin de los repositorios yum......................................................................................367
30.4 Archivos de repositorio.......................................................................................................367
30.5 Consultas............................................................................................................................368
30.6 Verificacion de paquetes....................................................................................................369
30.7 Instalacion/Actualizacion/Desinstalacion...........................................................................369
30.8 Comandos yum adicionales................................................................................................371
Comprobacion de conocimientos 30.1.......................................................................................372
Comprobacion de conocimientos 30.2.......................................................................................372
Comprobacion de conocimientos 30.3.......................................................................................372
Comprobacion de conocimientos 30.4.......................................................................................372
30.9 Laboratorio 30.1.................................................................................................................373
30.9 Laboratorio 30.2.................................................................................................................374
30.9 Laboratorio 30.3.................................................................................................................375
LFS201: Fundamentos de Administracin de Sistemas Linux

15

30.9 Laboratorio 30.4.................................................................................................................376


Objetivos de aprendizaje............................................................................................................377
Captulo 31. ZYPPER.......................................................................................................................378
Objetivos de aprendizaje............................................................................................................378
31.1 Que es zypper?...................................................................................................................379
31.2 Consultas con zypper..........................................................................................................379
31.3 Instalacion/Actualizacion/Desinstalacion...........................................................................380
31.4 Comandos zypper adicionales............................................................................................380
Comprobacion de conocimientos 31.1.......................................................................................381
Comprobacion de conocimientos 31.2.......................................................................................381
Comprobacion de conocimientos 31.3.......................................................................................381
Comprobacion de conocimientos 31.4.......................................................................................381
31.5 Laboratorio 31.1.................................................................................................................382
31.5 Laboratorio 31.2.................................................................................................................383
Objetivos de aprendizaje (revision)............................................................................................383
Captulo 32. APT.............................................................................................................................384
Objetivos de aprendizaje............................................................................................................384
32.1 Que es APT?.......................................................................................................................385
32.2 apt-get................................................................................................................................385
32.3 Consultas con apt-cache.....................................................................................................385
32.4 Instalacion/Actualizacion/Desinstalacion...........................................................................386
Comprobacion de conocimientos 32.1.......................................................................................387
Comprobacion de conocimientos 32.2.......................................................................................387
Comprobacion de conocimientos 32.3.......................................................................................387
Comprobacion de conocimientos 32.4.......................................................................................388
32.5 Laboratorio 32.1.................................................................................................................388
32.5 laboratorio 32.2..................................................................................................................389
32.5 laboratorio 32.3..................................................................................................................390
Objetivos de aprendizaje (revision)............................................................................................391
Captulo 33. Gestin de cuentas de usuario...................................................................................392
Objetivos de aprendizaje............................................................................................................392
33.1 Cuentas de usuario.............................................................................................................393
33.2 Atributos de una cuenta de usuario...................................................................................393
LFS201: Fundamentos de Administracin de Sistemas Linux

16

33.3 Creacin de cuentas de usuario con useradd.....................................................................394


33.4 Modificacion y eliminacin de cuentas de usuario.............................................................395
33.5 Cuentas bloqueadas...........................................................................................................396
33.6 ID de usuario y /etc/passwd...............................................................................................397
33.7 /etc/shadow.......................................................................................................................398
33.8 Por que usar /etc/shadow?................................................................................................399
33.9 Gestion de contraseas......................................................................................................399
33.10 chage: envejecimiento de la contrasea..........................................................................400
33.11 Shell restringida................................................................................................................401
33.12 Cuentas restringidas.........................................................................................................401
33.13 La cuenta root..................................................................................................................402
33.14 SSH...................................................................................................................................403
33.15 Archivos de configuracin de SSH.....................................................................................403
Comprobacion de conocimientos 33.1.......................................................................................405
33.16 Laboratorio 33.1...............................................................................................................406
Objetivos de aprendizaje (revision)...........................................................................................408
Captulo 34. Gestin de grupos......................................................................................................409
Objetivos de aprendizaje............................................................................................................409
34.1 Grupos...............................................................................................................................410
34.2 Gestion de grupos..............................................................................................................410
34.3 Grupos privados de Usuario...............................................................................................411
34.4 pertenecia a grupos............................................................................................................411
Comprobacion de conocimientos 34.1.......................................................................................412
34.5 Laboratorio 34.1.................................................................................................................412
Objetivos de aprendizaje (revision)............................................................................................414
Captulo 35. Permisos de archivos y propietarios...........................................................................415
Objetivos de aprendizaje............................................................................................................415
35.1 Propietario, grupo y mundo...............................................................................................416
35.2 Derechos de acceso a archivos...........................................................................................416
35.3 Permisos de archivo, seguridad y autenticacin.................................................................417
35.4 Modificacion de permisos: chmod.....................................................................................417
35.5 chmod: sistaxis numrica de permisos...............................................................................418
35.6 Modificacion de ususario y grupo propietario:chown y chgrp............................................418
LFS201: Fundamentos de Administracin de Sistemas Linux

17

35.7 umask.................................................................................................................................419
35.8 ACLs de sistema de archivos...............................................................................................420
35.9 Listado y configuracin de ACLs..........................................................................................420
Comprobacion de conocimientos 35.1.......................................................................................421
Comprobacion de conocimientos 35.1.......................................................................................421
35.10 Laboratorio 35.1...............................................................................................................421
35.10 Laboratorio 35.2...............................................................................................................422
Objetivos de aprendizaje (revision)............................................................................................423
Captulo 36. Pluggable Authentication Modules (PAM)..................................................................424
Objetivos de aprendizaje............................................................................................................424
36.1 PAM: Una aproximacin unificada para la autenticacin....................................................425
36.2 Proceso de autenticacin...................................................................................................425
36.3 Archivos de configuracin de PAM.....................................................................................426
36.4 Reglas de PAM....................................................................................................................426
36.5 Autenticacion LDAP............................................................................................................427
Comprobacion de conocimientos 36.1.......................................................................................428
Comprobacion de conocimientos 36.2.......................................................................................428
36.6 Laboratorio 36.1.................................................................................................................428
Objetivos de aprendizaje (revision)............................................................................................430
Captulo 37. Mtodos de respaldos y recuperacin de la informacin...........................................431
Objetivos de aprendizaje............................................................................................................431
37.1 Por que realizar respaldos?................................................................................................432
37.2 Que necesita tener un respaldo?........................................................................................433
37.3 Unidades de cinta...............................................................................................................433
37.4 Mtodos de respaldo.........................................................................................................434
37.5 Estrategias de respaldo.......................................................................................................434
37.6 Herramientas de respaldo..................................................................................................435
37.7 cpio.....................................................................................................................................436
37.8 Uso de tar para respaldos...................................................................................................437
37.9 Uso de tar para restaurar archivos......................................................................................438
37.10 Respaldos incrementales con tar......................................................................................438
37.11 Compresin: gzip, bzip2, xz y respaldos...........................................................................439
37.12 dd.....................................................................................................................................440
LFS201: Fundamentos de Administracin de Sistemas Linux

18

37.13 Ejemplos de dd.................................................................................................................440


37.14 rsync.................................................................................................................................441
37.15 dump y restore.................................................................................................................442
37.16 Opciones de dump...........................................................................................................442
37.17 Respaldo de Nivel 0 con dump.........................................................................................443
37.18 restore..............................................................................................................................444
37.19 mt.....................................................................................................................................444
37.20 Software de respaldo........................................................................................................445
Comprobacion de conocimientos 36.1 37.1...............................................................................446
Comprobacion de conocimientos 36.1 37.2...............................................................................446
Comprobacion de conocimientos 36.1 37.3...............................................................................447
37.21 Laboratorio 37.1...............................................................................................................447
37.21 Laboratorio 37.2...............................................................................................................449
37.21 Laboratorio 37.3...............................................................................................................451
Objetivos de aprendizaje (revision)............................................................................................452
Captulo 38. Direcciones de red......................................................................................................453
Objetivos de aprendizaje............................................................................................................453
38.1 Direcciones IP.....................................................................................................................454
38.2 Tipos de direcciones IPv4...................................................................................................454
38.3 Direcciones especiales........................................................................................................455
38.4 Tipos de direcciones IPv6...................................................................................................456
38.5 Clases de direcciones IPv4..................................................................................................456
38.6 Mscara de red...................................................................................................................457
38.7 Hostname...........................................................................................................................458
38.8 Obtener y configurar el hostname......................................................................................458
Comprobacion de conocimientos 38.1.......................................................................................460
Comprobacion de conocimientos 38.2.......................................................................................460
Comprobacion de conocimientos 38.3.......................................................................................460
Objetivos de aprendizaje (revision)............................................................................................460
Captulo 39. Configuracin de dispositivos de red..........................................................................461
Objetivos de aprendizaje............................................................................................................461
39.1 Dispositivos de red.............................................................................................................462
39.2 Problemas con nombres de dispositivos de red.................................................................462
LFS201: Fundamentos de Administracin de Sistemas Linux

19

39.3 Nombres predecibles de las interfaces de red....................................................................463


39.4 Ejemplos del esquema nuevo de nombres.........................................................................463
39.5 Archivos de configuracin de una NIC................................................................................464
39.6 ifconfig................................................................................................................................465
39.7 La herramienta ip...............................................................................................................466
39.8 Ejemplos del uso de ip........................................................................................................467
39.9 enrutamiento.....................................................................................................................467
39.10 Ruta por defecto...............................................................................................................468
39.11 Rutas staticas..................................................................................................................469
39.12 Resolucin de nombres....................................................................................................470
39.13 /etc/hosts.........................................................................................................................470
39.14 DNS...................................................................................................................................471
39.15 Herramientas de diagnostico de red.................................................................................472
Comprobacion de conocimientos 39.1.......................................................................................473
Comprobacion de conocimientos 39.2.......................................................................................473
Comprobacion de conocimientos 39.3.......................................................................................473
Comprobacion de conocimientos 39.4.......................................................................................474
Comprobacion de conocimientos 39.5.......................................................................................474
39.16 Laboratorio 39.1...............................................................................................................474
39.16 Laboratorio 39.2...............................................................................................................476
39.16 Laboratorio 39.3...............................................................................................................477
Objetivos de aprendizaje (revision)............................................................................................477
Captulo 40. Cortafuegos................................................................................................................478
Objetivos de aprendizaje............................................................................................................478
40.1 Que es un cortafuegos?......................................................................................................479
40.2 Interfaces y herramientas del cortafuegos.........................................................................479
40.3 firewalld..............................................................................................................................480
40.4 Estado del servicio firewalld...............................................................................................481
40.5 Zonas..................................................................................................................................482
40.6 Gestin de las zonas...........................................................................................................483
40.7 Gestin de fuentes.............................................................................................................484
40.8 Gestin de los servicios y puertos......................................................................................484
40.9 Laboratorio 40.1.................................................................................................................485
LFS201: Fundamentos de Administracin de Sistemas Linux

20

40.9 Laboratorio 40.2.................................................................................................................487


40.9 Laboratorio 40.3.................................................................................................................488
40.9 Laboratorio 40.4.................................................................................................................489
Objetivos de aprendizaje (revision)............................................................................................489
Captulo 41. Resolucin bsica de problemas................................................................................490
Objetivos de aprendizaje............................................................................................................490
41.1 Resumen de la resolucin bsica de problemas.................................................................491
41.2 Tcnicas bsicas..................................................................................................................491
41.3 Intuicion y experiencia.......................................................................................................491
41.4 cosas para verificar: la red..................................................................................................492
41.5 Cosas para verificar: integridad de archivos.......................................................................493
41.6 Fallas en el proceso de arranque........................................................................................493
41.7 Corrupcin y recuperacin de sistemas de archivos...........................................................494
41.8 Medios de rescate/recuperacin........................................................................................495
41.9 Herramientas comunes en medios de rescate/recuperacin.............................................495
41.10 Uso de medios de rescate/recuperacin..........................................................................495
Comprobacion de conocimientos 41.1.......................................................................................496
Comprobacion de conocimientos 41.2.......................................................................................496
Objetivos de aprendizaje (revision)............................................................................................497
Captulo 42. Rescate del sistema....................................................................................................498
Objetivos de aprendizaje............................................................................................................498
42.1 Medios de arranque de emergencia...................................................................................499
42.2 Uso de medios de rescate...................................................................................................499
42.3 Dispositio USB de rescate...................................................................................................500
42.4 Modo de emergencia.........................................................................................................500
42.5 Modo monousuario............................................................................................................501
Comprobacion de conocimientos 42.1.......................................................................................501
Comprobacion de conocimientos 4exit
exir2.2........................................................................................................................................501
Comprobacion de conocimientos 42.3.......................................................................................502
Comprobacion de conocimientos 42.4.......................................................................................502
42.6 Laboratorio 42.1.................................................................................................................503
42.6 Laboratorio 42.2.................................................................................................................504
LFS201: Fundamentos de Administracin de Sistemas Linux

21

42.6 Laboratorio 42.3.................................................................................................................505


42.6 Laboratorio 42.4.................................................................................................................505
42.6 Laboratorio 42.5.................................................................................................................506
Objetivos de aprendizaje (revision)............................................................................................507

LFS201: Fundamentos de Administracin de Sistemas Linux

22

Captulo 1. Prlogo
Este curso cubre administracin de sistemas Linux modernos. Trata todas las tareas ms
importantes, incluyendo: controlar la inicializacin del servicio y sistemas; manejar
particiones de disco y sistemas de archivos; establecer una buena seguridad y prcticas
de respaldo; monitoreo, solucin de problemas y rescate del sistema ante una falla;
instalacin de software y actualizaciones. Las lecciones aprendidas son aplicadas a cada
una de las tres familias de distribuciones de Linux (Red Hat, SUSE y Debian) con un
foco principal en instalaciones Empresariales.
La meta es proveer a los administradores de sistemas de todas las herramientas y
conceptos necesarios para instalar y manejar de forma eficiente una infraestructura de
produccin Linux. Los laboratorios prcticos de ejercicios presentarn una gran
oportunidad para probar y aplicar esas lecciones.

LFS201: Fundamentos de Administracin de Sistemas Linux

23

1.1 Introduccin
Este curso est diseado principalmente para administradores de sistema.
Estamos asumiendo que la mayora de ustedes tienen tareas de configurar, ejecutar y
resolver problemas en mltiples mquinas en lo que es llamado un
ambiente Empresarial. Si bien es cierto que probablemente tenga experiencia significante
con otros sistemas operativos, deseamos que usted aprenda cmo hacer las cosas de
forma correcta y nativa en Linux, mientras que se basa en el conocimiento previo que
posee.
Tambin es probable que ya est utilizando Linux, pero que an no haya estudiado de
forma seria tpicos ms complejos que mantener su sistema personal funcionando
apropiadamente y de forma segura.
Este curso no est diseado principalmente para:

Usuarios nuevos sin mucha experiencia previa con cualquier sistema operativo.
A los usuarios de Linux relativamente nuevos se les recomienda tomar este
curso solamente despus de haber tomado un curso introductorio como
el LFS101x.2 de Linux Foundation.
Desarrolladores (a nivel del kernel o de aplicaciones).
La mayora de los desarrolladores encontrarn interesante este material y entre
ms sepa alguien de teora de sistemas operativos, funcionamiento interno del
kernel, aplicaciones, etc., ms tambin querr salirse de este curso. Tambin hay
muchos usuarios avanzados quienes realizan ambas cosas, administracin de
sistemas y desarrollo.

Administradores experimentados que se concentran en la optimizacin del


rendimiento.
Vamos a discutir algunos problemas de ajuste de rendimiento debido a que la
administracin y el rendimiento estn claramente asociados. Sin embargo, no
vamos a entrar en detalles, ya que este tema se trata en un curso ms dedicado y
avanzado como es el LFS426 de Linux Foundation.

1.2 Relacin con LFS101x2


Estamos asumiendo que usted ha tomado el curso gratuito Introduccin a Linux (2da
Ed.) de Linux Foundation enedX. Este MOOC (Massive Open Online Course) puede ser
encontrado haciendo click aqu, o buscando Linux enedx.org. O por otro lado, que usted
tiene conocimiento equivalente o incluso mejor que lo que podra haber obtenido al tomar
ese curso.

LFS201: Fundamentos de Administracin de Sistemas Linux

24

LFS101x.2 es gratuito e incluso si usted siente que no tiene que tomar ese curso,
recomendamos que se inscriba en l; al menos puede echar un vistazo rpido del
material. Algunos de los temas contenidos en LFS101x.2 estn cubiertos en este curso,
generalmente en un nivel ms detallado acorde con nuestra audiencia. El tema de gestin
de paquetes es un ejemplo claro de ello.
En lugar de repetirnos, instamos a que usted se refiera el curso introductorio para temas
bsicos no cubiertos aqu.
Existen otros temas que los administradores de sistemas deben saber, que no cubriremos
en este curso. En particular:

Editores de texto (vi, emacs, nano, gedit, etc.)


Encontrar documentacin de Linux
Manipulacin de texto (sed, grep, awk, cut, paste, tail, head, etc.)
Utilidades de archivo (find, locate, file, etc.)
Impresin (configurar impresoras, manejo de trabajos de impresin)
Interfaces grficas y su administracin
Programas en el shell bash
Instalacin de sistemas

Antes de tomar este curso, le recomendamos que por lo menos eche un vistazo
a LFS101x.2. Si no se siente cmodo o totalmente familiar con algunas herramientas
bsicas y los procedimientos que usaremos en este curso, usted probablemente los
encontrar ah, ya que este curso pretende tenerlo como complemento.

1.3 Uso como preparacin para el examen LFCS


La Linux Foundation ofrece un Programa de Certificacin de dos niveles:

LFCS (Linux Foundation Certified Sysadmin)


LFCE (Linux Foundation Certified Engineer)

Todos los detalles acerca de este programa se pueden encontrar


en http://training.linuxfoundation.org/certification. Esta informacin incluye una descripcin
detallada de los Dominios y Competencias cubiertas por cada examen.
Los asistentes a este curso (y al curso de introductorio de prerrequisito) habrn cubierto
todas las reas descritas como necesarias para la certificacin LFCS. Adems de este
curso, la Linux Foundation ofrece otros recursos para ayudar en la preparacin de
exmenes.

LFS201: Fundamentos de Administracin de Sistemas Linux

25

LFS201: Fundamentos de Administracin de Sistemas Linux

26

1.4 Formato del curso


Con el fin de que sea ms fcil distinguir los distintos tipos de contenido en el curso,
utilizamos la codificacin de colores y formatos que se muestran a continuacin:

Negrita: nombres de programas o servicios (o utilizado para enfatizar)


Azul claro: seala enlaces
Azul oscuro: texto en la lnea de comandos
Verde: salida del sistema en la lnea de comandos
Caf: nombres de archivos y contenido de archivos

Para ver los grficos incluidos en este curso en un formato ms grande, simplemente
haga clic en el grfico y automticamente se mostrar en una ventana emergente.

1.5 La Documentacin
De vez en cuando, vamos a discutir cmo elaborar un comando utilizando un programa de
utilidad de Linux, pero slo mostraremos uno o unos pocos ejemplos de seleccin de
opciones, argumentos, etc. Adems no consideraremos a los modos menos comunes de
uso; muchos programas son increblemente verstiles y tienen muchas caractersticas
raramente utilizadas.
Mientras que a menudo le diremos explcitamente lea la pgina Man para obtener ms
detalles, usted debe asumir que lo estamos diciendo implcitamente todo el tiempo.
Usted debe desarrollar el hbito de la lectura de la documentacin de fcil acceso en su
distribucin de Linux sin preguntar, para la mayora de las utilidades.
Adems de las pginas man, la mayora de los programas tienen dentro de s una ayuda
como tambin informacin acerca de su uso. Generalmente esto se accede mediante el
uso de la opcinhelp, como en dfhelp.
Si tratamos de incluir toda esa informacin en el material del curso, sera una duplicacin
intil y de hecho el contenido se diluira de una mala manera.

LFS201: Fundamentos de Administracin de Sistemas Linux

27

1.6 Plataforma de trabajo


Este curso est diseado para trabajar en plataformas basadas en x86, ya sea en
hardware nativo o como una mquina virtual (VM) bajo un hypervisor,
como KVM, VMWare u Oracle Virtual Box.
Casi todo en este curso es completamente relevante para otras arquitecturas,
pero x86 real o virtual cubre la mayora de las implementaciones.
No consideraremos 32-bit y asumiremos 64-bit a lo largo del curso. Sin embargo, si usted
est ejecutando un x86 de 32-bit por alguna razn, casi todo lo que estamos haciendo
seguir siendo vlido, aunque no lo hemos probado.
Tampoco estamos apuntando a plataformas de Linux embebido, donde a pesar de que
las implementaciones se basan en el mismo kernel Linux y utilizan muchos de los
mismos ingredientes del espacio de usuario, uno no suele hablar de la administracin del
sistema para los dispositivos que se utilizan como soluciones especializadas (appliances).
Existen importantes ingredientes bsicos que son muy diferentes, como el uso de
diferentes programas del gestor de arranque y sistemas de archivos. Adems, los
recursos tales como memoria, capacidad de almacenamiento y del procesador pueden
diferir grandemente.
Las mismas consideraciones se aplican a Android (una forma particular de Linux
embebido), en donde si bien es cierto que el kernel es Linux, el sistema de archivos y el
espacio de aplicaciones son muy diferentes a lo que se encuentra en un
sistema Linux estndar.

1.7 Lnea de comandos vs. Interfaz Grafica


Muchas de las tareas administrativas pueden ser realizadas desde la lnea de comandos
o desde una aplicacin grfica. Casi siempre hay ms flexibilidad y capacidades
adicionales en el enfoque de la lnea de comandos, ya que la capa de abstraccin se ha
eliminado. El inconveniente de la lnea de comandos, sin embargo, es que el
administrador puede tener que recordar ms o buscar informacin cuando tiene que
completar una tarea.
Hay una gran variedad de entornos de escritorio grficos utilizados en Linux, los dos ms
comunes son GNOME y KDE. Cada uno de ellos viene en mltiples versiones, o
generaciones. There are a variety of graphical desktop environments used in Linux, the
two most common being GNOME and KDE.
En este curso no queremos involucrarnos en interfaces grficas, debido a que varan
mucho entre las versiones y familias de distribuciones de Linux. Adems, muchos
servidores no tienen una interfaz grfica instalada.
Si ya ha tomado el curso LFS101x.2, entonces estar familiarizado con los temas.
El beneficio es que habr muy poca diferencia entre las distribuciones para lo que
estamos haciendo, y aparte de las tareas sencillas que implican la gestin de paquetes,
no tendremos que explicar las cosas por separado para cada distribucin muy a menudo.
Para este curso, usted puede trabajar desde la lnea de comandos en el equipo local,
usando una consola o un emulador de terminal como gnome-terminal corriendo en un
escritorio grfico. O puede trabajar remotamente mediante una sesin ssh o vpn. Casi
todo lo que estamos haciendo se aplicar igualmente bien en el caso de sesin remota.
LFS201: Fundamentos de Administracin de Sistemas Linux

28

Las excepciones surgirn slo cuando se necesita acceso fsico a la mquina, tales como
cuando se intenta iniciar en un entorno de rescate.

LFS201: Fundamentos de Administracin de Sistemas Linux

29

1.8 Distribuciones de Linux a utilizar


Hay una lista casi infinita de distribuciones de Linux; simplemente hojee la lista
en http://lwn.net/Distributions.
Sin
embargo,
nos
estamos
concentrando
en
este
curso
en
las
distribuciones Empresariales de Linux. La gran mayora de estos sistemas utilizan:
1. Red Hat Enterprise Linux: Generalmente lo abreviaremos como RHEL o con la
versin como en RHEL 6 or RHEL 7, lanzada en 2014.
Bajo el paraguas de RHEL incluiremos distribuciones derivadas como
CentOS y Scientific OS; para los efectos de este curso deben ser idnticas, as
como su libre disposicin sin cargo. Hay algunas diferencias en la actualizacin de
paquetes para los sistemas oficiales de RHEL, pero no vamos a investigar lo
suficiente como para verlos aqu. Para nuestros propsitos Oracle Linux es
realmente una copia casi idntica a RHEL y no merece ninguna discusin distinta
aqu.
Fedora est en la familia Red Hat y en realidad puede ser visto como la versin
hacia donde RHEL se dirige. Las versiones actuales son bastante similares
a RHEL 7. Sin embargo, es raro que Fedora se utilice en implementaciones
Empresariales debido a que es de vanguardia y cambia caractersticas
importantes (la versin del kernel, por ejemplo) muy a menudo y por comodidad,
donde ms bien la estabilidad es clave.
2. SUSE es una distribucin Empresarial completa con una cuota de mercado

significativa. Se relaciona estrechamente con openSUSE, el cual es


a SUSE como Fedora a RHEL. Debido a que no hay ningn clon de SUSE como
lo hay con CentOS y RHEL, nos basaremos en openSUSE como un sistema de
trabajo; las diferencias deben ser pequeas y en el peor caso los estudiantes se
mantendrn cercanos a desarrollos futuros.
3. Debian (y Ubuntu que es un derivado de Debian) tambin se utiliza en entornos

empresariales.
En
su
mayor
parte
cuando
hablamos
de
sistemas Debian o Ubuntu, vamos a utilizar la versin de Ubuntu LTS 14.04.
Otras distribuciones derivadas de Debian como Linux Mint no sern muy
diferentes.
Todo en este curso se trabajar en las tres principales familias de distribucin
mencionadas anteriormente, y cuando sea necesario explicaremos las diferencias que
surjan; estas a menudo surgen slo en cmo se empaqueta el software y no en la forma
en que se utiliza.
En ningn caso criticamos a alguien que utilice distribuciones menos difundidas aunque
tambin ampliamente respetadas, como Arch Linux y Gentoo, las cuales se usan en
implementaciones Empresariales. Debido a que ambas son distribuciones de
liberacin continua de software (no tienen versiones especficas de lanzamiento, sino

LFS201: Fundamentos de Administracin de Sistemas Linux

30

que se actualizan constantemente) son las ms utilizadas por administradores muy


expertos en entornos Empresariales.

1.9 Instalacin: que usar para este curso


Le invitamos a utilizar su propia instalacin local favorita de Linux, usando cualquier
distribucin con la que se sienta cmodo. De vez en cuando es posible que usted necesite
instalar un programa o paquete que usamos en este curso y tendr que ir a buscarlo e
instalarlo, utilizando los mtodos habituales de su distribucin Linux.
Debido a que no estamos usando un entorno grfico, usted debe ser capaz de hacer el
trabajo del curso en una mquina en la que inicie sesin de forma remota.
Puede utilizar una mquina fsica, o una mquina virtual en ejecucin bajo
un hipervisor como VMware, Oracle Virtual Box o KVM. En parte porque no nos
estamos concentrando en optimizacin de rendimiento, una mquina virtual debe
funcionar tan bien como una mquina fsica; por una parte el rendimiento menor no ser
un problema, y por otra, usted puede hacer mucho menos dao.
La Linux Foundation prepar un documento sobre los temas involucrados al realizar una
instalacin para LFS101x, el cual es completamente relevante para este curso. Puede
descargarlo haciendo click aqu (si es que se ha registrado para el MOOC) o haciendo clic
en el botn Documento a continuacin. Entre otras cosas le dar informacin sobre las
distintas opciones para hipervisores.
Preparacin del sistema en documentacin final

1.10 Calendario del curso


Este curso es completamente autodidacta; no hay ningn horario fijo para ir a travs del
material. Puede revisar el curso a su propio ritmo y siempre ser devuelto a exactamente
donde lo dej cuando vuelva a iniciar una nueva sesin. Sin embargo, de todas formas
sugerimos evitar pausas largas entre perodos de trabajo, para que el aprendizaje sea
ms rpido y la retencin del contenido sea mejor.
Usted tiene acceso ilimitado a este curso por 12 meses desde la fecha en la cual se
registr, incluso despus de haber completado el curso.
Los captulos en el curso han sido diseados para construirse uno sobre el otro.
Probablemente lo mejor para trabajar a travs de ellos es de forma secuencial; si se salta
o pasa por algunos captulos rpidamente, puede encontrar que hay temas en discusin a
los que no ha estado expuesto todava. Pero todo esto es a su propio ritmo y siempre se
puede volver atrs, por lo que puede hacer su propio camino a travs del material.
LFS201: Fundamentos de Administracin de Sistemas Linux

31

LFS201: Fundamentos de Administracin de Sistemas Linux

32

1.11 Laboratorios y Ejercicios


En todos los cursos de Linux Foundation (en cualquier formato) ponemos un fuerte
nfasis en el aprendizaje mediante la prctica. En las clases presenciales, dirigidas por un
instructor, casi siempre buscamos un equilibrio 50/50 entre la conferencia y debate.
Tambin en trabajar en ejercicios de laboratorio o en tareas, las que llevan a cabo el
trabajo descrito en la clase, o probar con variaciones ms ambiciosas. Los instructores
ayudan durante estas sesiones de laboratorio a los estudiantes a descubrir cmo hacer
las cosas, depurar su cdigo y scripts, etc. Al ser este un curso autodidacta, sin un
instructor presencial, estar en sus manos el controlar su presupuesto de tiempo y
asegrese de tomar suficiente tiempo para hacer los laboratorios.
Para cada ejercicio presentamos la descripcin de un archivo que puede descargar. En
muchos casos, tambin hay un archivo asociado a la solucin (en unos pocos casos
tambin hay un archivo que contiene scripts necesarios para completar el laboratorio).
Tenga en cuenta que en muchos casos las soluciones no son nicas, as que considere
estas respuestas como un mtodo representativo para resolver el problema; usted puede
tener una mejor!
Para mayor comodidad, tambin puede descargar en un archivo todos los ejercicios de
laboratorio y soluciones. Para ello haga click en el botn Documento que se muestra a
continuacin.
Usted tambin encontrar una serie de preguntas de verificacin de conocimientos al final
de cada captulo. Estas preguntas, al igual que los laboratorios, fueron diseados con un
objetivo principal en mente: ayudarle a comprender mejor el contenido del curso y reforzar
lo que ha aprendido. Es importante destacar que los laboratorios y preguntas de
verificacin de conocimientos no se califican. Nos gustara hacer hincapi en que no
se le exigir tomar un examen final para completar este curso.

LFS201: Fundamentos de Administracin de Sistemas Linux

33

1.12 Cambio, repeticin y guerras santas


Tres piezas importantes de contexto:
1

Las cosas cambian en Linux. No importa lo duro que hemos trabajado para estar al
da, Linux est en constante evolucin, tanto a nivel tcnico (incluyendo
caractersticas del kernel) y al nivel de distribucin y la interfaz. Por favor, tenga en
mente que hemos tratado de estar lo ms actualizados posible al momento en que
este curso fue publicado, pero habr cambios y novedades que no hemos discutido,
es inevitable.

Hemos repetido unas pocas cosas en el material del curso. Es casi imposible en un
curso de esta amplitud no revisar temas que han sido cubiertos previamente. Los
comentarios cortos son tiles, as que no tendr que ir recorriendo a travs de las
secciones anteriores para refrescar su memoria. Sabemos que hemos hecho esto, y
por lo menos en la mayora de los casos es por diseo, no por accidente.

Hemos intentado evitar guerras santas. Hay muchas reas donde hay fuertes
desacuerdos de preferencias en la comunidad Linux (y de forma ms amplia en el
cdigo abierto). Los ejemplos incluyen el mejor editor: emacs vs vi; el mejor escritorio
grfico: GNOME vs KDE, etc. Generalmente hemos elegido (cuando sea necesario)
una alternativa particular tan slo para mantener las cosas claras; por ejemplo
podemos hablar ms acerca de GNOME que KDE simplemente porque tiene una
base de usuarios ms grande, no porque estamos tomando una posicin en cuanto a
que es superior.

1.13 Acerca de Linux Foundation


La Linux Foundation es el consorcio sin fines de lucro dedicado a fomentar el
crecimiento de Linux. Patrocina el trabajo del creador de Linux, Linus Torvalds, y es
apoyado por las principales empresas de tecnologa y desarrolladores alrededor del
mundo.
La Linux Foundation promueve, protege y hace que Linux avance a travs de los
recursos provedos por sus miembros y la comunidad de desarrollo de cdigo abierto para
asegurar que Linux siga siendo libre y avanzado tcnicamente.
La Linux Foundation:

LFS201: Fundamentos de Administracin de Sistemas Linux

34

Sirve como portavoz neutral de Linux.

Patrocina al creador de Linux - Linus


Torvalds - y a otros desarrolladores clave
del kernel para que puedan trabajar a
tiempo completo en la mejora de Linux.
Es de vital importancia que ellos sigan
siendo independientes.

Genera una investigacin original y


contenido que promueve la comprensin
de la plataforma Linux.
Llega a millones de personas a travs de
sus sitios web, incluyendo
http://www.linux.com.

Fomenta la innovacin mediante la organizacin de grandes eventos de


colaboracin (incluyendo LinuxCon) e iniciativas de la industria.

Gestiona la marca Linux, ofrece proteccin legal de propiedad intelectual a los


desarrolladores y un fondo de defensa legal. Coordina la colaboracin jurdica y
educativa entre la industria y la comunidad, incluyendo trabajo importante para
defender Linux de a amenazas legales.

Ofrece servicios de estandarizacin y soporte


aplicaciones, incluyendo el Linux Standard Base.

Desarrolla y ofrece programas de capacitacin.

para

desarrolladores

de

1.14 Eventos de Linux Foundation


La Linux Foundation alberga un nmero creciente de eventos cada ao, incluyendo:

LinuxCon Amrica del Norte, Europa y Japn


Linux Kernel Summit
CloudOpen Amrica del Norte y Japn
Collaboration Summit
Embedded Linux Conference Amrica del Norte y Europa
Enterprise End User Summit
Android Builders Summit
Tizen Developer Conference
Automotive Linux Summit
ApacheCon
CloudStack
Foro KVM
Linux Storage Filesystem & MM Summit

LFS201: Fundamentos de Administracin de Sistemas Linux

35

La Linux Foundation tambin presta servicios a la comunidad de desarrollo de Linux,


incluyendo un fondo de viajes para desarrolladores de cdigo abierto, apoyo legal y otras
formas de asistencia administrativa. A travs de sus grupos de trabajo, los miembros y
desarrolladores pueden colaborar en reas tcnicas clave.

1.15 Certificaciones
La Linux Foundation ofrece varios de tipos de capacitacin:

Sala de clases
En lnea
En su sitio de trabajo
En eventos
Vea los siguientes enlaces para obtener ms informacin sobre cursos especficos
ofrecidos por la Linux Foundation:
Entrenamiento en Programacin y Desarrollo en
Linux: http://training.linuxfoundation.org/linux-courses/development-training
Cursos de IT Empresarial y Administracin de Sistemas
Linux: http://training.linuxfoundation.org/linux-courses/system-administrationtraining
Cursos de Cumplimiento de Normas de Cdigo
Abierto: http://training.linuxfoundation.org/linux-courses/open-source-compliancecourses

Para informacin adicional, incluyendo requisitos tcnicos y otros aspectos logsticos,


consulte http://training.linuxfoundation.org.

LFS201: Fundamentos de Administracin de Sistemas Linux

36

Laboratorio 1.1
Configurar el sistema con sudo
Es muy peligroso ejecutar una terminal de root a menos de que sea absolutamente necesario: un
solo error de tipeo o de otro tipo puede causar daos graves (incluso no recuperables).
Por lo tanto, el procedimiento recomendado es configurar el sistema de tal forma que comandos
nicos puedan ser ejecutados con privilegios de superusuario, a travs del mecanismo de sudo.
Con sudo el usuario necesita conocer su propia clave solamente y nunca la del usuario root.
Si usted est usando una distribucin como Ubuntu, es posible que no necesite realizar este
laboratorio para tener sudo configurado de forma apropiada para el curso. Sin embargo, todava
necesita asegurarse de comprender el procedimiento.
Para comprobar si su sistema ya est configurado para permitir que la cuenta de usuario que est
usando ejecute sudo, ejecute un comando simple como el siguiente:
$ sudo ls

Se le debera pedir la clave de usuario y luego le debe pedir su contrasea de usuario y, a


continuacin el comando sera ejecutado. Si en cambio obtiene un mensaje de error, entonces
necesitar realizar el siguiente procedimiento.
Inicie una terminal de root a travs del comando su y luego provea la clave de root, no su clave de
usuario.
En todas las distribuciones recientes de Linux usted debera ir al subdirectorio /etc/sudoers.d y
crear un archivo, generalmente con el nombre del usuario al cual root desea concederle acceso a
sudo. Sin embargo, esta convencin no es realmente necesaria, ya que sudo escaneara todos los
archivos en este directorio. El archivo puede contener algo tan simple como lo siguiente:
estudiante ALL=(ALL) ALL

Si el usuario es estudiante.
Una prctica antigua (la que an funciona) es agregar la lnea al final del archivo /etc/sudoers. Lo
ms recomendable es hacerlo con el programa visudo, ya que se ocupa de que usted est usando
la sintaxis adecuada mientras edita.
Es posible que necesite configurar los permisos adecuados en el archivo, de la siguiente forma:
$ chmod 440 /etc/sudoers.d/estudiante

Tenga en cuenta que algunas distribuciones Linux pueden requerir permisos 400 en vez de 440.
Luego de haber realizado esos pasos, salga de la consola root con exit e intente de nuevo sudo ls.

LFS201: Fundamentos de Administracin de Sistemas Linux

37

Hay muchas otras cosas que un administrador puede configurar en sudo, incluyendo permisos para
usuarios especficos, limitar las bsquedas a ciertos directorios, etc. El archivo /etc/sudoers est
muy bien autodocumentado.
Sin embargo, hay un ajuste adicional que recomendamos altamente que realice, an si su sistema
ya tiene configurado sudo. La mayora de las distribuciones establecen directorios diferentes para
los directorios en donde se encuentran los ejecutables de los usuarios normales y los de root.
En particular los directorios /sbin y /usr/sbin no son encontrados en las bsquedas, ya que sudo
hereda el PATH del usuario, no del superusuario. Por lo tanto, en este curso estaremos
constantemente recordndole la ruta completa de varias herramientas de administracin;
cualquier otra mejora en cuanto a la seguridad de esta implementacin probablemente no valdra
la pena (como intentar esconder los binarios del superusuario, por ejemplo).
En consecuencia, sugerimos agregar la siguiente lnea al archivo .bashrc en su directorio de
usuario:
PATH=$PATH:/usr/sbin:/sbin

No es necesario que reinicie, en vez de eso, puede salir de la sesin y entrar nuevamente, lo cual
sera completamente efectivo.

LFS201: Fundamentos de Administracin de Sistemas Linux

38

Captulo 2. Inicio y Apagado del Sistema


Es importante delinear los pasos bsicos de la secuencia de inicio y comprender el papel
de la BIOS y del UEFI, y de los principales tipos de cargadores de inicio. Los archivos de
configuracin en /etc controlan el comportamiento del inicio, particularmente los
de /etc/sysconfig y/etc/default. El apagado y reinicio del sistema se puede realizar de
diferentes maneras.

Objetivos de aprendizaje
Al final de este captulo, usted debera ser capaz de:

Explicar el proceso de arranque.


Identificar varios tipos de cargadores de arranque.
Describir lo que hace la BIOS.
Identificar los archivos de configuracin importantes.
Describir cmo el sistema se apaga y reinicia.

LFS201: Fundamentos de Administracin de Sistemas Linux

39

2.1 Comprendiendo la secuencia de inicio


Los pasos bsicos en el proceso de inicio son:
1

La BIOS/UEFI localiza y ejecuta el gestor de arranque, o cargador de inicio.

El gestor de arranque carga el kernel.


El ncleo inicia el proceso init (pid=1).

3
4

init gestiona la inicializacin del sistema, utilizando scripts de inicio SysVinit


convencionales, o usando Upstart o systemd.
La secuencia de arranque

Cuando el computador se enciende, ste slo


puede realizar las operaciones que la BIOS
(Basic Input Output System) le ordena realizar.
Primero,
la BIOS ejecuta
el POST
(Power On Self Test), el cual verifica la
memoria y el hardware. Luego busca un
programa de arranque en una ubicacin o
dispositivo
especfico.
Generalmente
el
programa de arranque se encuentra en
el MBR del dispositivo (Master Boot Record).
Entonces el control del computador se
transfiere a este programa de booteo
(generalmente GRUB).
Entonces el programa de arranque carga el
kernel en memoria y lo ejecuta. En
plataformas x86 (y muchas otras), el kernel
tiene que descomprimirse primero. Luego
realiza verificaciones de hardware, gana acceso
a perifricos importantes y en cierto instante
ejecuta el proceso init. El proceso init contina
con el arranque del sistema, ejecutando los
scripts de inicio si se est usando SysVinit o
administrando ya sea Upstart o systemd.

Los equipos ms nuevos estn cambiando a UEFI, un reemplazo para la BIOS, que
realiza muchas de las mismas funciones.

LFS201: Fundamentos de Administracin de Sistemas Linux

40

2.2 Bios
En la arquitectura x86, la BIOS contiene todo el cdigo requerido para obtener acceso
inicial al teclado, pantalla, unidades de disco, de comunicaciones en serie y un nmero de
funciones variadas. Una vez que el sistema completo est en marcha, la mayora de estos
dispositivos habrn mejorado sus capacidades cuando los controladores de dispositivos
especializados y completos se cargan y asumen el control.
La BIOS se coloca tpicamente en un chip ROM que viene con el equipo (el que a
menudo se llama BIOS ROM). Esto asegura que la BIOS estar siempre disponible y no
ser daada por fallas en el disco. Esto tambin hace que sea posible que un equipo
arranque.
Durante el proceso de arranque, la BIOS carga el gestor de arranque desde el MBR.

2.3 Gestores de arranque


Existen diferentes gestores de arranque utilizados en Linux, incluyendo:

GRUB
LILO
efilinux
Das U-Boot

Prcticamente todas las distribuciones modernas


de Linux (no-embebidas)
usan
GRUB
(GRand Unified Boot Loader).
Las
caractersticas
de GRUB incluyen la capacidad de arrancar varios
sistemas operativos, tanto en una interfaz grfica y en
otra basada en texto que permite ser usado a travs
de un cable serial, una potente interfaz de lnea de
comandos para la configuracin interactiva, iniciando
desde la red sin disco de arranque y otras
caractersticas avanzadas.
El cargador de Linux (LILO) es viejo y obsoleto.
efilinux es un gestor de arranque alternativo diseado
especficamente para el mecanismo de UEFI.
Das U-Boot es el cargador ms popular para
sistemas Linux embebidos; hay algunos otros, entre
ellos bareboot. Sin embargo, en realidad no estamos
considerando el espacio embebido en este curso.

LFS201: Fundamentos de Administracin de Sistemas Linux

41

2.4 Archivos de Configuracin en /etc


Ms adelante vamos a discutir acerca de donde las distribuciones de Linux cooperan para
colocar ciertos tipos de archivos en lugares estndar en el sistema. En particular, los
archivos de configuracin de todo el sistema se colocan generalmente en /etc y sus
subdirectorios, mientras que los especficos del usuario se colocan a menudo en sus
directorios personales.
Las distribuciones desarrollaron sus propias reglas sobre exactamente dnde colocar
informacin en /etc. Por ejemplo, todos los sistemas derivados de Red Hat hacen uso
extensivo de /etc/sysconfig, mientras que los sistemas basados en Debian han
utilizado /etc/default. Curiosamente, RHEL 7 y SUSE usan ambos.

2.5 /etc/sysconfig
En un sistema RHEL 6:
$ ls -F /etc/sysconfig
atd
grub
auditd
htcacheclean
authconfig
httpd
autofs
i18n
cbq
init
cgconfig
ip6tables-config
cgred.conf
ip6tables-config.rpmnew
clock
iptables-config
collectl
iptables-config.rpmnew
console
irqbalance
cpuspeed
kdump
crond
kernel
firewall
dhcpd
keyboard
users
dhcpd6
ksm
dhcrelay
libvirtd
dhcrelay6
libvirt-guests
ebtables-config lm_sensors
firstboot
mcelogd

modules
netconsole
network
networking
network-scripts
nfs
ntpd
ntpdate
pluto
prelink
quota_nld
radvd

samba
sandbox
saslauthd
selinux
sendmail
smartmontools
snmpd
snmptrapd
sshd
sysstat
sysstat.ioconf
system-config-

raid-check

system-config-

readahead
readonly-root
rhn
rngd
rsyslog

udev
vncservers
wpa_supplicant
xinetd

Para ver el contenido de un archivo:


$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=quad64
GATEWAY=192.168.1.1

LFS201: Fundamentos de Administracin de Sistemas Linux

42

LFS201: Fundamentos de Administracin de Sistemas Linux

43

lo cual configura algunas variables ambientales usadas por varios scripts de inicio.
Los archivos en este directorio son usados a menudo por el script que controla el servicio
asociado en /etc/init.d; por ejemplo, el script /etc/init.d/network incluye la lnea
con el siguiente archivo:
. /etc/sysconfig/network

el que define estas variables cuando la red se inicia.

2.6 /etc/default
En un sistema Ubuntu 14.04:
$ ls -F /etc/default
acpid
console-setup
acpi-support crda
alsa
cron
anacron
cups
apport
dbus
avahi-daemon devpts
bridge-utils grub
brltty
grub~
bsdmainutils grub.d/

grub.ucf-dist
halt
im-config
irqbalance
kdump-tools
kerneloops
kexec
keyboard
libvirt-bin

locale
nfs-common
nss
ntfs-3g
ntpdate
pulseaudio
qemu-kvm
rcS
rsync

rsyslog
saned
speech-dispatcher
sysstat
ufw
useradd
whoopsie

El uso de este directorio es similar al /etc/sysconfig de Red Hat:

Los archivos son utilizados para proveer opciones adicionales al iniciar un servicio.

Normalmente contienen cdigo para configurar variables de entorno.

Por ejemplo, el archivo /etc/default/useradd establece los valores predeterminados


que se utilizan cuando se crean nuevas cuentas de usuario.

LFS201: Fundamentos de Administracin de Sistemas Linux

44

2.7 Apagado y Reinicio


shutdown se utiliza para apagar el sistema de forma segura, notificando a todos los
usuarios que el sistema va a apagarse y luego lo detiene de manera elegante y no
destructiva. Despus de que est apagado, el sistema es detenido o reiniciado.
Ejemplos de shutdown
$
$
$
$

sudo
sudo
sudo
sudo

shutdown
shutdown
shutdown
shutdown

-h +1 Power Failure imminent


-h now
-r now
now

Las opciones pueden ser listadas fcilmente por el mensaje de ayuda:


$ shutdownhelp
shutdown [OPTIONS...] [TIME] [WALL...]
Shut down the system.
help
Show this help
Hhalt
Halt the machine
Ppoweroff
Power-off the machine
rreboot
Reboot the machine
h
Equivalent topoweroff, overridden byhalt
k
Dont halt/power-off/reboot, just send warnings
no-wall
Dont send wall message before halt/power-off/reboot
c
Cancel a pending shutdown

Sin opciones (por ejemplo, shutdown now) el comportamiento por defecto es apagar por
completo el sistema. Algunas distribuciones, como Ubuntu, violan esto y van a modo
monosuario en vez de apagarse.
Un error comn es no especificar un argumento de tiempo (tal como now o algn tiempo
real). Esto es requerido.
Tambin existen los comandos heredados reboot, halt y poweroff, los que muchos
usuarios veteranos utilizan con frecuencia.

LFS201: Fundamentos de Administracin de Sistemas Linux

45

Comprobacin de conocimientos 2.1

LFS201: Fundamentos de Administracin de Sistemas Linux

46

2.8 Laboratorio 2.1


Laboratorio 2.1: shutdown vs. halt vs. Reboot
Nota: este ejercicio requiere ser ejecutado desde la consola, es decir, no a travs de la red usando
SSH.
1. Lleve el sistema a modo monousuario usando el comando shutdown.
2. Desde el modo monousuario, reinicie el sistema con el comando shutdown.
3. Una vez que el sistema haya reiniciado, apguelo completamente usando el comando
shutdown.
4. Vuelva a iniciar el sistema.

Laboratorio 2.1: shutdown vs. halt vs. Reboot:

Solucin
1. $ sudo shutdown now
2. $ sudo shutdown -r now
3. $ sudo shutdown -h now
4. Presione el botn de apagado o reinicie su mquina virtual.

Objetivos de aprendizaje (revisin)


Usted debera ser capaz de:

Explicar el proceso de arranque.


Identificar varios tipos de cargadores de arranque.
Describir qu hace la BIOS.
Identificar los archivos de configuracin correspondientes.
Describir cmo el sistema se apaga y reinicia.

LFS201: Fundamentos de Administracin de Sistemas Linux

47

Captulo 3. GRUB
Un sistema que no puede iniciar es bastante intil. Los sistemas Linux tienen mucha
flexibilidad en la forma de arrancar. Es posible elegir versiones diferentes del kernel u
opciones, o incluso diferentes sistemas operativos en escenarios de inicio mltiple. La
mayora de los sistemas no embebidos utiliza el Grand Unified Boot Loader para realizar
los primeros pasos de una inicializacin exitosa del sistema. GRUB tambin tiene
capacidades interactivas, as como una utilidad de contraseas seguras.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar cul es el rol de GRUB.


Comprender las diferencias entre las versiones GRUB 1 y GRUB 2.
Estar familiarizado con las selecciones interactivas que se pueden realizar en el
arranque.
Saber cmo instalar GRUB.
Explicar cmo se usan y modifican los archivos de configuracin que
GRUB necesita.

LFS201: Fundamentos de Administracin de Sistemas Linux

48

3.1 Que es GRUB?


Prcticamente todos sistemas basados en x86 de Linux (dejando de lado la esfera de los
sistemas embebidos) usan GRUB actualmente (GRand Unified Bootloader) para
manejar las primeras fases de arranque del sistema. Otras plataformas pueden tener
otros equivalentes, como ELILO, utilizado en sistemas EFI como IA64 (Itanium) y Das UBOOT utilizado en muchas configuraciones de sistemas embebidos.
Algunas caractersticas importantes de GRUB son:

Sistemas operativos alternativos pueden ser elegidos en el momento del arranque.

Los kernels alternativos o ramdisk inicial pueden ser elegidos durante el arranque
para un determinado sistema operativo.

Los parmetros de arranque pueden cambiarse fcilmente al arrancar sin tener


que editar archivos de configuracin, etc. de antemano.

Las distribuciones de Linux ms antiguas (por ejemplo, RHEL 6) usan versiones antiguas
de GRUB, 1.0 o menor, mientras que las ms recientes se basan en GRUB 2. Mientras
que los detalles son diferentes entre las versiones, la filosofa bsica es la misma.

Configuracin bsica de los archivos de GRUB 2.


El archivo de configuracin bsico de arranque se llama:
/boot/grub/grub.cfg o /boot/grub2/grub.cfg

Este archivo es autogenerado por update-grub (o grub2-mkconfig en RHEL 7), basado


en los archivos de configuracin en el directorio /etc/grub.d y en/etc/default/grub, y
nunca deberan ser editados a mano. Normalmente esas herramientas son ejecutadas
desde otros scripts provistos por cada distribucin, usados para actualizar o compilar
kernels Linux.

Configuracin bsica de los archivos de GRUB 1.


El archivo de configuracin bsico de arranque se llama:
/boot/grub/grub.conf o /boot/grub/menu.lst.

Nuevamente, recomendamos no editar a mano el archivo de configuracin. Por ejemplo,


en RHEL 5-7 se modifica desde la herramienta grubby. Sin embargo, si usted realiza
cambios, sern mantenidos, mientras que para GRUB 2 cualquier cambio directo
en grub.cfg se pierde tan pronto como el archivo se genera nuevamente.
Para cualquier versin, el archivo de configuracin principal contiene algunos parmetros
globales y luego una seccin para cada sistema operativo o ncleo configurado.
LFS201: Fundamentos de Administracin de Sistemas Linux

49

3.2 Selecciones Interactivas con GRUB en el arranque


Al arranque del sistema, despus de las etapas iniciales del POST y BIOS, GRUB se
ejecutar y mostrar un men.
Este puede o no tener grficos en l (al menos para el fondo de pantalla de splash). El
men contiene una lista de imgenes de arranque de uno o ms sistemas operativos o
distribuciones de Linux. En GRUB 2 (o, si usas chainloading para conectar mltiples
instalaciones de GRUB en el mismo disco, un tema complicado que no trataremos aqu)
tambin pueden haber submens con an ms opciones.
Usando las flechas arriba y abajo y la tecla Enter, usted puede seleccionar la opcin de
arranque correcta, o puede esperar durante un periodo de tiempo configurable antes de
entrar en la opcin predeterminada.
Sin embargo, es posible hacer mucho ms. Despus de seleccionar una entrada, puede
escribir e para editar y luego entrar en una shell interactiva. En esta shell, puede modificar
la seccin en el archivo de configuracin que describe esa opcin de arranque particular.
Por lo general, esto se hace para modificar la lnea de comandos del kernel; por
ejemplo, agregando la palabra single al final de la lnea de comando har que el sistema
arranque en el modo monousuario con el fin de tomar acciones correctivas. Una vez que
el cambio deseado se ha realizado, usted puede presionar la tecla adecuada para iniciar
el
sistema.
En la parte inferior de la pantalla ver que aparece informacin sobre las combinaciones
de teclas exactas, as que no es necesario memorizarlas.
Tenga en cuenta que cualquier cambio que realice en la configuracin no es
persistente y se perder en el prximo inicio. Para realizar cambios permanentes, es
necesario modificar los archivos en el sistema, usando las utilidades adecuadas.
Tambin es posible introducir una shell pura, en lugar de editar una seccin en particular.
Puede ejecutar una serie de comandos diferentes e incluso tratar de reinstalar o
reparar GRUB. Si hay problemas serios, como no encontrar un archivo de
configuracin, GRUB vuelve al modo de lnea de comandos y usted podra rescatar el
sistema sin tener que recurrir a los medios fsicos (DVDs).

LFS201: Fundamentos de Administracin de Sistemas Linux

50

3.3 Instalacin de GRUB


La palabra instalacin puede tener significados diversos en relacin a GRUB:
1. Instalar

el programa grub y sus herramientas asociadas en sus lugares


respectivos. En GRUB 1 hay un solo programa llamado grub, pero en GRUB
2 hay un montn de utilidades con nombres como grub2-* or grub-*; el cmo
estn empaquetados depende bastante de la distribucin.

2. Instalar los archivos que GRUB necesita para operar en el momento de arranque,
ya sea en /boot/grub o/boot/grub2. Esto es independiente de los archivos que
el kernel Linux necesita (vmlinuz-*, initramfs-*), los cuales debern estar en
el directorio /boot tambin.
3. Instalar GRUB como el gestor de arranque en el sistema; generalmente esto se

hace en el comienzo de todo el disco duro, pero tambin puede ser realizado en
una particin y acceder a l travs de chainloading, es decir de un GRUB a otro.
Si no instala GRUB durante la instalacin o si necesita volver a instalarlo en algn
momento ms adelante, el procedimiento exacto para hacerlo depende de la versin
de GRUB.
Procedimiento de instalacin de GRUB 2.
Para la Versin 2, el procedimiento de instalacin es tan simple como:
$ sudo grub2-install /dev/sda

Por favor lea la pgina del manual con cuidado antes de ejecutar un comando como ese;
hay muchas opciones y hacer algo mal en GRUB puede hacer que el sistema no
arranque. En particular tendr que indicarle al sistema donde encontrar el
directorio /boot y en qu particin reside.
Procedimiento de instalacin para GRUB 1.

En la versin 1 la herramienta pertinente es grub-install. Tambin es posible


ejecutar grub en la lnea de comandos, para luego entrar a un programa interactivo. Por
ejemplo:
$
>
>
>
$

sudo grub
root (hd0,0)
setup (hd0)
exit

lo cual debera instalar grub en el primer disco y los archivos de arranque en la primera
particin.

LFS201: Fundamentos de Administracin de Sistemas Linux

51

3.4 Nomenclatura de dispositivos de GRUB


En ambas versiones de GRUB, el primer y segundo disco duro es denominado como hd0,
el segundo como hd1, etc. Sin embargo, en la versin 1 las particiones comienzan
contando desde 0 y en la versin 2 desde 1:

sda1 es (hd0,1) en GRUB 2, pero (hd0,0) en GRUB 1.


sdc4 es (hd2,4) en GRUB 2, pero (hd2,3) en GRUB 1.

No hay necesidad de enfatizar que confundirse acerca de esto puede ser muy destructivo.
Ambas versiones de GRUB a veces usan la notacin de sda# y a veces usan (hd0,#), as
que puede ser an ms confuso.
Dentro del archivo de configuracin, cada seccin tiene que especificar cul es la
particin raz; esto no es lo mismo que lo que queremos decir cuando hablamos del
directorio raz del sistema. En este contexto significa la particin que contiene el kernel
(en el directorio /boot). Por ejemplo, es muy comn tener /boot en su particin propia,
digamos/dev/sda1. Luego, en GRUB 1 podr encontrar una seccin simple como la
siguiente:
title 3.17.3
root (hd0,0)
kernel vmlinuz-3.17.3 ro root=/dev/sda2 quiet
initrd initramfs-3.17.3.img

Sin embargo, si /boot no tiene su propia particin, se vera como lo siguiente:


title 3.17.3
root (hd0,0)
kernel /boot/vmlinuz-3.17.3 ro root=/dev/sda1 quiet
initrd /boot/initramfs-3.17.3.img

Tambin es posible especificar kernel (hd0,0)/vmlinuz


lnea root.
En GRUB
2 la
sintaxis
es
diferente
a /boot/grub2/grub.cfg lo dejar claro.

pero

obvia;

.... , y dejar de lado la

una

LFS201: Fundamentos de Administracin de Sistemas Linux

mirada

rpida

52

3.5 Personalizando el archivo de configuracin GRUB


Nos vamos a concentrar en GRUB 2 porque las versiones anteriores se estn volviendo
obsoletas rpidamente. Adems es esencialmente el mismo en las diversas distribuciones
de Linux.
Recuerde que no debera editar grub.cfg directamente. Hay dos lugares en el
directorio /etc que
deberan
requerir
atencin
y
se
utilizan
para
reconstruir grub.cfg cuando el sistema se ve alterado con la instalacin de kernel
nuevos, o cuando se ejecuta de forma manual un programa de actualizacin
(como update-grub).
El primero es /etc/default/grub. En un sistema RHEL 7 luce de la siguiente forma:
$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=$(sed s, release .*$,,g /etc/system-release)
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=console
GRUB_CMDLINE_LINUX=vconsole.keymap=us
crashkernel=auto
vconsole.font=latarcyrheb-sun16
rhgb
quiet
GRUB_DISABLE_RECOVERY=true

Red Hat ha abreviado bastante este archivo en comparacin con otras distribuciones. Por
ejemplo, en un sistema Ubuntu 14.4 se ve de la siguiente forma:
$ cat /etc/default/grub
# If you change this file, run update-grub afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n Simple configuration
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT=quiet
GRUB_CMDLINE_LINUX=find_preseed=/preseed.cfg
auto
noprompt
priority=critical locale=en_US
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel
that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD
...)
#GRUB_BADRAM=0x01234567,0xfefefefe,0x89abcdef,0xefefefef
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports
via VBE
# you can see them in real GRUB with the command vbeinfo
#GRUB_GFXMODE=640x480

LFS201: Fundamentos de Administracin de Sistemas Linux

53

# Uncomment if you dont want GRUB to pass root=UUID=xxx


parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY=true
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE=480 440 1

El otro directorio que importa es /etc/grub.d:


$ ls -l /etc/grub.d
total 76

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rwxr-xr-x 1 root root

rw-rr-- 1 root root

9424 Sep
6058 Sep
11608 Sep
10412 Sep
1992 Sep
11692 Sep
1416 Sep
214 Sep
216 Sep
483 Sep

8
8
8
8
8
8
8
8
8

17:35 00_header
17:35 05_debian_theme
17:35 10_linux
17:35 20_linux_xen
17:35 20_linux_xen
17:35 30_os-prober
17:35 30_uefi-firmware
17:35 40_custom
17:35 41_custom
8 17:35 README

donde una vez ms estamos mostrando Ubuntu 14.04. Cada uno de estos archivos se
ejecutan en orden ascendente cuando se actualiza el archivo de configuracin. No los
discutiremos aqu debido a que estn bien autodocumentados y recomendamos que les
eche un vistazo.
Para GRUB 1 cada distribucin puede tener algunas peculiaridades, pero bsicamente se
edita grub.conf directamente o a travs de un script como grubby.

LFS201: Fundamentos de Administracin de Sistemas Linux

54

Comprobacin de conocimientos 3.1

Falso

Verdadero

Falso

Verdadero

LFS201: Fundamentos de Administracin de Sistemas Linux

55

Falso

Falso

3.6 Laboratorio 3.1


Laboratorio 3.1: Inicio en modo no grfico usando GRUB
Nota: Este ejercicio requiere ser ejecutado desde la consola, es decir, no a travs de SSH.
1. Reinicie su mquina y vaya a la consola interactiva de GRUB presionando e, o cualquier otra
tecla que sea requerida para tal efecto, segn se indique en la pantalla.
2. Haga que su sistema inicie en modo no grfico. La forma de hacerlo depender de su sistema
especfico. En sistemas tradicionales que respetan los runlevels (los cuales trataremos en la
prxima seccin) es posible agregar un 3 a la lnea de comandos del kernel, en la entrada
especfica que seleccion desde las opciones en el men de GRUB.
En otros sistemas (incluyendo Ubuntu) es necesario agregar text en cambio.
3. Teclee la tecla apropiada para que el sistema contine iniciando.
4. Luego de que el sistema est completamente operacional en modo no grfico, llvelo a modo
grfico. Dependiendo de su sistema, uno de los siguientes comandos debera hacerlo:
$ sudo telinit 5
$ sudo service gdm restart
$ sudo service lightdm restart

LFS201: Fundamentos de Administracin de Sistemas Linux

56

Objetivos de aprendizaje (revisin)


Usted debera ser capaz de:

Explicar cul es el rol de GRUB.


Comprender las diferencias entre GRUB 1 y GRUB 2.
Estar familiarizado con las selecciones interactivas que puede hacer en el
arranque.
Saber cmo instalar GRUB.
Explicar cmo se usan y modifican los archivos de configuracin que
GRUB necesita.

LFS201: Fundamentos de Administracin de Sistemas Linux

57

Captulo 4. init: SystemV, Upstart, Systemd


Cuando un sistema Linux se inicia, muchas tareas deben llevarse a cabo de manera
cooperativa. Los dispositivos tienen que ser reconocidos e inicializados, los servicios del
sistema tienen que ser lanzados, los sistemas de archivos tienen que estar disponibles,
procesos de gestin importantes tienen que iniciarse y el sistema debe estar disponible a
los usuarios para iniciar sesin. Todo esto debe hacerse en la secuencia correcta y lo ms
rpidamente posible.

Objetivos de Aprendizaje
Al final de este captulo usted debera estar capacitado para:

Entender la importancia del proceso init.


Explicar cmo funciona el mtodo tradicional de SysVinit, cmo incorpora
los niveles de ejecucin y qu sucede en cada uno.
Saber usar chkconfig y service (y utilidades alternativas) para iniciar y detener
servicios o hacerlos persistentes luego del reinicio del sistema.
Entender por qu surgieron los mtodos alternativos Upstart ysystemd y cmo
funcionan.
Usar systemctl para configurar y controlar systemd.

LFS201: Fundamentos de Administracin de Sistemas Linux

58

4.1 Proceso init


/sbin/init (normalmente llamado init) es el primer proceso (o tarea) a nivel de usuario

que se ejecuta en el sistema y contina funcionando hasta que el sistema se apaga.


Tradicionalmente ha sido considerado el padre de todos los procesos del usuario, aunque
tcnicamente eso no es cierto ya que algunos procesos son iniciados directamente por el
kernel.
init coordina las etapas posteriores del proceso de arranque, configura todos los aspectos
del ambiente e inicia los procesos necesarios para entrar/autenticarse en el
sistema. init tambin trabaja estrechamente con el kernel para limpiar lo necesario a
medida en que los procesos terminan.
Tradicionalmente casi todas las distribuciones basan el proceso init en el
venerable SysVinit de UNIX. Sin embargo, este esquema fue desarrollado dcadas atrs
en circunstancias muy diferentes:

El objetivo eran sistemas multiusuario de tipo mainframe (y no ordenadores


personales, porttiles y otros dispositivos).
El objetivo era un sistema de procesador nico.
El tiempo de inicio (y apagado) no era un asunto importante; era mucho ms
importante hacer que las cosas funcionaran bien.

El inicio fue visto como un proceso serial, dividido en una serie de etapas secuenciales.
Cada etapa requera ser finalizada antes de que la prxima pudiera iniciar. Por lo tanto, el
arranque no aprovech el procesamiento en paralelo que podra hacerse en mltiples
procesadores.
En segundo lugar, el apagado/reinicio fue visto como un acontecimiento relativamente
raro y exactamente cunto demoraban no era considerado importante.

LFS201: Fundamentos de Administracin de Sistemas Linux

59

4.2 Alternativas de arranque


Para lidiar con estas limitaciones intrnsecas en SysVinit, se han desarrollado nuevos
mtodos para controlar el arranque del sistema. Si bien es cierto que existen otros, dos
esquemas principales fueron adoptados por distribuidores Empresariales:
1. Upstart fue desarrollado por Ubuntu y fue incluido por primera vez en el
lanzamiento de la versin 6.10 en el 2006 y pas a ser utilizado por defecto en el
lanzamiento de la versin 9.10, el 2009. Tambin fue adoptado en Fedora 9(en el
2008) y en RHEL 6 y sus clones, tales como CentOS, Scientific Linux y Oracle
Linux. En openSUSE fue ofrecido como una opcin desde la versin 11.3.
Tambin se ha utilizado en varios dispositivos embebidos y mviles.
2. systemd es ms reciente y Fedora fue la primera distribucin de las principales

en adoptarlo en el 2011.
RHEL 7 se basa en systemd y cada distribucin principal de Linux lo ha adoptado y
usado por defecto, o ha anunciado planes para hacerlo. Los desarrolladores principales
de systemd estn estrechamente vinculados a la comunidad del kernel de Linux.
Incluso Ubuntu ha programado el retiro de Upstart en su favor.
La migracin a los nuevos esquemas puede ser complicada debido a que los errores de
software y funciones faltantes pueden ser muy incapacitantes, de hecho han habido capas
que requieren compatibilidad esencial.
Por lo tanto, los mtodos y
utilidades SysVinit persistirn por mucho tiempo aunque bajo el cap, las cosas son muy
diferentes.
La historia de las controversias y todo esto es muy complicado, y personalidades
interesantes han asegurado no que toda la discusin es de carcter tcnico. En nuestro
contexto no veremos a travs de esta lente.
En adelante vamos a concentrarnos en SysVinit y systemd con una breve seccin
sobre Upstart (aunque RHEL 6 y
algunas
otras
distribuciones
han
estado
usando Upstart, ste ha sido completamente oculto detrs de una capa de compatibilidad
usando las utilidades SysVinit normales).

4.3 Niveles de ejecucin de SysVinit


Un sistema SysVinit inicia a travs de una secuencia de runlevels (niveles de ejecucin)
que definen diferentes estados del sistema; estn numerados del 0 al 6.
El runlevel 0 est reservado para el apagado del sistema, runlevel 1 para el modo
monousuario y runlevel 6 para reiniciar el sistema. Los otros runlevels se usan para
definir qu servicios estn ejecutndose en un sistema normal; segn el caso, las
distribuciones definen algo de forma diferente. Por ejemplo, en sistemas basados en Red
Hat, runlevel 2 se define como un sistema en funcionamiento sin red o X, runlevel 3
incluye soporte de red, y runlevel 5 incluye red y X.

LFS201: Fundamentos de Administracin de Sistemas Linux

60

El runlevel actual pueden ser desplegado simplemente con el comando runlevel, como se
muestra aqu:
$runlevel
N 5

donde el primer carcter es el nivel previo; N significa desconocido.


telinit puede ser usado para cambiar el nivel de ejecucin del sistema. Por ejemplo, para
ir desde runlevel 3 a runlevel 5, ejecute lo siguiente:
$ sudo /sbin/telinit 5

LFS201: Fundamentos de Administracin de Sistemas Linux

61

4.4 SysVinit y /etc/inittab


Cuando el proceso init es iniciado, lo primero que hace es leer /etc/inittab.
Histricamente, este archivo ha instruido a init acerca de los scripts que debe ejecutar
para llevar al sistema a cada runlevel. Y se ha hecho con una serie de lneas, una para
cada runlevel:
id:runlevel(s):action:process
donde:

id: un identificador nico de 1 a 4 caracteres para la entrada.


runlevel(s): cero o ms caracteres individuales o identificadores de dgitos, el que
indica en qu nivel de ejecucin se realizar la accin.
action: describe la accin a ser realizada.
process: especifica el proceso a ser ejecutado.

Sin embargo, en sistemas ms recientes como RHEL 6 que enmascaran upstart detrs
de una capa de compatibilidad, la nica lnea descomentada y lo nico que se encuentra
en este archivo es el runlevel predeterminado con la lnea:
id:5:initdefault
Este es el runlevel al cual llegar el sistema una vez que haya terminado de iniciar. Sin
embargo, si se especifica otro valor en la lnea de comandos del ncleo, init ignora el
valor por defecto (esto se hace aadiendo el dgito entero a la lnea de comandos del
ncleo). El runlevel por defecto es generalmente 5 para un sistema completo, lo cual
considera soporte multiusuario, sistema grfico en red o 3 para un servidor sin una
interfaz grfica.

4.5 Scripts de inicio de SysVinit


El mtodo tradicional es que primero se ejecute el script rc.sysinit, el cual realiza
numerosas funciones, como iniciar LVM, montar sistemas de archivos, etc. Este script
reside en el directorio /etc, pero probablemente lo encontrar en /etc/rc.d con un enlace
simblico a /etc.
A continuacin, se ejecuta el script rc (en el mismo directorio) con el runlevel deseado
como argumento. Esto hace que el sistema vaya al directorio rc.d/rc[0-6].d y ejecute
todos los scripts que estn ah:

LFS201: Fundamentos de Administracin de Sistemas Linux

62

$ ls -lF /etc/rc.d/rc5.d
total 0
lrwxrwxrwx. 1 root root 14 Sep 3 10:05
lrwxrwxrwx. 1 root root 14 Sep 3 10:05
lrwxrwxrwx. 1 root root 18 Sep 3 10:05
lrwxrwxrwx. 1 root root 15 Sep 3 10:05
lrwxrwxrwx. 1 root root 17 Sep 3 10:05
lrwxrwxrwx. 1 root root 16 Sep 3 10:05
lrwxrwxrwx 1 root root 37 Sep 6 08:50
/etc/rc.d/init.d/vmware-USBArbitrator*
lrwxrwxrwx. 1 root root
../init.d/netconsole*
lrwxrwxrwx. 1 root root
lrwxrwxrwx 1 root root
lrwxrwxrwx. 1 root root
lrwxrwxrwx. 1 root root
../init.d/iprupdate*
lrwxrwxrwx. 1 root root

K05pmcd -> ../init.d/pmcd*


K05pmie -> ../init.d/pmie*
K05pmlogger -> ../init.d/pmlogger*
K05pmmgr -> ../init.d/pmmgr*
K05pmproxy -> ../init.d/pmproxy*
K05pmwebd -> ../init.d/pmwebd*
K08vmware-USBArbitrator ->

20 Sep 3 03:57 K50netconsole ->


17
16
17
19

Sep
Sep
Sep
Sep

3
6
3
3

09:39
08:50
04:04
04:04

S10network -> ../init.d/network*


S19vmware -> ../init.d/vmware*
S20iprinit -> ../init.d/iprinit*
S20iprupdate ->

17 Sep 3 10:05 S21iprdump -> ../init.d/iprdump*

lrwxrwxrwx 1 root root 17 Sep 6 08:51 S25vmamqpd -> ../init.d/vmamqpd*


lrwxrwxrwx 1 root root 37 Sep 6 08:50 S50vmware-USBArbitrator ->
/etc/rc.d/init.d/vmware-USBArbitrator*
lrwxrwxrwx. 1 root root 15 Sep 3 03:59 S97rhnsd -> ../init.d/rhnsd*

El script rc.local puede ser usado para iniciar aplicaciones especficas del sistema.
Note lo siguiente:

Todos los scripts reales estn en /etc/init.d: cada directorio de nivel de ejecucin
solo enlaza a ellos.
Los nombres de los scripts de inicio comienzan con s.
Los nombres de los scripts de detencin comienzan con k.

La existencia (o falta) de un vnculo simblico de un script en un directorio de runlevel


determina si el script se ejecuta en ese runlevel o no.
El nmero que le sigue a la K o S en cada nombre de script determina el orden en el cual
los scripts son invocados. El nombre del script corresponde tambin al nombre
del servicio.
Controlar qu scripts de inicializacin se ejecutan al entrar a cada runlevel consiste en
gestionar los enlaces simblicos. Mientras que es posible administrar estos vnculos de
forma manualmente, hay utilidades como chkconfig que estn diseadas para hacer esto
de manera consiste y simple.

LFS201: Fundamentos de Administracin de Sistemas Linux

63

4.6 chkconfig
chkconfig se utiliza para consultar y configurar en qu runlevels van a correr los
diferentes servicios del sistema.
Ejemplos de chkconfig
Verifica un servicio en particular para comprobar si est configurado para correr en el
runlevel actual:
$ chkconfig some_service

Esto devolver verdadero si el servicio est configurado para ejecutarse, y por el


contrario, falso. Note que an si el servicio est configurado para correr, podra estar
detenido actualmente.

Ver qu servicios estn configurados para correr en cada uno de los runlevels:
$ chkconfiglist [service names]

Configurar un servicio para que se ejecute en el prximo reinicio:


$ sudo chkconfig some_service on

Configurar un servicio para que no se ejecute en el prximo reinicio:


$ chkconfig some_service off

Tenga en cuenta que las operaciones on y off no inciden en el estado actualdel


servicio para iniciarlo o detenerlo. Esto se realiza de la siguiente forma:
$ sudo service some_service [ stop | start ]

No es difcil aadir sus propios servicios y escribir scripts de inicio. Solamente hay que
poner el script en /etc/init.d, el cual debe tener ciertas caractersticas (slo algunas
lneas en el comienzo del archivo!) y luego usar chkconfig add para habilitarlo
o chkconfigdel para desactivar el uso de las instrucciones on y off.
Cmo lo hace chkconfig para determinar qu nmero debera aparecer luego de
la S o K en un enlace simblico? Cmo sabe qu runlevels configurar en on u off y qu
estado configurar en los enlaces simblicos? La informacin est en los propios scripts,
los cuales contienen una lnea en la parte de arriba, como la siguiente:
# chkconfig: 2345 10 90

El primer argumento luego de chkconfig: aqu se definen los runlevels en los cuales el
servicio va a ejecutarse por defecto. En el ejemplo de arriba con los runlevels 2, 3, 4 y 5.
El segundo y tercer nmero son los prefijos numricos en los scripts de inicio y detencin;
en el caso de arriba inician con S10 y K90.
LFS201: Fundamentos de Administracin de Sistemas Linux

64

4.7 .a. service


Cada sistema operativo tiene servicios que generalmente arrancan en la inicializacin del
sistema y a menudo permanecen funcionando hasta el apagado. Tales servicios pueden
ser iniciados, detenidos o reiniciados en cualquier momento, lo que generalmente requiere
privilegios de root. En un sistema Linux usando o emulando SysVinit, los servicios estn
en el directorio /etc/init.d.
En sistemas basados en Red Hat es posible ver el estado de un servicio en particular de
la siguiente forma:
$ sudo service network status
Configured devices:
lo eth0 eth1 eth2 wlan0
Currently active devices:
lo eth0
$ sudo service vsftpd status
vsftpd (pid 5284) is running...

service tiene diversas opciones, las que varan segn el servicio en particular; por
ejemplo:
$ sudo service network
Usage: /etc/init.d/network {start|stop|restart|reload|status}
$ sudo service iptables
Usage: /etc/init.d/iptables {start|stop|restart|condrestart|status|
panic|save}

Todo servicio se dirige al directorio /etc/init.d y ejecuta el script apropiado en ese


directorio con las opciones suministradas.

LFS201: Fundamentos de Administracin de Sistemas Linux

65

4.7 .b. service


Es posible ver el estado de todos los servicios en el sistema con:
$ sudo servicestatus-all
acpid (pid 4170) is running...
anacron (pid 4540) is running...
atd (pid 4553) is running.......
smartd (pid 4614) is running...
smbd is stopped......

El iniciar y detener servicios con service es efectivo slo durante la operacin actual del
sistema; todos los cambios se pierden al reiniciar. Para configurar que un servicio en
particular se active o no durante la inicializacin del sistema - en sistemas basados
en Red Hat - se utiliza chkconfig como se describi anteriormente.

4.8 chkconfig service en sistemas basados en debian


En sistemas basados en Debian, incluyendo Ubuntu, las utilidades anteriores
funcionarn solamente si se han instalado los paquetes sysvinit-utils y chkconfig, como
se muestra aqu:
$ sudo apt-get install sysvinit-utils chkconfig

Sin embargo, las versiones recientes de Ubuntu ya no tienen el paquete chkconfig;


tendr que utilizar la utilidad update-rc.d que se describe ms abajo.
Como alternativa, puede utilizar los comandos nativos en estos sistemas. Por ejemplo, el
equivalente de la utilidad service es:
$ sudo invoke-rc.d cups [ status | start | stop ]
$ sudo status cups

para visualizar o cambiar el estado de cups. El comando status es ms reciente y es


preferido sobre invoke-rc.d.
Del mismo modo el equivalente de chkconfig sera:
$ sudo update-rc.d cups [ defaults | purge ]
$ sudo sysv-rc-conf cups [ on | off ]

Usted deber consultar las pginas man para acceder a la documentacin completa.

LFS201: Fundamentos de Administracin de Sistemas Linux

66

4.9 Upstart
Upstart es manejado por eventos, en lugar de ser un conjunto de procedimientos en
forma serial. Las notificaciones de eventos son enviadas al proceso init para ejecutar
ciertos comandos en el momento justo despus de que han cumplido los requisitos
previos. Debido a que Upstart est siendo reemplazado por systemd, no invertiremos
mucho tiempo en l ni hacemos ejercicios al respecto.
Los archivos de configuracin de upstart son:
/etc/init/rcS.conf
/etc/rc-sysinit.conf
/etc/inittab
/etc/init/rc.conf
/etc/rc[0-6].d

Cuando el kernel inicia el proceso init, ste ejecuta el script rcS.conf. Esto a su vez,
hace que rc-sysinit.conf se ejecute.
rc-sysinit.conf realizar una serie de tareas, incluyendo iniciar LVM, montar sistemas

de archivos y luego ejecuta todos los scripts para el runlevel por defecto especificado
en /etc/inittab.
Esto se logra mediante la ejecucin de rc.conf y pasando al runlevel. Los scripts del
runlevel levantan los servicios en el sistema.
Finalmente, scripts adicionales como prefdm.conf son ejecutados (para el runlevel 5
solamente).
Como se mencion anteriormente, /etc/inittab est obsoleto y ahora slo se utiliza
para configurar el runlevel predeterminado mediante la lnea initdefault. Otra
configuracin
se
realiza
mediante Upstart en
el
directorio/etc/init.
En
general, Upstart se encontrar en el directorio /etc/event.d.
Por ejemplo, el nmero de consolas tty activas ahora se establece mediante la
variable ACTIVE_CONSOLES en/etc/sysconfig/init, la que es leda por
/etc/init/start-ttys.conf. El valor predeterminado es ACTIVE_CONSOLES=/dev/tty
[1-6], el cual inicia un proceso getty desde tty1 hasta tty6.

LFS201: Fundamentos de Administracin de Sistemas Linux

67

4.10 Utilidades de Upstart


Usando initctl usted puede ver, iniciar y detener procesos casi del mismo modo que lo
hace service. La sintaxis es como sigue:
$ initctl options command

donde options puede tener los siguientes valores:

start: Inicia un proceso

stop: Detiene un proceso

restart Reinicia un proceso

reload Enva la seal HUP a un proceso

status Consulta el estado de un proceso

list: Lista los procesos conocidos

emit Emite un evento

Es posible encontrar un buen resumen de cmo utilizar initctl y muchas otras


caractersticas de upstart en http://upstart.ubuntu.com/cookbook.

4.11 systemd
El sistema de administracin central systemd y manejador de sesin para Linux est
tomando lugar rpidamente en todas las distribuciones importantes.
systemd es compatible con SysVinit y el concepto de runlevels est soportado a travs
de targets de nivel de ejecucin. El programa telinit es emulado para trabajar con
runlevels.
Las caractersticas de systemd y del gestor de sesin incluyen lo siguiente:

Es compatible con los scripts de SysVinit.


Inicia ms rpido que los sistemas anteriores.
Provee altas capacidades de paralelizacin.
Usa socket y activacin D-Bus para iniciar servicios.
Reemplaza scripts de shell scripts con programas.
Ofrece inicio de demonios sobre demanda.
Realiza seguimiento de los procesos usando cgroups.
Soporta la creacin de snapshots y restauracin del estado del sistema.
Mantiene puntos de montaje y automontaje.
Implementa una elaborada lgica de control de servicio basada en dependencia
transaccional.
Puede trabajar como un reemplazo de SysVinit.

En vez de utilizar scripts bash, systemd usa archivos.service.


LFS201: Fundamentos de Administracin de Sistemas Linux

68

Adicionalmente, systemd clasifica todos


ncleo Linux (grupos de control).

los

demonios

en

su

propio cgroups del

4.12 Archivos de configuracin de systemd


Aunque systemd prefiere utilizar un conjunto de archivos de configuracin
correspondientes a un estndar nuevo, tambin puede utilizar archivos de
configuracin heredados dependiente de cada distribucin.
Un ejemplo de un archivo de configuracin nuevo sera /etc/hostname, el cual
reemplazara a/etc/sysconfig/network en Red Hat, /etc/HOSTNAME en SUSE y
a /etc/hostname (adoptado como estndar) enDebian.
Otros archivos pueden incluir:

/etc/vconsole.conf: mapa de teclado por defecto y fuente de consola.

/etc/sysctl.d/*.conf: directorio para los parmetros sysctl del kernel.

/etc/os-release: archivo de ID de la distribucin.

4.13 systemctl
systemctl es la utilidad principal para manejar servicios. La sintaxis bsica es la
siguiente:
$ systemctl [options] command [name]

A continuacin puede ver algunos ejemplos de cmo usar systemctl:


Para ver el estado de todo lo que controla systemd:
$ systemctl

Para ver todos los servicios disponibles:


$ systemctl list-units -t serviceall

Para mostrar los servicios activos solamente:


$ systemctl list-units -t service

Para iniciar (activar) una o ms unidades:


$ sudo systemctl start foo
$ sudo systemctl start foo.service
$ sudo systemctl start /path/to/foo.service

LFS201: Fundamentos de Administracin de Sistemas Linux

69

en donde una unidad puede ser un servicio o un socket.

Para detener (desactivar):


$ sudo systemctl stop foo.service

Para habilitar/deshabilitar un servicio:


$ sudo systemctl enable sshd.service
$ sudo systemctl disable sshd.service

Esto es el equivalente de chkconfigadd/--del y no inicia el servicio.


Nota: algunos comandos systemctl de los mostrados arriba pueden ser ejecutados como
usuario normal, sin embargo otros tienen que ser ejecutados como root o con sudo.
Para ver un excelente resumen de cmo pasar desde SysVinit a systemd, consulte la
documentacin SysVinit to Systemd Sheatsheet en:
https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet.

LFS201: Fundamentos de Administracin de Sistemas Linux

70

Tabla 4.13. Hoja de Apuntes de SysVinit a Systemd


(versin resumida)

Versin abreviada de la Hoja de Apuntes de SysVinit a Systemd, mostrando las


equivalencias principales de los comandos service y chkconfig.
LFS201: Fundamentos de Administracin de Sistemas Linux

71

Comprobacin de Conocimientos 4.1

Respuesta Correcta: SysVinit fue diseado para mainframes, los que tienen
requerimientos diferentes a computadores de escritorio, sistemas embebidos y
plataformas para dispositivos mviles.

Respuesta Correcta:

0
6
1
3
5

LFS201: Fundamentos de Administracin de Sistemas Linux

72

4.14 Laboratorio 4.1


Laboratorio 4.1: Agregar un servicio de arranque nuevo con SysVinit
En este y el siguiente ejercicio crearemos un servicio simple de inicio. Primero lo haremos para un
sistema SysVinit. Tenga en cuenta que si est usando un sistema basado en systemd, todo debera
funcionar debido a la capa de compatibilidad hacia atrs que todas las distribuciones tienen. Sin
embargo, lo haremos de forma nativa systemd en el prximo ejercicio.
Si est en un sistema basado en Debian como Ubuntu, asegrese de tener instalados los paquetes
sysvinit-utils y chkconfig. Sin embargo, las versiones recientes de Ubuntu ya no proveen el paquete
chkconfig; en cambio, tendra que usar la herramienta update-rc.d.
Primero es necesario crear el script especfico del servicio; usted lo puede crear por s solo en caso
que lo desee, o utilizar el procedimiento que se describe a continuacin (como root). En este
ltimo caso cree un archivo llamado /etc/init.d/fake_service con el siguiente contenido:
#!/bin/bash
# fake_service
# Starts up, writes to a dummy file, and exits
#

# chkconfig: 35 69 31
# description: This service doesnt do anything.
# Source function library
. /etc/sysconfig/fake_service
case $1 in
start) echo Running fake_service in start mode...
touch /var/lock/subsys/fake_service
echo $0 start at $(date) >> /var/log/fake_service.log
if [ ${VAR1} = true ]
then
echo VAR1 set to true >> /var/log/fake_service.log
fi
echo
;;

stop)
echo Running the fake_service script in stop mode...
echo $0 stop at $(date) >> /var/log/fake_service.log
if [ ${VAR2} = true ]
then
echo VAR2 = true >> /var/log/fake_service.log
fi
rm -f /var/lock/subsys/fake_service
echo
LFS201: Fundamentos de Administracin de Sistemas Linux

73

;;
*)

echo Usage: fake_service {start | stop}


exit 1
esac
exit

Si est tomando la versin autodidacta en lnea del curso, el script est disponible para descargarlo
desde la pantalla Lab.
Asgnele permisos de ejecucin (y todos los otros permisos necesarios) al archivo anterior:
$ sudo chmod 755 /etc/init.d/fake_service
Se dara cuenta que el script incluye el archivo /etc/sysconfig/fake service. En sistemas diferentes
a RHEL debera cambiar esto a /etc/default/fake_service. Crelo e inserte el siguiente contenido:
VAR1=true
VAR2=true
Compruebe si el script funciona correctamente a travs de los siguientes comandos:
$ sudo service fake_service
$ sudo service fake_service start
$ sudo service fake_service stop
Revise el archivo /var/log/fake service.log. Qu contiene?
Por diversin podra agregar modos adicionales al archivo de script como restart ;
eche un vistazo a otros scripts en el directorio para obtener ejemplos de lo que puede hacer.
Lo siguiente que necesitamos es que el servicio fake service se inicie cada vez que el sistema
arranque y se detenga cuando el sistema se apaga. Si usted hace:
$ sudo chkconfiglist fake_service
obtendra un error debido a que an el servicio no se ha configurado. Puede hacerlo de forma fcil
como sigue:
$ sudo chkconfigadd fake_service
ahora puede habilitarlo y deshabilitarlo en el arranque (respectivamente) de la siguiente forma:
$ sudo chkconfig fake_service on
$ sudo chkconfig fake_service off
Para probarlo completamente tendra que reiniciar el sistema con el fin de confirmar si el servicio
inicia automticamente. Tambin puede modificar los runlevels en los cuales el servicio debera
ejecutarse.
LFS201: Fundamentos de Administracin de Sistemas Linux

74

4.14 Laboratorio 4.2


Laboratorio 4.2: Agregar un servicio de arranque nuevo con systemd
Como se mencion en el ejercicio anterior, todava es posible utilizar el script de inicio SysVinit con
systemd, pero esto est en desuso.
El procedimiento anlogo consiste en crear un archivo (como root) directamente bajo
/etc/systemd/system o en otro lugar en ese rbol de directorios; las distribuciones varan un poco
en esto. Este es un ejemplo de un archivo con contenido mnimo, llamado
/etc/systemd/system/fake2.service:
[Unit]
Description=fake2
After=network.target
[Service]
ExecStart=/bin/echo Estoy iniciando el servicio fake2
ExecStop=/bin/echo Estoy deteniendo el servicio fake2
[Install]
WantedBy=multi-user.target
Existen muchas configuraciones que se pueden realizar en el archivo unit. El parmetro
After=network.target significa que el servicio debera ser iniciado slo despus de que la red lo
hizo, mientras que WantedBy=multi-user.target significa que debera iniciarse cuando se alcanz el
modo multiusuario. Esto es equivalente a runlevels 2 y 3 en SysVinit. Tenga en cuenta que
graphical.target se correlaciona con runlevel 5.
Cambie los permisos del archivo para hacerlo ejecutable:
$ chmod 755 /etc/systemd/system/fake2.service
Ahora lo nico que tenemos que hacer es iniciar el servicio, comprobar su estado y detenerlo:
$ sudo systemctl start fake2.service
$ sudo systemctl status fake2.service
$ sudo systemctl stop fake2.service
Si usted hizo cambios a la seccin unit, debe hacer lo siguiente para recargar el servicio con la
informacin nueva:
$ sudo systemctl daemon-reload y el sistema le mostrara una advertencia.

LFS201: Fundamentos de Administracin de Sistemas Linux

75

Para habilitar/deshabilitar que el servicio inicie durante el arranque, puede usar los siguientes
comandos:
$ sudo systemctl enable fake2.service
$ sudo systemctl disable fake2.service
Una vez ms, es necesario reiniciar el sistema para asegurarse que los cambios realizados estn
siendo efectivos.

Objetivos de aprendizaje (Revisin)


Usted debera ser capaz de:

Comprender la importancia del proceso init.


Explicar cmo funciona el mtodo tradicional de SysVinit, cmo incorpora
los runlevels y lo que sucede en cada uno de ellos.
Saber cmo usar chkconfig y service (y utilidades alternativas) para iniciar y
detener servicios, o hacerlos persistentes entre reinicios del sistema.
Entender por qu surgieron los mtodos alternativos Upstart y systemd y cmo
funcionan.
Usar systemctl para configurar y controlar systemd.

LFS201: Fundamentos de Administracin de Sistemas Linux

76

Captulo 5. Diseo del rbol del Sistema de


Archivos de Linux
Hay muchos tipos de archivos presentes en un sistema Linux. Se diferencian por su
propsito, tamao, dueo, permisos para ser compartidos. As mismo, por su
permanencia temporal o definitiva en el sistema. Debido a lo anterior, la organizacin
coherente de todo el rbol del sistema de archivos es muy importante, como tambin su
estandarizacin entre las distribuciones de Linux (en tanto sea posible).

Objetivos de aprendizaje
Al final de este captulo usted debera estar capacitado para:

Explicar por qu Linux requiere la organizacin de un gran rbol de sistemas de


archivos, y cules son las principales consideraciones de cmo hacerlo.
Conocer el rol desempeado por el Estndar de Jerarqua del Sistema de
Archivos (Filesystem Hierarchy Standard o FHS).
Describir qu debe estar disponible en el arranque en el directorio raz (/), y lo que
debe estar disponible una vez que el sistema ha iniciado.
Explicar cada uno de los subdirectorios principales del rbol en trminos de
propsito y contenido.

LFS201: Fundamentos de Administracin de Sistemas Linux

77

5.1 Un sistema de archivos grande


Linux, como todos los sistemas operativos basados en UNIX, consiste en un rbol grande
de sistemas de archivos. Generalmente es diagramado como un rbol invertido con
el directorio raz / en la parte superior del rbol.
Dentro de este tremendo sistema de archivos lgico pueden haber varios, incluso muchos
sistemas de archivos distintos, montados en puntos que corresponden a los
subdirectorios. Estos distintos sistemas de archivos suelen estar en particiones diferentes,
en diversas cantidades y tipos de dispositivos, incluyendo aquellos que se encuentran en
red.
De forma independiente de cmo exactamente las cosas estn unidas entre s, todo se ve
como un gran sistema de archivos; las aplicaciones no se preocupan en absoluto de los
dispositivos fsicos en los cuales residen los archivos.
En el pasado los diferentes sistemas operativos tipo UNIX organizaron este gran rbol de
diversas maneras; incluso entre las distribuciones de Linux haba muchas diferencias.
Esto hizo que tanto el desarrollo de aplicaciones como llevar a cabo tareas de
administracin en ms de un tipo de sistema fuera difcil y a menudo frustrante.
Como consecuencia de lo anterior, el ecosistema Linux ha trabajado arduamente para
establecer procedimientos estandarizados para minimizar esos inconvenientes.

5.2 Diferencia de los datos


Cuando se habla de cmo se organizan los archivos y datos en el gran rbol de
directorios, es importante conocer la taxonoma en cunto a qu tipo de informacin tiene
que ser leda y cul escrita. En particular, hay dos tipos de diferencias:
1. Compartidos vs no-compartidos

Los datos compartibles corresponden a los que se pueden compartir entre


diferentes mquinas. Los datos no compartibles son aquellos que son especficos
para un determinado host. Por ejemplo, los directorios personales de los usuarios
pueden ser compartibles, mientras que los archivos de bloqueo de dispositivos no
lo
son.
2. Variable vs. Esttico
Los archivos estticos incluyen binarios, bibliotecas, documentacin y todo lo que
no cambia sin ayuda del administrador de sistemas. Los archivos variables son
cualquier cosa que puede cambiar, incluso sin ayuda del administrador de
sistemas.
A menudo estas distinciones lgicas estn incorporadas como distintos tipos de
informacin que residen en varios directorios, o incluso en particiones y sistemas de
archivos.

LFS201: Fundamentos de Administracin de Sistemas Linux

78

5.3 FHS Estndar de Jerarqua del sistema de Archivos


El Estndar de Jerarqua del Sistema de Archivos (FHS, de Filesystem Hierarchy
Standard), administrado inicialmente por el Free Standards Group y ahora por la Linux
Foundation, especifica los directorios principales que deben estar presentes y describe
sus propsitos. Se puede descargar desde http://www.pathname.com/fhs/.
Al especificar un diseo estndar, el FHS simplifica el tema de la localizacin de los
archivos. Aunque la mayora de las distribuciones de Linux respetan el FHS,
probablemente ninguno de ellos lo sigue exactamente. Por otro lado, la ltima versin
oficial no tiene en cuenta algunos desarrollos nuevos.
A las distribuciones les gusta probar diferentes cosas y eventualmente algunos de los
experimentos terminan siendo ampliamente aceptados.

5.4 Diseo del directorio principal


Los distribuidores de Linux pasan mucho tiempo asegurndose de que el diseo de su
sistema de archivos es coherente y que evoluciona correctamente en el tiempo.

LFS201: Fundamentos de Administracin de Sistemas Linux

79

Es posible que haya directorios adicionales en el directorio raz, especficos a cada


distribucin. Estos podran incluir/misc, que se puede utilizar para informacin de diverso
tipo y /tftpboot, que se utiliza para el inicio a travs de tftp. En caso de haber archivos en
ese directorio, estn relacionados con el inicio del sistema sin utilizar un disco duro. Note
que no viola la FHS el tener otros directorios; sin embargo, la norma es violada cuando se
tienen componentes en directorios distintos a los dictados por el estndar.

5.5 El directorio y sistema de archivos raz (/)


Mientras que todo el sistema de archivos puede ser visto como un gran rbol, como
hemos sealado, pueden haber varias particiones y sistemas de archivos trabajando de
forma unida.
La particin y sistema de archivos en el cual el directorio raz est contenido en es
bastante especial y a menudo est en una particin dedicada, con otros componentes con
directorios como /home, /var, /opt , etc, los cuales son montados posteriormente.
La particin raz debe contener todos los archivos esenciales necesarios para iniciar el
sistema y luego montar el resto de los sistemas de archivos. Por lo tanto necesita
utilidades, archivos de configuracin, informacin del cargador de arranque y otros datos
esenciales del inicio. Debe estar habilitado para:

Iniciar el sistema.
Restaurar el sistema desde copias de seguridad de medios externos, tales como
cintas y otros medios extrables, o NAS, etc.
Recuperar y/o reparar el sistema; un administrador experimentado debe tener las
herramientas para diagnosticar y reconstruir un sistema daado.

De acuerdo con el FHS, ninguna aplicacin o paquete debera crear nuevos


subdirectorios en el directorio raz.

5.6 /bin
El directorio /bin es muy importante y ste:

Contiene programas y scripts ejecutables necesitados tanto por administradores


de sistemas y usuarios sin privilegios, que son necesarios cuando todava no se
ha montado ningn otro sistema de archivos, por ejemplo, al iniciar en
modo monousuario o en modo de recuperacin.
Tambin puede contener ejecutables que son utilizados indirectamente por scripts.
No debe contener ningn subdirectorio.

LFS201: Fundamentos de Administracin de Sistemas Linux

80

Los programas que deben existir en /bin incluyen:


cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo,false, hostname, kill, ln, logi
n, ls, mkdir, mknod, more,mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true
,umount, y uname.
Tambin test puede estar ah. De forma adicional puede incluirse:
csh, ed, tar, cpio, gunzip, zcat, netstat, y ping.
Los comandos binarios que no son considerados esenciales lo suficiente para ir
en /bin van en /usr/bin. Solamente los programas requeridos por los usuarios que no son
root se colocan en esta categora.
Nota: Algunas distribuciones muy recientes estn abandonando la estrategia de la
separacin /bin y /usr/bin (como tambin /sbin y /usr/sbin) y solo tienen un directorio
con enlaces simblicos, preservando as una visin de dos directorios. Consideran como
obsoleto el concepto tradicional de permitir la posibilidad de colocar /usr en una particin
separada para ser montada despus del inicio.

5.7 /boot
Los archivos esenciales para iniciar el sistema deben estar en el directorio /boot y sus
subdirectorios. Los dos archivos absolutamente esenciales son:

vmlinuz: El kernel Linux comprimido.


initramfs: El sistema de archivos de RAM inicial, el cual se monta antes de que
el sistema real de archivos raz est disponible.

Estos archivos tienen nombres largos que dependen de la versin del ncleo, en donde el
nombre exacto est en funcin de la distribucin de Linux. Adems, en lugar
de initramfs, el archivo puede ser llamado initrd, siglas de disco RAM inicial, el cual si
bien es cierto corresponde al mtodo antiguo, el nombre se usa en algunas distribuciones
todava.
El contenido exacto de /boot variar segn la distribucin y el tiempo; en un
sistema RHEL 7 tenemos:
$ ls -lF /boot
total 135336
-rw-rr-- 1 root root
122094 Nov 4 09:20 config-3.10.0123.13.1.el7.x86_64
-rw-rr-- 1 root root
81386 Dec 7 12:03 config-3.17.5
-rw-rr-- 1 root root
81896 Dec 15 07:28 config-3.18.0
-rw-rr-- 1 root root
81896 Dec 16 15:56 config-3.18.1
drwxr-xr-x. 6 root root
4096 Dec 16 15:57 grub2
-rw-rr--. 1 root root 40732911 Sep 3 04:07 initramfs-0-rescue30cc7a6d7bb4525815f4d2b4298e611.img
-rw-rr-- 1 root root 16406996 Dec 10 07:25 initramfs-3.10.0123.13.1.el7.x86_64.img
-rw-rr-- 1 root root 13967066 Dec 7 12:03 initramfs-3.17.5.img
LFS201: Fundamentos de Administracin de Sistemas Linux

81

-rw-rr-- 1 root root 13914297 Dec 15 07:28 initramfs-3.18.0.img


-rw-rr-- 1 root root 13915331 Dec 16 15:56 initramfs-3.18.1.img
-rw-rr--. 1 root root
865512 Sep 3 04:06 initrd-plymouth.img
-rw-rr-- 1 root root
228603 Nov 4 09:23 symvers-3.10.0123.13.1.el7.x86_64.gz
lrwxrwxrwx 1 root root
24 Sep 28 10:18 System.map ->
/boot/System.map-3.15.0+
-rw------- 1 root root 2841409 Nov 4 09:20 System.map-3.10.0123.13.1.el7.x86_64
-rw-rr-- 1 root root 2875608 Dec 7 12:03 System.map-3.17.5
-rw-rr-- 1 root root 2891484 Dec 15 07:28 System.map-3.18.0
-rw-rr-- 1 root root 2891509 Dec 16 15:56 System.map-3.18.1
lrwxrwxrwx 1 root root
21 Sep 28 10:18 vmlinuz -> /boot/vmlinuz3.15.0+
-rwxr-xr-x. 1 root root 4902000 Sep 3 04:07 vmlinuz-0-rescue30cc7a6d7bb4525815f4d2b4298e611
-rwxr-xr-x 1 root root 4904592 Nov 4 09:20 vmlinuz-3.10.0123.13.1.el7.x86_64
-rw-rr-- 1 root root 5363200 Dec 7 12:03 vmlinuz-3.17.5
-rw-rr-- 1 root root 5404992 Dec 15 07:28 vmlinuz-3.18.0
-rw-rr-- 1 root root 5405440 Dec 16 15:56 vmlinuz-3.18.1

Hace mucho tiempo estos archivos esenciales se solan poner directamente en /, en vez
de usar un directorio /boot por separado, siguiendo las prcticas tradicionales de UNIX.
Hoy en da esto se considera obsoleto.

5.8 Otros archivos y directorios en /boot


Usted puede haber notado que existen varias versiones del ncleo en /boot, y para cada
uno hay cuatro archivos disponibles (la posibilidad de elegir entre los ncleos se hace
mediante GRUB en el inicio).
Los otros dos archivos adems de vmlinuz y initramfs son:

config: Es el archivo de configuracin utilizado al compilar el kernel. Est presente


slo para referencia y porque puede ser de utilidad al depurar programas.

System.map: La tabla de smbolos del kernel, la cual es muy til en la depuracin


de programas. Entrega las direcciones hexadecimales de todos los smbolos del
kernel.

Ninguno de estos archivos es requerido para iniciar o ejecutar el sistema.


Las distribuciones pueden poner otros archivos y directorios en /boot, tales como los
sectores de arranque maestros guardados y otros datos no editados a mano.

LFS201: Fundamentos de Administracin de Sistemas Linux

82

5.9 /dev
Este directorio contiene archivos de dispositivos especiales (tambin conocidos
como nodos de dispositivo) los cuales representan los dispositivos incorporados o
conectados al sistema. Estos archivos especiales son esenciales para que el sistema
funcione correctamente.
Dichos archivos de dispositivo representan caracteres (una trama de bytes)
y dispositivos de bloque E/S. Los dispositivos de red no tienen nodos de dispositivo
en Linux y en cambio son referenciados por su nombre, como eth1 owlan0.

Listado de /dev
$ cd /dev ;
lrwxrwxrwx
....
lrwxrwxrwx
....
crw-rw---crw-rw---....
brw-rw---brw-rw---brw-rw---....
brw-rw----+

ls -lF
1 root root
1 root root

3 Aug 28 10:12 cdrom1 -> sr0


15 Aug 28 10:12 fitbit -> bus/usb/003/002

1 root lp
1 root lp

6, 0 Aug 28 10:12 lp0


6, 1 Aug 28 10:12 lp1

1 root disk
1 root disk
1 root disk

8, 4 Aug 28 10:12 sda4


8, 5 Aug 28 10:12 sda5
8, 6 Aug 28 10:12 sda6

1 root cdrom

11, 0 Aug 28 10:12 sr0

Note que los dispositivos de carcter comienzan con una c, los bloques con una b y los
enlaces simblicos con una l (L minscula).
Todas las distribuciones modernas de Linux (no embebidas) utilizan el sistema udev, el
cual crea nodos en /dev slo a medida en que se necesita, lo que sucede cuando se
encuentran dispositivos, ya sea al inicio o al conectarlos al sistema (discutiremos udev en
una seccin posterior).
Si usted fuera a echar un vistazo en el directorio /dev en un sistema de archivos sin
montar, lo encontrara vaco; en el inicio se crea y monta un sistema de archivos virtual
en /dev, el que luego es populado con nodos de dispositivos, como lo requiere udev. Los
sistemas Linux embebidos pueden fijar los nodos de dispositivos y no utilizar udev o
alguna alternativa como mdev.

LFS201: Fundamentos de Administracin de Sistemas Linux

83

5.10 /etc
Este directorio contiene los archivos de configuracin de la mquina local y algunos
scripts de inicio; aqu no debera haber ningn programa ejecutable binario.
Los archivos y directorios que pueden encontrarse aqu incluyen:
csh.login, exports, fstab, ftpusers, gateways, gettydefs, group, host.conf,
hosts.allow, hosts.deny, hosts,equiv, hosts.lpd, inetd.conf, inittab, issue,
ld.so.conf, motd, mtab, mtools.conf, networks, passwd, printcap, profile,
protocols, resolv.conf, rpc, securetty, services, shells, syslog.conf.
Las distribuciones a menudo agregan archivos de configuracin y directorios a /etc. Por
ejemplo, Red Hat aade un nmero directorios adicionales incluyendo /etc/sysconfig,
donde se alojan archivos y directorios de configuracin del sistema.
Otros subdirectorios importantes incluyen /etc/skel, que contiene archivos de plantilla
usados para popular directorios de usuario recin creados. Tambin /etc/init.d, que
contiene scripts de inicio y detencin cuando se utiliza la inicializacin de System V.

5.11 /home
En
los
sistemas Linux los
directorios
de
usuarios
estn
en /home,
como /home/coop, /home/alumno, etc. Toda la configuracin personal, datos y programas
ejecutables se ponen en esta jerarqua de directorios. /home tambin puede contener
subdirectorios
para
varios
grupos
o
asociaciones
de
usuarios,
como /home/estudiantes, /home/staff,/home/aliens, etc.
En otros sistemas operativos tipo UNIX, existe el concepto del rbol de directorios /home,
pero puede ser sutilmente diferente. Por ejemplo, en Solaris los directorios de usuarios se
crean en /export/home y luego la utilidad automount los montar en /home. Esto se
debe a la situacin habitual en que el directorio de los usuarios puede estar en cualquier
lugar en una red corporativa, probablemente en un servidor NFS, en donde el directorio
de cada usuario se montar automticamente cuando est en uso.
Linux tambin tiene la utilidad automount, pero muchos usuarios no estn conscientes
de ellos, y en sistemas personales probablemente el concepto de puntos de
montaje NFS no aplicar.
Un usuario siempre puede sustituir la variable de ambiente $HOME para su directorio raz, o
la abreviacin ~; es decir, los siguientes usos son equivalentes:
$ ls -l $HOME/public_html
$ ls -l ~/public_html

Hay una excepcin: el directorio home del usuario root en los sistemas Linux siempre se
encuentra en /root. Algunos sistemas UNIX antiguos pueden usar / en cambio, lo que
puede causar algn desorden.

LFS201: Fundamentos de Administracin de Sistemas Linux

84

5.12 /lib
Este directorio debe contener slo las bibliotecas necesarias para ejecutar los binarios
en /bin y /sbin. Estas bibliotecas son particularmente importantes para iniciar el sistema
y ejecutar comandos en el sistema de archivos raz.
Los mdulos del kernel (a menudo controladores de dispositivo o sistemas de archivos) se
encuentran bajo/lib/modules/<kernel-versin-nmero>.
Los archivos de PAM (Pluggable Authentication Modules) se almacenan en el
directorio /lib/security.
Los sistemas que soportan tanto binarios de 32 bits y 64 bits deben mantener ambos tipos
de bibliotecas en el sistema. En los sistemas basados en Red Hat hay directorios
separados para las bibliotecas de 32 bits (/lib) y 64 bits (/lib64).

5.13 /media
Este directorio se usa normalmente para montar sistemas de archivos en medios
extrables. Estos incluyen CDs, DVDs, unidades USB y disquetes del paleoltico.
Los sistemas Linux modernos montan estos medios de forma dinmica durante la
insercin, momento en el cual udev crea directorios bajo /media y luego monta los
sistemas de archivos extrables all, con los nombres que se establecen a travs de las
reglas de udev especificadas en los archivos de configuracin. Al desmontar y extraer los
medios, los directorios que fueron usados como puntos de montaje
en /media desaparecern.
Si el medio extrable tiene ms de una particin y sistema de archivos, aparecer ms de
una entrada en /media. En muchas distribuciones de Linux el administrador de archivos
(como Nautilus) se abrir cuando el medio es montado.
Nota: En algunas distribuciones ms recientes (incluyendo SUSE y RHEL 7) los medios
extrables se montarn en/run/media/[nombre de usuario]/... Vamos a tratar /run al
final de este captulo.

LFS201: Fundamentos de Administracin de Sistemas Linux

85

5.14 /mnt
Se dispone de este directorio para que el administrador del sistema pueda montar
temporalmente un sistema de archivos en caso de necesitarlo. Se usa comnmente para
sistemas de archivos en red, incluyendo:

NFS
Samba
CIFS
AFS

Histricamente, /mnt tambin fue usado para los tipos de archivos que se montan
actualmente en /media (o/run/media) en los sistemas modernos.
En trminos generales, este directorio no debe ser utilizado por programas de instalacin.
Una mejor alternativa es otro directorio temporal que no est siendo usado.

5.15 /opt
Este directorio est diseado para paquetes de software que desean mantener la totalidad
o gran parte de sus archivos en un lugar aislado en vez de dispersarse por todo el sistema
en los directorios compartidos con otros programas.
Por ejemplo, si dolphy_app fuera el nombre de un paquete en /opt, todos sus archivos
deben
residir
en
directorios
bajo
/opt/dolphy_app,
incluyendo
/opt/dolphy_app/bin para binarios y /opt/dolphy_app /man para las pginas man.
Esto puede hacer que tanto la instalacin y desinstalacin de software sean relativamente
fcil, ya que todo est aislado de forma conveniente en una ubicacin predecible y
estructurada. Tambin hace que sea ms fcil para los administradores de sistemas el
determinar la naturaleza de cada archivo asociado a un paquete.
Note, sin embargo, que si uno utiliza sistemas de empaquetamiento como RPM y APT,
como veremos ms adelante, tambin es fcil de instalar y desinstalar conservando un
claro sentido de las ubicaciones de archivos, sin exhibir tal conducta antisocial con la
distribucin.
En Linux, el directorio /opt es utilizado a menudo por proveedores de aplicaciones, ya
sea con software propietario o aquellos que desean evitar las complicaciones asociadas a
los cambios entre distribuciones. Por ejemplo, en RHEL 7 los nicos paquetes se
encuentran en esta categora estn en /opt/skype y /opt/google, en donde este ltimo
tiene subdirectorios para chrome, earth y talkplugin.
Los
directorios
/opt/bin, /opt/doc,
/opt/include, /opt/info,/opt/lib
y /opt/man estn reservados para uso del administrador del sistema local. Los paquetes
pueden proporcionar archivos que estn vinculados o copiados en estos directorios
reservados, pero tambin deben ser capaces de funcionar sin los programas que estn en
estos directorios especiales.

LFS201: Fundamentos de Administracin de Sistemas Linux

86

5.16 /proc
Este directorio es el punto de montaje para un seudosistema de archivos, donde toda la
informacin reside slo en memoria, no en disco. Tal como /dev, el directorio /proc est
vaco en un sistema que no est corriendo.
El kernel muestra algunas estructuras de datos importantes a travs de las entradas
disponibles en /proc. Adems, cada proceso activo en el sistema tiene su propio
subdirectorio, el que ofrece informacin detallada sobre el estado del proceso, los
recursos que est utilizando y su historia.
Las entradas en /proc a menudo se denominan archivos virtuales y tienen cualidades
interesantes. Mientras que la mayora tienen cero bytes de tamao, cuando se visualiza
su contenido es posible comprobar que pueden tener una gran cantidad de informacin.
Adicionalmente, la mayora de los ajustes de hora y fecha en los archivos reflejan la hora
y fecha actuales, indicativo del hecho de que estn en constante cambio. De hecho, la
informacin de estos archivos se obtiene slo cuando son visualuzados, no se estn
actualizando constantemente o peridicamente.
Importantes pseudoarchivos, incluyendo
/proc/interrupts, /proc/meminfo, /proc/mounts y /proc/partitions, proporcionan
un vistazo del estado actual del hardware del sistema.
Otros archivos como /proc/filesystems y el directorio /proc/sys/,
informacin de configuracin del sistema y de las interfaces.

proveen

Para propsitos de organizacin, los archivos que contienen informacin sobre un tema
similar
se
agrupan
en
directorios
virtuales
y
subdirectorios.
Por
ejemplo, /proc/scsi/ contiene informacin de todos los dispositivos SCSI fsicos. De la
misma forma, los directorios de procesos contienen informacin acerca de
cada proceso corriendo en el sistema.
A lo largo de este curso examinaremos ampliamente las entradas en /proc, y echaremos
un vistazo ms detallado en los captulos siguientes acerca de la configuracin del kernel
y monitoreo del sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

87

5.17 /root
Este directorio (pronunciado slash-root) es el directorio de inicio para el usuario root.
La cuenta de root que es duea de este directorio se debe utilizar solamente para las
acciones que requieren privilegios de superusuario. Para aquellas acciones que pueden
realizarse como un usuario sin privilegios, utilice otra cuenta.

5.18 /sys
Este directorio es el punto de montaje para el seudosistema de archivos sysfs, donde
toda la informacin reside slo en memoria, no en disco. Al igual que /dev y /proc, el
directorio /sys est vaco en un sistema detenido.
sysfs se utiliza tanto para recopilar informacin sobre el sistema, como tambin modificar
su comportamiento mientras se ejecuta. En ese sentido se parece a /proc, pero es ms
nuevo y se ha adherido a normas estrictas acerca de qu tipo de entradas que puede
contener. Por ejemplo, casi todos los seudoarchivos en /sys contienen slo una lnea o
valor; no existe ninguna de las entradas largas que se pueden encontrar en /proc.
Al igual que con /proc, examinaremos entradas en /sys a lo largo de este curso, lo que
ser relevante en los prximos captulos acerca de la configuracin del kernel y monitoreo
del sistema.

5.19 /sbin
Este directorio contiene los archivos binarios esenciales para arrancar, restaurar,
recuperar y/o reparar los binarios en el directorio /bin. Tambin debe tener lo necesario
para montar otros sistemas de archivos en /usr, /home y otros lugares de ser necesario,
una vez que el sistema de archivos raz est en buenas condiciones en el arranque.
Los siguientes programas deberan estar incluidos en este directorio (siempre y cuando
sus subsistemas estn instalados):
fdisk, fsck, getty, halt, ifconfig, init, mkfs, mkswap, reboot, route, swapon, swapoff,
update.
Nota: como se mencion anteriormente, algunas distribuciones nuevas estn
abandonando
la
estrategia
de
separar/sbin y /usr/sbin (como
tambin /bin y /usr/bin), y slo tienen un directorio con enlaces simblicos,
preservando una vista de dos directorios.

LFS201: Fundamentos de Administracin de Sistemas Linux

88

5.20 /tmp
Este directorio se utiliza para almacenar archivos temporales, y puede ser accedido por
cualquier usuario o aplicacin. Sin embargo, no se puede esperar que los archivos
en /tmp estn ah por largo tiempo:

Algunas distribuciones corren trabajos de cron automatizados, los que


generalmente eliminan los archivos de ms 10 das, a menos que los scripts de
purga hayan sido modificado para excluirlos. Esta es la poltica de RHEL 6.
Algunas distribuciones eliminan el contenido de /tmp con cada reinicio del sistema.
Esta ha sido la poltica de Ubuntu.
Algunas distribuciones modernas utilizan un sistema de archivos virtual, usando el
directorio /tmp slo como un punto de montaje para un disco ram utilizando el
sistema de archivos tmpfs. Esta es la poltica por defecto de los
sistemas Fedora recientes. Cuando el sistema se reinicia, toda la informacin se
pierde; /tmp es de hecho temporal!

En este ltimo caso, hay que evitar la creacin de archivos de gran tamao en /tmp,
debido a que en realidad va a ocupar espacio en memoria en vez de disco, y es fcil
daar o bloquear el sistema a travs del agotamiento de la memoria. Si bien es cierto que
la gua para las aplicaciones es evitar poner archivos de gran tamao en /tmp, hay un
gran nmero de aplicaciones que violan esta poltica. Incluso si fuera posible ponerlos en
otro lugar (tal vez mediante la especificacin de una variable de entorno), muchos
usuarios no saben cmo configurarlo, y por otro lado, todos los usuarios tienen acceso
a /tmp.
Esta poltica puede ser cancelada en los sistemas utilizando systemd, como en Fedora, a
travs del siguiente comando:
$ systemctl mask tmp.mount
Luego de lo cual es necesario reiniciar el sistema.

5.21 /usr
El directorio /usr puede ser visto como una jerarqua secundaria. Se utiliza para los
archivos que no son necesarios para el inicio del sistema. De hecho, /usr no necesita
estar localizado en la misma particin que el directorio raz y se puede compartir entre los
hosts que utilizan la misma arquitectura de sistema a travs de la red.
Los paquetes de software no deberan crear subdirectorios directamente bajo /usr.
Podran existir algunos enlaces simblicos a otros lugares por razones de compatibilidad.
Este directorio tiene usualmente datos de slo lectura. Contiene binarios que no son
necesarios en modo monousuario. Contiene el directorio /usr/local, donde es posible
almacenar binarios locales. Las pginas man se encuentran en/usr/share/man.

LFS201: Fundamentos de Administracin de Sistemas Linux

89

5.22 /var
Este directorio contiene archivos de datos variables (o voltiles)
frecuentemente durante el funcionamiento del sistema. Estos incluyen:

que

cambian

Archivos de registro.
Directorios y archivos de spool para imprimir, colas de correo, etc.
Archivos de datos administrativos.
Archivos transitorios y temporales, como contenido del cach.

Obviamente, /var no puede ser montado como un sistema de archivos de slo lectura.
Por razones de seguridad, a menudo se considera una buena idea montar /var como un
sistema de archivos por separado. Adems, si el directorio se llena, no debera producir
un bloqueo del sistema.
/var/log es donde se encuentran la mayora de los archivos del registro del sistema. El
directorio /var/spool es donde se almacenan los archivos locales para procesos como
correo, impresin y trabajos de cron a la espera de ser liberados de la cola.

LFS201: Fundamentos de Administracin de Sistemas Linux

90

5.23 /run
Un nuevo rbol de directorio montado en /run ha estado en uso desde hace varios aos
por las principales distribuciones de Linux, y pese a que ha sido propuesto para el FHS,
no ha sido aceptado formalmente. Sin embargo es bueno saber acerca de su existencia,
ya que muy probablemente se encontrar con l.
El propsito de /run es almacenar archivos transitorios: aquellos que contienen
informacin del tiempo de ejecucin (runtime), los cuales probablemente sean escritos
tempranamente en el inicio del sistema, y que no requieren ser preservados al reiniciar.
Generalmente /run se implementa como un punto de montaje vaco, con un disco
ram tmpfs (tal como /dev/shm) montado en tiempo de ejecucin. Por lo tanto, este es un
seudosistema de archivos existente slo en memoria.
Algunos directorios existentes, tal como /var/run y /var/lock, sern enlaces simblicos
a los directorios bajo /run. Otros, dependiendo de cada distribucin, pueden apuntar a
directorios bajo /run.

Comprobacin de conocimientos 5.1

LFS201: Fundamentos de Administracin de Sistemas Linux

91

Comprobacin de conocimientos 5.2

5.24 Laboratorio 5.1


Laboratorio 5.1: Tamaos de los directorios de Linux por defecto
Use la herramienta du para calcular el tamao total de cada uno de los directorios de primer nivel
de su sistema.
Ejecute el comando:
$ duhelp
para tener una idea de cmo obtener y mostrar la informacin de forma eficiente.
Solucin lab 5.1
Para obtener una lista completa de los directorios principales bajo / y sus tamaos:
$ sudo dumax-depth=1 -hx /
4.3M /home
16K /lost+found
39M /etc
4.0K /srv
3.6M /root
178M /opt
138M /boot
6.1G /usr
1.1G /var
16K /mnt
4.0K /media
869M /tmp
8.4G /
LFS201: Fundamentos de Administracin de Sistemas Linux

92

Donde hemos usado las siguientes opciones:


--maxdepth=1: Baja un nivel solamente desde / y suma recursivamente todo lo que hay bajo ese
rbol.
-h: Provee nmeros legibles para humanos (KB, MB, GB).
-x Permanezca en un sistema de archivos; no busque directorios que no estn en la particin /.
En este caso
significa ignorar:
/dev /proc /run /sys
debido a que son seudosistemas de archivos que existen en memoria solamente; de hecho cuando
el sistema no est corriendo son puntos de montaje vacos. Debido a que este es un sistema RHEL
7, los siguientes puntos de montaje tampoco son tomados en cuenta:
/bin /sbin /lib /lib64
ya que son slo enlaces simblicos a sus contrapartes bajo /usr.

LFS201: Fundamentos de Administracin de Sistemas Linux

93

5.24 Laboratorio 5.2


Laboratorio 5.2: Un recorrido del sistema de archivos /proc
Lo que usted ver exactamente en este ejercicio dependera de la versin del kernel que est
usando, por lo cual la salida que obtenga en los comandos podra diferir un poco.
1. Como root, haga cd en /proc y liste lis archivos. Esto debera desplegar un nmero de archivos y
directorios:
$ cd /proc
$ ls F

Tenga en cuenta que muchos de los nombres de los directorios son nmeros; cada uno
corresponde a un proceso en ejecucin y sus nombres son el process ID. Un subdirectorio
importante que veremos ms adelante es /proc/sys, bajo el cual es posible ver o modificar muchos
parmetros del sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

94

2. Vea el contenido de los siguientes archivos:

/proc/cpuinfo:
/proc/meminfo:
/proc/mounts:
/proc/swaps:
/proc/version:
/proc/partitions:
/proc/interrupts:

Los nombres de cada uno dan una buena idea acerca de la informacin que contienen.
Tenga en cuenta que esta informacin no se actualiza de forma constante, sino que es obtenida
slo cuando uno quiere visualizarla.
3. Eche un vistazo a cualquier directorio de proceso. Si no es un proceso del cual usted es dueo, el
acceso a la informacin podra ser limitada, a menos que use sudo):
$ ls -F 5564

Eche un vistazo a algunos de los campos aqu, tales como cmdline, cwd, environ, mem, y status

LFS201: Fundamentos de Administracin de Sistemas Linux

95

Objetivos de aprendizaje (revisin)


Usted debera ser capaz de:

Explicar por qu Linux requiere que su rbol de sistemas de archivos est


organizado, y cules son las consideraciones ms importantes en relacin a cmo
hacerlo.
Saber cul es el rol que juega el Estndar de jerarqua del sistema de archivos
(FHS).
Describir qu debe estar disponible durante el inicio en el directorio raz (/) , y qu
debe estar disponible una vez que el sistema ya se haya iniciado.
Explicar cada uno de los principales subdirectorios del rbol en trminos de
propsito y contenido.

LFS201: Fundamentos de Administracin de Sistemas Linux

96

Captulo 6. Servicios del Kernel y Configuracin


El kernel del sistema operativo se encuentra en el corazn de todos los sistemas Linux,
desde el dispositivo embebido o mvil ms pequeo, a la supercomputadora ms
poderosa. Cabe destacar que el kernel tiene las mismas tareas esenciales en este amplio
espectro. Controla el acceso al hardware, la competencia por los recursos entre diferentes
aplicaciones y otras tareas, maneja la actividad de E/S, los archivos y almacenamiento de
datos, seguridad, redes, etc. Al seleccionar los parmetros de lnea de comandos del
kernel en el inicio, el sistema puede comportarse de diferentes formas.

Objetivos de Aprendizaje
Al final de este captulo usted debera ser capaz de:

Conocer las principales responsabilidades que el kernel debe cumplir y saber


cmo lo hace.
Explicar qu parmetros pueden ser configurados en la lnea de comandos del
kernel y cmo hacerlos efectivos, ya sea para un slo inicio del sistema o de forma
persistente.
Saber en dnde encontrar documentacin detallada acerca de estos parmetros.
Saber cmo usar sysctl para configurar parmetros del kernel ya sea una vez que
el sistema ha iniciado, o de forma persistente luego del reinicio del sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

97

6.1 Informacin General del Kernel


En rigor, Linux es slo el kernel del sistema operativo. Este ltimo incluye muchos otros
componentes, como bibliotecas y aplicaciones que interactan con el kernel.
El kernel es el componente central esencial que conecta el hardware al software y maneja
recursos del sistema, como memoria y asignacin de tiempo de CPU a las aplicaciones y
servicios que compiten por ellos. Se ocupa de todos los dispositivos conectados utilizando
los controladores de dispositivos, y hace que estn disponibles para el uso del sistema
operativo.
Un sistema que ejecuta solamente el kernel tiene una funcionalidad bastante limitada.
Esto se encuentra slo en dispositivos dedicados y enfocados a los sistemas
embebidos.

6.2 Tareas Principales del Kernel


Las principales responsabilidades del kernel incluyen:

Inicializacin del Sistema y booteo.


Planificacin de procesos.
Gestin de Memoria.
Controlar acceso al hardware.
E/S (Entrada/Salida) entre aplicaciones y dispositivos de almacenamiento.
Implementacin de sistemas de archivos locales y de red.
Control de seguridad, tanto a nivel local (como los permisos del sistema de
archivos) y en red.
Control de la red.

6.3 Lnea de comandos del Kernel


Varios parmetros son pasados al sistema durante el inicio a travs de la lnea de
comandos del kernel. Normalmente estn en la lnea del kernel (o linux16) en el archivo
de configuracin de GRUB, pero pueden ser modificados en el inicio.

LFS201: Fundamentos de Administracin de Sistemas Linux

98

Para la versin GRUB 1 (la antigua), una lnea de comandos del kernel podra verse as:
kernel /boot/vmlinuz-3.19.1 ro root=LABEL=RHEL6-64 quiet crashkernel=auto
SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us

o
kernel /vmlinuz-2.6.32-279.14.1.el6.x86_64 ro
root=UUID=178d0092-4154-4688-af24-cda272265e08
rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD
SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc
KEYTABLE=us rd_NO_DM rhgb quiet

y se encontrara en /boot/grub/grub.conf. Todo lo que viene despus del archivo que se


especifica en vmlinuz es una opcin. Cualquier opcin que no es comprendida por el
kernel se pasar a init (pid = 1), el primer proceso de usuario que se ejecuta en el
sistema.
Para la versin GRUB 2 (la nueva), una lnea de comandos del kernel podra verse as:
linux16 /boot/vmlinuz-3.16.0 root=UUID=178d0092-4154-4688-af24cda272265e08 ro
vconsole.keymap=us crashkernel=auto
vconsole.font=latarcyrheb-sun16
rhgb quiet LANG=en_US.UTF-8

y se encontrara en /boot/grub2/grub.cfg.
En la versin 2 no se debe editar este archivo directamente, sino que modificar los
archivos relevantes bajo /etc.
En los ejemplos anteriores las filas largas fueron divididas para su visualizacin, pero
cada una de ellas corresponden a una lnea larga. Recuerde que discutimos cmo
configurar las dos versiones de GRUB, y que la versin 2 no debe editarse directamente,
sino modificar los archivos correspondientes en /etc.
Basta hacer lo siguiente para ver con qu lnea de comandos inici un sistema:
$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-3.18.1 root=UUID=9d6b5801-9c7e-4c17-906849923952338e ro rhgb quiet loop.max_loop=256 LANG=en_US.UTF-8

LFS201: Fundamentos de Administracin de Sistemas Linux

99

6.4 Parmetros de Inicio del Kernel


Hay una lista sorprendentemente larga de los parmetros disponibles del kernel.
Documentacin detallada al respecto se puede encontrar aqu:

En las fuentes del kernel, en el archivo Documentation/kernel-parameters.txt.

En lnea, en http://kernel.org/doc/Documentation/kernel-parameters.txt.

En el paquete de documentacin del kernel provedo por la mayora de las


distribuciones, con un nombre similar a kernel-doc o linux-doc.

Ejecutando el comando man bootparam.

Los parmetros pueden ser especificados simplemente como un valor dado como
argumento, o de la forma param=valor, donde el valor dado puede ser un string, entero,
arreglo de enteros, etc, tal como se explica en el archivo de documentacin.
Por convencin, no debera haber parmetros intencionalmente escondidos o secretos,
todos ellos deberan estar explicados en la documentacin. Los parches a las fuentes del
kernel con parmetros nuevos deben incluir modificaciones en el archivo de
documentacin.
Aqu puede ver el significado de alguno de los parmetros de arranque mencionados:

ro: monta el directorio raz en modo slo-lectura en el inicio.


root: sistema de archivos raz.
rd_LVM_LV: activa el sistema de archivos root en el volumen lgico especificado.
rd_NO_LUKS: deshabilita la deteccin de cifrado LUKS.
rd_NO_DM: deshabilita la deteccin de DM RAID.
LANG: es el lenguaje del sistema.
SYSFONT: es la fuente de consola.
KEYTABLE: es el nombre del archivo de configuracin del teclado.
rhgb: para soporte de booteo grfico en sistemas Red Hat.
quiet: deshabilita la mayora de los mensajes del registro.

Tenga en cuenta que los parmetros que comienzan con rd se usan solamente en los
sistemas basados en Red Hat. Alguna documentacin al respecto puede encontrarse
en https://fedoraproject.org/wiki/Dracut/Options.

LFS201: Fundamentos de Administracin de Sistemas Linux

100

6.5 sysctl
La interfaz sysctl puede ser utilizada para leer y ajustar los parmetros del kernel en
tiempo de ejecucin. Los valores actuales se pueden visualizar con el siguiente comando:
$ sysctl -a
....
kernel.pid_max = 32768
...
kernel.threads-max = 63707
....
net.ipv4.ip_default_ttl = 64
....
net.ipv4.ip_forward = 0
....
vm.nr_hugepages = 16
vm.swappiness = 10
....

Cada valor corresponde a un seudoarchivo en particular bajo /proc/sys, en donde las


diagonales son reemplazadas por puntos. Por ejemplo, las dos siguientes sentencias son
equivalentes:
$ sudo sh -c echo 1 > /proc/sys/net/ipv4/ip_forward
$ sudo sysctl net.ipv4.ip_forward=1

donde la segunda forma se usa para establecer un valor con la interfaz de lnea de
comando sysctl. No se puede dejar espacios alrededor del signo = en este comando.
Note que en la primera forma, no es posible utilizar sudo con echo; el comando debe
hacerse en la forma en que se muestra, o ejecutndolo como root.
Si va a travs de los seudoarchivos en /proc/sys va a obtener la misma informacin que
provee sysctl -a. Puede obtener todos los detalles sobre cmo utilizar sysctl con man 8
sysctl. Para obtener informacin acerca de cmo se usa la funcin sysctl() desde un
programa para realizar las mismas operaciones, ejecute man 2 sysctl.
Si la configuracin est en /etc/sysctl.conf (ver man sysctl.conf para ms detalles),
es posible realizar ajustes en el inicio del sistema.
Note que el comando:
$ sudo sysctl -p

lleva a cabo de forma inmediata lo que se encuentra en el archivo de configuracin,


ajustando todos los parmetros segn se haya especificado; esto tambin es parte del
proceso de inicio.
En algunas distribuciones recientes basadas en systemd (como en RHEL 7), el archivo
de configuracin es ahora/usr/lib/sysctl.d/00-system, pero el archivo original est
soportado todava, ya que est autodocumentado en ese archivo.

LFS201: Fundamentos de Administracin de Sistemas Linux

101

Comprobacin de Conocimientos 6.1

6.6 Laboratorio 6.1


Laboratorio 6.1: Ajustes del sistema con sysctl
1. Verifique si puede hacer ping a su sistema. Tenga en cuenta que en RHEL 7 es necesario ser
root para hacer ping en la mayora de redes externas.
2. Verifique el valor actual de net.ipv4.icmp_echo_ignore_all, el cual se usa para habilitar y
deshabilitar que su sistema responda a ping. El valor 0 permite a su sistema responder a
pings.
3. Configure el valor en 1 usando la herramienta de lnea de comandos sysctl y luego verifique
si el sistema dej de responder a pings.
4. Configure el valor de vuelta a 0 y confirme si se restaur el comportamiento original.
5. Ahora modifique el valor a travs de la edicin de /etc/sysctl.conf y fuerce al sistema a
activar esa configuracin en el archivo sin reiniciar el sistema.
6. Verifique que la modificacin est funcionando correctamente. Una vez que haya terminado,
puede reiniciar su sistema para asegurarse que todo est de vuelta en el punto original.

LFS201: Fundamentos de Administracin de Sistemas Linux

102

Solucin 6.1
Usted puede usar ya sea localhost o 127.0.0.1 (loopback) o la direccin IP actual del sistema como
objeto de prueba para el ping de a continuacin.
1. $ ping localhost
2. $ sysctl net.ipv4.icmp_echo_ignore_all
3. $ sudo sysctl net.ipv4.icmp_echo_ignore_all=1
$ ping localhost
4. $ sudo sysctl net.ipv4.icmp_echo_ignore_all=0
$ ping localhost
5. Agregue la lnea siguiente a /etc/sysctl.conf:
net.ipv4.icmp_echo_ignore_all=1
y luego haga:
$ sysctl -p
6. $ sysctl net.ipv4.icmp_echo_ignore_all
$ ping localhost
Ya que los cambios en el archivo /etc/sysctl.conf son persistentes, sera buena idea restaurar los
valores originales.

6.6 Laboratortio 6.2


Laboratorio 6.2: Modificar el ID de proceso mximo - maximum process ID
El comportamiento normal de un sistema Linux es que los IDs de proceso comiencen en PID=1
para el proceso init, el primer proceso en el sistema, y luego en forma secuencial a medida en que
procesos nuevos van siendo creados y terminados (de forma constante).
Sin embargo, cuando el PID alcanza el valor especificado en /proc/sys/kernel/pid_max, el cual es
generalmente 32768 (32K), se intentar utilizar nmeros bajos. Si no hay ms nmeros disponibles
no hay nada que hacer, ya que no es posible tener ms de 32K procesos en el sistema (ese es el
nmero mximo para los PIDs).
1.
2.
3.
4.

Obtenga el valor actual del PID mximo.


Averigue cules son los PIDs que est siendo creados actualmente.
Configure pid_max a un valor menor.
Inicie un proceso y vea qu valor de PID se le asigna.

LFS201: Fundamentos de Administracin de Sistemas Linux

103

Solucin 6.2
A continuacin vamos a usar dos mtodos; uno usando sysctl, el otro escribiendo valores
directamente con echo a /proc/sys/kernel/pid_max. Note que el mtodo echo require ser root,
sudo no funcionar. Dejaremos que usted descubra porqu, en caso que no lo sepa todava.
1. $ sysctl kernel.pid_max
$ cat /proc/sys/kernel/pid_max
2. Escriba:
$ cat &
[1] 29222
$ kill -9 29222
3. $ sudo sysctl kernel.pid_max=24000
$ echo 24000 > /proc/sys/kernel/pid_max # Esto debe ser realizado como root
$ cat /proc/sys/kernel/pid_max
4. $ cat &
[2] 311
$ kill -9 311
Tenga en cuenta que cuando se comienza de nuevo, el kernel comienza en PID=300, no en un
nmero menor. Es posible que se de cuenta que asignar PIDs a los procesos nuevos no es algo
trivial; debido a que el sistema puede haber comenzado de nuevo a asignar los nmeros
correspondientes, el kernel siempre tiene que verificar que al crear esos nuevos PIDs no estn en
uso. . El kernel Linux tiene una manera muy eficiente de hacer esto, la cual no depende del nmero
de procesos corriendo en el sistema.

Objetivos de aprendizaje (Revision)


Usted debera ser capaz de:

Conocer las principales responsabilidades que el kernel debe realizar y cmo lo


hace.
Explicar qu parmetros pueden ser configurados en la lnea de comandos del
kernel, y cmo hacerlos efectivos para un slo inicio del sistema o de forma
persistente.
Saber en dnde encontrar documentacin detallada acerca de estos parmetros.
Saber cmo utilizar sysctl para configurar parmetros del kernel, ya sea despus
de haber iniciado el sistema o de forma persistente con los reinicios del sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

104

Captulo 7. Mdulos del Kernel


El kernel Linux hace un uso extensivo de mdulos, los cuales contienen software
importante que puede ser cargado y descargado segn se necesite despus que el
sistema ha iniciado. Muchos mdulos incorporan controladores de dispositivos para el
control de hardware, ya sea como parte del sistema o perifricos. Otros mdulos pueden
controlar protocolos de red, proveer soporte a diferentes tipos de sistemas de archivos y
muchos otros propsitos. Los parmetros pueden ser especificados al cargar los mdulos
con el fin de controlar su comportamiento. El resultado final es una gran flexibilidad y
agilidad en la respuesta a las condiciones y necesidades cambiantes.

Objetivos de Aprendizaje
Al final de este captulo usted debera ser capaz de:

Enumerar las ventajas en la utilizacin de mdulos del kernel.


Utilizar insmod, rmmod y modprobe para cargar y descargar mdulos del kernel.
Saber cmo usar modinfo para encontrar informacin acerca de los mdulos del
kernel.

LFS201: Fundamentos de Administracin de Sistemas Linux

105

7.1 Ventajas de los mdulos del Kernel


Muchas piezas de soporte en el kernel Linux estn diseadas como parte integral del
kernel cuando ste se carga inicialmente, o para ser agregadas (o removidas) ms tarde
en forma de mdulos segn sea necesario. De hecho, la mayora de los componentes
del kernel se integran como mdulos, con excepcin de los elementos centrales.
Tales mdulos pueden o no ser controladores de dispositivos. Por ejemplo, pueden
implementar un cierto protocolo de red o sistema de archivos que maneja un dispositivo
de hardware o software. Incluso en los casos en que prcticamente siempre se necesitar
la funcionalidad, la incorporacin de la capacidad de carga y descarga como mdulo
facilita el desarrollo de software, ya que no hacen falta reinicios del kernel para probar los
cambios realizados.
Incluso con el uso generalizado de los mdulos del kernel, Linux conserva una
arquitectura de kernel monoltico en vez de un microkernel. Esto es porque cuando se
carga un mdulo se convierte en una parte completamente funcional del kernel, con pocas
restricciones. Estos se comunican con todos los subsistemas del kernel principalmente a
travs de recursos compartidos, como memoria y archivos de bloqueo, ms que a travs
de pasar mensajes como puede ocurrir en un microkernel.
Linux no es el nico sistema operativo que utiliza mdulos; Solaris lo hace y tambin AIX,
quienes las llaman extensiones del kernel. Sin embargo, Linux las utiliza de manera
particularmente robusta.

7.2 Herramientas de trabajo con mdulos


Hay una serie de herramientas que se utilizan con los mdulos del kernel:

lsmod: Lista los mdulos cargados.


insmod: Carga mdulos directamente.
rmmod: Remueve mdulos directamente.
modprobe: Carga o descarga mdulos, utilizando una base de datos
preconstruida de los mdulos con informacin de sus dependencias.
depmod: Reconstruye la base de datos de dependencia de mdulos; es requerida
por modprobe y modinfo.
modinfo: Proporciona informacin acerca de un mdulo.

LFS201: Fundamentos de Administracin de Sistemas Linux

106

7.3 Carga y descarga de mdulos


La carga y descarga del mdulo se debe realizar como usuario root. Si se conoce la ruta
completa, el mdulo se puede cargar directamente de la siguiente forma:
$ sudo /sbin/insmod <pathto>/module_name.ko

La ubicacin normal de los mdulos del kernel est bajo el rbol de


directorios /lib/modules/<kernel-version>. Un mdulo del kernel siempre tiene una
extensin .ko, como e1000e.ko, ext4.ko, o usbserial.ko.
Los mdulos del kernel estn asociados a la versin especfica del kernel y deben
coincidir con el kernel en ejecucin o no pueden ser cargados. Deben ser compilados ya
sea cuando el propio kernel es compilado, o posteriormente en un sistema que contiene
las fuentes del kernel y la configuracin de compilacin para realizarlo de forma
apropiada.
Mientras el mdulo es cargado es posible ver su estado con lsmod:
$ lsmod
Module
...
usb_storage
vmnet
fuse
....
snd_hda_codec_analog
snd_hda_codec_generic
snd_hda_intel
snd_usb_audio
....
soundcore
nouveau
ahci
libahci
skge
.....

Size
50309
38408
74097

Used by
0
13
5

9813
47551
19279
140055

1
1 snd_hda_codec_analog
4
3

5891
911957
23547
21534
29924

2 snd,snd_hda_codec
4
8
1 ahci
0

El mdulo se puede remover directamente como sigue:


$ sudo /sbin/rmmod module_name

Note que al remover un mdulo no es necesario proveer ya sea la ruta completa del
archivo o la extensin .ko.

LFS201: Fundamentos de Administracin de Sistemas Linux

107

7.4 modprobe
En la mayora de los casos los mdulos no son cargados ni descargados
con insmod y rmmod. En vez de eso, se usa modprobe, de la forma que se muestra en
continuacin:
$ sudo /sbin/modprobe module_name
$ sudo /sbin/modprobe -r module_name

en donde la segunda forma es usada para remover el mdulo. Para


que modprobe funcione, los mdulos tienen que estar instalados en el lugar correcto,
generalmente bajo /lib/modules/$(uname
-r), donde $(uname
-r) entrega la
versin actual del kernel, por ejemplo 3.18.3.

7.5 Algunas consideraciones en relacin a los mdulos


Hay algunas cosas importantes para mantener en mente al cargar y descargar mdulos:

No es posible descargar un mdulo que est siendo usado por uno u otros
mdulos, lo cual se puede determinar a partir de la lista que provee lsmod.

No es posible descargar un mdulo que est siendo usado por uno o


ms procesos, lo cual tambin puede ser visto en la salida de lsmod. Sin
embargo, hay mdulos que no llevan un registro de este tipo de referencias, como
los mdulos de los controladores de dispositivos de red, ya que sera muy difcil
reemplazar temporalmente un mdulo sin apagar y reiniciar gran parte de la pila
de red.

Cuando un mdulo es cargado con modprobe, el sistema automticamente carga


todos los mdulos de los cuales depende, los cuales necesitan ser cargados
primero.

Cuando un mdulo es descargado con modprobe -r, el sistema descargar


automticamente cualquier otro mdulo que est siendo utilizado por ste, siempre
y cuando no estn siendo usados de forma simultnea por otros mdulos
cargados.

LFS201: Fundamentos de Administracin de Sistemas Linux

108

7.6 modinfo
modinfo puede ser usado para encontrar informacin acerca de los mdulos del kernel
(tanto si estn actualmente cargados o no), como se muestra a continuacin:
$ /sbin/modinfo my_module
$ /sbin/modinfo <pathto>/my_module.ko

Por ejemplo:
$ modinfo e1000
filename: /lib/modules/3.1.0/kernel/drivers/net/e1000/e1000.ko
version: 7.3.21-k8-NAPI
license: GPL
description: Intel PRO/1000 Network Driver
author: Intel Corporation, <linux.nics@intel.com>
srcversion: E005D763BC7910379BDD09A
alias: pci:v00008086d00002E6Esv*sd*bc*sc*i*
alias: pci:v00008086d000010B5sv*sd*bc*sc*i*
alias: pci:v00008086d00001099sv*sd*bc*sc*i*
....
alias: pci:v00008086d00001000sv*sd*bc*sc*i*
depends: vermagic: 3.1.0 SMP preempt mod_unload
parm: TxDescriptors:Number of transmit descriptors (array of int)
parm: RxDescriptors:Number of receive descriptors (array of int)
parm: Speed:Speed setting (array of int)
parm: Duplex:Duplex setting (array of int)
parm: AutoNeg:Advertised auto-negotiation setting (array of int)
parm: FlowControl:Flow Control setting (array of int)
parm: XsumRX:Disable or enable Receive Checksum offload (array of
int)
parm: TxIntDelay:Transmit Interrupt Delay (array of int)
parm: TxAbsIntDelay:Transmit Absolute Interrupt Delay (array of
int)
parm: RxIntDelay:Receive Interrupt Delay (array of int)
parm: RxAbsIntDelay:Receive Absolute Interrupt Delay (array of int)
parm: InterruptThrottleRate:Interrupt Throttling Rate (array of
int)
parm: SmartPowerDownEnable:Enable PHY smart power down (array of
int)
parm: copybreak:Maximum size of packet that is copied to a new
buffer on receive (uint)
parm: debug:Debug level (0=none,...,16=all) (int)

lo cual despliega informacin acerca de la versin, nombre de archivo, qu dispositivos de


hardware puede manejar el controlador y qu parmetros pueden ser suministrados
durante la carga.
Mucha de la informacin acerca de los mdulos puede ser visualizada tambin en el rbol
de directorios del seudosistema de archivos /sys; en el ejemplo anterior se podra mirar
bajo /sys/module/e1000, y algunos - si es que no todos los parmetros - se pueden leer
y/o escribir bajo /sys/module/e1000/parameters. Le mostraremos cmo configurarlos
en el tem siguiente.
LFS201: Fundamentos de Administracin de Sistemas Linux

109

7.7 Parmetros en los Mdulos


En muchos casos es posible especificar valores de los parmetros al cargar el mdulo,
como se muestra aqu:
$ sudo /sbin/insmod <pathto>/e1000e.ko debug=2 copybreak=256

o de forma ms fcil para un mdulo que est presente en la ubicacin adecuada del
sistema:
$ sudo /sbin/modprobe e1000e debug=2 copybreak=256

7.8 Configuracin en los mdulos del kernel


Los archivos en el directorio /etc/modprobe.d controlan algunos parmetros que entran
en juego cuando la carga se realiza con modprobe. Estos parmetros incluyen alias de
nombre de mdulo y opciones provedas automticamente. Tambin es posible poner
mdulos especficos en una lista negra para evitar que sean cargados.
Los ajustes se aplican tanto a mdulos que estn cargados y descargados, y la
configuracin puede ser modificada a medida en que las necesidades cambian.
El formato de los archivos en /etc/modprobe.d es simple: un comando por lnea, con
lneas en blanco y otras con #, en las cuales se ignora el contenido (lo cual es til para
agregar comentarios). Una diagonal inversa al final de una lnea causa que sta contine
en la siguiente, lo cual le brinda un mayor orden al archivo.

Comprobacin de Conocimientos 7.1

LFS201: Fundamentos de Administracin de Sistemas Linux

110

7.9 Laboratorio 7.1


Laboratorio 7.1: Mdulos del kernel
1. Liste todos los mdulos del kernel que estn cargados actualmente en su sistema.
2. Cargue un mdulo que no est en uso en su sistema. Si est ejecutando un kernel que
viene con la distribucin es fcil encontrar los mdulos; simplemente tiene que buscar en
el directorio /lib/modules/ /kernel/drivers/net y elegir uno (los kernels que vienen con las
distribuciones incluyen controladores para cada dispositivo, sistema de archivos, protocolo
de red, etc., todo lo que un sistema puede necesitar). Sin embargo, si est corriendo un
kernel personalizado es posible que no tenga muchos mdulos disponibles para cargar.
3. Liste los mdulos del kernel nuevamente y vea si el mdulo fue realmente cargado.
4. Remueva el mdulo que carg anteriormente.
5. Liste los mdulos del kernel nuevamente y compruebe si el mdulo fue descargado
correctamente.

Solucin 7.1
1. $ lsmod
En la seccin que viene a continuacin, substituya cualquier nombre de mdulo que us
en vez de 3c59x. Cualquiera de estos dos mtodos va a funcionar, pero el segundo es ms
fcil.
2. $ sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/3c59.x
$ sudo /sbin/modprobe 3c59x
3. $ lsmod | grep 3c59x
4. De nuevo, cualquiera de los siguientes mtodos va a funcionar.
$ sudo rmmod 3c59x
$ sudo modprobe -r 3c59x
5. $ lsmod | grep 3c59x

Objetivos de aprendizaje (Revisin)


Usted debera ser capaz de:

Enumerar las ventajas de utilizar mdulos del kernel.


Usar insmod, rmmod y modprobe para cargar y descargar mdulos del kernel.
Saber cmo usar modinfo para encontrar encontrar informacin acerca de
mdulos del kernel.

LFS201: Fundamentos de Administracin de Sistemas Linux

111

Captulo 8. Dispositivos y UDEV


Linux usa udev, una pieza de software inteligente para descubrir hardware y dispositivos
perifricos tanto durante el inicio como despus, una vez que son conectados al sistema.
Los nodos de dispositivo son creados automticamente, para luego utilizados por las
aplicaciones y subsistemas del sistema operativo para comunicarse y transferir datos
desde y hacia los dispositivos. Los administradores del sistema pueden controlar cmo
opera udev a travs de la creacin de reglas especiales para asegurar que los resultados
corresponden al comportamiento deseado.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar el rol de los nodos de dispositivo y cmo se usan los


nmeros mayor y menor.
Comprender la necesidad de usar udev y enumerar sus componentes principales.
Describir cmo funciona el administrador de dispositivos udev.
Identificar archivos de reglas de udev y aprender a crear reglas personalizadas.

LFS201: Fundamentos de Administracin de Sistemas Linux

112

8.1 Nodos de dispositivo


Los dispositivos orientados a caracteres y bloques tienen entradas de sistemas de
archivos asociados a ellos; por otro lado, los dispositivos de red en Linux no los poseen.
Estos nodos de dispositivo pueden ser usados por programas para comunicarse con los
dispositivos,
usando
llamadas
al
sistema
E/S
normal
como
open(), close(), read() y write(). Por otra parte, los dispositivos de red funcionan a
travs de la transmisin y recepcin de paquetes, los cuales deben construirse a partir de
la decodificacin de flujos de datos, o ser reensamblados cuando son recibidos.
Un controlador de dispositivo puede administrar mltiples nodos de dispositivo, los cuales
estn localizados normalmente en el directorio/dev:
$ ls -l /dev
total 0
crw------- 1 coop audio 14, 4 Jul 9 01:54 audio
crw------- 1 root root 10, 62 Jul 9 01:54 autofs
lrwxrwxrwx 1 root root 4 Jul 9 01:54 cdrom -> scd0
lrwxrwxrwx 1 root root 4 Jul 9 01:54 cdrw -> scd0
crw------- 1 coop root 5, 1 Jul 9 06:54 console
....
lrwxrwxrwx 1 root root 4 Jul 9 01:54 dvd -> scd0
lrwxrwxrwx 1 root root 4 Jul 9 01:54 dvdwriter -> scd0
crw------- 1 root root 10, 228 Jul 9 01:54 hpet
crw-r----- 1 root kmem 1, 2 Jul 9 01:54 kmem
crw------- 1 root root 1, 11 Jul 9 01:54 kmsg
crw-r----- 1 root kmem 1, 1 Jul 9 01:54 mem
crwxrwxrwx 1 root root 1, 3 Jul 9 01:54 null
crw-rw---- 1 root root 10, 144 Jul 9 01:54 nvram
brw------- 1 coop disk 11, 0 Jul 9 01:54 scd0
....
brw-r----- 1 root disk 8, 0 Jul 9 01:53 sda
brw-r----- 1 root disk 8, 1 Jul 9 01:53 sda1
brw-r----- 1 root disk 8, 2 Jul 9 06:54 sda2
....
brw-r----- 1 root disk 8, 16 Jul 9 01:53 sdb
brw-r----- 1 root disk 8, 17 Jul 9 01:53 sdb1
brw-r----- 1 root disk 8, 18 Jul 9 01:53 sdb2
....
crw------- 1 coop audio 14, 1 Jul 9 01:54 sequencer
crw------- 1 coop audio 14, 8 Jul 9 01:54 sequencer2
crw-rw-rw- 1 root tty 5, 0 Jul 9 01:54 tty
crw-rw---- 1 root root 4, 0 Jul 9 14:54 tty0
crw------- 1 root root 4, 1 Jul 9 06:54 tty1
crrr-- 1 root root 1, 9 Jul 9 01:53 urandom
....
crw-rw-rw- 1 root root 1, 5 Jul 9 01:54 zero

Los nodos de dispositivo pueden ser creados de la siguiente forma:


$ sudo mknod [-m mode] /dev/name <type> <major> <minor>
e.g., mknod -m 666 /dev/mycdrv c 254 1

LFS201: Fundamentos de Administracin de Sistemas Linux

113

8.2 Nmeros mayor y menor


Los nmeros mayor y menor identifican el controlador asociado al dispositivo. En este
esquema el controlador reserva de forma nica un grupo de nmeros. En la mayora de
los casos (con excepciones) los nodos de dispositivo del mismo tipo (de bloque o
carcter) que tienen el mismo nmero mayor, usan el mismo controlador.
Al listar algunos nodos de dispositivo de la forma en que se muestra, se obtiene lo
siguiente:
$ ls -l /dev/sda*
brw-rw---- 1 root disk 8,
brw-rw---- 1 root disk 8,
brw-rw---- 1 root disk 8,
.......

0 Dec 29 06:40 /dev/sda


1 Dec 29 06:40 /dev/sda1
2 Dec 29 06:40 /dev/sda2

Los nmeros mayor y menor se muestran en el mismo lugar que el tamao de archivo al
visualizar archivos normales; en el ejemplo de arriba sera 8, 0, etc. Mientras que los
usuarios finales probablemente no necesitarn referirse explcitamente a los nmeros
mayor y menor (ya que lo harn por nombre), los administradores de sistema podran
requerir hacerlo de vez e cuando, en caso que el sistema se confunda acerca de los
dispositivos, o si se ha agregado hardware en tiempo de ejecucin.

LFS201: Fundamentos de Administracin de Sistemas Linux

114

El nmero menor es usado slo por el controlador de dispositivo para diferenciar entre los
diferentes dispositivos que este puede controlar, o cmo son usados. Estos pueden
corresponder a instancias diferentes de un mismo tipo de dispositivo (como la primera y
segunda tarjeta de sonido o particin de disco duro), o diferentes modos de operacin de
un determinado dispositivo (como diferentes densidades en una unidad de disquete).
Los nmeros de dispositivo tienen sentido en el espacio de usuario tambin. Las llamadas
al
sistema mknod() y
stat() entregan
informacin
acerca
de
los
nmeros mayor y menor.

8.3 udev
Los mtodos de gestin de nodos de dispositivo se tornaron torpes y difciles a medida en
que Linux evolucion. El nmero de nodos de dispositivo en /dev y sus subdirectorios
alcanz una cantidad entre 15.000 a 20.000 en la mayora de las instalaciones durante la
serie del kernel 2.4. Nodos para todo tipo de dispositivos - los que nunca van a ser
utilizados en la mayora de las instalaciones - todava son creados de forma
predeterminada, ya que los distribuidores no tienen la certeza de qu hardware estar
presente en un sistema.
Por supuesto, muchos desarrolladores y administradores de sistema recortaron la lista a
lo que realmente se necesita, lo cual es especialmente til en sistemas embebidos, pero
esto correspondi a una tarea esencialmente manual y propensa a generar errores.
Note que mientras los nodos de dispositivo no son archivos normales y no ocupan mucho
espacio en el sistema de archivos, el tener directorios muy grandes disminuye la
velocidad de acceso a los nodos de dispositivo, especialmente en el primer uso. Por otro
lado, el agotamiento de los nmeros mayor y menor disponibles requiere un enfoque ms
moderno y dinmico en cuanto a la creacin y el mantenimiento de los nodos de
dispositivo.
Lo ideal sera registrar dispositivos por nombre. Sin embargo, no es posible librarse de los
nmeros mayor y menor del todo, debido a que el estndar POSIX los exige (POSIX es
un acrnimo de Interfaz de sistema operativo portable, una familia de estndares
diseados para asegurar la compatibilidad entre diferentes sistemas operativos).
El mtodo udev crea nodos de dispositivo al vuelo, a medida en que son requeridos. No
hay necesidad de mantener un gran cantidad de nodos de dispositivo que no van a ser
usados nunca. La u en udev viene de usuario e indica que la mayora del trabajo de
creacin, eliminacin y modificacin de nodos de dispositivo se realiza en el espacio de
usuario.
udev maneja la generacin dinmica de nodos de dispositivo y evolucion de tal forma
que reemplaz mecanismos como devfs y hotplug. Una caracterstica interesante es el
soporte de nombres persistentes para los dispositivos; los nombres no necesitan
depender del orden en el cual los dispositivos son conectados. Tal comportamiento es
controlado en las especificaciones de las reglas de udev.

LFS201: Fundamentos de Administracin de Sistemas Linux

115

8.4 Componentes de udev


udev se ejecuta como demonio (ya sea udevd o systemd-udevd) y monitorea un netlink
socket. Cuando dispositivos nuevos son inicializados o removidos, el utilitario uevent del
kernel enva un mensaje a travs del socket, el que es recibido por udev, el cual realiza la
accin apropiada para crear o remover entradas de los nodos de dispositivo de acuerdo a
las reglas.
Los tres componentes de udev son:
1. La biblioteca libudev, la cual permite el acceso a la informacin de los
dispositivos.
2. El demonio udevd, el cual gestiona el directorio /dev .
3. La utilidad udevadm para el control y diagnstico.
La manera ms apropiada de utilizar udev es tener un sistema original; el
directorio /dev est vaco en el arranque del kernel y luego se puebla con nodos de
dispositivo a medida en que se necesitan. Cuando se usa de esta forma, es necesario
iniciar usando una imagen initramfs, la cual puede contener un conjunto de nodos de
dispositivos preliminares, como tambin la infraestructura de udev.

8.5 udev y hotplug


A medida en que se agregan o remueven dispositivos desde el sistema - en este caso al
trabajar con el subsistema hotplug - udev acta ante la notificacin de eventos para crear
y remover nodos de dispositivo. La informacin necesaria para crearlos con los nombres
adecuados, nmeros mayor y menor, permisos, etc., es obtenida a travs del registro
existente en el seudosistema de archivos sysfs (montado en /sys) y un conjunto de
archivos de configuracin.
El archivo principal de configuracin es /etc/udev/udev.conf. Este contiene informacin
de dnde poner los nodos de dispositivo, permisos por defecto, dueos, etc. Por defecto,
las reglas para los nombres de los dispositivos estn ubicadas en el
directorio /etc/udev/rules.d. A travs de la lectura de la pgina man de udev es
posible obtener una gran cantidad de informacin especfica acerca de cmo configurar
reglas para situaciones comunes.

LFS201: Fundamentos de Administracin de Sistemas Linux

116

8.6 El gestor de dispositivos udev


Cuando udev recibe un mensaje desde el kernel acerca de dispositivos que estn siendo
aadidos o removidos, analiza los archivos de configuracin en /etc/udev/rules.d/*.rules
para determinar si hay reglas que apliquen al dispositivo en cuestin.
Entonces udev toma las acciones apropiadas, incluyendo:

Asignacin de nombre a los nodos de dispositivo.

Creacin de nodos de dispositivo y links simblicos.

Ajuste de permisos de archivo y dueo para los nodos de dispositivo.


Realizar otras acciones para inicializar el dispositivo y ponerlo disponible.

Estas reglas son completamente personalizables.

8.7 Archivos de reglas udev


Los archivos
localizados bajo

de las

reglas

de udev estn

/etc/udev/rules.d/<rulename>.rules,
con nombres como los siguientes:

30-usb.rules
90-mycustom.rules

Por defecto, cuando udev lee los archivos de


reglas busca archivos con el sufijo .rules. Si
encuentra ms de un archivo, los lee uno por uno,
de manera lexicogrfica, es decir, en orden
alfabtico ascendente. El nombre estndar de un
archivo de reglas corresponde generalmente a un
nmero de dos dgitos seguido por un nombre
descriptivo de la regla en cuestin, para finalizar
con el sufijo .rules.

LFS201: Fundamentos de Administracin de Sistemas Linux

117

8.8 Creando reglas udev


El formato para una regla udev es simple:
<match><op>value [, ...] <assignment><op>value [, ... ]
Hay dos partes separadas que estn definidas en una misma lnea:

La primera parte consiste en uno o ms pares indicados por == . Estos tratan de


coincidir con los atributos y/o caractersticas de un dispositivo a algn valor.

La segunda parte consiste en una o ms asignaciones clave-valor, las que asignan


un valor a un nombre, tal como un nombre de archivo, pertenencia a un grupo,
incluso permisos de archivo, etc.

Si no se encuentra una regla que coincida, se usa el nombre de nodo de dispositivo y


otros atributos por defecto.

8.9 Algunos ejemplos de archivos y reglas


Aqu hay un ejemplo de un archivo de reglas para un dispositivo Fitbit:
$ cat /etc/udev/conf.d/rules.d/99-fitbit.rules
SUBSYSTEM==usb, ATTR{idVendor}==2687, ATTR{idProduct}==fb01,
SYMLINK+=fitbit, MODE=0666
$ cat /etc/udev/conf.d/rules.d/98-kexec.rules
SUBSYSTEM==cpu, ACTION==online, PROGRAM=/bin/systemctl tryrestart kdump.service
SUBSYSTEM==cpu, ACTION==offline, PROGRAM=/bin/systemctl tryrestart kdump.service
SUBSYSTEM==memory, ACTION==add, PROGRAM=/bin/systemctl tryrestart kdump.service
SUBSYSTEM==memory, ACTION==remove, PROGRAM=/bin/systemctl tryrestart kdump.service
$ cat 80-kvm.rules
KERNEL==kvm, GROUP=kvm, MODE=0666
$ cat 99-fuse.rules
KERNEL==fuse, MODE=0666,OWNER=root,GROUP=root

LFS201: Fundamentos de Administracin de Sistemas Linux

118

Comprobacion de Conocimientos 8.1

Objetivos de aprendizaje (revisin)


Usted debera ser capaz de:

Explicar el rol de los nodos de dispositivo y cmo se usan los


nmeros mayor y menor.
Comprender la necesidad del mtodo udev y enumerar sus componentes
principales.
Describir cmo funciona el administrador de dispositivos udev.
Identificar archivos de reglas de udev y saber crear archivos de reglas
personalizadas.

LFS201: Fundamentos de Administracin de Sistemas Linux

119

Captulo 9. Particionamiento y Formateo de Discos


El particionado y formateo de los discos duros disponibles es una parte crtica en la
instalacin del sistema. Es posible escoger diferentes esquemas en funcin del tamao
del sistema, el nmero de usuarios y sus necesidades. Otros tems a tomar en cuenta es
el tipo de hardware del que se dispone, particularmente el tipo de bus de datos al cual el
sistema de almacenamiento est conectado.
Se debe tener mucho cuidado al configurar o modificar las tablas de particiones, ya que
los errores de este tipo pueden ser muy destructivos

Objetivos de aprendizaje
Al final del captulo usted debera ser capaz de:

Describir y contrastar los tipos de discos duros y buses de datos ms


comunes.
Explicar cmo es la geometra de un disco y otros conceptos de
particionamiento.
Comprender cmo los dispositivos de disco son nombrados y cmo
identificar sus nodos de dispositivo asociados.
Distinguir las distintas estrategias de particionamiento y saber seleccionarlas
correctamente.
Usar las utilidades blkid y fdisk.
Respaldar y restaurar tablas de particin.

LFS201: Fundamentos de Administracin de Sistemas Linux

120

9.1 Tipos comunes de discos


Existe una gran variedad de tipos de discos duros; cada uno est caracterizado por el tipo
de bus de datos a travs del cual se conecta, como tambin otros factores como
velocidad, capacidad y cun bien operan mltiples unidades de forma simultnea.

IDE y EIDE
(Entorno
de
desarrollo
integrado
e IDE mejorado)
Estos fueron el estndar en notebooks y PCs de escritorio por aos. Sin embargo,
son pequeos y lentos en comparacin a hardware ms moderno, por lo cual
actualmente estn obsoletos; de hecho, los controladores no estn disponibles en
mquinas actualizadas.

SATA (Serial ATA)


Este tipo fue diseado para reemplazar a Parallel ATA (PATA) (el cual fue
conocido originalmente como IDE). Tenan una mayor transferencia de datos,
cables ms pequeos y eran detectados como dispositivos SCSI por el sistema
operativo, lo cual simplific el tema de escribir controladores de software (entre
otras cosas), aun siendo que el hardware no es realmente SCSI.
En comparacin a PATA, SATA ofrece un cable de tamao menor (7 pines),
sustitucin en caliente (hot swapping) y una transferencia de datos ms rpida y
eficiente. Los controladores ms nuevos pueden manejar 16 GB/s, pero 3 GB/s y 6
GB/s son los valores ms comunes en dispositivos del segmento usuario normal.

SCSI (Interfaz de Sistema para Pequeas Computadoras)


Estos han sido el pilar de los servidores empresariales por dcadas. Mientras que
pueden tener una capacidad menor que los discos SATA, tienen a ser mucho ms
rpidos y a trabajar en paralelo mucho mejor, de la forma en la que se requiere
para algunas configuraciones en RAID.
Hay varias versiones de SCSI: Fast, Wide, Ultra y UltraWide, lo cual torna un
poco confusas las cosas. Adems, hay muchos controladores de dispositivo
diferentes, dependiendo del hardware especfico. Eso no sucede en SATA, ya que
en ese caso existen controladores estandarizados que pueden adaptarse a una
gran
variedad
de
hardware.
Los discos SCSI van desde un rango pequeo (bus de 8 bits) a uno amplio (bus de
16 bits), con una tasa de transferencia desde 5MB por segundo (un valor bajo,
correspondiente a dispositivos SCSI estndar) a cerca de 160MB por segundos
(Ultra-Wide
SCSI-3).
La mayora de los PCs usan unidades SCSI de un solo extremo o diferenciales.
Desafortunadamente, los dos tipos no son compatibles entre s. De todas formas,
ambos tipos pueden coexistir en el mismo controlador.
Los controladores de una sola terminacin soportan hasta 7 dispositivos, con una
longitud de cable de cerca de 6 metros. Los controladores diferenciales soportan
hasta 15 dispositivos, con una longitud mxima del cable de unos 12 metros.
LFS201: Fundamentos de Administracin de Sistemas Linux

121

SAS
El Serial Attached SCSI es un protocolo serial punto a punto nuevo, que viene a
reemplazar a la interfaz SCSI. Las tasas de transferencia son similar a SATA, pero
el rendimiento general es mejor.

USB
Los dispositivos de Bus Universal en Serie incluyen memorias y discos duros
externos USB. El sistema operativo los ve como dispositivos SCSI.

En la misma categora estn las unidades SSD modernas (dispositivos de estado slido),
las cuales han bajado de precio, no tienen partes movibles, usan menos energa que las
unidades de disco giratorio y tienen velocidades de transferencia ms rpidas.
Los SSD internos son instalados de forma similar y en los mismos encapsulados que los
discos convencionales.

9.2 Geometra del disco


La geometra del disco es un concepto con una historia larga para dispositivos giratorios;
se habla de cabezales,cilindros, pistas y sectores.
Para examinar la geometra del disco con fdisk:
$ sudo fdisk -l /dev/sda
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000001
Device Boot
Start
End
Blocks
Id
/dev/sda1 *
1
3800
30522368
83
/dev/sda2
3800
3851
409518
83
.....

System
Linux
Linux

Tenga en cuenta que el uso de la opcin -l slo lista la tabla de particiones sin entrar en
modo interactivo.
Los discos giratorios se componen de uno o ms platos, cada uno de los cuales es ledo
por uno o ms cabezales. Los cabezales leen una pista del plato a medida en que el
disco gira.
Estas pistas circulares estn divididas en bloques de datos llamados sectores,
generalmente de 512 bytes de tamao. Un cilindro es un grupo que est formado por una
misma pista en todos los platos.

LFS201: Fundamentos de Administracin de Sistemas Linux

122

A medida en que el tiempo pasa la figura de la estructura fsica ha sido cada vez menos
relevante, debido a que se conoce poco de la electrnica interna de la unidad. Adems,
los SSD no tienen partes mviles ni ninguna de las partes descritas anteriormente.
Actualmente los discos estn siendo fabricados con sectores ms grandes que 512 bytes;
estn disponibles en 4 KB. Mientras que sectores de tamao ms grandes pueden
conducir a velocidades de transferencia mayores, el soporte del sistema operativo no est
listo todava para lidiar con tamaos grandes.

9.3 Particionamiento
Los discos se dividen en particiones. En trminos geomtricos, estos consisten en
grupos fsicamente contiguos de sectores o cilindros.
Una de las particiones primarias puede ser designada como una particin extendida, la
cual puede ser subdividida en particiones lgicas.
SCSI y estndares relacionados como SATA, suportan hasta 15 particiones en el disco.
Las particiones 1-4 son primarias o extendidas; las particiones 5-15 son lgicas. Slo
puede haber una particin extendida, pero esta puede ser dividida en cuntas particiones
lgicas se necesiten, hasta que se alcance el nmero mximo de particiones permitidas.
Por ejemplo, la primera unidad SCSI o SATA se denomina sda, la segunda sdb y as
sucesivamente. En la primera unidad, /dev/sda1 es la primera particin
primaria, /dev/sda2 es la segunda, etc.
Si creamos una particin extendida como /dev/sda3, esta podra ser dividida en
particiones lgicas, con designaciones numricas como /dev/sda5, /dev/sda6, etc.
Nota: Linux no requiere que las particiones comiencen o terminen en los lmites de los
cilindros, pero otros sistemas operativos podran presentar problemas ante la misma
situacin. Por esta razn, las herramientas de particionamiento deLinux tratan de
terminar en los lmites, con el fin de integrarse bien con otros sistemas. Obviamente, las
particiones tampoco deberan traslaparse.

LFS201: Fundamentos de Administracin de Sistemas Linux

123

9.4 Por qu particionar?


Hay diversas razones que justifican dividir los datos del sistema en mltiples particiones,
incluyendo:

Separacin
Es deseable aislar los datos de usuario y aplicaciones de los archivos del sistema
operativo, la mayora de los cuales son de lectura solamente, excepto durante la
instalacin y actualizaciones del sistema. Por ejemplo,/home, que contiene
archivos especficos de los usuarios se suele poner en una particin por separado.
Datos compartidos
Mltiples sistemas operativos o mquinas pueden usar los mismos sistemas de
archivos. Por ejemplo, /home podra estar montado como un directorio compartido
en una red, a travs de NFS. O alguien podra tener un sistema de inicio mltiple,
incluso varias versiones de Linux, entre las cuales usted podra desear
compartir/usr/local o /home, por dar un par de ejemplos.
Seguridad
Puede ser deseable imponer diferentes cuotas (espacio en disco), permisos y
ajustes para diferentes partes del sistema.
Tamao
Algunos datos son ms bien constantes y otros variables o voltiles, y a menudo
pueden incrementar su tamao un poco. Por ejemplo, tales datos variables son
almacenados generalmente en una particin montada en /var. Si la particin se
queda sin espacio disponible, en el caso de estar en una particin por separado
de /, ser menos probable que el sistema se bloquee.
Rendimiento
Los datos que tienen que ser ledos con mayor frecuencia, en grandes trozos de
informacin, sern accedidos ms rpidamente si estn en un disco rpido (como
los SSD), o en trminos anticuados, cercanos al centro del disco, en donde los
tiempos de bsqueda son ms cortos.
Intercambio (swap)

En los sistemas Linux es preferible tener un espacio de intercambio (conocido como


swap) en una particin por separado, en lugar de un archivo en alguna particin que est
siendo utilizada con otro propsito. Esto tiene una ventaja secundaria, ya que los
esquemas de hibernacin utilizan el espacio en la particin de intercambio.
Un esquema comn de particionamiento contiene una particin /boot, una para el sistema
raz /, una particin de intercambio y otra para el directorio /home.
Tenga en cuenta que es ms difcil redimensionar una particin despus de su creacin e
instalacin del sistema. Recomendamos que haga un plan inteligente al respecto.
Discutiremos acerca de diseos de sistemas de archivos y el impacto de las particiones
en ellos ms adelante.

LFS201: Fundamentos de Administracin de Sistemas Linux

124

9.5 Tabla de particiones


La tabla de particin del disco est contenida
en el Registro de arranque principal (MBR), la
cual es de 512 bytes de longitud y cuya
estructura est definida por una convencin
que es independiente del sistema operativo.
La tabla de particin tiene 64 bytes de largo y
est ubicada despus del byte 446 del
registro de arranque. Nota para los curiosos:
hay 2 bytes ms al final del MBR, lo cual se
conoce como el nmero mgico, firma del
MBR, o marca de final de sector, que tiene
siempre el valor 0x55AA.
Los primeros 446 bytes estn reservados
para cdigo mquina. Por lo general, forman
parte de un programa de cargador de
arranque como GRUB.
Slo una particin en un disco especfico
puede ser marcada como activa. Cuando el
sistema inicia, el cargador de booteo maestro
busca tems para cargar en esa particin.

Cada entrada en la tabla de particin tiene 16 bytes de largo y describe una de las cuatro
posibles particiones primarias. La informacin que tiene cada una es la siguiente:

Bit activo
Direccin de inicio en formato cilindro/cabezal/sectores (CHS), lo cual es ignorado
por Linux de todas formas
Cdigo del tipo de particin, indicando: xfs, LVM, ntfs, ext4, swap, etc
Direccin final en CHS (tambin ignorado por Linux)
Sector de inicio, contando linealmente desde 0
Nmero de sectores en la particin

Linux usa slo los ltimos dos campos para direccionamiento, utilizando el mtodo de
direccionamiento de bloque lgico (LBA).

LFS201: Fundamentos de Administracin de Sistemas Linux

125

9.6 Nombres de dispositivos de disco y nodos


El kernel Linux interacta a bajo nivel con los discos a travs de nodos de dispositivos
que normalmente se encuentran en el directorio /dev. Generalmente los nodos de
dispositivos son accedidos slo a travs de la infraestructura del sistema de archivos
virtual del kernel; si se accede de cualquier otra forma a los nodos de dispositivo, es
posible destruir un sistema de archivos completo. Eso es justamente lo que se hace al
formatear una particin, como en el siguiente comando:
$ sudo mkfs.ext4 /dev/sda9

Los nodos de dispositivo para discos SCSI y SATA siguen una convencin de nombres
simple:
El primer disco duro es /dev/sda.
El segundo disco duro es /dev/sdb.
etc.
Las particiones son enumeradas como sigue:

/dev/sdb1 es la primera particin del segundo disco.


/dev/sdc4 es la cuarta particin del tercer disco.

En las sentencias de arriba, sd puede ser un disco SCSI o SATA. Cuando an se


encontraban discos IDE, eran llamados /dev/hda3, /dev/hdb , etc.
El comando ls -l /dev mostrar los nodos de dispositivo disponibles.

9.7 Ms cerca de nombres de dispositivos SCSI


Para dispositivos SCSI necesitamos elaborar un poco ms en lo que se entiende por
primer disco duro, segundo, etc. Estos estn determinados por la combinacin del nmero
ID/nmero del controlador.
La designacin de la unidad (a, b, c, etc.) est basada principalmente en el nmero de ID
del dispositivo SCSI en vez de su posicin en el bus mismo.
Por ejemplo, si tuviramos dos controladoras SCSI, uno con ID 1 y otro con ID 3 en la
controladora 0; uno con ID 2 y otro con ID 5 en la controladora 1 (note que el ID 2 est en
la ltima unidad):

ID 1 sera /dev/sda
ID 3 sera /dev/sdb
ID 2 (en la controladora 1) sera /dev/sdc
ID 5 sera /dev/sdd

LFS201: Fundamentos de Administracin de Sistemas Linux

126

9.8 blkid y lsblk


blkid es una utilidad para localizar dispositivos de bloque y entregar informacin acerca
de sus atributos. Funciona con la biblioteca libblkid. Puede tomar como argumento un
dispositivo en particular o una lista.
$ sudo blkid /dev/sda*
dev/sda: PTTYPE=dos
/dev/sda1: LABEL=boot UUID=b0fa22fc-8882-4f1c-bc16-6cf7fc4e9454
TYPE=ext4 PTTYPE=dos
/dev/sda10: UUID=JQshRp-Jxa5-0oiC-X1Oe-si8d-lRQD-48aYNt
TYPE=LVM2_member
/dev/sda11: LABEL=RHEL7 UUID=b8beaf53-af11-4b14-9e7d-b17069f336ae
TYPE=ext4 PTTYPE=dos
/dev/sda12: LABEL=SWAP UUID=2b2603f9-a701-4f91-b284-426769f50e51
TYPE=swap
/dev/sda3: PTTYPE=dos
/dev/sda5: LABEL=RHEL6-64 UUID=893c451-847f-401-97af6456fe27474 TYPE=ext4 PTTYPE=dos
/dev/sda6: UUID=YJ2PA3-GSsm-m9rH-XNUM-Ca2X-fkju-OYtiO8
TYPE=LVM2_member
/dev/sda7: LABEL=RHEL7XFS UUID=178d0092-4154-4688-af24cda272265e08 TYPE=xfs
/dev/sda8: UUID=NdnbYk-ACCB-9UTX-i3kc-rK0m-Fbht-KjJZwP
TYPE=LVM2_member
/dev/sda9: UUID=CMc2EP-ijCM-jA8V-ZH5M-B6AA-z0TD-ILMFFE
TYPE=LVM2_member

blkid funcionar solamente en dispositivos que contienen datos, es decir, una particin
vaca no generar un identificador de bloque UUID. blkid tiene dos formas principales de
operacin: ya sea buscando un dispositivo con un par especfico NOMBRE=valor, o
desplegando pares de NOMBRE=valor para uno o ms dispositivos.
Si no se especifican argumentos, se listarn todos los dispositivos. Existe un buen nmero
de opciones que indican cmo especificar qu atributos se desean listar.
Una herramienta relacionada es lsblk, la cual presenta los resultados en un formato de
rbol, como se muestra abajo:

LFS201: Fundamentos de Administracin de Sistemas Linux

127

$ lsblk -i
NAME
sda
|-sda1
|-sda3
|-sda5
|-sda6
| -VG-dead
|-sda7
|-sda8
| |-VG-tmp
| |-VG-local
| |-VG-src
| |-VG-virtual
| |-VG-iso_images
| |-VG-dead
| |-VG-audio
| -VG-pictures
|-sda9
| |-VG-virtual
| -VG-dead

MAJ:MIN RM
SIZE RO
8:0
0 465.8G 0
8:1
0
100M 0
8:3
0
1K 0
8:5
0 11.7G 0
8:6
0 36.2G 0
254:5
0
60G 0
8:7
0
12G 0
8:8
0 353.2G 0
254:0
0
2G 0
254:1
0
24G 0
254:2
0
16G 0
254:3
0
225G 0
254:4
0
60G 0
254:5
0
60G 0
254:6
0
12G 0
254:7
0
12G 0
8:9
0 23.2G 0
254:3
0
225G 0
254:5
0
60G 0

TYPE
disk
part
part
part
part
lvm
part
part
lvm
lvm
lvm
lvm
lvm
lvm
lvm
lvm
part
lvm
lvm

MOUNTPOINT
/boot_master
/RHEL6-64
/DEAD

/usr/local
/usr/src
/VIRTUAL
/ISO_IMAGES
/DEAD
/PICTURES
/VIRTUAL
/DEAD

9.9 Dimensionando particiones


Los sistemas Linux deberan tener un mnimo de dos particiones:

/(root): utilizado para todo el sistema de archivos lgico


o En la prctica la mayora de las instalaciones tendrn ms de un sistema de
archivos y ms de una particin, las cuales trabajan unidas a travs de
los puntos de montaje.
o Con la mayora de los tipos de sistemas de archivos es difcil redimensionar la
particin raz; usando LVM, lo cual discutiremos ms adelante, podemos
facilitar esta tarea.
Aunque si bien es cierto es posible correr Linux con slo la particin raz, la
mayora de los sistemas usan ms particiones para realizar respaldos de forma
ms fcil, usar de forma ms eficiente las unidades de disco e implementar una
mejor seguridad.

Intercambio: se usa como una extensin de la memoria fsica; pginas de


memoria que no tienen un respaldo en archivo fsico, pueden ser movidas al disco
hasta que se necesiten nuevamente.
o La recomendacin usual es que el tamao del rea de intercambio debera ser
igual al de la memoria fsica, aunque a veces se recomienda usar el doble. Sin
embargo, la opcin adecuada depende de los escenarios de sus del sistema,
como tambin de las capacidades de hardware. Ejemplos de este tema

LFS201: Fundamentos de Administracin de Sistemas Linux

128

pueden ser encontrados en https://help.ubuntu.com/community/SwapFaq y en


http://www.novell.com/support/kb/doc.php?id=7010157.
El sistema puede tener mltiples particiones o archivos de intercambio.

En un sistema de un slo disco, trate de ubicar la particin de intercambio al


centro del mismo; en sistemas de discos mltiples, trate de repartir reas de
intercambio en los discos.

Agregar ms y ms reas de intercambio no ayudar necesariamente, ya que


a partir de cierto punto se vuelve intil. En los casos en que aparentemente
falte memoria, es necesario agregar ms memoria fsica o reevaluar la
configuracin del sistema.

El rea de intercambio es usado como memoria virtual; cuando las pginas de procesos
son movidas fuera de la memoria fsica, generalmente son almacenadas en el rea de
intercambio.

9.10 Respaldar y restaurar tablas de particiones


Particionar y reparticionar discos son operaciones peligrosas. Para tener la posibilidad de
volver a la situacin original si algo sale mal, es necesario saber cmo realizar respaldos y
restaurar tablas de particiones.
Es bastante simple realizar una copia de seguridad con dd, como sigue:
$ sudo dd if=/dev/sda of=mbrbackup bs=512 count=1

lo cual respaldar el MBR en el primer disco, incluyendo la tabla de particiones de 64 bits,


la cual es parte de ella.
El MBR puede ser restaurado de ser necesario, de la siguiente forma:
$ sudo dd if=mbrbackup of=/dev/sda bs=512 count=1

Note que los comandos mencionados copiarn solamente la tabla de particin primaria;
no se harn cargo de cualquier tabla de particin que est almacenada en otras
partitiones (como particiones extendidas, por ejemplo).
Nota: usted debera asumir que modificar la tabla de particin del disco podra eliminar
toda la informacin de todos los sistemas de archivos en el disco (no debera, pero es
mejor ser precavido). Por lo tanto, siempre es prudente realizar una copia de seguridad de
toda la informacin antes de realizar cualquier trabajo de este tipo.
En particular, es necesario ser cuidadoso al usar dd: un error simple de tipeo o una opcin
usada errneamente podra destruir la informacin completa del disco, en cualquier caso
lo mejor es hacer respaldos!

LFS201: Fundamentos de Administracin de Sistemas Linux

129

9.11 Editores de la tabla de particiones


Hay una serie de utilidades que pueden ser usadas para modificar las tablas de particin:

fdisk Es un editor de tabla de particiones que tiene un men. Es el ms estndar y


uno de los editores ms flexibles. Esta es la nica herramienta de este tipo que
discutiremos.

sfdisk es un programa de edicin de particiones no interactivo, el cual es til para


hacer scripts. Use esta herramienta con mucho cuidado!

parted es el programa de manipulacin de particiones del proyecto GNU. Puede


crear, eliminar, redimensionar y mover particiones (incluyendo ciertos sistemas de
archivos).

gparted es una interfaz grfica de parted, la cual es utilizada ampliamente.

Muchas distribuciones Linux tienen una versin Live CD que se puede ejecutar ya sea
desde un CDROM o un dispositivo USB. Esos medios suelen incluir una copia de gparted,
por lo cual puede ser usado fcilmente como una herramienta grfica de particionamiento
en discos que no estn siendo utilizados.
Note que gparted puede realizar muchas operaciones ms que slo agregar y eliminar
particiones (y las dems operaciones que realiza fdisk), como asignar el tipo de particin.
Es posible mover, redimensionar y formatear particiones, lo cual implica entender los
detalles de diversos tipos de sistemas de archivos. Lo anterior va mucho ms lejos de las
funciones esenciales de un editor de particiones.
Si bien es cierto que esto es muy til, es difcil hacerlo bien y los errores pueden tener
consecuencias serias. Por lo anterior, se recomienda ir a la lnea de comandos y realizar
cada una de estas operaciones por separado, con herramientas de bajo nivel (como
fdisk). De hecho Red Hat Enterprise Linux ya no soporta gparted.

9.12 Uso de fdisk


fdisk estar incluido siempre en toda instalacin de Linux, por lo cual es buena idea
aprender a usarlo. Usted debe ser root para ejecutar fdisk. Puede ser algo complejo de
usar y se recomienda hacerlo con precaucin.
La interfaz de fdisk es simple y posee un men de texto. Se inicia en un disco en
particular de la siguiente forma:
$ sudo fdisk /dev/sdb

LFS201: Fundamentos de Administracin de Sistemas Linux

130

los principales comandos (de una letra) son:

m: Despliega el men.
p: Lista la tabla de particiones.
n: Crea una particin nueva.
d: Elimina una particin.
t: Cambia el tipo de particin.
w: Escribe la informacin nueva de la tabla de particiones y sale.
q: Sale sin realizar cambios.

Afortunadamente no se realizan cambios hasta que la tabla de particiones es escrita en el


disco, presionando w. Por lo tanto, es importante revisar que la tabla de particiones es
correcta (con la tecla p), antes de escribir a disco con w. Si algo est mal, usted puede
salir de forma segura con la tecla q (a menos que ya haya guardado los cambios).
El sistema no utilizar la nueva tabla de particin hasta el prximo reinicio. Sin embargo,
es posible usar el siguiente comando:
$ sudo partprobe -s
para tratar de leer la tabla de particin modificada. Sin embargo, esto no siempre funciona
de manera confiable y lo mejor es reiniciar antes de formatear particiones nuevas y
realizar otras operaciones, ya que mezclar particiones o sobreponer una en otra puede
ser catastrfico.
En cualquier momento es posible ejecutar el siguiente comando:
$ cat /proc/partitions
con el fin de visualizar qu particiones reconoce el sistema operativo.

Comprobacin de conocimientos 9.1

LFS201: Fundamentos de Administracin de Sistemas Linux

131

Comprobacin de conocimientos 9.2

9.13 Laboratorio 9.1


Laboratorio 9.1: Usar un archivo como imagen de particin de disco
Para los propsitos de los ejercicios en este curso usted necesitar espacio en disco sin particionar.
No es necesario que sea de gran tamao, uno o dos GB es suficiente.
Si est usando su mquina nativa y no tiene espacio disponible, va a tener que encoger una
particin y el sistema de archivos en ella (esto ltimo se debe realizar primero), y luego disponer
de ella usando gparted y/o los pasos que tratamos en la seccin de manejo de particiones.
Tambin puede usar el mecanismo loop device con o sin el programa parted program, como lo
haremos en los primeros dos ejercicios en esta seccin.
Si tiene espacio fsico sin particionar usted no necesita realizar el procedimiento que se describe a
continuacin, sin embargo, an es un ejercicio de aprendizaje muy til.
Vamos a crear un archivo que ser usado como contenedor de una imagen de particin del disco
duro, y para todos los propsitos puede utilizarse como una particin real. En el siguiente ejercicio
mostraremos cmo poner ms de una particin en ella y cmo usarlo como si fuera un disco
completo.
1. Crear un archivo lleno de ceros de 1 GB de tamao:
$ dd if=/dev/zero of=imagefile bs=1M count=1024
Puede crear un archivo ms pequeo si lo desea o si no tiene suficiente espacio en la
particin en la cual est crendolo.
2. Cree un sistema de archivos en ella:
$ mkfs.ext4 imagefile
mke2fs 1.42.9 (28-Dec-2013)
imagefile is not a block special device.
Proceed anyway? (y,n) y
Discarding device blocks: done
.....

LFS201: Fundamentos de Administracin de Sistemas Linux

132

Obviamente puede darle formato con un sistema de archivos diferente, haciendo mkfs.ext3,
mkfs.vfat, mkfs.xfs, etc.
3. Mntela en algn lugar:
$ mkdir mntpoint
$ sudo mount -o loop imagefile mntpoint

Ahora puede usar la particin a su antojo, poniendo archivos, etc.


4. Una vez que haya terminado, desmntela con:
$ sudo umount mntpoint
Un mtodo alternativo es usar la opcin loop para montarla:
$ sudo losetup /dev/loop2 imagefile
$ sudo mount /dev/loop2 mntpoint ....
$ sudo umount mntpoint
$ sudo losetup -d /dev/loop2
Revisaremos losetup en un ejercicio ms adelante. Puede usar /dev/loop[0-7] pero tenga cuidado
de que no estn en uso actualmente.
Si bien es cierto que usar un dispositivo de tipo loop en vez de una particin real puede ser til,
debe saber que es es bastante intil para propsitos de realizar cualquier tipo de benchmarking.
Esto se debe a que est poniendo una capa de sistema de archivos sobre otra, lo cual tendr un
efecto negativo en el rendimiento. Por lo anterior, cualquier juicio al respecto va a estar basado en
cmo se comporta un sistema de archivos arriba de otro.

LFS201: Fundamentos de Administracin de Sistemas Linux

133

9.13 Laboratorio 9.2


Laboratorio 9.2: Particionar un archivo de imagen de disco
El siguiente paso consiste en dividir el archivo de contenedor en mltiples particiones, cada uno de
los cuales puede ser usado para almacenar un sistema de archivos o un rea de intercambio.
Usted puede reutilizar el archivo de imagen creado en el ejercicio previo o puede crear uno nuevo.
1. Ejecute fdisk en su archivo de imagen:
$ sudo fdisk -C 130 imagefile
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x6280ced3.
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
2. Type m to get a list of commands:
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partitions system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help):

LFS201: Fundamentos de Administracin de Sistemas Linux

134

3. The -C 130 which sets the number of phony cylinders in the drive is only necessary in old
versions of fdisk, which unfortunately you will find on RHEL 6. However, it will do no harm on
other distributions.
Create a new primary partition and make it 256 MB (or whatever size you would like:
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +256M
Partition 1 of type Linux and of size 256 MiB is set
4. Add a second primary partition also of 256 MB in size:
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (526336-2097151, default 526336):
Using default value 526336
Last sector, +sectors or +size{K,M,G} (526336-2097151, default 2097151): +256M
Partition 2 of type Linux and of size 256 MiB is set
Command (m for help): p
Disk imagefile: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x6280ced3
Device Boot
Start
imagefile1 2048
imagefile2 526336

End
526335 2
1050623

Blocks
62144
262144

83
83

LFS201: Fundamentos de Administracin de Sistemas Linux

Id
Linux
Linux

System

135

5. Write the partition table to disk and exit:


Command (m for help): w
The partition table has been altered!
Syncing disks.
Si bien esta ha sido una buena prctica, an no hemos visto una forma de utilizar las
particiones que creamos recin. En el prximo ejercicio vamos a ver una forma que nos
permitir hacerlo.

LFS201: Fundamentos de Administracin de Sistemas Linux

136

9.13 Laboratorio 9.3


Laboratorio 9.3: Uso de losetup y parted
Vamos a experimentar con:

Dispositivos Loop y losetup


parted para trabajar con particiones desde la lnea de comandos de forma no interactiva.

Es de nuestro inters que usted lea las pginas man de losetup y parted antes de realizar los
procedimientos que vienen a continuacin.
Una vez ms, usted puede reutilizar el archivo de imagen, o mejor aun, recrearlo para comenzar
con un archivo nuevo.
1. Asocie el archivo de imagen con un dispositivo loop:
$ losetup -f
/dev/loop1
$ sudo losetup /dev/loop1 imagefile
Donde el primer comando encuentra el primer dispositivo loop libre. La razn para hacer esto es
que su sistema podra estar usando uno o ms dispositivos loop. Lo siguiente es ejecutado como
ejemplo en un sistema de pruebas, antes de crear el dispositivo loop:
$ losetup -a
/dev/loop0: []: (/usr/src/KERNELS.sqfs)
un sistema de archivos comprimido de slo lectura squashfs est montado y usando
/dev/loop0.
Nota: la salida del comando anterior puede variar en funcin de la distribucin. Si ignorramos lo
anterior y ejecutamos losetup en /dev/loop0 probablemente corromperiaamos el archivo.
2. Crear una etiqueta de particin de disco en el dispositivo loop (archivo de imagen):
$ sudo parted -s /dev/loop1 mklabel msdos
3. Crear tres particiones primarias en el dispositivo loop:
$ sudo parted -s /dev/loop1 unit MB mkpart primary ext4 0 256
$ sudo parted -s /dev/loop1 unit MB mkpart primary ext4 256 512
$ sudo parted -s /dev/loop1 unit MB mkpart primary ext4 512 1024

LFS201: Fundamentos de Administracin de Sistemas Linux

137

4. Verificar la tabla de particiones:


$ fdisk -l /dev/loop1
Disk /dev/loop1: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00050c11
Device Boot
/dev/loop1p1
/dev/loop1p2
/dev/loop1p3

Start
1
500001
1000001

End
500000
1000000
2000000

Blocks
250000
250000
500000

Id
83
83
83

System
Linux
Linux
Linux

5. Lo que sucede a continuacin depender en la distribucin en la cual est trabajando. Por


ejemplo, en RHEL 7 y Ubuntu 14.04 notar que los nodos de dispositivo nuevos han sido
creados:
$ ls -l /dev/loop1*
brw-rw---- 1 root disk 7, 1 Oct 7 14:54 /dev/loop1
brw-rw---- 1 root disk 259, 0 Oct 7 14:54 /dev/loop1p1
brw-rw---- 1 root disk 259, 3 Oct 7 14:54 /dev/loop1p2
brw-rw---- 1 root disk 259, 4 Oct 7 14:54 /dev/loop1p3
los que utilizaremos a continuacin. Sin embargo, en RHEL 6 los nodos no aparecern. En
cambio, es necesario hacer lo siguiente:
$ sudo kpartx -lv /dev/loop1
$ sudo kpartx -av /dev/loop1
$ ls -l /dev/mapper/loop1*
lrwxrwxrwx 1 root root 7 Oct 9 07:12 /dev/mapper/loop1p1 -> ../dm-8
lrwxrwxrwx 1 root root 7 Oct 9 07:12 /dev/mapper/loop1p2 -> ../dm-9
lrwxrwxrwx 1 root root 8 Oct 9 07:12 /dev/mapper/loop1p3 -> ../dm-10
para asociar los nodos de dispositivo con las particiones. En lo que sigue puede reemplazar
/dev/loop1p[1-3] con los nombres reales bajo /dev/mapper, o incluso ms fcil, puede hacer
esto:
$ sudo ln -s /dev/mapper/loop1p1 /dev/loop1p1
$ sudo ln -s /dev/mapper/loop1p2 /dev/loop1p2
$ sudo ln -s /dev/mapper/loop1p3 /dev/loop1p3

LFS201: Fundamentos de Administracin de Sistemas Linux

138

6. Darle formato a las particiones:


$ sudo mkfs.ext3 /dev/loop1p1
$ sudo mkfs.ext4 /dev/loop1p2
$ sudo mkfs.vfat /dev/loop1p3
7. Monte los tres sistemas de archivos y muestre que estn disponibles:

$ mkdir mnt1 mnt2 mnt3


$ sudo mount /dev/loop1p1 mnt1
$ sudo mount /dev/loop1p2 mnt2
$ sudo mount /dev/loop1p3 mnt3
$ df -Th
Filesystem Type
/dev/sda1 ext4
....
/dev/loop1p1
/dev/loop1p2
/dev/loop1p3

Size
29G

Used
8.5G

Avail
19G

ext3
ext4
vfat

233M 2.1M
233M 2.1M
489M 0

Use% Mounted on
32% /
219M 1%
215M 1%
489M 0%

mnt1
mnt2
mnt3

8. Una vez que ha terminado de utilizar los sistemas de archivos puede deshacer lo realizado con:

$ sudo umount mnt1 mnt2 mnt3


$ rmdir mnt1 mnt2 mnt3
$ sudo losetup -d /dev/loop0

LFS201: Fundamentos de Administracin de Sistemas Linux

139

9.13 Laboratorio 9.4


Laboratorio 9.4: Particionado de un disco duro real
Si usted tiene un disco duro real con espacio disponible y que no est particionado, experimente
con fdisk para crear particiones nuevas, ya sean primarias o lgicas con una particin extendida.
Escriba la tabla de particiones nueva al disco y luego formatee y monte las particiones recin
creadas.

Objetivos de aprendizaje (Revisin)


Usted debera ser capaz de:

Describir y contrastar los tipos ms comunes de discos duros y buses de datos.


Explicar cmo es la geometra de un disco y otros conceptos de particionamiento.
Comprender cmo se les asigna el nombre a los dispositivos de disco y cmo
identificar los nodos de dispositivo asociados.
Distinguir y seleccionar entre diferentes estrategias de particionamiento.
Use utilities such as blkid and fdisk.
Respaldar y restaurar tablas de particin.

LFS201: Fundamentos de Administracin de Sistemas Linux

140

Captulo 10. Cifrado de Discos


Los sistemas de archivos pueden ser cifrados para proteger la informacin de accesos
no autorizados y de intentos de corromper los datos que contienen. El cifrado puede ser
elegida en la instalacin o ser incorporada ms tarde. Las distribuciones de Linux usan a
menudo el mtodo LUKS y llevan a cabo tareas de cifrado usando la herramienta
cryptsetup.

Objetivos de aprendizaje
Al final del captulo usted debera ser capaz de:

Proveer buenas razones para el uso de cifrado y saber cundo se requiere.


Entender cmo opera LUKS a travs del uso de cryptsetup.
Ser capaz de configurar y usar particiones y sistemas de archivos cifrados.
Saber cmo configurar el sistema para montar particiones cifradas en el arranque.

LFS201: Fundamentos de Administracin de Sistemas Linux

141

10.1 Por qu utilizar cifrado?


El cifrado de datos debera ser usado en cualquier lugar en donde hay informacin
sensible que est siendo almacenada y transmitida. La configuracin y el uso de cifrado a
nivel de dispositivo de bloque es una de las protecciones ms robustas contra los daos
producidos por prdida o compromiso de informacin contenida en discos duros y otros
medios.
Las distribuciones de Linux modernas ofrecen la alternativa de cifrar todas o algunas de
las particiones durante la instalacin. Tambin es fcil crear y formatear particiones
cifradas posteriormente, pero no es posible cifrar una particin existente sin tener que
copiar los datos a ella.

10.2 Luks
Las distribuciones de Linux modernas proveen un cifrado a nivel de dispositivo de bloque
principalmente a travs de LUKS (Linux Unified Key Setup). Usar este tipo de cifrado es
altamente recomendable para sistemas porttiles como laptops, tabletas y telfonos
inteligentes.
LUKS est basado en cryptsetup, una herramienta potente que tambin puede usar
otros mtodos como volmenes dm-crypt (planos), loop-AES y formato compatible
con TrueCrypt. No vamos a discutir esas alternativas, ya que LUKS es el mtodo
estndar y usado ms a menudo en Linux (fue diseado originalmente para Linux, pero
tambin ha sido exportado a otros sistemas operativos).
El mdulo del kernel dm-crypt usa la infraestructura de device mapper del kernel, la cual
es usada tambin de forma importante en LVM, lo cual veremos ms adelante.
Debido a que LUKS almacena toda la informacin necesaria en la cabecera de la
particin, es simple migrar particiones a otros discos o sistemas.
LUKS tambin puede ser usado para cifrar particiones de intercambio de forma
transparente.

10.3 crypsetup
Bsicamente, todo se realiza con el programa cryptsetup. Una vez que los volmenes han
sido cifrados, pueden ser montados y desmontados con las utilidades normales.
La sintaxis comn de un comando es la siguiente:
cryptsetup [OPTION...] <action> <action-specific>

y una lista con todas las opciones puede ser generada con:
$ cryptsetup help

LFS201: Fundamentos de Administracin de Sistemas Linux

142

10.4 uso de una particin cifrada


Asumiendo que la particin LVM /dev/VG/MYSECRET ya existe, los siguientes comandos
configurarn el cifrado, la pondrn a disposicin de LUKS, le darn formato, la usarn y
desmontarn.
Lo primero que se debe realizar es darle formato LUKS a la particin:
$ sudo cryptsetup luksFormat /dev/VG/MYSECRET

Se le pedir ingresar una contrasea, la cual tendr que usar para abrir el volumen cifrado
ms tarde. Note que tendr que hacer esto una vez solamente, durante la configuracin
del cifrado.
Usted podra enfrentar ciertas dificultades si el kernel del sistema no soporta el mtodo de
cifrado que usa cryptsetup por defecto. En ese caso usted puede
examinar /proc/crypto para ver los mtodos que soporta el sistema, y luego especificar
uno, como se muestra a continuacin:
$ sudo cryptsetup luksFormatcipher aes /dev/VG/MYSECRET

Usted puede abrir el volumen en cualquier momento, con el siguiente comando:


$ sudo cryptsetupverbose luksOpen /dev/VG/MYSECRET SECRET

tras lo cual se le pedir ingresar la contrasea. Luego de eso es posible formatear el


sistema de archivos:
$ sudo mkfs.ext4

/dev/mapper/SECRET

Y montarlo:
$ sudo mount /dev/mapper/SECRET /mnt

A partir de este momento usted dispone de una particin sin cifrar montada en /mnt, con
la cual puede trabajar a su gusto. Cuando haya terminado de realizar las tareas en
cuestin, la puede desmontar de la siguiente forma:
$ sudo umount /mnt

luego remueva la asociacin mapper por el momento (siempre podr usar la particin
nuevamente):
$ sudo cryptsetupverbose luksClose SECRET

LFS201: Fundamentos de Administracin de Sistemas Linux

143

10.5 Montado en el arranque


Para montar una particin cifrada en el arranque hay que satisfacer dos condiciones:
1. Agregar una lnea apropiada en /etc/fstab. No hay nada de especial en esta lnea

y no se refiere al cifrado en ningn sentido.


2. Agregar una entrada a /etc/crypttab. Puede ser tan simple como esto:
SECRET /dev/mapper/MYSECRET

Usted puede hacer otras cosas en este archivo, como especificar la contrasea si no
desea ingresarla en el arranque (lo cual sera contraproducente para la seguridad del
sistema). Haga man crypttab para ver todo lo que puede hacer con este archivo.

Comprobacin de conocimientos 10.1

LFS201: Fundamentos de Administracin de Sistemas Linux

144

10.6 Laboratorio 6.1


Laboratorio 10.1: Cifrado de discos
En este ejercicio usted cifrar una particin en el disco para proveer de seguridad en caso de que
su disco duro o porttil es robado. Revisar la documentacin de cryptsetup antes de comenzar es
una buena idea (man cryptsetup y cryptsetuphelp).
1. Cree una particin nueva para el dispositivo de bloque cifrado con fdisk. Asegrese que el

2.
3.
4.
5.
6.
7.
8.
9.

kernel est al tanto de la nueva tabla de particin. Un reinicio lo lograr, pero hay otros
mtodos tambin.
Formatee la particin con cryptsetup usando LUKS para la capa de cifrado.
Cree la clave para abrir el dispositivo de bloque cifrado.
Agregue una entrada a /etc/crypttab para que el sistema pregunte la clave en el reinicio.
Formatee el sistema de archivos con ext4.
Cree un punto de montaje para el sistema de archivos nuevo, por ejemplo /secret.
Agregue una entrada a /etc/fstab para que el sistema sea montado en el arranque.
Intente montar el sistema cifrado.
Reinicie y valide la configuracin completa.

LFS201: Fundamentos de Administracin de Sistemas Linux

145

Solucin 10.1
1. $ sudo fdisk /dev/sda

Cree una particin nueva (en el ejemplo trabajaremos con /dev/sda4) y luego ejecute:
$ sudo partprobe -s
para que el sistema relea la tabla de particin modificada, o reinicie (lo cual es lejos lo ms
seguro).
Nota: Si no puede usar una particin real, use el mtodo descrito en el captulo anterior
para trabajar con un dispositivo loop o un archivo de imagen.
2. $ sudo cryptsetup luksFormat /dev/sda4
3. $ sudo cryptsetup luksOpen /dev/sda4 secret-disk
4. Agregue lo siguiente a /etc/crypttab:

secret-disk /dev/sda4
5. $ sudo mkfs -t ext4 /dev/mapper/secret-disk
6. $ sudo mkdir -p /secret
7. Agregue lo siguiente a /etc/fstab:

/dev/mapper/secret-disk

/secret ext4

defaults

8. Monte el sistema de archivos:

$ sudo mount /secret


o monte todos los sistemas de archivos mencionados en /etc/fstab:
$ sudo mount a
9. Reinicie.

LFS201: Fundamentos de Administracin de Sistemas Linux

146

10.6 Laboratorio 6.1


Laboratorio 10.2: Area de intercambio cifrada
En este ejercicio vamos a cifrar la particin de intercambio. La informacin escrita al dispositivo de
intercambio puede contener informacin sensible. Debido a que el rea de intercambio est sobre
una particin, es importante considerar las implicancias de seguridad que tiene una particin de
intercambio sin cifrar.
El proceso de cifrado es similar al del ejercicio previo, con la excepcin de que no crearemos un
sistema de archivos en este dispositivo de bloques cifrado.
En este caso vamos a usar el rea de intercambio existente; primero la desactivaremos y luego
formateada para el uso como rea de intercambio cifrada. Podr ser un poco ms seguro usar una
particin nueva, o tambin usar la particin que cre en el ejercicio previo. Al final explicaremos
qu hacer en caso de que tenga problemas para restablecer el sistema al punto original.
Vamos a discutir la administracin del rea de intercambio en un captulo posterior, pero de todas
formas mostraremos algunos comandos para trabajar con esta componente.
Una vez que haya terminado, puede volver a la particin original sin cifrar ejecutando el comando
mkswap en el dispositivo.
1. Determine cul es la particin que est usando actualmente para el rea de intercambio y
desactvela:
$ cat /proc/swaps
Filename Type
Size
/dev/sda11
partition
$ sudo swapoff /dev/sda11

Used
4193776

Priority
0
-1

2. Realice los mismos pasos del ejercicio anterior para configurar el cifrado:
$ sudo cryptsetup luksFormat /dev/sda11 # may useciper aes option
$ sudo cryptsetup luksOpen /dev/sda11 swapcrypt
3. Formatee el dispositivo cifrado para usarlo como rea de intercambio:
$ sudo mkswap /dev/mapper/swapcrypt
4. Ahora active la particin y verifique si est funcionando:
$ sudo swapon /dev/mapper/swapcrypt
$ cat /proc/swaps

LFS201: Fundamentos de Administracin de Sistemas Linux

147

5. Para asegurarse que la particin de intercambio cifrada se active en el arranque, es necesario


hacer dos cosas:
1. Agregue una lnea a /etc/crypttab para que el sistema pregunte por la clave en el
reinicio:
swapcrypt /dev/sda11 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
(Note que /dev/urandom es preferido sobre /dev/random ya que podra estar
relacionado a entropy shortages, o problemas de rendimiento como se lee en la
pgina man de crypttab.)
No es necesario que siga las opciones detalladas que siguen a continuacin, pero las
damos como ejemplo de lo que usted puede hacer.
2. Agregue una entrada al archivo /etc/fstab para que el dispositivo de rea de
intercambio sea activado en el inicio.
/dev/mapper/swapcrypt none swap defaults
0
0
6. Reinicie y valide la configuracin completa.
Para restaurar el sistema al punto original:
$ sudo swapoff /dev/mapper/swapcrypt
$ sudo cyyptsetup luksClose swapcrypt
$ sudo mkswap /dev/sda11
$ sudo swapon -a
Si el comando swapon falla, probablemente se debe a que el archivo /etc/fstab no describe
adecuadamente la particin de intercambio. No hay ningn problema si la particin est
descrita aqu por el dispositivo actual (/dev/sda11). Puede resolverlo al cambiar la lnea a:
/dev/sda11
swap swap defaults
0
0
otra alternativa es asignarle una etiqueta al instante del formateo, como se muestra aqu:
$ sudo mkswap -L SWAP /dev/sda11
y luego agrguelo al archivo:
LABEL=SWAP
swap swap defaults
0
0

Objetivos de aprendizaje (Revisin)


Usted debera ser capaz de:

Proveer buenas razones para el uso de cifrado y saber cundo se requiere.


Entender cmo opera LUKS a travs del uso de cryptsetup.
Ser capaz de configurar y usar particiones y sistemas de archivos cifrados.
Saber cmo configurar el sistema para montar particiones cifradas en el arranque.

LFS201: Fundamentos de Administracin de Sistemas Linux

148

Captulo 11. Sistemas de archivos Linux y el VFS


Los sistemas Linux son capaces de usar una amplia variedad de sistemas de archivos.
Esta versatilidad se consigue a travs de la capa de abstraccin del Sistema de Archivos
Virtual (VFS), la cual se sita entre el software y el sistema de archivos en el disco. Los
sistemas de archivos transaccionales avanzados se han convertido en el estndar en las
distribuciones empresariales.

Objetivos de aprendizaje
Al final del captulo usted debera ser capaz de:

Explicar la organizacin bsica de un sistema de archivos.


Comprender el rol del VFS.
Conocer qu sistemas de archivos estn disponibles en Linux y cules son los
que pueden ser usados en su sistema actual.
Comprender por qu los sistemas de archivos con journaling representan avances
importantes.
Discutir el uso de sistemas de archivos especiales en Linux.

LFS201: Fundamentos de Administracin de Sistemas Linux

149

11.1 Conceptos bsicos de un sistema de archivos


Los programas necesitan leer y escribir archivos, en vez de tener que lidiar con los
lugares fsicos en el hardware en el cual los archivos estn almacenados.
Los archivos y sus nombres son una abstraccin de la capa fsica de E/S. Escribir en el
disco de forma directa(ignorando la capa del sistema de archivos) es muy peligroso y se
realiza slo por programas de bajo nivel del sistema operativo, nunca por una aplicacin
de usuario.
Los sistemas de archivos locales generalmente residen en una particin de disco, la cual
puede ser una particin fsica en un disco o una particin lgica controlada por un Logical
Volume Manager (LVM). Los sistemas de archivos tambin pueden estar en la red, de tal
forma que el encapsulado fsico queda totalmente oculto al sistema local.

11.2 Configuracin del rbol del sistema de archivos


Todos los sistemas Linux usan una jerarqua de rbol invertido del directorio raz (/).
Mientras que todo el rbol puede estar contenido en un sistema de archivos local en una
particin, usualmente hay varias particiones (o sistemas de archivos de red) trabajando de
forma unida en los puntos de montaje. Estos tambin pueden incluir medios extrables
como dispositivos USB, discos pticos, etc.
Adicionalmente, algunos sistemas de archivos seudovirtuales (abstracciones tiles que
existen en memoria solamente) sern montadas en el rbol; estos
incluyen /proc, /sys, /dev y tal vez /tmp, como tambin /run.
Cada uno de los elementos montados en el rbol puede tener su propio tipo de sistema
de archivos. Pero ante las aplicaciones y el sistema operativo se muestra como una una
sola estructura de rbol unificado.

11.3 Virtual File System (VFS)


Linux implementa un Virtual File Sistem (VFS), sistema de archivos virtual), como lo
hacen todos los sistemas operativos modernos. Cuando una aplicacin necesita acceder
a un archivo, sta interacta con la capa de abstraccin del VFS, el cual traduce todas las
llamadas E/S (operaciones de lectura/escritura, etc) en cdigo especfico relacionado con
el sistema de archivos real en particular.
De esta forma, tanto el sistema de archivos real como el medio fsico y hardware sobre el
cual reside, no necesitan ser considerados por las aplicaciones. Por otro lado, los
sistemas de archivos de red (como NFS) pueden ser manejados de forma transparente.
Esto permite a Linux trabajar con una variedad de sistemas de archivos mayor que
cualquier otro sistema operativo. Este atributo ha sido un factor importante en su xito.

LFS201: Fundamentos de Administracin de Sistemas Linux

150

La mayora de los sistemas de archivos tienen acceso de lectura y escritura completo,


mientras que otros slo tienen acceso a lectura y tal vez de escritura de tipo experimental.
Algunos tipos de sistemas de archivos - especialmente aquellos que no estn basados
en UNIX - pueden requerir mayor manipulacin para ser representados en el VFS.
Variantes como vfat no diferencias permisos de lectura/escritura/ejecucin para los
campos dueo/grupo/todos; el VFS tiene que suponer cmo especificar diferentes
permisos para los tres tipos de usuarios, y tal asunto puede tener influencia en las
operaciones de montaje. Existen implementaciones que no basan su soporte en el
sistema
de
archivos
del
kernel,
como
el
de
lectura/escritura ntfs3g (http://www.tuxera.com/community/ntfs-3g-download), el cual si bien es cierto es
confiable, tiene un rendimiento menor que aquellos sistemas de archivos con soporte en
el kernel.

LFS201: Fundamentos de Administracin de Sistemas Linux

151

11.4 Sistemas de archivos disponibles

LFS201: Fundamentos de Administracin de Sistemas Linux

152

11.5 Sistemas de archivos transaccionales


Una serie de nuevos sistemas de archivos de alto rendimiento incluyen la capacidad
de journaling completo.
Los sistemas de archivos con journaling se recuperan muy rpidamente de
crashes/congeladas o cadas con poco o nada de corrupcin. Si bien esto tiene el costo
de tener que realizar ms operaciones, las mejoras adicionales pueden compensar el
costo con creces.
En un sistema de archivos con journaling las operaciones se agrupan en transacciones.
Una transaccin debe ser llevada a cabo sin errores, de forma completa, ya que de otra
manera el sistema de archivos no es modificado. Se mantiene un archivo de registro para
las transacciones. Cuando ocurre un error, por lo general slo la ltima transaccin
necesita ser examinada.
Los siguientes sistemas de archivos con journaling estn disponibles de forma libre
en Linux:

ext3 fue una extensin del sistema de archivos anterior ext2, el cual no tena
journaling.

ext4 es un avance significativo derivado de ext3. Las caractersticas incluyen


extents, bloques de 48 bits y de hasta 16 TB de tamao. La mayora de las
distribuciones de Linux han usado ext4 como el sistema de archivos por defecto
por varios aos a la fecha.

reiserfs fue la primera implementacin de journaling usada en Linux, pero perdi


su liderazgo y su desarrollo fue abandonado.

JFS fue originalmente un producto de IBM y fue portado desde el sistema


operativo AIX.

XFS originalmente fue un producto de SGI y se port desde el sistema


operativo IRIX. RHEL 7 adopt a XFS como su sistema de archivos por defecto.

btrfs es el sistema de archivos con journaling ms nuevo y todava est bajo un


desarrollo fuerte y rpido.

LFS201: Fundamentos de Administracin de Sistemas Linux

153

11.6 Sistemas de archivos soportados en el sistema local


Usted puede ver una lista de los tipos de sistemas de archivos soportados por el
kernel Linux en ejecucin con el siguiente comando:
$ cat /proc/filesystems
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev
nodev

nodev
nodev

sysfs
rootfs
ramfs
bdev
proc
cgroup
cpuset
tmpfs
devtmpfs
binfmt_misc
debugfs
sockfs
pipefs
devpts
squashfs
hugetlbfs
iso9660
mqueue
ext3
ext2
ext4
fuseblk
fuse
fusectl

nodev autofs
nodev rpc_pipefs
nodev nfsd

Note que para algunos tipos de sistemas de archivos adicionales, el cdigo de soporte
puede ser cargado slo cuando el sistema trata de acceder la particin que los contiene.

11.7 Sistemas de archivos especiales


Linux hace un uso amplio de sistemas de archivos especiales para ciertas tareas.
Estos son particularmente tiles para acceder varias estructuras de datos y ajustes de
rendimiento del kernel, o para implementar funciones especficas.

LFS201: Fundamentos de Administracin de Sistemas Linux

154

Note que algunos de esos sistemas de archivos especiales no tienen punto de montaje;
esto significa que las aplicaciones de usuario no interactan con ellos, pero el kernel lo
hace, tomando ventaja de las capas y el cdigo del VFS.

Comprobacin de conocimientos 11.1

LFS201: Fundamentos de Administracin de Sistemas Linux

155

Comprobacin de conocimientos 11.2

LFS201: Fundamentos de Administracin de Sistemas Linux

156

11.8 Laboratorio 11.1


Laboratorio 11.1: El sistema de archivos especial tmpfs
tmpfs es uno de muchos sistemas de archivos especiales usados en Linux. Algunos de estos no son
usados realmente como sistemas de archivos, pero toman ventaja de la capa de abstraccin que
poseen. Sin embargo, tmpfs es un sistema de archivos real sobre el cual las aplicaciones pueden
realizar operaciones de E/S.
Esencialmente, tmpfs opera como ramdisk; reside completamente en memoria. Pero tiene algunas
caractersticas interesantes que las implementaciones convencionales y antiguas de ramdisk no
tenan:
1. El sistema de archivos ajusta su tamao ( The filesystem adjusts its size (y por lo tanto la
memoria que se usa) dinmicamente; parte en cero y se expande tanto como sea
necesario hasta el tamao mximo de la particin en la que est montada.
2. Si la RAM se agota, tmpfs puede utilizar espacio del rea de intercambio. De todas formas
no es posible poner ms en el sistema de archivos de la capacidad mxima que soporta.
3. tmpfs no requiere tener un sistema de archivos normal, tales como ext3 o vfat; posee sus
mtodos propios para lidiar con archivos y operaciones de E/S, los cuales estn conscientes
de que es slo espacio en memoria (y que en realidad no es un dispositivo de bloque), y
como tal est optimizado para velocidad. Por lo tanto no hay necesidad de preformatear el
sistema de archivos con el comando mkfs ; simplemente hay que montarlo y usarlo.
Monte una instancia nueva de tmpfs en cualquier lugar en su estructura de directorios, con un
comando como el siguiente:
$ sudo mkdir /mnt/tmpfs
$ sudo mount -t tmpfs none /mnt/tmpfs
Vea cunto espacio se le ha asignado al sistema de archivos y cunto est usando:
$ df -h /mnt/tmpfs
Debera notar que se le ha asignado un valor por defecto de la mitad de la RAM del sistema; sin
embargo, el uso es cero, y slo comenzar a crecer en espacio utilizado en la medida de que se
ponen archivos en /mnt/tmpfs. Es posible cambiar el tamao asignado como una opcin a la hora
de montarlo:
$ sudo mount -t tmpfs -o size=1G none /mnt/tmpfs

LFS201: Fundamentos de Administracin de Sistemas Linux

157

Podra intentar llenarlo hasta que se alcance la capacidad mxima y luego vea qu sucede. No
olvide desmontarlo una vez que haya terminado las pruebas, con el comando:
$ sudo umount /mnt/tmpfs
Prcticamente todas las distribuciones modernas de Linux montan una instancia de tmpfs en
/dev/shm:
$ df -h /dev/shm
Filesystem
Tmpfs

Type Size
tmpfs 3.9G

Used
24M

Avail
3.9G

Use% Mounted on
1%
/dev/shm

Muchas aplicaciones hacen esto en casos como cuando se usa memoria compartida POSIX como
un mecanismo de comunicacin interprocesos. Cualquier usuario puede crear, leer y escribir
archivos en /dev/shm, por lo que es un buen lugar para crear archivos temporales en memoria.
Cree algunos archivos en /dev/shm y observe con df cmo el sistema de archivos se va llenando.
Adicionalmente, muchas distribuciones montan instancias mltiples de tmpfs; por ejemplo, se
observa lo siguiente en un sistema RHEL 7:
$ df -h | grep tmpfs
devtmpfs
devtmpfs
3.9G 0
3.9G 0%
/dev
tmpfs
tmpfs
3.9G 24M 3.9G 1%
/dev/shm
tmpfs
tmpfs
3.9G 9.2M 3.9G 1%
/run
tmpfs
tmpfs
3.9G 0
3.9G
0%
/sys/fs/cgroup
/tmp/vmware-coop/564d9ea7-8e8e-29c0-2682-e5d3de3a51d8 tmpfs 3.3G 0 3.3G 0%
/tmp/vmware-coop/564d9ea7-8e8e-29c0-2682-e5d3de3a51d8 /tmp/vmwarecoop/564d7668-ec55-ee45-f33e-c8e97e956190 tmpfs 2.3G 2.0G 256M 89%
/tmp/vmware-coop/ 564d7668-ec55-ee45-f33e-c8e97e956190
none

tmpfs

1.0G

1.0G

100% /tmp/ohno

Note que el comando anterior fue ejecutado en un sistema con 8GB de RAM, por lo cual usted
probablemente no tendr todos esos sistemas de archivos tmpfs usando los 4 GB con los cuales
han sido asignados.
Algunas distribuciones como Fedora podran montar por defecto /tmp como un sistema tmpfs; en
estos casos uno podra evitar poner archivos grandes en /tmp para que el sistema no se quede sin
memoria. Otra posibilidad es deshabilitar ese comportamiento, como se mencion anteriormente
al describir /tmp.

LFS201: Fundamentos de Administracin de Sistemas Linux

158

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Explicar la organizacin bsica de un sistema de archivos.


Comprender el rol del VFS.
Conocer qu sistemas de archivos estn disponibles en Linux y cules son los
que pueden ser usados en su sistema actual.
Comprender por qu los sistemas de archivos con journaling representan avances
importantes.
Discutir el uso de sistemas de archivos especiales en Linux.

LFS201: Fundamentos de Administracin de Sistemas Linux

159

Captulo 12. Caractersticas de los sistemas de


archivos:
atributos,
creacin,
verificacin,
montado
Las caractersticas importantes de los sistemas de archivos incluyen inodos, archivos de
directorio y tanto enlaces simblicos (soft) como duros (hard). Los atributos extendidos
amplan los permisos de archivos tradicionales de UNIX. Existen utilidades especficas
asociadas a los sistemas de archivos que realizan tareas como crearlos y darles formato,
comprobar si hay errores y repararlos. Tambin montar y desmontar los sistemas de
archivos durante el arranque o en un momento posterior.

Objetivos de aprendizaje
Al final del captulo usted debera ser capaz de:

Estar familiarizado con conceptos tales como inodos, archivos de directorios y


atributos extendidos.
Crear y formatear sistemas de archivos.
Verificar y reparar errores en sistemas de archivos.
Montar y desmontar sistemas de archivos.

LFS201: Fundamentos de Administracin de Sistemas Linux

160

12.1 Inodos

Figura 12.1: Almacenamiento de datos en un inodo vs almacenamiento de datos en


un archivo de directorio
Un inodo es una estructura de datos en el disco que describe y almacena los atributos del
archivo, incluyendo su localizacin. Cada archivo est asociado con su propio inodo. La
informacin almacenada en el inodo incluye lo siguiente:

Permisos
Usuario y grupo propietario
Tamao
Registros de tiempo (al nanosegundo)
Momento en el cual se realiz el ltimo acceso
Momento en el cual se realiz la ltima modificacin del contenido
Momento en el cual se realiz la ltima modificacin del inodo

Nota: los nombres de los archivos no se almacenan en el inodo asociado al archivo, sino
que lo hacen en el archivo de directorio.
Toda la actividad E/S concerniente a un archivo usualmente involucra el inodo del archivo
como informacin que debe ser actualizada.

LFS201: Fundamentos de Administracin de Sistemas Linux

161

12.2 Archivos de directorio


Un archivo de directorio es un tipo de archivo en particular, el cual es usado para
asociar nombres de archivo a inodos. Hay dos formar de asociar (o enlazar) un nombre de
archivo con un inodo:

Con enlaces duros, que apuntan a un inodo.


Con enlaces simblicos, los cuales apuntan a un nombre de archivo el cual
tiene un inodo asociado.

Cada asociacin de un contenido de los archivos de directorio y un inodo es conocido


como un enlace. Enlaces adicionales pueden ser creados usando el comando ln.
Debido a que es posible (y muy comn) que dos o ms entradas de directorio apunten al
mismo inodo (enlaces duros), un archivo puede ser conocido por mltiples nombres, en
los que cada uno de ellos tiene su propio lugar en la estructura de directorios. Sin
embargo, puede tener un inodo solamente, sin importar qu nombre est siendo usado.
Cuando un proceso se refiere a un nombre de ruta, el kernel busca directorios para
encontrar el nmero de inodo correspondiente. Luego de que el nombre ha sido
convertido a un nmero de inodo, el inodo se carga en memoria y es usado en solicitudes
posteriores.

12.3 Atributos extendidos y lsattr/chattr


Los atributos extendidos asociados a los metadatos no son interpretados directamente
por el sistema de archivos. Existen cuatro espacios de nombres (namespaces): usuario,
de confianza, seguridad y sistema. Ms adelante veremos que el espacio de nombres
sistema es usado por las listas de control de acceso (ACLs) y el espacio de nombres
seguridad es usado por SELinux.
Los valores de los atributos son almacenados en el inodo de archivo y pueden ser
modificados y configurados slo por el usuario root. Se visualizan con lsattr y configuran
con chattr.
En el espacio de nombres de usuario, las siguientes banderas pueden ser configuradas
en los archivos:
i: inmutable

Un archivo con el atributo de inmutabilidad (i) no puede ser modificado (ni siquiera
por root). No puede ser borrado o renombrado. No se puede crear un link duro a l
y no es posible escribir datos al archivo. Slo el superusuario puede configurar o
eliminar este atributo.
a: agregar solamente
Un archivo con el atributo de agregar solamente (a) puede ser abierto en modo
agregar para escritura solamente. Slo el superusuario puede configurar o eliminar
este atributo.
d: no respaldar

LFS201: Fundamentos de Administracin de Sistemas Linux

162

Un archivo con el atributo no respaldar (d) es ignorado cuando el


programa dump se
ejecuta. Esto es til para el rea de intercambio y archivos de cach que no se
desean respaldar.
A: No actualizar atime
Un archivo con el atributo no-atime-update (A) no modificar su registro atime
(tiempo de acceso) cuando el archivo es accesado pero no modificado. Esto puede
incrementar el rendimiento en algunos sistemas debido a que reduce la cantidad
de actividad de E/S del disco.
Note que hay otros atributos que se pueden configurar: al ejecutar man chattr se
mostrar la lista completa. El formato para chattr es el siguiente:
$ chattr [+|-|=mode] filename

lsattr se usa para desplegar los atributos de un archivo:


$ lsattr filename

12.4 Crear y formatear sistemas de archivos


Cada tipo de sistema de archivos tiene una herramienta para formatear un sistema de
archivos en una particin. El nombre genrico para esas utilidades es mkfs. Sin embargo
es slo una interfaz para los programas del sistema de archivos especfico:
$ ls -lh /sbin/mkfs*

rwxr-xr-x 1 root root 11K Apr 10 03:50 /sbin/mkfs


-rwxr-xr-x 1 root root 181K Oct 15 2012 /sbin/mkfs.btrfs
-rwxr-xr-x 1 root root 26K Apr 10 03:50 /sbin/mkfs.cramfs
-rwxr-xr-x 5 root root 68K Jul 16 15:31 /sbin/mkfs.ext2
-rwxr-xr-x 5 root root 68K Jul 16 15:31 /sbin/mkfs.ext3
-rwxr-xr-x 5 root root 68K Jul 16 15:31 /sbin/mkfs.ext4
-rwxr-xr-x 5 root root 68K Jul 16 15:31 /sbin/mkfs.ext4dev
lrwxrwxrwx 1 root root 7 Dec 6 2011 /sbin/mkfs.msdos -> mkdosfs
lrwxrwxrwx 1 root root 12 Sep 28 2011 /sbin/mkfs.ntfs -> /sbin/mkntfs
lrwxrwxrwx 1 root root 7 Dec 6 2011 /sbin/mkfs.vfat -> mkdosfs
Por tanto, los dos comandos de a continuacin son completamente equivalentes:
$ sudo mkfs -t ext4 /dev/sda10
$ sudo mkfs.ext4 /dev/sda10

El formato general para mkfs es el siguiente:


mkfs [-t fstype] [options] [device-file]
donde [device-file] es generalmente un nombre de dispositivo
como /dev/sda3 o /dev/vg/lvm1.
LFS201: Fundamentos de Administracin de Sistemas Linux

163

LFS201: Fundamentos de Administracin de Sistemas Linux

164

Cada tipo de sistema de archivos tiene sus propias opciones que pueden ser configuradas
en el proceso de formateo. Por ejemplo, cuando se crea un sistema de archivos ext4, un
asunto para considerar es la configuracin del journaling. Estos incluyen el tamao de
archivo del journal y si se utilizar o no un archivo de journal externo.
Es necesario revisar la pgina man de cada uno de los programas mkfs.* para ver los
detalles.

12.5 Verificar y reparar sistemas de archivos


Cada tipo de sistema de archivos tiene una utilidad diseada para verificar errores (y en lo
posible repararlos, en caso que se encuentren). El nombre genrico para esas
herramientas es fsck. Sin embargo esto es slo una interfaz para los programas
especficos de cada sistema de archivos:

$ ls -l /sbin/fsck*
-rwxr-xr-x 1 root root 34680 Apr 10 03:50 /sbin/fsck
-rwxr-xr-x 1 root root 15976 Apr 10 03:50 /sbin/fsck.cramfs
rwxr-xr-x 5 root root 197352 Jul 16 15:31 /sbin/fsck.ext2
-rwxr-xr-x 5 root root 197352 Jul 16 15:31 /sbin/fsck.ext3
-rwxr-xr-x 5 root root 197352 Jul 16 15:31 /sbin/fsck.ext4
-rwxr-xr-x 5 root root 197352 Jul 16 15:31 /sbin/fsck.ext4dev
lrwxrwxrwx 1 root root
7 Dec 6 2011 /sbin/fsck.msdos -> dosfsck
lrwxrwxrwx 1 root root
13 Sep 28 2011 /sbin/fsck.ntfs ->
../bin/ntfsck
lrwxrwxrwx 1 root root
7 Dec 6 2011 /sbin/fsck.vfat -> dosfsck

Por tanto, los dos comandos de a continuacin son completamente equivalentes:


$ sudo fsck -t ext4 /dev/sda10
$ sudo fsck.ext4 /dev/sda10

fsck se ejecuta automticamente luego de un nmero de montajes o un intervalo desde la


ltima vez que fue ejecutado, o luego de un apagado anormal. Debera ser ejecutado en
sistemas de archivos sin montar.
Usted puede forzar una verificacin de todos los sistemas montados en el prximo
arranque con los siguientes comandos:
$ sudo touch /forcefsck
$ sudo reboot

El archivo /forcefsck desaparecer luego de que la verificacin sea exitosa. Esta forma
de verificacin es muy til, ya que permite ejecutar fsck en el sistema de archivos root, lo
cual es muy difcil de realizar en un sistema que est corriendo.
El formato general de fsck es el siguiente:
LFS201: Fundamentos de Administracin de Sistemas Linux

165

fsck [-t fstype] [options] [device-file]

donde [device-file] es
generalmente un
nombre
de
dispositivo
como /dev/sda3 o /dev/vg/lvm1. Usualmente no es necesario especificar el tipo de
sistema de archivo, ya que fsck puede detectarlo a travs de examinar los superbloques
al comienzo de la particin.
Es posible controlar si los errores encontrados deben repararse uno a uno manualmente
con la opcin -r, o automticamente de la mejor forma posible usando la opcin -a.
Adicionalmente, cada tipo de sistema de archivo puede tener sus propias opciones
particulares que pueden ser configuradas al momento de la verificacin.
Note que los sistemas de archivos con journaling son mucho ms rpidos para verificar
que los sistemas de archivos de generaciones anteriores por dos razones:
Raramente es necesario escanear la particin completa para buscar errores, ya

que todo - con excepcin de la ltima transaccin - ha sido registrado y


confirmado, por lo cual se requiere muy poco tiempo para verificar.
Incluso si uno verifica el estado del sistema de archivos completo, los sistemas de

archivos nuevos han sido diseados con fsck rpido; de hecho los sistemas de
archivos antiguos no consideraron este tema cuando fueron diseados, debido a
que los tamaos eran mucho ms pequeos.
Para ver los detalles de los programas fsck.* vea la pgina man de cada uno.

12.6 Montar y desmontar sistemas de archivos


Todos los archivos accesibles en Linux estn organizados en una gran estructura de
rbol jerrquica con la parte superior del mismo en el directorio root ( / ). Sin embargo, es
comn tener ms de una particin (cada una de las cuales puede tener su propio tipo de
sistema de archivos), las que trabajan juntas en el mismo rbol de sistema de archivos.
Estas particiones pueden estar en diferentes dispositivos fsicos, o incluso localizadas en
una red.
El programa mount permite montar un sistema de archivos en cualquier punto de la
estructura de rbol; por el contrario,umount permite desmontarlo.
El punto de montaje corresponde al directorio donde el sistema de archivos est
montado. Este debe existir con anterioridad a que mount pueda usarlo; el
comando mkdir puede ser usado para crear un directorio vaco. Si un directorio
preexistente es usado para tal efecto y contiene archivos previamente al ser usado como
punto de montaje, los archivos se ocultarn al momento del montaje. Estos archivos no
son borrados y estarn visibles nuevamente cuando el sistema de archivos es
desmontado.
LFS201: Fundamentos de Administracin de Sistemas Linux

166

Slo el superusuario puede montar y desmontar sistemas de archivos.

12.7 mount
Cada sistema de archivos es montado bajo un directorio especfico, como en el caso que
se muestra a continuacin:
$ sudo mount -t ext4 /dev/sdb4 /home
Monta un sistema de archivos ext4.
El sistema de archivos est localizado en una particin especfica del disco duro

(/dev/sdb4).
El sistema de archivos est montado en la posicin /home en el rbol de

directorios actual.
Cualquier archivo que est en el directorio original /home estar oculto hasta que

la particin se desmonte.
Note que en este ejemplo el sistema de archivos es montado utilizando el nodo de
dispositivo sobre el que reside. Sin embargo, tambin es posible montarlo usando
una etiqueta o un UUID. Por lo tanto, los siguientes comandos son todos equivalentes:
$
$
$
$
$

sudo
sudo
sudo
sudo
sudo

mount /dev/sda2
/home
mount LABEL=home
/home
mount
-L home
/home
mount UUID=26d58ee2-9d20-4dc7-b6ab-aa87c3cfb69a /home
mount
-U 26d58ee2-9d20-4dc7-b6ab-aa87c3cfb69a /home

Las etiquetas son asignadas por utilidades especficas de cada tipo de sistema de
archivos, tal como e2label. Los UUIDs se asignan cuando las particiones son creadas
como contenedores para el sistema de archivos.
Mientras cualquiera de estos tres mtodos para especificar el dispositivo puede ser
usado, los sistemas modernos desestiman el uso del nodo de dispositivo debido a que los
nombres pueden cambiar de acuerdo a cmo el sistema arranca, qu discos duros son
encontrados primero, etc. Las etiquetas son una mejora, pero en raras ocasiones se
podra tener dos particiones que se muestran con la misma etiqueta. Los UUIDs, sin
embargo, siempre deberan ser nicos y son creados cuando las particiones se crean.

LFS201: Fundamentos de Administracin de Sistemas Linux

167

12.8 Opciones de mount


mount tiene muchas opciones, algunas genricas como -a (lo cual monta todos los
sistemas de archivos mencionados en /etc/fstab) y muchas que son especficas al sistema
de archivos; de hecho, mount tiene una pgina man muy larga. Un ejemplo comn sera
el siguiente:
$ sudo mount -o remount,ro /myfs

lo cual montara nuevamente un sistema de archivos con un atributo de slo lectura.


A continuacin se muestra cmo obtener un resumen rpido de las opciones de mount:
$ mounthelp
Usage:
mount [-lhV]
mount -a [options]
mount [options] [--source] <source> | [--target] <directory>
mount [options] <source> <directory>
mount <operation> <mountpoint> [<target>]
Options:
-a, --all mount all filesystems mentioned in fstab
-c, --no-canonicalize dont canonicalize paths
-f, --fake dry run; skip the mount(2) syscall
-F, --fork fork off for each device (use with -a)
-T, --fstab <path> alternative file to /etc/fstab
-h, --help display this help text and exit
-i, --internal-only dont call the mount.<type> helpers
-l, --show-labels lists all mounts with LABELs
-n, --no-mtab dont write to /etc/mtab
-o, --options <list> comma-separated list of mount options
-O, --test-opts <list> limit the set of filesystems (use with -a)
-r, --read-only mount the filesystem read-only (same as -o ro)
-t, --types <list> limit the set of filesystem typessource <src>
explicitly specifies source (path, label, uuid)
--target <target> explicitly specifies mountpoint
-v, --verbose say what is being done
-V, --version display version information and exit
-w, --rw, --read-write mount the filesystem read-write (default)
-h, --help display this help and exit
-V, --version output version information and exit
.....

LFS201: Fundamentos de Administracin de Sistemas Linux

168

12.9 umount
Los sistemas de archivos pueden ser desmontados de la siguiente forma:
$ umount [device-file | mount-point]

A continuacin hay un par de ejemplos de cmo desmontar un sistema de archivos:

Desmontar el sistema de archivos /home :


$ sudo umount /home

Desmontar el dispositivo /dev/sda3 :


$ sudo umount /dev/sda3

Tenga en cuenta que el comando para desmontar un sistema de archivos es


umount (no unmount!).
Tal como mount, umount tiene muchas opciones, muchas de las cuales son especficas
al tipo de sistema de archivos. Nuevamente, las pginas man son la mejor fuente para
obtener las opciones especficas.
El error ms comn que se encuentra al desmontar un sistema de archivos es tratar de
hacerlo en un sistema de archivos que est en uso actualmente; es decir, hay
aplicaciones usando archivos u otras entradas en el sistema de archivos.
Esto puede ser tan simple como tener una terminal abierta en un directorio en el sistema
de archivos montado. Tan solo haciendo cd en esa ventana o cerrndola, solucionar el
error del dispositivo que est en uso y se permitir desmontarlo.
Sin embargo, si hay otros procesos induciendo ese error, deber cerrarlos antes de poder
desmontar el sistema de archivos. Usted puede usar fuser para encontrar qu usuarios
estn usando el sistema de archivos y detener sus procesos (sea cuidadoso con esto, tal
vez sea buena idea informar a los usuarios antes de hacerlo). Tambin se puede
usar lsof (lista de archivos abiertos) para ver qu archivos estn siendo utilizados y que
estn bloqueando el desmontado.

LFS201: Fundamentos de Administracin de Sistemas Linux

169

12.10 Montar sistemas de archivos en el arranque


Durante el arranque del sistema se ejecuta el comando mount -a. Esto monta todos los
sistemas de archivos listados en el archivo de configuracin /etc/fstab. Las entradas
pueden referirse a sistemas de archivos locales o remotos, montados a travs de la red.
A continuacin hay un ejemplo mostrando cmo montar todos los sistemas de archivos
listados en el archivo de configuracin /etc/fstab durante el arranque del sistema:
$ cat /etc/fstab
LABEL=RHEL6-64
LABEL=RHEL6-32
LABEL=boot
....
LABEL=local
LABEL=tmp
LABEL=src
LABEL=VIRTUAL
LABEL=BEAGLE
/dev/sda1
/teaching/FTP/LFT
laptop:/share
LABEL=SWAP
Tmpfs
devpts
sysfs
proc
debugfs

/
/RHEL6-32
/boot

ext4
ext4
ext3

defaults
defaults
defaults

/usr/local ext4
defaults
/tmp
ext4
defaults
/usr/src
ext4
defaults
/VIRTUAL
ext4
defaults
/BEAGLE
ext4
defaults
/c
ntfs-3g uid=500,gid=500
/var/ftp/pub2
none bind
/share
nfs
defaults
swap
swap
defaults
/dev/shm
tmpfs
defaults
/dev/pts
devpts
gid=5,mode=6200
/sys
sysfs
defaults
/proc
proc
defaults
/sys/kernel/debug debugfs
defaults

1 1
1 2
1 2
1
1
1
1
1
0
0
0
0
0
0
0
0
0

2
2
2
2
2
0
0
0
0
0
0
0
0
0

Este archivo muestra qu sistemas de archivos sern montados en el arranque y dnde


pueden encontrarse en el sistema local o en la red. Puede especificar quin podra
montarlos y con qu permisos, y otras opciones relevantes. Algunas de esas lneas se
refieren a seudosistemas de archivos especiales como proc, sys y devpts.
Cada registro en el archivo contiene campos separados por espacios en blanco, listando
lo siguiente:
Dispositivo de nodo, etiqueta o UUID. Para sistemas de archivos que no tienen un

nodo de dispositivo, como tmpfs, proc y sysfs, este campo es un marcador de


posicin solamente; a veces ver la palabra none en la columna.
Punto de montaje. Esto tambin puede ser un marcador de posicin solamente,
como en el caso de swap, el cual no est montado en ninguna parte.
Tipo de sistema de archivos.
Una lista de opciones separadas por coma.
Frecuencia de dump (o un cero), usado por el comando dump -w.
fsck pass, nmero de verificacin (o 0, lo cual significa que no se comprueba el
estado en el arranque).

LFS201: Fundamentos de Administracin de Sistemas Linux

170

Las herramientas mount y umount pueden usar la informacin que se encuentra


en /etc/fstab; en este caso podramos hacer lo siguiente (usando la informacin del
ejemplo anterior)
$ sudo mount /usr/src

en vez de
$ sudo mount LABEL=src /usr/src

12.11 Lista de los sistemas de archivos montados actualmente


La lista de sistemas de archivos montados actualmente puede ser vista ejecutando el
siguiente comando:
$ mount
/dev/sda5 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda6 on /RHEL6-32 type ext4 (rw)
/dev/sda2 on /boot_master type ext4 (rw)
/dev/mapper/VG-tmp on /tmp type ext4 (rw)
/dev/mapper/VG-local on /usr/local type ext4 (rw)
/dev/mapper/VG-src on /usr/src type ext4 (rw)
/dev/mapper/VG-audio on /AUDIO type ext4 (rw)
/dev/mapper/VG-pictures on /PICTURES type ext4 (rw)
/dev/mapper/VG-dead on /DEAD type ext4 (rw)
/dev/mapper/VG-virtual on /VIRTUAL type ext4 (rw)
/dev/mapper/VG-virtual2 on /VIRTUAL2 type ext4 (rw)
/dev/mapper/VG-virtual3 on /VIRTUAL3 type ext4 (rw)
/dev/mapper/VG-iso_images on /ISO_IMAGES type ext4 (rw)
/usr/local/FTP on /var/ftp/pub type none (rw,bind)
/usr/src/KERNELS.sqfs on /usr/src/KERNELS type squashfs
(rw,loop=/dev/loop0)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock
(rw, nosuid, nodev, default_permissions, allow_other)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)

LFS201: Fundamentos de Administracin de Sistemas Linux

171

Comprobacin de conocimientos 12.1

Comprobacin de conocimientos 12.2

LFS201: Fundamentos de Administracin de Sistemas Linux

172

12.12 Laboratorio 12.1


Laboratorio 12.1: Trabajo con atributos de archivo
1. Con su cuenta de usuario normal use touch para crear un archivo vaco llamado
/tmp/appendit.
2. Use cat para agregar el contenido de /etc/hosts a /tmp/appendit.
3. Compare los contenidos de /tmp/appendit con /etc/hosts; no debera existir ninguna
diferencia.
4. Intente agregar el atributo agregar solamente a /tmp/appendit usando chattr. Debera
obtener un error. A qu se debe esto?
5. Como root, intente agregar el atributo agregar solamente; esta vez debera funcionar. Eche
un vistazo a los atributos extendidos del archivo usando lsattr.
6. Como usuario normal intente copiar con cat el contenido de /etc/passwd a /tmp/appendit.
Debera obtener un error, a qu se debe?
7. Intente lo mismo esta vez como root. Tambin debera obtener un error. Por qu?
8. Como usuario normal, use el operador de redireccin para agregar (>>) e intente agregar el
contenido del archivo /etc/passwd a /tmp/appendit. Esta vez debera funcionar. Examine el
archivo para confirmar.
9. Como root, configure el atributo de inmutabilidad sobre /tmp/appendit, y liste los
atributos extendidos nuevamente.
10. Intente agregar contenido a /tmp/appendit. Intente renombrar el archivo, crear un enlace
duro al mismo e incluso borrarlo como usuario normal y como root.
11. Es posible eliminar el archivo si se remueven los atributos extendidos. Hgalo por favor.

Solucin 12.1
1. $ cd /tmp
$ touch appendit
$ ls -l appendit

rw-rw-r-- 1 coop coop 0 Oct 23 19:04 appendit

2. $ cat /etc/hosts > appendit


3. $ diff /etc/hosts appendit
4. $ chattr +a appendit
chattr: Operation not permitted while setting flags on appendit
5. $ sudo chattr +a appendit
$ lsattr appendit
-----a-------eappendit
6. $ cat /etc/passwd > appendit
bash: appendit: Operation not permitted
7. $ sudo su
$ cat /etc/passwd > appendit
bash: appendit: Operation not permitted $ exit
8. $ cat /etc/passwd >> /tmp/appendit
LFS201: Fundamentos de Administracin de Sistemas Linux

173

$ cat appendit
9. $ sudo chattr +i appendit
$ lsattr appendit
----ia-------e- appendit
10. $ echo hello >> appendit

bash: appendit: Permission denied


$ mv appendit appendit.rename
mv: cannot move appendit to appendit.rename: Operation not permitted
$ ln appendit appendit.hardlink
ln: creating hard link appendit.hardlink => appendit: Operation not permitted
$ rm -f appendit
rm: cannot remove appendit: Operation not permitted
$ sudo su
$ echo hello >> appendit

bash: appendit: Permission denied


$ mv appendit appendit.rename
mv: cannot move appendit to appendit.rename: Operation not permitted
$ ln appendit appendit.hardlink ln: creating hard link appendit.hardlink => appendit:
Operation not permitted
$ rm -f appendit rm: cannot remove appendit: Operation not permitted
$ exit
11. $ sudo su
$ lsattr appendit
----ia-------e- appendit
$ chattr -ia /appendit
$ rm appendit
rm: remove regular file appendit? y
$ ls appendit
ls: cannot access appendit: No such file or directory

LFS201: Fundamentos de Administracin de Sistemas Linux

174

12.12 Laboratorio 12.2


Laboratorio 12.2: Opciones de montaje
En este ejercicio tendr que crear una particin nueva o usar un archivo loopback. La solucin va a
variar un poco y proveeremos los detalles de ambos mtodos.
1. Use fdisk para crear una particin nueva de 250 MB en el sistema, probablemente en
/dev/sda. O cree un archivo lleno de ceros para usar como archivo loopback para simular una
particin nueva.
2. Use mkfs para formatear un sistema de archivos nuevo en la particin o archivo loopback que
cre recin. Hgalo tres veces, cambiando el tamao de bloque cada vez. Fjese en las
ubicaciones de los sperbloques, el nmero de los grupos de bloques y cualquier otra
informacin pertinente, para cada caso.
3. Cree un subdirectorio nuevo (digamos /mnt/tempdir) y monte el sistema de archivos nuevo en
esa ubicacin. Confirme que haya sido montado.
4. Desmonte el sistema de archivos nuevo y luego mntelo nuevamente con permisos de slo
lectura.
5. Intente crear un archivo en el directorio recin montado. Debera obtener un error, por qu?
6. Desmonte el sistema de archivos nuevamente.
7. Agregue una lnea a su archivo /etc/fstab para que ese sistema de archivos sea montado en el
arranque.
8. Monte el sistema de archivos.
9. Modifique la configuracin para el sistema de archivos nuevo, de tal manera que los archivos
binarios no puedan ser ejecutados (cambie la configuracin por defecto a noexec en la entrada
/mnt/tempdir). Luego monte nuevamente el sistema de archivos y copie un archivo ejecutable
(algo /bin/ls) a /mnt/tempdir e intente ejecutarlo. Debera obtener un error, a qu se debe?
Una vez que est listo puede volver a la situacin original removiendo la entrada desde /etc/fstab.

LFS201: Fundamentos de Administracin de Sistemas Linux

175

Solucin 12.2
Solucin con una particin fsica
1. No mostraremos los pasos detalles de fdisk, ya que lo hemos visto anteriormente. Para efectos
del ejercicio asumiremos que la particin creada es /dev/sda11.
$ sudo fdisk /dev/sda
.....
w
$ partprobe s
A veces partprobe no funciona y para asegurarse de que el sistema est al tanto de la particin
nueva es necesario reiniciar.
2. $ sudo mkfs -t ext4 -v /dev/sda11
$ sudo mkfs -t ext4 -b 2048 -v /dev/sda11
$ sudo mkfs -t ext4 -b 4096 -v /dev/sda11
Note que el parmetro -v (reporte detallado) le proveer la informacin requerida; ver que
para una particin pequea como est el valor por defecto es de 1024 bloques de byte.
3. $ sudo mkdir /mnt/tempdir
$ sudo mount /dev/sda11 /mnt/tempdir
$ mount | grep tempdir
4. $ sudo umount /mnt/tempdir
$ sudo mount -o ro /dev/sda11 /mnt/tempdir
Si obtiene un error mientras desmonta el dispositivo, asegrese que no est actualmente en
ese directorio.
5. $ sudo touch /mnt/tempdir/afile
6. $ sudo umount /mnt/tempdir
7.

Agregue esta lnea a /etc/fstab:


/dev/sda11 /mnt/tempdir ext4 defaults 1 3

8. $ sudo mount /mnt/tempdir


$ sudo mount | grep tempdir

LFS201: Fundamentos de Administracin de Sistemas Linux

176

9. Cambie la lnea en /etc/fstab a:


/dev/sda11 /mnt/tempdir ext4 noexec 1 3
Luego haga:
$ sudo mount -o remount /mnt/tempdir
$ sudo cp /bin/ls /mnt/tempdir
$ /mnt/tempdir/ls
Debera obtener un error, a qu se debe?
Solucin de archivo loopback
1. $ dd if=/dev/zero of=/tmp/imagefile bs=1M count=250
2. $ sudo mkfs -t ext4 -v
$ sudo mkfs -t ext4 -b 2048 -v /tmp/imagefile
$ sudo mkfs -t ext4 -b 4096 -v /tmp/imagefile
Ser advertido en relacin a que este es un archivo y no una particin, slo siga adelante.
Note que el parmetro -v (reporte detallado) le proveer la informacin requerida; ver que
para una particin pequea como esta el valor por defecto es de 1024 bloques de byte.
3. $ sudo mkdir /mnt/tempdir
$ sudo mount -o loop /tmp/imagefile /mnt/tempdir
$ mount | grep tempdir
4. $ sudo umount /mnt/tempdir
$ sudo mount -o ro,loop /tmp/imagefile /mnt/tempdir
Si obtiene un error mientras desmonta el dispositivo, asegrese que no est actualmente en
ese directorio.
5. $ sudo touch /mnt/tempdir/afile
6. $ sudo umount /mnt/tempdir
7. Agregue esta lnea a /etc/fstab:
/tmp/imagefile /mnt/tempdir ext4 loop 1 3
8. $ sudo mount /mnt/tempdir
$ sudo mount | grep tempdir
9. Cambie la lnea en /etc/fstab a:
/tmp/imagefile /mnt/tempdir ext4 loop,noexec 1 3
Luego haga:
$ sudo mount -o remount /mnt/tempdir
$ sudo cp /bin/ls /mnt/tempdir
$ /mnt/tempdir/ls
Debera obtener un error, a qu se debe?

LFS201: Fundamentos de Administracin de Sistemas Linux

177

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:
Estar familiarizado con conceptos tales como inodos, archivos de directorios y

atributos extendidos.
Crear y formatear sistemas de archivos.
Verificar y reparar errores en sistemas de archivos.
Montar y desmontar sistemas de archivos.

LFS201: Fundamentos de Administracin de Sistemas Linux

178

Captulo 13. Caractersticas del


archivos: intercambio, cuotas, uso

sistema

de

Linux usa una implementacin de espacio de intercambio robusto, a travs de la cual el


sistema de memoria virtual permite el uso aparente de ms memoria que la disponible en
forma fsica. Las cuotas del sistema de archivos pueden ser usadas para administrar el
uso del espacio en disco de las cuentas de usuario. Las herramientas df y du son tiles
para monitorear de forma simple el uso y capacidad del sistema de archivos.

Objetivo de aprendizaje
Al final de este captulo usted debera ser capaz de:
Explicar los conceptos de rea de intercambio y cuotas.
Usar las herramientas que ayudan a administrar las cuotas: quotacheck,

quotaon, quotaoff, edquota y quota.


Usar las herramientas df y du.

LFS201: Fundamentos de Administracin de Sistemas Linux

179

13.1 Intercambio (swap)


Linux emplea un sistema de memoria virtual en el cual el sistema operativo funciona
como si tuviera ms memoria de la que realmente tiene. Este tipo de memoria funciona de
dos maneras:
Muchos programas no usan toda la memoria que tienen permitido usar. A veces

esto se debe a que los procesos hijos heredan una copia de las regiones de
memoria de los padres, que utilizan la tcnica COW (Copy On Write), en la cual el
hijo obtiene solamente una copia nica (de a una pgina) cuando hay un cambio.
Cuando la presin de memoria se vuelve importante, regiones de memoria menos

activa pueden ser escritas al rea de intercambio, para ser llamadas slo cuando
se requieren nuevamente.
Tal movimiento en el rea de intercambio sea realiza usualmente a una o ms particiones
o archivos; Linux permite mltiples reas de intercambio, por lo cual las necesidades
pueden ser ajustadas dinmicamente. Cada rea tiene una prioridad asociada; las de
prioridad baja no son utilizadas hasta que otras de prioridad mayor estn llenas.
En la mayora de los casos el tamao recomendado de intercambio es el total de RAM en
el sistema. Es posible ver lo que el sistema est usando actualmente en las reas de
intercambio de la siguiente forma:
$ cat /proc/swaps
Filename
Priority
/dev/sda9
-1
/dev/sdb6
-2

Type

Size

Used

partition

4193776

partition

4642052

y el uso actual de memoria con:


$ free -o
Mem:
Swap:

total
4047236
8835828

used
3195080
0

free
852156
8835828

shared
0

buffers
818480

cached
1430940

Los nicos comandos que implican el rea de intercambio son los siguientes:
mkswap: formatea una particin o archivo de intercambio
swapon: activa una particin o archivo de intercambio
swapoff: desactiva una particin o archivo de intercambio

LFS201: Fundamentos de Administracin de Sistemas Linux

180

En algn momento la mayora de la memoria est en uso para almacenar en cach


contenidos de archivo para prevenir ir a leer al disco ms de lo necesario, o en un orden o
tiempo que podra estar debajo de lo ptimo. Este tipo de pgina en memoria no se
escribe en el rea de intercambio, ya que estn respaldadas en los archivos en s, por lo
cual hacerlo no tendra sentido; en cambio, las pginas que han sido modificadas y
que no tienen respaldo fsico- conocidas como dirty pages en ingls - son movidas al
disco.
Vale la pena sealar que en Linux la memoria que usa el kernel, de forma opuesta a la
memoria de aplicaciones y a diferencias de otros sistemas operativos, nunca se traslada
al rea de intercambio.

13.2 Cuotas
Linux puede usar y aplicar cuotas en sistemas de archivos. Las cuotas de disco
permite a los administradores controlar el espacio mximo que usuarios o grupos
particular tienen habilitados para su uso. Se permite una flexibilidad considerable y
cuotas pueden ser asignadas en base a cada sistema de archivos. Se provee
proteccin para que los usuarios no agoten los recursos colectivos.

les
en
las
de

Las siguientes herramientas permiten controlar las cuotas:

quotacheck: genera y actualiza los archivos que llevan la cuenta de las cuotas

quotaon: habilita el sistema de cuotas

quotaoff: deshabilita el sistema de cuotas

edquota: se usa para editar cuotas de usuarios o grupos

quota: informa acerca del uso y lmites de las cuotas

Las operaciones de cuota requieren la existencia de los archivos aquota.user y


aquota.group en el directorio raz del sistema de archivos que est usando cuotas.
Las cuotas pueden estar habilitadas o deshabilitadas en funcin de cada sistema de
archivos. Adicionalmente, Linux soporta el uso de cuotas basadas en el id de usuario y
grupo.
Los diferentes sistemas de archivos pueden tener utilidades adicionales relacionadas a
las cuotas, tales como xfs_quota.

LFS201: Fundamentos de Administracin de Sistemas Linux

181

13.3 Configuracin del sistema de cuotas


Para crear una cuota de sistema de archivos hay que asegurarse de haber montado el
sistema de archivos con las opciones de cuotas de usuario y/o grupo. Sin eso nada
funcionar. Los pasos bsicos son los siguientes:

Montar el sistema de archivos con las opciones de cuota de usuario y/o grupo:
- Agregar las opciones usrquota y/o grpquota a la entrada del sistema de
archivos en /etc/fstab

Remontar el sistema de archivos (o montarlo si es nuevo)

Ejecutar quotacheck en el sistema de archivos para configurar las cuotas.

Habilitar las cuotas en el sistema de archivos.

Configurar las cuotas con el programa edquota.

Por lo tanto, para crear una cuota de sistema de archivos primero hay que asegurarse de
haber montado el sistema de archivos con las opciones de cuota para usuarios y/o
grupos. Recuerde que sin ellos no va a funcionar.
Primero es necesario agregar las opciones correctas en el archivo /etc/fstab, como se
muestra a continuacin:
/dev/sda5 /home ext4 defaults,usrquota 1 1
donde hemos asumido que /home est en una particin dedicada.
Luego realice un test con los siguientes comandos:
$
$
$
$

sudo
sudo
sudo
sudo

mount -o remount /home


quotacheck -vu /home
quotaon -vu /home
edquota someusername

Usted tambin podra querer configurar perodos de gracia con edquota. Las opciones
de montaje que deberan ser usadas en el archivo /etc/fstab son usrquota para cuotas
de usuario y grpquota para cuotas de grupo.

LFS201: Fundamentos de Administracin de Sistemas Linux

182

13.4 quotacheck
La herramienta quotacheck crea y actualiza los archivos que llevan la cuenta de las
cuotas (aquota.user y aquota.group) en el sistema de archivos.
Para actualizar los archivos de usuarios para todos los sistemas de archivos
en /etc/fstab con opciones de cuota de usuario, haga lo siguiente:
$ sudo quotacheck ua

Para actualizar los archivos de grupo para todos los sistemas de archivos
en /etc/fstab con opciones de cuota de grupo, haga lo siguiente:
$ sudo quotacheck -ga

Para actualizar el archivo de usuario de un sistema de archivos en particular, haga lo


siguiente:
$ sudo quotacheck -u [somefilesystem]

Para actualizar el archivo de grupo de un sistema de archivos en particular, haga lo


siguiente:
$ sudo quotacheck -g [somefilesystem]

Use la opcin -v para obtener una salida ms detallada.


quotacheck es ejecutado generalmente slo cuando las cuotas son habilitadas
inicialmente (o cuando necesitan ser actualizadas). El programa tambin podra ser
ejecutado cuando fsck reporta errores en el sistema de archivos durante el arranque del
sistema.

13.5 Habilitar y deshabilitar cuotas


quotaon se usa para habilitar las cuotas en el sistema de archivos; quotaoff se usa para
deshabilitarlas. Los comandos anteriores se usan de la siguiente forma:
$ sudo quotaon [flags] [filesystem]
$ sudo quotaoff [flags] [filesystem]

LFS201: Fundamentos de Administracin de Sistemas Linux

183

en donde los parmetros (flags) pueden ser:


a, --all
-f, --off
-u, --user
-g, --group
-p, --print-state
-x, --xfs-command=cmd
-F, --format=formatname
-v, --verbose
-h, --help
-V, --version

turn quotas off for all filesystems


turn quotas off
operate on user quotas
operate on group quotas
print whether quotas are on or off
perform XFS quota command
operate on specific quota format
print more messages
display this help text and exit
display version information and exit

Note que estos dos programas son realmente uno y funcionan de acuerdo al nombre con
el cual son invocados.

Por ejemplo:
$ sudo quotaon -av
/dev/sda6 [/]: group quotas turned on
/dev/sda5 [/home]: user quotas turned on
$ sudo quotaoff -av
/dev/sda6 [/]: group quotas turned off
/dev/sda5 [/home]: user quotas turned off
$ sudo quotaon -avu
/dev/sda5 [/home]: user quotas turned on
$ sudo quotaoff -avu
/dev/sda5 [/home]: user quotas turned off
$ sudo quotaon -avg
/dev/sda6 [/]: group quotas turned on
$ sudo quotaoff -avg
/dev/sda6 [/]: group quotas turned off

Tenga en cuenta que las operaciones


aquota.user o aquota.group no existen.

de

cuota

fallarn

LFS201: Fundamentos de Administracin de Sistemas Linux

si

los

archivos

184

13.6 Examinar cuotas


La herramienta quota se usa para generar reportes de cuotas:

quota (o quota -u) informa su cuota actual de usuario.


quota -g informa su cuota actual de grupo.
El superusuario puede ver las cuotas de cualquier usuario u grupo al especificar
un nombre de usuario o grupo.

Por ejemplo:
$ sudo quota
Disk quotas for user user1 (uid 500):
Filesystem
blocks quota limit grace files quota limit grace
/dev/sda5 837572
500 1000
5804
0
0
$ sudo quota bob
Disk quotas for user bob (uid 500):
Filesystem
blocks quota limit grace files quota limit grace
/dev/sda5
83757 5000 10000
5804
0
0

13.7 Configuracin de cuotas especificas


El comando edquota ejecuta el editor de cuotas. Para el usuario o grupo especificado se
crea un archivo temporal con una representacin de texto de las cuotas de disco actuales
para ese usuario o grupo.
Entonces un editor es invocado con el fin de modificar las cuotas en el archivo
mencionado. Una vez que el editor se cierra, el archivo temporal se lee y los archivos
binarios de cuota llevan a cabo los cambios.
Los nicos campos que pueden ser editados en la cuota son los lmites soft y hard. Los
otros campos son informativos solamente.
A continuacin algunos ejemplos de uso de edquota:

edquota -u [username] edita los lmites de username


edquota -g [groupname] edita los lmites de groupname
edquota -u -p [userproto] [username] copia los valores de cuota del
usuario userproto a username
edquota -g -p [groupproto] [username] copia los valores de cuota del
grupo groupproto a groupname
edquota -t configura perodos de gracia

El tercer y cuarto comandos son tiles para ser incluidos en scripts, con el fin de crear
cuentas nuevas y configurar cuotas para ellas.

LFS201: Fundamentos de Administracin de Sistemas Linux

185

Las cuotas para usuarios y grupos pueden estar configuradas para bloques de discos y/o
inodos. Adicionalmente, los lmites soft y hard pueden ser configurados como perodos
de gracia: el lmite soft puede ser excedido por un perodo de gracia, sin embargo, el
lmite hard no puede ser excedido en ningn caso.
El perodo de gracia se configura en funcin de cada sistema de archivos.
$ sudo edquota bob
$ sudo edquota t

13.8 Uso del sistema de archivos


La herramienta df (disk free) muestra el uso y la capacidad disponible del sistema de
archivos. Por ejemplo:
$ df -hT
Filesystem
Type
/dev/sda5
ext4
tmpfs
tmpfs
/dev/sda6
ext4
/dev/sda2
ext4
/dev/mapper/VG-local ext4
/dev/mapper/VG-src
ext4
/dev/mapper/VG-pictures
ext4
/dev/mapper/VG-dead ext4
/dev/mapper/VG-virtual
ext4
/dev/mapper/VG-iso_images
ext4
/usr/src/KERNELS.sqfs
squashfs

Size
9.8G
3.9G
9.8G
380M
24G
16G

Used Avail Use% Mounted on


8.1G 1.3G 87% /
2.3M 3.9G
1% /dev/shm
5.0G 4.3G 54% /RHEL6-32
3.2M 353M
1% /boot_master
16G 7.2G 68% /usr/local
6.4G 8.6G 43% /usr/src

12G
59G

8.9G
35G

2.3G
22G

80% /PICTURES
62% /DEAD

222G

162G

49G

77% /VIRTUAL

59G

35G

21G

63% /ISO_IMAGES

3.8G

3.8G

0 100% /usr/src/KERNELS

en donde la opcin -h significa legible para humanos, es decir en KB, MB, GB y no en


bytes. La opcin -T muestra el tipo de sistema de archivos. La opcin -i muestra la
informacin del inodo en vez de bytes.

LFS201: Fundamentos de Administracin de Sistemas Linux

186

13.9 Uso del espacio en disco


du (disk usage, o uso del disco) se usa para evaluar cunto espacio est usando un
directorio (y sus subdirectorios) en un sistema de archivos.
Para desplegar el uso del disco del directorio actual: $ du
Para desplegar todos los archivos, no slo los directorios: $ du -a
Para listar en formato legible por humanos: $ du -h
Para desplegar el uso del disco para un directorio especfico: $ du -h somedir
Para desplegar los totales solamente, suprimiendo la salida de los subdirectorios: $ du -s
Por ejemplo:
$ du -ch /teaching/CRASH
16K
136K
35M
101M
101M

/teaching/CRASH/crash-7.0.3/memory_driver
/teaching/CRASH/crash-7.0.3/extensions
/teaching/CRASH/crash-7.0.3
/teaching/CRASH
total

Comprobacin de conocimientos 13.1

Comprobacin de conocimientos 13.2

LFS201: Fundamentos de Administracin de Sistemas Linux

187

Comprobacin de conocimientos 13.3

13.10 Laboratorio 13.1


Laboratorio 13.1: Gestin del rea de intercambio
Examine el rea de intercambio actual haciendo:
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda11 partition 4193776 0 -1
Agregaremos ms espacio de rea de intercambio ya sea usando una particin o un archivo. Para
usar un archivo realizaremos lo siguiente:
$ dd if=/dev/zero of=swpfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.30576 s, 822 MB/s
$ mkswap swpfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=85bb62e5-84b0-4fdd-848b-4f8a289f0c4c
En el caso de una particin real slo ejecute mkswap con el dispositivo de la particin, pero tenga
en cuenta que toda la informacin sobre sta ser eliminada.
Active el espacio de intercambio nuevo:
$ sudo swapon swpfile
swapon: /tmp/swpfile: insecure permissions 0664, 0600 suggested.
swapon: /tmp/swpfile: insecure file owner 500, 0 (root) suggested.
RHEL 7 advierte que hay un problema de seguridad en los permisos, lo cual solucionaremos de la
siguiente:
LFS201: Fundamentos de Administracin de Sistemas Linux

188

$ sudo chown root:root swpfile


$ sudo chmod 600 swpfile
y asegrese que est siendo usada:
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda11 partition 4193776 0 -1
/tmp/swpfile file 1048572 0 -2

Fjese en el campo Priority; las particiones o archivos de intercambio de menor prioridad no sern
utilizadas hasta que las de mayor prioridad estn llenas. Desactive el archivo de rea de
intercambio y brrelo para ahorrar ese espacio:
$ sudo swapoff swpfile
$ sudo rm swpfile

13.10 Laboratorio 13.2


Laboratorio 13.2: Cuotas del sistema de archivos
1. Modifique la entrada en /etc/fstab para que su sistema de archivos nuevo use cuotas. Cambie
noexec a usrquota en la entrada para /mnt/tempdir. Luego desmonte y monte nuevamente el
sistema de archivos.
2. Inicialice las cuotas en el sistema de archivos nuevo y luego habilite el sistema de cuotas.
3. Configure algunos lmites de cuotas para el usuario normal: un lmite soft de 500 bloques y un
lmite hard de 1000 bloques.
4. Como usuario normal, use dd para crear algunos archivos e intentar superar los lmites de
cuota. Cree bigfile1 (200 bloques) y bigfile2 (400 bloques).
Debera recibir una advertencia. A qu se debe?
5. Cree bigfile3, de 600 bloques.
Ahora debera recibir un mensaje de error. Por qu? Revise meticulosamente los tamaos de
los archivos.
6. Elimine la lnea de montado persistente que haba insertado en /etc/fstab.

Solucin 13.2
LFS201: Fundamentos de Administracin de Sistemas Linux

189

1. Modifique /etc/fstab para tener una de las dos lneas que se muestran, de acuerdo a si tiene
una particin real o un archivo loopback:
/dev/sda11 /mnt/tempdir ext4 usrquota 1 3
/tmp/imagefile /mnt/tempdir ext4 loop,usrquota 1 3
Luego mntelo nuevamente:
$ sudo mount -o remount /mnt/tempdir
2. $ sudo quotacheck -u /mnt/tempdir
$ sudo quotaon -u /mnt/tempdir
$ sudo chown student.student /mnt/tmpdir
Usualmente no es necesario realizar lo que se muestra en la lnea, pero lo estamos haciendo
para que la prxima parte sea ms fcil.
3. Reemplace la cuenta student por su nombre de usuario.
4. $ sudo edquota -u student
5. $ cd /mnt/tempdir
$ dd if=/dev/zero of=bigfile1 bs=1024 count=200
200+0 records in
200+0 records out
204800 bytes (205 kB) copied, 0.000349604 s, 586 MB/s
$ quota
Disk quotas for user student (uid 500):
Filesystem blocks quota lim grace files qu lim gr
/dev/sda11 200 500 1000 1 0 0
$ dd if=/dev/zero of=bigfile2 bs=1024 count=400
sda11: warning, user block quota exceeded.
400+0 records in
400+0 records out
4096600 bytes (410 kB) copied, 0.000654847 s, 625 MB/s Create bigfile3 (600 blocks).

LFS201: Fundamentos de Administracin de Sistemas Linux

190

6. $ quota
Disk quotas for user student (uid 500):
Filesystem blocks quota limit grace files qu lim gr
/dev/sda11 600* 500 1000 6days 2 0 0
$ dd if=/dev/zero of=bigfile3 bs=1024 count=600
sda11: write failed, user block limit reached.
dd: writing bigfile3: Disk quota exceeded
401+0 records in
400+0 records out
409600 bytes (410 kB) copied, 0.00177744 s, 230 MB/s
$ quota
Disk quotas for user student (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda11 1000* 500 1000 6days 3 0 0
$ ls l
total 1068 -rw------- 1 root root 7168 Dec 10 18:56 aquota.user
rw-rw-r-- 1 student student 204800 Dec 10 18:58 bigfile1
rw-rw-r-- 1 student student 409600 Dec 10 18:58 bigfile2
rw-rw-r-- 1 student student 409600 Dec 10 19:01 bigfile3
drwx------ 2 root root 16384 Dec 10 18:47 lost+found
rwxr-xr-x 1 root root 41216 Dec 10 18:52 more
Examine de cerca los tamaos de los archivos.
7. Restablezca /etc/fstab a su contenido original.

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Explicar los conceptos de rea de intercambio y cuotas.


Usar
las
herramientas
que
ayudan
a
administrar
quotacheck, quotaon, quotaoff, edquota y quota.
Usar las herramientas df y du.

LFS201: Fundamentos de Administracin de Sistemas Linux

las

cuotas:

191

Captulo
14.
Ext2/Ext3/Ext4

Los

sistemas

de

archivos

La familia de sistemas de archivos ext han sido nativos de Linux desde sus primeros
das, y los ms ampliamente usados de todas las alternativas disponibles. Hasta muy
recientemente, ext4 ha sido la alternativa por defecto ms frecuente de
distribuciones Linux, debido a su excelente combinacin de rendimiento, integridad y
estabilidad.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Describir las caractersticas principales del sistema de archivos ext4y la forma en


la que ocupa el disco.
Explicar los conceptos de grupos de bloques, superbloque, bloques de
datos e inodos.
Usar las herramientas dumpe2fs y tune2fs.
Enumerar las mejoras del sistema de archivos ext4.

LFS201: Fundamentos de Administracin de Sistemas Linux

192

14.1 Historia de ext4 y datos bsicos


El sistema de archivos ext2 fue una variedad nativa de Linux y est disponible en todos
los sistemas Linux, pero rara vez se utiliza hoy en da.
El sistema de archivos ext3 fue la primera extensin de ext2 que incluy journaling.
Tena el mismo diseo en disco queext2, excepto por la existencia de un archivo de
journal.
El sistema de archivos ext4 se incluy por primera vez en la versin 2.6.19 del kernel, y
su designacin como experimental fue quitada en la versin 2.6.28. Incluy mejoras
significativas como el uso de extents para archivos largos, en vez de listas de bloques de
archivos.
Un extent es simplemente un grupo de bloques continuos. Su uso puede mejorar el
rendimiento de archivos de gran tamao y reducir la fragmentacin.
ext4 es el sistema de archivos por defecto en la mayora de las distribuciones
empresariales de Linux, aunque RHEL 7adopt recientemente XFS de forma
predeterminada.

14.2 Caracterstica de ext4


Existe una correspondencia cercana de caractersticas entre el VFS y los sistemas de
archivos ext2/3/4, debido a que cada uno ha sido diseado sobre la base del otro.
El tamao del bloque se selecciona cuando el sistema de archivos se construye; puede
ser de 512, 1024, 2048, o 4096 bytes. Por defecto, 4096 es usado con frecuencia para
discos duros, a menos que la particin sea muy pequea. A menos de que haya muchos
archivos pequeos, los tamaos grandes de bloque pueden ser ms eficientes en
trminos de minimizar accesos al disco duro.
El sistema de gestin de memoria del kernel Linux requiere que solamente un nmero
entero de bloques quepa en una pgina de memoria; por lo tanto no es posible tener
bloques de 8 KB en una plataforma x86 en donde las pginas de memoria son de 4KB de
tamao.
El nmero de inodos en el sistema de archivos tambin puede ser ajustado, lo cual podra
ahorrar espacio en disco.
Una caracterstica llamada reservacin de inodos consiste en reservar un nmero
considerable de inodos cuando un directorio se crea, con la idea de ser usados en el
futuro. Esto mejora el rendimiento debido a que cuando se crean nuevos archivos en el
directorio, ste tiene ya inodos asignados.
Si la ruta de un enlace simblico es menor que 60 caracteres, se crea un enlace simblico
rpido, el cual se almacena directamente en el inodo, obviando la necesidad de leer un
bloque de datos.
LFS201: Fundamentos de Administracin de Sistemas Linux

193

14.3 Diseo de ext4


Todos los campos son escritos a disco en orden little-endian, con excepcin del journal.
Los bloques de disco se dividen en grupos de bloques, cada uno de los cuales contiene
inodos y bloques de dato almacenados de forma adyacente, con lo que se reduce el
tiempo de acceso.
El diseo de un grupo de bloques estndar es simple. Para el grupo de bloques 0, los
primeros 1024 bytes no se usan (le ceden el espacio a sectores de booteo, etc). El
superbloque comenzar en el primer bloque, con excepcin del grupo de bloque 0. Luego
siguen los descriptores de grupo y un nmero de bloques GDT (Global Descriptor Table).
Estos son seguidos por el mapa de bits de bloques de datos, el mapa de bits de inodos, la
tabla de inodos y los bloques de datos.
Los bloques de datos son preasignados a archivos antes de que sean usados. As
cuando el tamao de un archivo se incrementa, se hace uso de espacio adyacente que ha
sido previamente reservado, por lo cual la fragmentacin se reduce.
El superbloque del sistema de archivos contiene campos de bit, los cuales son usados
para determinar si el sistema de archivos requiere o no verificacin cuando se monta por
primera vez durante la inicializacin del sistema. El estado puede ser:

clean: el sistema de archivos se desmont de forma limpia previamente

dirty: generalmente significa que est montado

unknown: no se desmont de forma limpia, como cuando hay un bloqueo o cada del
sistema

En los ltimos dos casos fsck ser ejecutado para verificar el sistema de archivos y
resolver cualquier problema antes de que sea montado.
Otros campos en el superbloque contienen informacin acerca de la ltima verificacin del
sistema de archivos, tanto la fecha como el nmero de montajes. Una verificacin
automtica es lanzada cuando los lmites ajustables exceden esos valores.
El primer bloque en el sistema de archivos es llamado bloque de arranque y est
reservado para el sector de arranque de la particin.

LFS201: Fundamentos de Administracin de Sistemas Linux

194

14.4 Grupos de bloques


Despus del bloque de arranque hay una serie de grupos de bloques, en donde cada
uno de ellos tiene el mismo tamao. El diseo de cada grupo de bloques se muestra en la
figura siguiente:
Figura 14.1: Diseo de los sistemas de archivos ext2/3/4

Superbloque

Descriptores
de Grupo

Mapa
de
Mapa de Tabla
de
Bits
de
Bits
de Inodos
Bloques de
Inodos
(n bloques)
Datos

Data
Bloques de
Datos
(n bloques)

El primer y segundo bloque son los mismos para cada grupo de bloques y comprenden
el Superbloque y los Descriptores de Grupo. Bajo circunstancias normales, slo los
bloques que estn en el primer grupo son utilizados por el kernel; las copias duplicadas
son referenciadas solamente cuando el sistema de archivo est siendo verificado. Si todo
est bien, el kernel los copia desde el primer grupo de bloques. Si hay algn problema
con las copias maestras, va al siguiente y as sucesivamente hasta que se encuentra uno
en buen estado y la estructura del sistema de archivos se reconstruye. Esta redundancia
hace que sea muy difcil que un sistema de archivos ext2/3/4 se estropee, siempre y
cuando las verificaciones del sistema de archivos se ejecuten de forma peridica.
En las versiones tempranas de la familia ext, cada grupo de bloques contena los
descriptores de grupos de cada uno de ellos, como tambin una copia del superbloque.
Debido a las optimizaciones actuales, no todos los grupos de bloques tienen una copia del
superbloque y de los descriptores de grupos. Para ver la situacin en el sistema usted
podra hacer lo siguiente:
$ sudo dumpe2fs /dev/sda1 | grep superblock
dumpe2fs 1.42.9 (28-Dec-2013)
Primary superblock at 0, Group descriptors at 1-4
Backup superblock at 32768, Group descriptors at 32769-32772
Backup superblock at 98304, Group descriptors at 98305-98308
Backup superblock at 163840, Group descriptors at 163841-163844
Backup superblock at 229376, Group descriptors at 229377-229380
Backup superblock at 294912, Group descriptors at 294913-294916
Backup superblock at 819200, Group descriptors at 819201-819204
Backup superblock at 884736, Group descriptors at 884737-884740
Backup superblock at 1605632, Group descriptors at 1605633-1605636
Backup superblock at 2654208, Group descriptors at 2654209-2654212
Backup superblock at 4096000, Group descriptors at 4096001-4096004

LFS201: Fundamentos de Administracin de Sistemas Linux

195

provea un nodo de dispositivo apropiado para que pueda ver las ubicaciones precisas.
Esto sucede cuando el sistema de archivos se crea con la opcin sparse_super, que es
el valor por defecto.
El nmero de grupos de bloques est limitado debido al hecho que el mapa de bits de
bloque - el cual identifica bloques usados y disponibles en el grupo - tiene que caber en
un bloque nico. Por lo tanto, si un bloque tiene un tamao de 4096 bytes, un grupo de
bloques no puede contener ms de 32 K bloques, o 128 MB. Si tomamos el mayor
tamao posible de un grupo de bloques, una particin de 10 GB tendra que tener al
menos 80 grupos de bloques.
El asignador de bloques trata de mantener los bloques de cada archivo en el mismo grupo
de bloques para disminuir los tiempos de bsqueda.

14.5 dumpe2fs
Como se ha demostrado, es posible usar la herramienta dumpe2fs para obtener
informacin del sistema de archivos; poniendo esto en prctica sobre una particin
obtenemos lo siguiente:
$ sudo dumpe2fs /dev/sda1
Filesystem volume name: RHEL7
Last mounted on:
/
Filesystem UUID:
9d6b5801-9c7e-4c17-9068-49923952338e
Filesystem magic number: 0xEF53
Filesystem revision #:
1 (dynamic)
Filesystem features:
has_journal ext_attr resize_inode dir_index
filetype needs_recovery extent 64bit flex_bg sparse_super
Filesystem flags:
signed_directory_hash
Default mount options:
user_xattr acl
Filesystem state:
clean
Errors behavior:
Continue
Filesystem OS type:
Linux
Inode count:
1908736
Block count:
7630592
Reserved block count:
381529
Free blocks:
5353383
Free inodes:
1682479
First block:
0
Block size:
4096
Fragment size:
4096
Group descriptor size:
64
Reserved GDT blocks:
1024
Blocks per group:
32768
Fragments per group:
32768
Inodes per group:
8192
Inode blocks per group: 512
Flex block group size:
16
Filesystem created:
Wed Sep 3 03:52:55 2014
Last mount time:
Fri Oct 24 09:18:58 2014
Last write time:
Fri Oct 24 09:18:58 2014
Mount count:
89
LFS201: Fundamentos de Administracin de Sistemas Linux

196

Maximum mount count:


Last checked:
Check interval:
Lifetime writes:
Reserved blocks uid:
Reserved blocks gid:
First inode:
Inode size:
Required extra isize:
Desired extra isize:
Journal inode:
First orphan inode:
Default directory hash:
Directory Hash Seed:
Journal backup:
Journal features:
Journal size:
Journal length:
Journal sequence:
Journal start:

-1
Wed Sep 3 03:52:55 2014
0 (<none>)
103 GB
0 (user root)
0 (group root)
11
256
28
28
8
396118
half_md4
e488c43e-241c-4014-91d8-69d3d6c7784
inode blocks
journal_incompat_revoke journal_64bit
128M
32768
0x00023592
16394

Group 0: (Blocks 0-32767) [ITABLE_ZEROED]


Checksum 0x2921, unused inodes 7738
Primary superblock at 0, Group descriptors at 1-4
Reserved GDT blocks at 5-1028
Block bitmap at 1029 (+1029), Inode bitmap at 1045 (+1045)
Inode table at 1061-1572 (+1061)
22880 free blocks, 8174 free inodes, 2 directories, 7738 unused
inodes
Free blocks: 9381-9672, 10180-32767
Free inodes: 19-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x473e, unused inodes 8192
Backup superblock at 32768, Group descriptors at 32769-32772
Reserved GDT blocks at 32773-33796
Block bitmap at 1030 (bg #0 + 1030), Inode bitmap at 1046 (bg #0 +
1046)
Inode table at 1573-2084 (bg #0 + 1573)
14918 free blocks, 8192 free inodes, 0 directories, 8192 unused
inodes
Free blocks: 33797, 33800-33919, 34108-34511, 34521-34559, 3478434815, 37053-38015, 38039- 38040, 38080-38527, 38529-38911, Free inodes:
8193-16384
.....
Group 196: (Blocks 6422528-6455295) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x946d, unused inodes 8192
Block bitmap at 6291460 (bg #192 + 4), Inode bitmap at 6291476 (bg
#192 + 20)
Inode table at 6293536-6294047 (bg #192 + 2080)
32768 free blocks, 8192 free inodes, 0 directories, 8192 unused
inodes
Free blocks: 6422528-6455295
Free inodes: 1605633-1613824
....
Group 232: (Blocks 7602176-7630591) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0xa174, unused inodes 8192
Block bitmap at 7340040 (bg #224 + 8), Inode bitmap at 7340056 (bg
LFS201: Fundamentos de Administracin de Sistemas Linux

197

#224 + 24)
Inode table at 7344160-7344671 (bg #224 + 4128)
28416 free blocks, 8192 free inodes, 0 directories, 8192 unused
inodes
Free blocks: 7602176-7630591
Free inodes: 1900545-1908736

14.6 tune2fs
tune2fs puede ser usado para cambiar parmetros del sistema de archivos.
Para cambiar el nmero mximo de montajes entre verificaciones del sistema de archivos
(max-mount-count):
$ sudo tune2fs -c 25 /dev/sda1

Para cambiar el intervalo de tiempo entre verificaciones (interval-between-checks):


$ sudo tune2fs -i 10 /dev/sda1

Para listar el contenido del superbloque incluyendo los valores actuales de los parmetros
que pueden ser modificados:
$ sudo tune2fs -l /dev/sda1

14.7 Informacin del superbloque


El superbloque contiene informacin global acerca del sistema de archivos, incluyendo:

Mount count (cuenta de montaje) y maximum mount count (cuenta mxima de


montaje). El parmetro mount count se incrementa cada vez que el disco es
montado satisfactoriamente y el valor corresponde al nmero de veces que esa
operacin se ha realizado desde el ltimo fsck. Tambin es posible forzar la
verificacin del sistema de archivos luego de 180 das (por defecto), u otro perodo
de tiempo que puede ser configurado con la herramienta tune2fs.
Tamao del bloque, el cual no puede ser mayor a una pgina de memoria. Se
configura a travs de mkfs.
Bloques por grupo.
Cuenta de bloques disponibles.
Cuenta de inodos disponibles.
ID del sistema operativo.

Como se coment anteriormente, el superbloque se almacena de forma redundante en


varios grupos de bloques.

LFS201: Fundamentos de Administracin de Sistemas Linux

198

14.8 Bloques de datos e inodos


El bloque de datos y el mapa de bits de inodos son bloques cuyos bits contienen 0 para
cada bloque o inodo libre y 1 para cada uno que est usado. Hay uno de cada uno de
estos mapas de bits por grupo de bloques.
La tabla de inodos contiene tantos bloques consecutivos como sea necesario para cubrir
el nmero de inodos en el grupo de bloques. Cada inodo requiere 128 bytes; por lo tanto,
un bloque de 4 KB puede contener 32 inodos.
Note que hay espacio reservado para cierta cantidad de informacin dependiente del
sistema operativo; diferentes SOs podran montar un sistema de archivos ext2/3/4, tal
como Linux puede montar muchos sistemas de archivos no nativos.
Tenga en cuenta que el nmero de inodo no se almacena en esta estructura en el disco;
su valor puede ser calculado rpidamente desde el nmero de grupo de bloque y el offset
de la tabla de inodo.
Los sistemas de archivos ext2 y ext3 no han incorporado an el uso de extents para
organizar archivos grandes. En vez de eso, el arreglo de punteros a bloques de
datos i_block[], de largo EXT2_N_BLOCKS=15, es descrito por el inodo. La forma en
que esto se maneja es algo compleja:

Los primeros 12 elementos en este arreglo apuntan a los primeros 12 bloques de


datos en el archivo.
El elemento 13avo apunta a un bloque que representa un arreglo de segundo orden
de nmeros de bloque; el 14avo a un arreglo de tercer orden y el 15avo a un arreglo
de cuarto orden.

Este algoritmo hace que el abordar archivos pequeos sea ms rpido, como es de
esperar. Por ejemplo, con un tamao de bloque de 4 KB, un archivo de 48 KB puede ser
abordado directamente. Un archivo de 2 MB requiere un proceso de segundo orden, uno
de 1 GB uno de tercer orden, uno de 4 GB uno de cuarto orden.

LFS201: Fundamentos de Administracin de Sistemas Linux

199

14.9 Mejoras del sistema de archivos ext4

El sistema de archivos ext4:


Es compatible con ext3 y ext2.
Incrementa el tamao mximo del sistema de archivos a 1 EB (desde 16 TB) y el
tamao mximo de un archivo a 16 TB (desde 2 TB). Estos lmites aparecen
cuando se usa un direccionamiento de 48 bit; direccionamiento completo de 64 bit
podra usarse en el futuro, pero hasta la fecha no hay una necesidad real de ello.
Incrementa de forma ilimitada el nmero mximo de subdirectorios, el cual estuvo
limitado a 32 K en ext3.
Divide archivos grandes en extents de la mxima longitud en vez de usar mapeo
de bloques indirecto. Esto puede mejorar el rendimiento de archivos grandes y
reducir la fragmentacin.
Utiliza asignacin multibloque, la cual puede asignar todo el espacio de una vez,
en vez de hacerlo de a un bloque. Adicionalmente, la asignacin demorada puede
incrementar el rendimiento tambin.
Puede preasignar espacio de disco para un archivo. El espacio asignado est
generalmente garantizado y es contiguo.
Usa allocate-on-flush, una tcnica de rendimiento la cual retrasa la asignacin de
bloques hasta que los datos son escritos en el disco.
Usa fsck rpido, el cual puede aumentar la velocidad de verificacin de un sistema
de archivos en un orden de magnitud o ms.
Usa checksums para el journal, lo cual mejora la confiabilidad. Esto tambin
puede evitar esperas de E/S durante el journaling, resultando en una ligera mejora
del rendimiento.
Usa timestamps mejoradas, medidas en nanosegundos.
Incluye soporte de snapshots.

Comprobacin de conocimientos 14.1

LFS201: Fundamentos de Administracin de Sistemas Linux

200

14.10 Laboratorio 14.1


Laboratorio 14.1: Desfragmentacin
Quienes recin conocen Linux suelen sorprenderse de que no se hable de herramientas de
desfragmentacin del sistema de archivos, debido a que tales programas son muy utilizados en el
mundo de Windows.
Sin embargo, los sistemas de archivos nativos en sistemas operativos tipo UNIX, incluyendo Linux,
tienden a no sufrir problemas serios de fragmentacin.
Esto se debe principalmente a que no tratan de poner archivos en las regiones ms internas del
disco, en donde el acceso es ms rpido. En vez de eso, dejan espacio libre a travs del disco, de tal
forma de que cuando un archivo va a ser creado, hay mejores posibilidades de que haya una regin
de bloques libres lo suficientemente grande como para contener el archivo completo, ya sea en
una o pocas partes.
En cuanto al hardware moderno, el concepto de regiones internas del disco no es tan claro debido
a los cambios que est experimentando la tecnologa; en cuanto a los dispositivos SSDs, la
defragmentacin podra acortar la vida til del almacenamiento, debido a que posee ciclos finitos
de lectura/borrado/escritura.
Adems, los sistemas de archivos con journaling ms nuevos (incluyendo ext4), trabajan con
extents (regiones contiguas grandes) por diseo.
Pese a lo anterior, existe una herramienta para desfragmentar sistemas de archivos ext4:
$ sudo e4defrag
Usage : e4defrag [-v] file...| directory...| device...
: e4defrag -c file...| directory...| device...
e4defrag es parte del paquete e2fsprogs y debera estar en todas las distribuciones modernas de
Linux, aunque no viene en RHEL 6, la cual se est quedando atrs. Las nicas dos opciones son las
siguientes:

-v: Muestra los detalles de la operacin.


-c: No haga nada realmente, slo analizar y reportar.

El argumento puede ser:

Un archivo
Un directorio
Un dispositivo completo

Ejemplos:
LFS201: Fundamentos de Administracin de Sistemas Linux

201

$ sudo e4defrag -c /var/log


Fragmented files>
1. /var/log/lastlog
2. /var/log/sa/sa24
3. /var/log/rhsm/rhsm.log
4. /var/log/messages
5. /var/log/Xorg.1.log.old

now/best
5/1
3/1
2/1
2/1
1/1

size/ext
9 KB
80 KB
142 KB
4590 KB
36 KB

Total/best extents
120/112
Average size per extent 220 KB
Fragmentation score 1 [0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This directory (/var/log) does not need defragmentation.
Done.
$ sudo e4defrag /var/log
ext4 defragmentation for directory(/var/log)
[2/152]/var/log/Xorg.2.log: 100% [ OK ]
[3/152]/var/log/Xorg.0.log.old: 100% [ OK ]
[4/152]/var/log/messages-20141019.gz: 100% [ OK ]
[5/152]/var/log/boot.log: 100% [ OK ]
[7/152]/var/log/cups/page_log-20140924.gz: 100% [ OK ]
[8/152]/var/log/cups/access_log-20141019.gz: 100% [ OK ]
[9/152]/var/log/cups/access_log: 100% [ OK ]
[10/152]/var/log/cups/error_log-20141018.gz: 100% [ OK ]
[11/152]/var/log/cups/error_log-20141019.gz: 100% [ OK ]
[12/152]/var/log/cups/access_log-20141018.gz: 100% [ OK ]
[14/152]/var/log/cups/page_log-20141018.gz: 100% [ OK ]
...
[152/152]/var/log/Xorg.1.log.old: 100% [ OK ]
Success:
Failure:

[ 112/152 ]
[ 40/152 ]

Ejecute e4defrag en varios archivos, directorios y dispositivos completos, siempre intentando con
-c primero.
Encontrar que generalmente los sistemas de archivos Linux tienden a necesitar defragmentacin
cuando estn cercanos a llenarse, sobre el 90 por ciento, o cuando son pequeos y tienen archivos
relativamente grandes, como sucede con las particiones usadas para boot.

LFS201: Fundamentos de Administracin de Sistemas Linux

202

14.10 Laboratorio 14.2


Laboratorio 14.2: Modificacin de parmetros del sistema de archivos con tune2fs

Vamos a modificar algunas propiedades de un sistema de archivos formateado con ext4. Esto no
requiere desmontar el sistema de archivos.
En el ejercicio de a continuacin puede trabajar con un archivo de imagen que puede crear de la
siguiente forma:
$ dd if=/dev/zero of=imagefile bs=1M count=1024
o puede reemplazar imagefile por /dev/sdaX , usando cualquier particin que contenga el sistema
de archivos que desea modificar.
1. Usando dumpe2fs obtenga informacin acerca del sistema de archivos del cual desea ajustar
las propiedades.
2. Determinar la configuracin para el conteo mximo de montaje luego del cual el sistema de
archivos ser forzado a verificacin y modifquelo a 30.
3. Configure el parmetro Check interval a tres semanas (la cantidad de tiempo luego del cual un
sistema de archivos es forzado a una verificacin).
4. Calcule el porcentaje de bloques reservados y luego reconfigrelo a 10%.

LFS201: Fundamentos de Administracin de Sistemas Linux

203

Solucin 14.2
1. $ dumpe2fs imagefile > dump_results
2. $ grep -i Mount count dump_results
Mount count:
0
Maximum mount count:
-1
$ sudo tune2fs -c 30 imagefile
$ grep -i Mount count dump_results
Mount count:
Maximum mount count:

0
30 3.

3. $ grep -i Check interval dump_results


Check interval:
0 (none)
$ sudo tune2fs -i 3w imagefile
$ grep -i Check interval dump_results
Check interval: 1814400 (3 weeks)
4. $ grep -i Block Count dump_results
Block count:
131072
Reserved block count:
6553
$ echo scale=4; 6553/131072 | bc
.0499
$ sudo tune2fs -m 10 imagefile
$ tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 10% (13107 blocks)
$ grep -i Block Count dump_results
Block count:
131072
Reserved block count:
13107

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Describir las caractersticas principales del sistemas de archivos ext4y la forma en


la que ocupa el disco.
Explicar los conceptos de grupos de bloques, superbloque, bloques de
datos e inodos.
Usar las herramientas dumpe2fs y tune2fs.
Enumerar las mejoras del sistema de archivos ext4.

LFS201: Fundamentos de Administracin de Sistemas Linux

204

Captulo 15. Los sistemas de archivos XFS y btrfs


Los sistemas de archivos XFS y btrfs han surgido como desafos importantes a la
dominacin de ext4 en las distribuciones empresariales de Linux. Estos sistemas de
archivos de nueva generacin tienen capacidades robustas en relacin a manejar
tamaos grandes, abarcan mltiples volmenes fsicos y lgicos, como tambin mtricas
de rendimiento.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Describir el sistema de archivos XFS.


Mantener el sistema de archivos XFS.
Describir el sistema de archivos btrfs.

LFS201: Fundamentos de Administracin de Sistemas Linux

205

15.1 Caractersticas de XFS


XFS fue creado y diseado originalmente por SGI y usado en el sistema operativo IRIX, y
luego portado a Linux. Fue diseado explcitamente para lidiar con conjuntos de datos
grandes como tambin para manejar tareas en paralelo de E/S muy eficientemente.
Este puede manejar:

Hasta 16 EB (exabytes) para el total del sistema de archivos


Hasta 8 EB para un archivo individual

El alto rendimiento es uno de los elementos clave del diseo de XFS, el cual implementa
mtodos para:

Usar E/S de DMA (Direct Memory Access)


Garantizar una tasa de E/S
Ajustar tamao de banda para igualar los dispositivos RAID o LVM subyacentes.

En contraste a los sistemas de archivos tradicionales, XFS puede manejar la informacin


de las cuotas con journaling. Esto conduce a una reduccin del tiempo de recuperacin
cuando un sistema de archivos que tiene cuotas se desmonta de forma fallida. Adems, el
journal puede estar en un dispositivo externo.
Al igual que otros sistemas de archivos de UNIX y Linux, XFS soporta atributos
extendidos.

15.2 Mantenimiento del sistema de archivos XFS


El realizar mantenimiento a un sistema de archivos XFS se facilita por el hecho de que la
mayor parte de este tipo de tareas puede ser llevada a cabo en lnea, es decir, con el
sistema de archivos montado. Estas incluyen:

Defragmentar
Ampliar
Realizar respaldo/Restaurar

Para crear respaldos y restaurar se usan las siguientes herramientas nativas de XFS:

xfsdump
xfsrestore

los cuales pueden ser pausados de forma conveniente y retomados luego. Debido a que
estos programas son multihebra, los respaldos y restauraciones de XFS pueden ser
llevadas a cabo muy rpidamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

206

Mientras que XFS no soporta directamente snapshots de hardware o software, la


herramienta xfs-freeze puede ser usada para poner el sistema de archivos en reposo,
permitiendo a algn programa de snapshot trabajar en el dispositivo subyacente. Las
herramientas LVM de Linux usan xfs-freeze automticamente para detener la actividad
del sistema de archivos para tomar snapshots.
XFS soporta cuotas y los comandos tradicionales de cuota pueden usarse para manipular
las cuotas por sistema de archivos en un volumen XFS. Sin embargo, si usa el comando
xfs-quota puede hacer uso de las cuotas por directorio que XFS soporta.

15.3 El sistema de archivos btrfs


Tanto desarrolladores como usuarios de Linux con sistemas de alto rendimiento y alta
capacidad o necesidades especficas, estn siguiendo el desarrollo e implementacin
gradual del sistema de archivos btrfs, el cual fue creado por Chris Mason. El nombre
viene de sistema de archivos B-tree. La documentacin completa puede ser encontrada
en http://btrfs.wiki.kernel.org/index.php/Main_Page .
btrfs apunta a resolver la falta de pooling, snapshots, checksums e integral multi-device
spanning en otros sistemas de archivos tales como ext4. Esas caractersticas pueden ser
cruciales para que Linux escale a configuraciones de almacenamiento ms grande de
tipo empresarial.
Mientras que btrfs ha estado en el mainline kernel (versin de mantenimiento) desde
2.6.29, ha sido considerado como experimental, aunque unos pocos vendedores lo han
usado en productos nuevos.
Una de las caractersticas principales es la habilidad de tomar snapshots frecuentes de
sistemas de archivos completos, o de subvolmenes de sistemas de archivos en muy
poco tiempo. Debido a que btrfs hace amplio uso de la tcnica COW (Copy on Write), un
snapshot no involucra mucho espacio inicial para bloques de datos o cualquier otra
actividad E/S, con la excepcin de algunos metadatos que requieren ser actualizados.
Es posible revertir el sistema a un estado descrito por snapshots anteriores e incluso
hacer que el kernel arranque una snapshot anterior del sistema de archivos raz .
btrfs mantiene su propio framework interno para agregar o remover particiones nuevas
y/o medios fsicos a sistemas de archivos existentes, de forma similar a como lo
hace LVM (Logical Volume Management).
Algunas tareas deben ser terminadas antes de que btrfs est listo para el trabajo diario
en sistemas de archivos crticos. Para revisar la historia de desarrollo de btrfs y la
evolucin que se espera revise http://lwn.net/Articles/575841.

LFS201: Fundamentos de Administracin de Sistemas Linux

207

Comprobacin de conocimientos 15.1

15.4 Laboratorio 15.1


Laboratorio 15.1: Ms informacin acerca de xfs
No tenemos un ejercicio de laboratorio detallado para xfs; muchos sistemas todava no tienen
instalados los mdulos del kernel y herramientas de usuario importantes. Sin embargo, si su kernel
Linux y su distribucin lo soportan, puede crear un sistema de archivos fcilmente con mkfs -t xfs.
Puede encontrar informacin relacionada a las herramientas xfs con:
$ man -k xfs
attr (1)
filesystems (5)
fs (5)
fsck.xfs (8)
fsfreeze (8)
mkfs.xfs (8)
pmdaxfs (1)
xfs (5)
xfs_admin (8)
xfs_bmap (8)
xfs_copy (8)
filesystem xfs_db (8)
xfs_estimate (8)
xfs_freeze (8)
xfs_fsr (8)
xfs_growfs (8)
xfs_info (8)
xfs_io (8)
xfs_logprint (8)
xfs_mdrestore (8)
xfs_metadump (8)
xfs_mkfile (8)
xfs_ncheck (8)

- extended attributes on XFS filesystem objects


- Linux file-system types: minix, ext, ext2, ext3, ext4,...
- Linux file-system types: minix, ext, ext2, ext3, ext4,...
- do nothing, successfully
- suspend access to a filesystem (Linux Ext3/4, ReiserFS...
- construct an XFS filesystem
- XFS filesystem performance metrics domain agent (PMDA)
- layout of the XFS filesystem
- change parameters of an XFS filesystem
- print block mapping for an XFS file
- copy the contents of an XFS
- debug an XFS filesystem
- estimate the space that an XFS filesystem will take
- suspend access to an XFS filesystem
- filesystem reorganizer for XFS
- expand an XFS filesystem
- expand an XFS filesystem
- debug the I/O path of an XFS filesystem
- print the log of an XFS filesystem
- restores an XFS metadump image to a filesystem image
- copy XFS filesystem metadata to a file
- create an XFS file
- generate pathnames from i-numbers for XFS

LFS201: Fundamentos de Administracin de Sistemas Linux

208

xfs_quota (8)
xfs_repair (8)
xfs_rtcp (8)
xfsdump (8)
xfsinvutil (8)
xfsrestore (8)
xqmstats (8)

- manage use of quota on XFS filesystems


- repair an XFS filesystem
- XFS realtime copy command
- XFS filesystem incremental dump utility
- xfsdump inventory database checking and pruning utility
- XFS filesystem incremental restore utility
- Display XFS quota manager statistics from /proc

Lea acerca de estos programas y vea si puede realizar algunas operaciones con el sistema de
archivos que cre.

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Describir el sistema de archivos XFS.


Mantener el sistema de archivos XFS.
Describir el sistema de archivos btrfs.

LFS201: Fundamentos de Administracin de Sistemas Linux

209

Captulo 16. Logical Volume Manager (LVM)


LVM permite tener un sistema de archivos lgico sobre mltiples volmenes fsicos y
particiones, la cual al usarla se presenta como una sola particin. Cuando se usa LVM es
muy fcil contraer y expandir los sistemas de archivos segn se necesite; sin embargo,
tales operaciones son difciles de realizar en particiones fsicas fijas.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar los conceptos detrs de LVM.


Crear volmenes lgicos.
Visualizar volmenes lgicos.
Redimensionar volmenes lgicos.
Usar snapshots de LVM.

LFS201: Fundamentos de Administracin de Sistemas Linux

210

16.1 LVM
LVM (Logical Volume Manager) separa una particin virtual en varias partes, cada de una
de las cuales puede estar en distintas particiones y/o discos.
Hay muchas ventajas al usar LVM; en particular, se torna bastante fcil el modificar el
tamao de las particiones lgicas y sistemas de archivos, agregar ms espacio de
almacenamiento y reorganizarlo.
Uno o ms volmenes fsicos (particiones de disco) estn agrupadas en un grupo de
volmenes. Luego el grupo de volumen es subdividido en volmenes lgicos, lo cual
imita particiones de disco fsicas y pueden ser formateadas para contener sistemas de
archivos.
Hay una variedad de herramientas de lnea de comandos para crear, eliminar,
redimensionar, etc., volmenes fsicos y lgicos. La herramienta grfica system-configlvm se usa en la mayora de distribuciones de Linux. Sin embargo, en RHEL 7 ya no est
soportada y no hay ninguna herramienta grfica que sea confiable con los cambios ms
recientes de los sistemas de archivos. Afortunadamente, las herramientas de la lnea de
comandos no son difciles de usar y son ms flexibles.
LVM tiene un impacto en el rendimiento. Hay un costo adicional definido que proviene de
la sobrecarga de la capa de LVM. Sin embargo, an en sistemas sin RAID, si se
usa striping (dividir los datos en ms de un disco) es posible lograr algunas mejoras de
paralelizacin.

LFS201: Fundamentos de Administracin de Sistemas Linux

211

16.2 LVM y RAID


Al igual que RAID (lo cual discutiremos en el prximo captulo), el uso de volmenes
lgicos es un mecanismo para crear sistemas de archivos que pueden abarcar ms de un
disco fsico.
Para crear volmenes lgicos primero se ponen todos los dispositivos en un pool grande
de espacio de disco (el grupo de volmenes). Luego de eso, se asigna espacio desde el
pool con el cual se crea un volumen lgico.
Los volmenes lgicos tienen caractersticas similares a los dispositivos de RAID. De
hecho pueden estar construidos sobre un dispositivo RAID. Esto le dara al volumen
lgico la redundancia de un dispositivo RAID con la escalabilidad de LVM.
LVM tiene mejor escalabilidad que RAID: los volmenes lgicos pueden ser fcilmente
redimensionados, tanto para agrandarlos como reducirlos. Si se requiere ms espacio, es
posible agregar dispositivos adicionales en cualquier momento.

16.3 Volmenes y Grupos de volmenes


Las particiones son convertidas a volmenes fsicos y mltiples volmenes fsicos se
agrupan en grupos de volmenes; puede haber ms de un grupo de volmenes en el
sistema.
El espacio en el grupo de volmenes se divida en extents, los cuales son por defecto de
4 MB de tamao, pero puede ser modificado en el momento de la asignacin.
Hay una serie de herramientas de lnea de comandos que se usan para crear y manipular
grupos de volmenes, cuyos nombres comienzan siempre con vg. Algunas de estas
utilidades son:

vgcreate: Crea grupos de volmenes.


vgextend: Agrega volmenes fsicos a un grupo de volmenes.
vgreduce: Reduce un grupo de volmenes.

Las herramientas que agregan o quitan particiones fsicas de un grupo de volmenes


comienzan con pv e incluyen:

pvcreate: Convierte una particin en un volumen fsico.


pvdisplay: Muestra los volmenes fsicos en uso.
pvmove: Mueve los datos desde un volumen fsico a otro, dentro del mismo grupo
de volmenes; esto puede ser requerido si un disco o una particin va a ser
eliminada por alguna razn. A continuacin podra ejecutarse:
pvremove: Elimina una particin desde un volumen fsico.

Para obtener una lista completa de las herramientas LVM ejecute man lvm.

LFS201: Fundamentos de Administracin de Sistemas Linux

212

16.4 Herramientas de volmenes lgicos


Hay una serie de herramientas que manipulan volmenes lgicos. Como era de esperar,
todos comienzan con lv. Revisaremos los ms utilizados, pero una lista corta puede ser
obtenida con:
$ ls -lF /sbin/lv*
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lvm*
-r-xr-xr-x.
lrwxrwxrwx.
-r-xr-xr-x.
lrwxrwxrwx.
lvm*
-r-xr-xr-x.
-r-xr-xr-x.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.
lrwxrwxrwx.

1
1
1
1
1

root
root
root
root
root

root
root
root
root
root

3
3
3
3

1
1
1
1

root
root
root
root

root 1196016 Mar 26 2014


root
3 Sep 3 03:58
root
7230 Mar 26 2014
root
3 Sep 3 03:58

1
1
1
1
1
1
1
1
1
1

root
root
root
root
root
root
root
root
root
root

root
root
root
root
root
root
root
root
root
root

7412
48728
3
3
3
3
3
3
3
3

Sep
Sep
Sep
Sep

3
3
3
3
3

03:58 /usr/sbin/lvchange -> lvm*


03:58 /usr/sbin/lvconvert -> lvm*
03:58 /usr/sbin/lvcreate -> lvm*
03:58 /usr/sbin/lvdisplay -> lvm*
Sep 3 03:58 /usr/sbin/lvextend ->
/usr/sbin/lvm*
/usr/sbin/lvmchange -> lvm*
/usr/sbin/lvmconf*
/usr/sbin/lvmdiskscan ->

Mar 26 2014 /usr/sbin/lvmdump*


Mar 26 2014 /usr/sbin/lvmetad*
Sep 3 03:58 /usr/sbin/lvmsadc -> lvm*
Sep 3 03:58 /usr/sbin/lvmsar -> lvm*
Sep 3 03:58 /usr/sbin/lvreduce -> lvm*
Sep 3 03:58 /usr/sbin/lvremove -> lvm*
Sep 3 03:58 /usr/sbin/lvrename -> lvm*
Sep 3 03:58 /usr/sbin/lvresize -> lvm*
Sep 3 03:58 /usr/sbin/lvs -> lvm*
Sep 3 03:58 /usr/sbin/lvscan -> lvm*

Nota:

Estas herramientas estn en /sbin y no en /usr/sbin , ya que pueden ser


necesitados para arrancar o reparar y recuperar un sistema.

La mayora de ellas estn enlazadas simblicamente a lvm, un programa al estilo


navaja Suiza que realiza todo el trabajo y que sabe qu debe hacer basado en el
nombre por el cual es invocado. Esto tambin es vlido para la mayora de las
herramientas pv* y vg*, lo cual se puede comprobar fcilmente.

LFS201: Fundamentos de Administracin de Sistemas Linux

213

16.5 Creacin de volmenes lgicos


lvcreate asigna volmenes lgicos desde los grupos de volmenes. El tamao puede
especificarse ya sea en bytes o nmero de extents (recuerde que son de 4 MB por
defecto). Los nombres son a eleccin.
lvdisplay informa acerca de los volmenes lgicos disponibles.
Los sistemas de archivos se localizan en los volmenes lgicos y se formatean como de
costumbre, con mkfs.
Si se comienza con un grupo de volmenes nuevo, los pasos asociados a la configuracin
y uso de un volumen lgico nuevo son los siguientes:
1.
2.
3.
4.
5.

Crear particiones en las unidades de disco (escriba 8e en fdisk)


Crear volmenes fsicos desde las particiones.
Crear el grupo de volmenes.
Asignar volmenes lgicos desde el grupo de volmenes.
Montar los volmenes lgicos (y actualizar /etc/fstab segn sea necesario).

Por ejemplo, asumiendo que uno ya cre las particiones /dev/sdb1 y/dev/sdc1 , y que les
asign un tipo 8e:
$
$
$
$
$
$
$
$

sudo pvcreate /dev/sdb1


sudo pvcreate /dev/sdc1
sudo vgcreate -s 16M vg /dev/sdb1
sudo vgextend vg /dev/sdc1
sudo lvcreate -L 50G -n mylvm vg
sudo mkfs -t ext4 /dev/vg/mylvm
mkdir /mylvm
sudo mount /dev/vg/mylvm /mylvm

Asegrese de agregar la lnea


/dev/vg/mylvm /mylvm ext4 defaults 0 0
a /etc/fstab para que el punto de montaje sea persistente.

LFS201: Fundamentos de Administracin de Sistemas Linux

214

16.6 Desplegar informacin de los volmenes lgicos


Los siguientes programas de lnea de comandos estn disponibles para desplegar
informacin acerca de LVM:

pvdisplay muestra los volmenes fsicos


$ sudo pvdisplay
$ sudo pvdisplay /dev/sda5

vgdisplay muestra los grupos de volmenes


$ sudo vgdisplay
$ sudo vgdisplay /dev/vg0

lvdisplay muestra los volmenes lgicos


$ sudo lvdisplay
$ sudo lvdisplay /dev/vg0/lvm1

Si no se proveen argumentos, estas herramientas desplegarn todos los volmenes


fsicos, grupos de volmenes o volmenes lgicos, segn corresponda.

16.7 Redimensionar volmenes lgicos


Una de las grandes ventajas de usar LVM es que es fcil y rpido cambiar el tamao de
un volumen lgico, especialmente cuando se intenta hacer lo mismo con una particin
fsica que ya contiene un sistema de archivos.
Cuando se hace esto, los extents pueden agregarse o substraerse desde el volumen
lgico, y pueden provenir desde cualquier parte en el grupo de volmenes; de hecho no
necesitan ser de regiones fsicas contiguas del disco.
Si el volumen contiene un sistema de archivos, expandirlo o contraerlo es una operacin
completamente diferente que cambiar el tamao del volumen:
Cuando se expande un volumen lgico que tiene un sistema de archivos, se debe
expandir primero el volumen y luego el sistema de archivos.
Cuando se contrae un volumen lgico que contiene un sistema de archivos,
primero se debe contraer el sistema de archivos y luego el volumen.
El sistema de archivos no puede estar montado mientras se reduce el tamao del mismo.
Sin embargo, algunos sistemas de archivos permiten ser expandidos mientras estn
montados.
Obviamente, las herramientas para modificar el tamao del sistema de archivos dependen
del tipo del mismo; para ext4el programa es resize2fs.

LFS201: Fundamentos de Administracin de Sistemas Linux

215

16.8 Ejemplos de rendimiento


Para extender un volumen lgico con un sistema de archivos ext4:
$
$
$
$

sudo
sudo
sudo
sudo

umount /mylvm
lvextend -L +500M /dev/vg/mylvm
resize2fs /dev/vg/mylvm
mount /dev/vg/mylvm

donde el signo ms indica que se est agregando espacio.


Para reducir el sistema de archivos:
$
$
$
$
$

sudo
sudo
sudo
sudo
sudo

umount /mylvm
fsck -f /dev/vg/mylvm
resize2fs /dev/vg/mylvm 200M
lvreduce -L 200M /dev/vg/mylvm
mount /dev/vg/mylvm

Si usted tiene una versin reciente de las herramientas lvm, puede realizar estas
operaciones en un paso en vez de dos, usando la opcin -r, como se muestra a
continuacin:
$ sudo
$ sudo lvextend -r -L +100M /dev/vg/mylvm
$ sudo lvreduce -r -L -100M /dev/vg/mylvm

en donde las cantidades usan el signo ms o menos para indicar el cambio requerido.
Esto usa la herramienta subyacente fsadm, la cual puede redimensionar cualquier tipo de
sistema de archivos para cual cual el sistema operativo tenga soporte. Le recomendamos
leer la pgina man de fsadm.
Es posible reducir un grupo de volmenes de la siguiente forma:
$ sudo pvmove /dev/sdc1
$ sudo vgreduce vg /dev/sdc1

16.9 Snapshots de LVM


Las snapshots LVM crean una copia exacta de un volumen lgico.
Son muy tiles para realizar respaldos, probar aplicaciones e implementar VMs (mquinas
virtuales). El estado original de la snapshot se mantiene, como por ejemplo el mapa de
bloques.
Los snapshots usan espacio para almacenar las diferencias (conocidas como deltas):

Cuando el volumen lgico original cambia, los bloques de datos originales son
copiados a la snapshot.
Si la informacin se agrega directamente al snapshot, se almacena ah solamente.
LFS201: Fundamentos de Administracin de Sistemas Linux

216

Para crear una snapshot de un volumen lgico existente:


$ sudo lvcreate -l 128 -s -n mysnap /dev/vg/mylvm

Para crear un punto de montaje y montar la snapshot:


$ mkdir /mysnap
$ mount -o ro /dev/vg/mysnap /mysnap

Para desmontar/usar la snapshot y luego removerla:


$ sudo umount /mysnap
$ sudo lvremove /dev/vg/mysnap

Asegrese siempre de remover la snapshot cuando va a trabajar con ella. Si no remueve


la snapshot y esta se llena a causa de los cambios, ser deshabilitada automticamente.
Una snapshot con el tamao del original nunca se desbordar.

Comprobacin de conocimientos 16.1

LFS201: Fundamentos de Administracin de Sistemas Linux

217

Comprobacin de conocimientos 16.2

16.10 Laboratorio 16.1


Laboratorio 16.1: Volmenes lgicos
Vamos a crear un volumen lgico usando dos particiones de 250 MB. Supondremos que tiene
espacio fsico disponible en disco para particionar.
1. Crear dos particiones de 250 MB de tipo volumen lgico (8e).
2. Convertir las particiones a volmenes fsicos.
3. Crear un grupo de volmenes llamado myvg y agregue los dos volmenes fsicos al mismo.
Use el tamao por defecto para el extent.
4. Asignar un volumen lgico de 300 MB, llamado mylvm desde el grupo de volmenes myvg.
5. Formatear y montar el volumen lgico mylvm en /mylvm
6. Use lvdisplay para ver informacin del volumen lgico.
7. Extienda el volumen lgico y el sistema de archivos correspondiente a 350 MB.

LFS201: Fundamentos de Administracin de Sistemas Linux

218

Solucin 16.1
1. Ejecute:
$ sudo fdisk /dev/sda
use el disco duro que sea apropiado y cree las dos particiones. Estando en fdisk escriba t para
configurar el tipo de particin a 8e. Si bien es cierto no es requerido definir el tipo, es buena
idea hacerlo para evitar confusiones. Use w para reescribir la tabla de particin y salga. Luego
haga.
$ sudo partprobe -s
o reinicie para asegurarse que las particiones nuevas tomen efecto.
2. Asumiendo que las particiones nuevas son /dev/sdaX y /dev/sdaY:
$ sudo pvcreate /dev/sdaX
$ sudo pvcreate /dev/sdaY
$ sudo pvdisplay
3. $ sudo vgcreate myvg /dev/sdaX /dev/sdaY
$ sudo vgdisplay
4. $ sudo lvcreate -L 300M -n mylvm myvg
$ sudo lvdisplay
5. $ sudo mkfs.ext4 /dev/myvg/mylvm
$ mkdir /mylvm
$ sudo mount /dev/myvg/mylvm /mylvm
Si desea que el montaje sea persistente, edite /etc/fstab e incluya la lnea:
/dev/myvg/mylvm /mylvm ext4 defaults 0 0
6. $ sudo lvdisplay
7. $ df -h
$ sudo lvextend -L 350M /dev/myvg/mylvm
$ sudo resize2fs /dev/myvg/mylvm
$ df -h
or
$ sudo lvextend -r -L +50M /dev/myvg/mylvm

LFS201: Fundamentos de Administracin de Sistemas Linux

219

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Explicar los conceptos detrs de LVM.


Crear volmenes lgicos.
Visualizar volmenes lgicos.
Redimensionar volmenes lgicos.
Usar snapshots de LVM.

LFS201: Fundamentos de Administracin de Sistemas Linux

220

Captulo 17. RAID


Al usar RAID se reparte la actividad de E/S en mltiples discos fsicos en vez de slo uno.
El propsito de esto es mejorar la integridad y capacidad de recuperacin en caso de
falla, como tambin aumentar el rendimiento cuando es usado con dispositivos modernos
de almacenamiento. Hay diversos niveles de RAID, los cuales varan en sus fortalezas
relativas de seguridad, rendimiento, complejidad y costo.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar el concepto de RAID.


Proveer un resumen de los niveles de RAID.
Configurar un dispositivo RAID usando los pasos esenciales entregados.
Monitorear dispositivos RAID de mltiples maneras.
Usar discos de reserva (hot spares).

LFS201: Fundamentos de Administracin de Sistemas Linux

221

17.1 RAID
RAID (Redundant Array of Independent Disks) reparte la carga de E/S en mltiples
discos. Esto realmente puede incrementar el rendimiento en interfaces de controladoras
de disco modernas, tales como SCSI, las cuales pueden realizar el trabajo en paralelo, de
forma eficiente.
RAID puede ser implementado ya sea en software (es una parte madura del kernel Linux)
o en hardware. Si su hardware de RAID es conocido por tener una buena calidad, podra
ser ms eficiente que usar RAID de software. En una implementacin de hardware, el
sistema operativo no est consciente de que est usando RAID, esto es transparente. Por
ejemplo, tres discos duros de 512 GB (dos para datos, uno para paridad) configurados
con RAID-5, se vern como un disco nico de 1 TB.
Por otro lado, una desventaja de usar RAID de hardware es que si la controladora del
disco falla, debe ser reemplazado por una compatible, la cual puede no ser fcil de
obtener en todos los casos. Cuando se usa RAID de software, los mismos discos pueden
conectarse y funcionar con cualquiera controladora de disco. Tales consideraciones
pueden ser relevantes para hardware de gama media y baja.
Tres caractersticas esenciales de RAID son:

mirroring (espejamiento): escribe los mismos datos en ms de un disco.


striping (divisin): divide o reparte los datos en ms de un disco.
parity (paridad): datos extra son almacenados para permitir la deteccin y reparacin
de problemas, proveyendo tolerancia a fallos.

Por lo tanto el uso de RAID puede mejorar tanto el rendimiento y fiabilidad.


Uno de los principales propsitos de RAID es crear un sistema de archivos el cual se
reparte en ms de un disco. Esto nos permite crear crear sistemas de archivos que son
ms grandes que cualquier dispositivo nico. Los dispositivos RAID son creados
generalmente combinando particiones de diferentes discos juntos.
Otra ventaja de los dispositivos RAID es la habilidad de proveer mejor rendimiento,
redundancia o ambos. Striping provee mejor rendimiento al repartir la informacin sobre
mltiples dispositivos, de tal forma que la escritura simultnea es posible. Mirroring o
espejamiento escribe la misma informacin en mltiples discos proveyendo una mejor
redundancia.
mdadm se usa para crear y administrar dispositivos RAID.
Una vez creado, el nombre del arreglo /dev/mdX puede ser usado como cualquier otro
dispositivo, tal como/dev/sda1.

LFS201: Fundamentos de Administracin de Sistemas Linux

222

17.2 Niveles de RAID


Existe una serie de especificaciones de RAID de complejidad y uso creciente. Los ms
comnmente conocidos son los niveles 0, 1 y 5.

RAID 0 usa striping solamente. Los datos se reparten a travs de discos ltiples.
Sin embargo, a pesar del nombre, no hay redundancia y no hay estabilidad o
capacidades de recuperacin. De hecho, si cualquier disco falla la informacin se
perder. Pero el rendimiento puede ser mejorada significativamente debido a la
paralelizacin de tareas de E/S.
RAID 1 usa mirroring solamente; cada disco tiene un duplicado, lo cual es bueno
para la recuperacin de los datos. Se requieren al menos dos discos.
RAID 5 usa una banda de paridad de rotacin; si una unidad de disco falla, no se
producir una prdida de datos, solamente se reducir el rendimiento. Tienen que
haber al menos 3 discos.
RAID 6 tiene discos con stripping y paridad dual; puede soportar la prdida de dos
discos y requiere al menos 4. Debido a que RAID 5 puede imponer un estrs
significante sobre los discos, lo cual puede conducir a fallas durante el proceso de
recuperacin, RAID 6 se ha vuelto ms importante.
RAID 10 es un set de datos con mirroring y striping. Se necesitan al menos 4
discos.

Como regla general, el agregar ms discos mejora el rendimiento.

17.3 Configuracin de RAID de software


Los pasos esenciales para configurar un dispositivo de RAID de software son:

Crear las particiones en cada disco (teclee fd en fdisk)


Crear el dispositivo RAID con mdadm
Formatear el dispositivo RAID
Agregar el dispositivo a /etc/fstab
Montar el dispositivo RAID
Capturar detalles del RAID para asegurar la persistencia

El comando:
$ sudo mdadm -S

se usa para detener/desactivar el RAID.

LFS201: Fundamentos de Administracin de Sistemas Linux

223

Por ejemplo:
Crear
primero
dos
particiones
de
tipo fd en
los
discos
(digamos /dev/sdbX y /dev/sdcX) usandofdisk en cada una de ellas:

sdb and sdc

$ sudo fdisk /dev/sdb


$ sudo fdisk /dev/sdc

Entonces configure el arreglo, dele formato, agrguelo a la configuracin y mntelo:


$ sudo mdadmcreate /dev/md0 --level=1 --raid-disks=2
/dev/sdcX
$ sudo mkfs.ext4 /dev/md0
$ sudo bash -c mdadmdetailscan >> /etc/mdadm.conf
$ sudo mkdir /myraid
$ sudo mount /dev/md0 /myraid

/dev/sdbX

Asegrese de agregar una lnea en /etc/fstab para el punto de montaje.


/dev/md0

/myraid

ext4

defaults 0 0

Puede examinar /proc/mdstat para ver el estado del RAID, tal como se muestra aqu:
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb8[1] sdc7[0]
---------- 521984 blocks [2/2]
unused devices: <none>

Use lo siguiente para detener el dispositivo RAID:


$ sudo mdadm -S /dev/md0

17.4 Monitoreo de RAID


Usted puede monitorear dispositivos RAID de diversas formas:
$ sudo mdadmdetail /dev/md0
$ cat /proc/mdstat

Tambin es posible usar mdmonitor, el cual requiere configurar /etc/mdadm.conf. El


siguiente comando mostrar el estado actual del dispositivo RAID /dev/mdX:
$ sudo mdadmdetail /dev/mdX

Otra forma de hacerlo es examinar el sistema de archivos /proc:


$ cat /proc/mdstat

LFS201: Fundamentos de Administracin de Sistemas Linux

224

mostrar el estado de todos los dispositivos RAID en el sistema.


Tambin
puede
darle
el
siguiente
uso
al
servicio mdmonitor,
editando /etc/mdadm.conf y agregando una lnea como la siguiente:
MAILADDR eddie@haskell.com

lo anterior le enviar un email a eddie@haskell.com cuando un dispositivo RAID est


experimentando algn problema, tal como un arreglo que falla al iniciar o que cae en un
estado degradado de funcionamiento. Lo puede habilitar con:
$ sudo service mdmonitor start

y asegrese que va a iniciar en el arranque con:


$ sudo chkconfig mdmonitor on

Nota: En sistemas Ubuntu el servicio se llama mdadm en vez de mdmonitor.

17.5 Discos de reserva de RAID


Una de las cosas importantes que provee RAID es redundancia. Para asegurar que
cualquier reduccin en esa redundancia es resuelta lo antes posible, se usa un disco de
reserva.
Para crear un disco de reserva cuando se est creando el arreglo RAID:
$ sudo mdadmcreate /dev/md0 -l 5 -n3 -x 1 /dev/sda8 /dev/sda9 /dev/sda10
/dev/sda11

La opcin -x 1 le indica a mdadm que use un dispositivo de reserva. Tenga en cuenta


que un disco de reserva tambin puede ser agregado ms tarde.
El comando:
$ sudo mdadmfail /dev/md0 /dev/sdb2

probar la redundancia y el disco de de reserva de su arreglo.


Para restaurar la unidad probada o un disco nuevo en caso de una falla legtima, primero
remueva el miembro defectuoso y luego agregue el miembro nuevo, como se muestra a
continuacin:
$ sudo mdadmremove /dev/md0 /dev/sdb2
$ sudo mdadmadd /dev/md0 /dev/sde2

LFS201: Fundamentos de Administracin de Sistemas Linux

225

Comprobacin de conocimientos 17.1

Comprobacin de conocimientos 17.2

LFS201: Fundamentos de Administracin de Sistemas Linux

226

17.6 Laboratorio 17.1


Laboratorio 17.1: Creacin de un dispositivo RAID
Normalmente cuando se crea un dispositivo RAID, deberamos usar particiones en discos
separados. Sin embargo, en este ejercicio probablemente no vamos a disponer de tal hardware.
Por lo tanto vamos a necesitar dos particiones en el mismo disco, o podemos usar particiones LVM
solo para propsitos de demostracin. Note que no podemos usar archivos de imgenes y
loopback para este ejercicio.
El proceso ser el mismo si las particiones estn en un disco o en varios. Aunque obviamente hay
pocas razones para crear un RAID en un disco solamente.
1. Cree dos particiones de 200 MB de tipo raid (fd), ya sea en su disco duro, usando fdisk, o con
LVM.
2. Cree un RAID 1 y use /dev/md0 para el dispositivo. Use las dos particiones para tal efecto.
3. Formatee el dispositivo RAID con sistema de archivos ext4. Luego mntelo en /myraid y
configure el punto de montaje de forma persistente.
4. Ponga la informacin acerca de /dev/md0 en el archivo /etc/mdadm.conf usando mdadm.
Dependiendo de su distribucin, este archivo podra no existir previamente.
5. Examine /proc/mdstat para ver el estado de su dispositivo RAID

LFS201: Fundamentos de Administracin de Sistemas Linux

227

Solucin 17.1
1. Si usted est usando particiones en un disco real, haga lo siguiente:
$ sudo fdisk /dev/sda
y cree las particiones como lo hemos hecho anteriormente. Para propsitos del ejercicio los
llamaremos /dev/sdaX y /dev/sdaY. Necesitar correr partprobe, kpartx o reiniciar luego que
ha terminado para asegurarse de que el sistema reconozca las particiones nuevas.
Las particiones LVM estarn perfectamente bien para este ejercicio. Pueden crearse de la
siguiente forma:
$ sudo lvcreate -L 200M -n MD1 VG
$ sudo lvcreate -L 200M -n MD2 VG
donde hemos nombrado el grupo de volmenes como VG. No es necesario hacer nada ms
luego de la creacin de las particiones LVM nuevas para que el sistema est al tanto de ellas.
2. $ sudo mdadm -C /dev/md0 --level=1 --raid-disks=2 /dev/sdaX /dev/sdaY
o
$ sudo mdadm -C /dev/md0 --level=1 --raid-disks=2 /dev/VG/MD1 /dev/VG/MD2
3. $ sudo mkfs.ext4 /dev/md0
$ sudo mkdir /myraid
$ sudo mount /dev/md0 /myraid
y agregar a /etc/fstab
/dev/md0 /myraid ext4

defaults

4. $ mdadmdetailscan >> /etc/mdadm.conf


5. $ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 dm-14[1] dm-13[0]
204736 blocks [2/2] [UU]
unused devices: (none)
Probablemente deber verificar que el volumen RAID se monta automticamente luego de
reiniciar el sistema. Cuando est listo, remueva la lnea de /etc/fstab para eliminar las referencias
de las particiones utilizadas en este ejercicio

LFS201: Fundamentos de Administracin de Sistemas Linux

228

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar el concepto de RAID.


Proveer un resumen de los niveles de RAID.
Configurar un dispositivo RAID usando los pasos esenciales entregados.
Monitorear dispositivos RAID de mltiples maneras.
Usar discos de reserva (hot spares).

LFS201: Fundamentos de Administracin de Sistemas Linux

229

Captulo 18. Seguridad del sistema local


Una tarea esencial de cualquier administrador de sistemas es asegurar el o los sistemas
contra amenazas tanto internas como externas. El trabajo comienza con el diseo de una
poltica de seguridad apropiada, creada para defenderse contra amenazas esperadas e
inesperadas. Adicionalmente se requiere mantener los sistemas en un punto saludable; se
necesita realizarles mantencin y actualizarlos de forma oportuna, como tambin
protegerlos fsicamente de robos. Adems, polticas sensatas tienen que garantizar que
solo los usuarios apropiados tienen privilegios potencialmente peligrosos, y solo aquellos
que son absolutamente necesarios.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Evaluar los riesgos de seguridad del sistema.


Implementar polticas y procedimientos de seguridad informtica.
Proteger de forma eficiente la BIOS y el cargador de arranque con contraseas de
acceso.
Usar de forma apropiada las opciones setuid y setgid del comando mount, para
mejorar la seguridad.

LFS201: Fundamentos de Administracin de Sistemas Linux

230

18.1 Seguridad del sistema local


Los computadores son inherentemente inseguros y necesitan ser protegidos de la gente
que podra inmiscuirse en ellos o atacarlos. Los atacantes suelen hacer esto con el fin de
daar el sistema, denegar servicios o robar informacin.
Ningn computador puede ser absolutamente seguro. Todo lo que podemos hacer es
ralentizar y desalentar a los intrusos con el fin de que abandonen el ataque, para buscar
blancos ms fciles, o para atraparlos en el acto y tomar las acciones apropiadas.
La seguridad puede ser definida en trminos de la habilidad del sistema para hacer con
regularidad lo que se supone que tiene que hacer, su integridad y exactitud, como tambin
en la garanta de que el sistema est disponible solamente para quienes estn
autorizados a usarlo.
El mayor problema es encontrar la mezcla apropiada entre seguridad y productividad; si
las restricciones de seguridad presionan mucho al usuario, son difciles, no estn
totalmente claras y bsicamente son medidas ineficaces, los usuarios eludirn los
procedimientos.
Las cuatro reas que necesitamos proteger incluyen la fsica, local, remota y el personal.
En esta seccin no nos concentraremos en la seguridad de la red, sino ms bien en los
factores locales.

18.2 Crear una poltica de seguridad


Es importante crear y dar a conocer en la organizacin una poltica de seguridad clara.
Esta debera:

Ser simple y fcil de comprender.


Ser actualizada constantemente.
Estar por escrito en un documento, como tambin en lnea de ser necesario.
Describir tanto polticas como procedimientos.
Especificar las acciones coercitivas.
Especificar las accionar a tomar en respuesta a una brecha de seguridad.

Las polticas deben ser genricas y fciles de entender, ya que eso las hace ms fciles
de seguir. Deben salvaguardar la informacin que necesita ser protegida, denegar acceso
a los servicios asociados y proteger la privacidad de los usuarios.
Estas polticas deberan ser actualizadas regularmente; de hecho las polticas necesitan
cambiar en la medida en que los requerimientos lo hacen. Tener una poltica
desactualizada puede ser peor que no tener una.

LFS201: Fundamentos de Administracin de Sistemas Linux

231

18.3 Que incluir en la poltica de seguridad


Una poltica de seguridad debe incluir mtodos de proteccin de la informacin, para
evitar sea leda o copiada por personal no autorizado. Tambin debera debera incluir
proteccin para que la informacin no sea alterada o eliminada sin el permiso del dueo.
Todos los servicios deberan estar protegidos para que estn disponibles y no degradados
de alguna forma sin autorizacin.
Aspectos esenciales:

Confidencialidad

Integridad de los datos

Disponibilidad

Consistencia

Control

Auditora

Debe asegurarse que la informacin es la correcta y que el sistema se comporta como se


espera. En efecto, debera haber procesos para determinar quien est consiguiendo
acceso a su sistema. El factor humano es el enlace ms dbil en la cadena de seguridad;
esto requiere la mayor atencin a travs de una auditora constante.

18.4 Riesgos a evaluar


El anlisis de riesgo est basado en las siguientes tres preguntas:

Qu quiero proteger?
Contra quin lo estoy protegiendo?
Cunto tiempo, personal y dinero se necesita para brindar la proteccin
adecuada?

Este es el primer paso a tomar para construir una poltica de seguridad informtica. Es un
prerrequisito para planear y luego aplicar polticas y procedimientos para proteger sus
sistemas.

LFS201: Fundamentos de Administracin de Sistemas Linux

232

18.5 Elegir una filosofa de seguridad


Existen dos filosofas bsicas que se pueden encontrar en la mayora de ambientes
computacionales:

Cualquier cosa no expresamente permitida es denegada.


Cualquier cosa que no est expresamente prohibida es permitida.

Usted debe decidir cul filosofa es la mejor para su organizacin.


La primera opcin es ms estricta: un usuario est habilitado para hacer solo lo que est
clara y explcitamente especificado como permisible sin privilegios. Esta es la filosofa
usada ms comnmente.
La segunda alternativa constituye un ambiente ms liberal en donde a los usuarios se les
permite hacer todo excepto lo que est expresamente prohibido. Esto implica un alto
grado de confianza y se utiliza con menos frecuencia por razones obvias.

18.6 Guas generales de seguridad


A continuacin algunas guas generales a recordar durante la implementacin de filosofas
de seguridad:
1. El factor humano es el eslabn ms dbil.
Debe educar a sus usuarios y mantenerlos contentos. El mayor porcentaje de
vulneraciones de seguridad son internos y a menudo no son maliciosos.
2. No existe un ambiente informtico invulnerable.
El nico sistema totalmente seguro es el que no est conectado a nada, guardado
en una habitacin segura y apagado.
3. La paranoia es buena.
Sospeche, est atento y sea perseverante al asegurar un sistema informtico. Es
un proceso continuo al que se le debe prestar atencin constantemente. Verifique
los procesos, usuarios y fjese en cualquier cosa que parezca estar fuera de lo
normal.
Los usuarios nunca deberan poner el directorio actual en el path. Es decir, no ponga algo
como lo siguiente en su archivo ~/.bashrc:
PATH=./:$PATH

Esto tiene un riesgo de seguridad importante; una persona maliciosa podra


reemplazar un programa con otro del mismo nombre, el cual podra hacer cosas
perjudiciales. Piense en un script llamado ls que contenga solo la siguiente lnea:
/bin/rm -rf $HOME

Si usted fuera al directorio que contiene ese archivo y ejecutara ls, borrara todo su
directorio de usuario.
LFS201: Fundamentos de Administracin de Sistemas Linux

233

18.7 Actualizaciones y seguridad


Es crtico prestar atencin a las actualizaciones de su distribuidor de Linux y aplicarlas
tan pronto sea posible.
La mayora de los ataques explotan agujeros de seguridad conocidos en el perodo de
tiempo entre la revelacin del problema y la aplicacin de parches. Los ataques de
da cero son mucho ms raros; en este caso un atacante usa un agujero de seguridad
que no ha sido descubierto o para el cual no se ha liberado un parche.
Los administradores de sistemas son reacios a aplicar tales parches inmediatamente
despus de que han sido liberados, ms que nada basados en experiencias negativas
con compaas de software privativo, las que pueden causar ms problemas que
soluciones con los parches que incluyen. Sin embargo, esas regresiones son
extremadamente raras en Linux, y probablemente el peligro de retrasar la aplicacin de
un parche de seguridad no es justificable.

18.8 Acceso al hardware y vulnerabilidades


En cualquier momento el hardware que est accesible fsicamente puede ser
comprometido por:

Key logging: Almacenar la actividad en tiempo real de un usuario de computador


(con un software de tipo keylogger), incluyendo las teclas que presiona. La
informacin capturada puede ser almacenada localmente o transmitida a
mquinas remotas.

Analizador de paquetes de red: Captura y visualizacin de los datos a nivel de


paquetes de red.

Arrancar con un live CD/DVD o de rescate.

Montar nuevamente el disco y modificar su contenido.

El acceso fsico a un sistema permite a los atacantes aprovechar fcilmente diferentes


vectores de ataque, lo cual torna en irrelevantes todas las recomendaciones a nivel de
sistema operativo.
Por lo anterior, la poltica de seguridad debe partir con requerimientos acerca de cmo
asegurar apropiadamente el acceso fsico a los servidores y estaciones de trabajo.

LFS201: Fundamentos de Administracin de Sistemas Linux

234

18.9 Directrices de acceso al hardware


Los pasos necesarios incluyen:

Asegurar las estaciones de trabajo y servidores.

Proteger el acceso a los enlaces de red de personas en las cuales no confa.

Proteger los teclados en donde las contraseas son ingresadas para asegurar que
no puedan ser alterados.

Configure proteccin por contrasea en la BIOS de tal forma que el sistema no


pueda ser arrancado con un liveCD/DVD, de rescate o un dispositivo USB.

Para computadores de usuario y aquellos en un ambiente del hogar, algunas de las


caractersticas mencionadas (como prevenir el arranque de medios removibles) pueden
ser excesivas y usted podra evitar su uso. Sin embargo, si en su sistema hay informacin
sensitiva que requiere proteccin, entonces no debe estar ah, o debera estar mejor
protegida utilizando los lineamientos mencionados anteriormente.

18.10 Proteccin de la BIOS


La BIOS es el nivel ms bajo de software que configura o manipula su sistema. El
cargador de arranque accede a la BIOS para determinar cmo arrancar la mquina.
La BIOS:

Es el nivel ms bajo de seguridad.

Debe ser protegido por el uso de una contrasea.

Debe estar actualizada.

Configurar una contrasea en la BIOS protege de que personas sin autorizacin cambien
las opciones de arranque para ganar acceso al sistema. Sin embargo, solo importa si
alguien puede conseguir acceso fsico a la mquina, ya que esto requiere de presencia
local.
Tambin se recomienda generalmente que la BIOS se mantenga al da con la ltima
versin del firmware. Sin embargo, la mayora de las actualizaciones de las BIOS no
tienen relacin con el tema de seguridad y los administradores de sistemas suelen instalar
esos parches con mucho cuidado, ya que una pieza de cdigo incompetente en
actualizaciones innecesarias podra inutilizar un sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

235

LFS201: Fundamentos de Administracin de Sistemas Linux

236

18.11 Proteccin del cargador de arranque con contrasea


Usted puede asegurar el proceso de arranque con una contrasea segura para prevenir
que alguien evite el paso de autenticacin de usuario. Esto puede funcionar en conjunto
con una proteccin por contrasea de la BIOS.
Tenga en cuenta que al usar una contrasea en el cargador de arranque va a prevenir que
un usuario edite la configuracin del mismo durante el proceso de arranque, sim embargo
no prevendr que un usuario arranque desde un medio alternativo, tales como CDs/DVDs
o dispositivos USB. Por lo anterior, esto debera ir acompaado con una contrasea en
la BIOS para tener una proteccin total en esta etapa.
Para sistemas que usan GRUB:

Para la versin 1 de GRUB (la antigua), ejecute grub-md5-crypt.


herramienta le pedir una contrasea, la cual cifrar y desplegar.

Esta

Luego de eso edite /boot/grub/grub.conf y agregue la lnea siguiente debajo de la


lnea que contiene la entrada timeout:
passwordmd5 $1$Wnvo.1$qz781HRVG4jUnJXmdSCZ30

en donde debe ingresar la contrasea cifrada que despleg la salida de grubmd5-crypt. Note que es posible forzar el uso de la contrasea solamente para
algunas opciones de arranque, en vez de todas.

Para la versin 2 de GRUB (la actual) las cosas son ms complicadas. Sin
embargo, existe una mayor flexibilidad y es posible hacer cosas como configurar
contraseas individuales de usuario, las cuales incluso pueden ser las del inicio de
sesin.

Como es usual en la versin 2, nunca edite el archivo de configuracin directamente


(/boot/grub/grub.cfg). En vez de eso, edite los archivos de configuracin en /etc/grub.d
y luego ejecute update-grub. Una explicacin de esto puede encontrarse
aqu: https://help.ubuntu.com/community/Grub2/Passwords.

LFS201: Fundamentos de Administracin de Sistemas Linux

237

18.12 Seguridad del sistema de archivos: opciones de mount


Cuando un sistema de archivos se monta, ya sea desde la consola con un comando
mount, o automticamente a travs de /etc/fstab, hay varias opciones que se pueden
especificar para incrementar la seguridad:

nodev
No interprete caracteres o dispositivos especiales de bloque en el sistema de
archivos.

nosuid
Los bits set-user-identifier y set-group-identifier no tienen efecto. Vamos a
discutir en breve setuid y setgid.

noexec
Restringe la ejecucin directa de cualquier binario en el sistema de archivos
montado.

ro
Monta el sistema de archivos en modo de solo lectura, como se muestra a
continuacin:
$ mount -o ro,noexec,nodev /dev/sda2 /mymountpt

o en /etc/fstab:
/dev/sda2 /mymountpt

ext4 ro,noexec,nodev 0 0

18.13 setuid y setgid


Normalmente un programa corre con los privilegios del usuario que lo ejecut. Esto
significa que sin importar quien es el dueo del binario que est corriendo, el proceso de
todas formas tiene privilegios restringidos.
Ocasionalmente puede tener sentido que haya usuarios con capacidades extendidas que
no tienen generalmente, tales como la habilidad para iniciar o detener una interfaz de red,
o editar un archivo del cual el superusuario es dueo.
Al configurar el bit setuid (set user ID) en un archivo ejecutable, se modifica el
comportamiento normal y se otorgan derechos de acceso del dueo en vez
del usuario que ejecuta el programa.
Adems es posible configurar el bit setgid, de tal forma que el proceso se ejecute con los
privilegios del grupo que es dueo del binario, en vez del de quien lo est corriendo.
Quisiramos enfatizar que esto es generalmente una mala idea y que es recomendable
evitarlo en la mayora de las circunstancias. A menudo es mejor escribir un
programa demonio con menos privilegios para este tipo de uso. Algunas distribuciones
recientes han deshabilitado completamente esta caracterstica.
LFS201: Fundamentos de Administracin de Sistemas Linux

238

18.14 Configuracin de los bits setuid/setgid


Esto se realiza de forma simple con:
$ chmod u+s somefile
$ chmod g+s somefile

en donde el primer ejemplo realiza la operacin de setuid y el segundo la de setgid.


En el caso de los directorios, configurar el bit de grupo tiene un efecto diferente; se utiliza
para crear un directorio compartido, como se muestra aqu:
$ chmod g+s somedir

Los archivos creados en este directorio pertenecen al grupo del dueo del directorio (y no
al grupo del usuario que lo crea).
Tenga en cuenta que efectivamente no puede cambiar el setuid de un script shell; de
hecho, no suceder nada a menos que usted cambie el bit setuid en la consola, lo cual
podra ser un tremendo agujero de seguridad. Solo se puede hacer en binarios
ejecutables.

Comprobacin de conocimientos 18.1

LFS201: Fundamentos de Administracin de Sistemas Linux

239

18.15 Laboratorio 18.1


Laboratorio 18.1: Seguridad y opciones de mount
Vamos a montar una particin o dispositivo loop con la opcin noexec para evitar la ejecucin de
programas que en el sistema de archivos. Si bien es cierto que es posible hacer esto con una
particin preexistente, puede ser difcil cambiar el comportamiento mientras la particin est
montada. Por lo tanto, para la demostracin usaremos un dispositivo loop, lo cual es un
procedimiento inofensivo.
1. Cree un archivo vaco, ponga un sistema de archivos en l y mntelo.
2. Copie un archivo ejecutable desde alguna parte a este sistema de archivos y pruebe que
funciona en el lugar nuevo.
3. Desmntelo y mntelo nuevamente con la opcin noexec.
4. Pruebe si el ejecutable an funciona. Debera dar un error debido a la opcin noexec de
mount.
5. Limpie lo anterior.
Solucin 18.1
1. $ dd if=/dev/zero of=image bs=1M count=100
$ sudo mkfs.ext3 image
$ mkdir mountpoint
$ sudo mount -o loop image mountpoint
2. $ sudo cp /bin/ls mountpoint
$ mountpoint/ls 3.
3. $ sudo umount mountpoint
$ sudo mount -o noexec,loop image mountpoint
or
$ sudo mount -o noexec,remount image mountpoint
4. $ mountpoint/ls
5. $ sudo umount mountpoint
$ rm image
$ rmdir mountpoint
Tenga en cuenta que esto no es persistente. Para hacerlo persistente tendra que agregar la
opcin a /etc/fstab, con una lnea como la siguiente:
/home/student/image
/home/student/mountpoint ext3 loop,rw,noexec 0 0

LFS201: Fundamentos de Administracin de Sistemas Linux

240

18.15 Laboratorio 18.2


Laboratorio 18.2: Ms de setuid y scripts
Supongamos que tenemos el siguiente programa en C (./writeit.c), el cual intenta sobreescribir un
archivo llamado afile en el directorio actual:
/*
@*/

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{

int fd, rc;


char *buffer = TESTING A WRITE;
fd = open(./afile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
rc = write(fd, buffer, strlen(buffer));
printf(wrote %d bytes\n, rc);
close(fd);
exit(EXIT_SUCCESS);
}

Si est tomando la versin de autoaprendizaje de este curso, el cdigo fuente est disponible para
su descarga desde la pantalla Laboratorio.
Si el programa se llama writeit.c, puede ser compilado haciendo:
$ make writeit
o de forma equivalente:
$ gcc -o writeit writeit.c

LFS201: Fundamentos de Administracin de Sistemas Linux

241

Si intenta ejecutar este programa como un usuario normal sobre un archivo del cual root es el
dueo, obtendr lo siguiente:
$ sudo touch afile
$ ./writeit
wrote -1 bytes
pero si lo ejecuta como root:
$ sudo ./writeit
wrote 15 bytes
Por lo tanto, el usuario root fue capaz de sobreescribir el archivo del cual es dueo, pero un
usuario normal no podra. Tenga en cuenta que no ayudar cambiar el dueo de writeit a root:
$ sudo chown root.root writeit
$ ./writeit
wrote -1 bytes
porque todava no le permitir sobreescribir afile. Al configurar el bit setuid usted puede habilitar a
cualquier usuario normal para que lo haga:
$ sudo chmod +s writeit
$ ./writeit
wrote 15 bytes
Usted se podra preguntar por qu simplemente no escribimos un script que realice la operacin,
en vez de escribir y compilar un programa ejecutable.
Bajo Linux, si se cambia el setuid en un script ejecutable, no har nada a menos que usted cambie
el bit setuid en la shell (tal como bash), lo cual sera un gran error; cualquier cosa que se corra
desde ah podra escalar privilegios.

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Evaluar los riesgos de seguridad del sistema.


Implementar polticas y procedimientos de seguridad informtica.
Proteger de forma eficiente la BIOS y el cargador de arranque con contraseas de
acceso.
Usar de forma apropiada las opciones setuid y setgid del comando mount, para
mejorar la seguridad.

LFS201: Fundamentos de Administracin de Sistemas Linux

242

Captulo 19. Mdulos de seguridad de Linux


Un sistema computacional moderno tiene que ser seguro, pero las necesidades varan de
acuerdo a la sensibilidad de la informacin, nmero de cuentas de usuario, exposicin a
redes externas, requerimientos legales y otros factores. La responsabilidad de habilitar
buenos controles de seguridad recae tanto en los diseadores de las aplicaciones,
desarrolladores y mantenedores del kernel Linux. Por supuesto, los usuarios tambin
deben seguir los buenos procedimientos establecidos, pero en un sistema gestionado
adecuadamente, los usuarios no privilegiados deberan tener una capacidad muy limitada
para exponer el sistema a violaciones de seguridad.
En esta seccin nos ocuparemos de cmo el kernel Linux mejora la seguridad a travs
del uso de Mdulos de Seguridad de Linux (LSM), particularmente con la
implementacin de SELinux.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Comprender cmo funciona y se implementa la infraestructura de los Mdulos de


Seguridad de Linux.
Listar las diversas implementaciones disponibles de LSM.
Describir las principales caractersticas de SELinux.
Explicar los diversos modos y polticas disponibles.
Comprender la importancia de los contextos, cmo obtenerlos y configurarlos.
Saber cmo usar las herramientas importantes de SELinux.

LFS201: Fundamentos de Administracin de Sistemas Linux

243

19.1 Que son los mdulos de seguridad de Linux?


Ha habido una serie de ideas acerca de cmo incorporar un mdulo de seguridad
informtica en Linux. La idea es implementar controles de acceso obligatorios sobre
una variedad de peticiones realizadas al kernel, de una forma en la que:
1. Se minimicen los cambios al kernel.
2. Se minimice la sobrecarga sobre el kernel.
3. Permita flexibilidad y se pueda elegir entre diferentes implementaciones, cada una de

las cuales se presenta como un LSM autnomo (Linux Security Module).


La idea bsica es interceptar las llamadas al sistema; insertar cdigo cada vez que una
aplicacin solicita una transicin a modo kernel con el fin de realizar la tarea que requiere
habilidades extendidas. Este cdigo se asegura de que los permisos son vlidos y que
exista proteccin contra intentos malintencionados. Esto se lleva a cabo al invocar pasos
de seguridad funcionales antes y/o despus de que una llamada al sistema es satisfecha
por el kernel.

19.2 Alternativas de LSM


Por un largo tiempo el nico modelo de seguridad extendida que se implementaba
fue SELinux. Cuando el proyecto fue sugerido por primera vez para ser incluido
directamente en el kernel, en el 2001, hubo objeciones acerca de usar un solo enfoque a
la seguridad extendida.
Como resultado de lo anterior, el mtodo LSM fue adoptado con el fin de que mdulos
alternativos a SELinux podran ser usados a medida en que fueran desarrollados. Se
incorpor al kernel Linux en 2003.
Las implementaciones actuales de LSM son:

SELinux: http://selinuxproject.org/page/Main_Page

AppArmor: http://apparmor.net

Smack: http://schaufler-ca.com

TOMOYO: http://tomoyo.sourceforge.jp

Solo un LSM puede ser usado a la vez, ya que potencialmente modifican las mismas
partes del kernel Linux.
Nos concentraremos principalmente en SELinux y de forma secundaria en AppArmor, en
orden de volumen de uso.

LFS201: Fundamentos de Administracin de Sistemas Linux

244

19.3 Resumen de SElinux


SELinux fue
desarrollado
originalmente
por
la NSA de
Estados
Unidos
(National Security Administration) y ha sido parte integral de RHEL por mucho tiempo, lo
cual ha trado consigo una gran base de usuarios.
Operacionalmente, SELinux es un conjunto de reglas de seguridad que se usan para
determinar qu procesos pueden acceder a cules archivos, puertos y otros tems en el
sistema.
Funciona con estas tres cantidades conceptuales:
1. Contextos: Son etiquetas a archivos, procesos y puertos. Ejemplos de contextos son
usuarios de SELinux, rol y tipo.
2. Reglas: Describe el control de acceso en trminos de contextos, procesos, archivos,
puertos, usuarios, etc.
3. Polticas: Son un conjunto de reglas que describen las decisiones de control de
acceso aplicables a todo el sistema, las que deberan ser aplicadas por SELinux.
Un contexto de SELinux es un nombre usado por una regla para definir cmo los
usuarios, procesos y puertos interactan entre ellos. Como la poltica por defecto es
denegar cualquier acceso, las reglas se usan para describir las acciones permitidas en el
sistema.

19.4 Mdulos de SELinux


SELinux puede correr en uno de los tres modos siguientes:

Enforcing: Todo el cdigo SELinux est operativo y el acceso est denegado de


acuerdo a la poltica. Todas las violaciones a la misma son auditadas y registradas.
Permissive: Habilita el cdigo SELinux pero solo audita y advierte acerca de las
operaciones que seran denegadas en modo enforcing.
Disabled: Deshabilita completamente el cdigo para aplicaciones y kernel
de SELinux y deja el sistema sin ninguna de estas protecciones.

Estos
modos
se
seleccionan
(y
explican)
en
un
archivo
(generalmente/etc/selinux/config), cuya ubicacin vara segn la distribucin (a menudo
se encuentra en /etc/sysconfig/selinux o enlazado desde aqu). El archivo est bien
autodocumentado. La herramienta sestatus despliega el modo y poltica actual.

LFS201: Fundamentos de Administracin de Sistemas Linux

245

LFS201: Fundamentos de Administracin de Sistemas Linux

246

Para examinar o configurar el modo actual se puede usar getenforce y setenforce:


$ getenforce
Disabled
$ sudo setenforce Permissive
$getenforce
Permissive

setenforce se usa para cambiar entre modo enforcing y permissive al vuelo, mientras el
sistema est en operacin. Sin embargo, no se puede habilitar o deshabilitar el modo
disabled de esta forma. Mientras que setenforce permite cambiar entre los
modos Permissive y Enforcing, no permite deshabilitar SELinux completamente. Hay al
menos dos formas diferentes de deshabilitar SELinux:

Archivo
de
configuracin:
edite
el
archivo
de
configuracin
(generalmente/etc/selinux/config) y configure SELINUX=disabled. Este es el
mtodo por defecto y debera usarse para deshabilitar SELINUX
permanentemente.

Parmetro del kernel: Agregue selinux=0 a la lista de parmetros del kernel


cuando reinicie.

Sin embargo es importante notar que no se recomienda deshabilitar SELinux en sistemas


en los cuales va a ser habilitado nuevamente. Es preferible usar el modo Permissive en
vez de deshabilitar SELinux, para evitar que el sistema de archivos sea reetiquetado
completamente, lo cual podra consumir bastante tiempo.

LFS201: Fundamentos de Administracin de Sistemas Linux

247

19.5 Polticas de SELinux


El mismo archivo de configuracin, generalmente /etc/sysconfig/selinux, tambin
configura la poltica de SELinux. Se permiten mltiples polticas, pero solo una puede
estar activa a la vez. Cambiar la poltica puede requerir un reinicio del sistema y un
reetiquetado del contenido del sistema de archivos, lo cual puede ser lento. Cada poltica
tiene archivos que deben ser instalados bajo /etc/selinux/[SELINUXTYPE].
Las polticas ms comunes son:

targeted: La poltica por defecto en la cual SELinux es ms restringida a


procesos especficos. Los procesos de usuario e init no estn dentro de los
objetivos. SELinux impone restricciones de memoria para todos los procesos, lo
cual reduce la vulnerabilidad ante ataques de desbordamiento de bfer (buffer
overflow).

minimum: Una modificacin sobre la poltica targeted en donde solo los


procesos seleccionados estn protegidos.

MLS: La poltica de seguridad de mltiples niveles es mucho ms restrictiva; todos


los procesos se ponen en dominios de seguridad especficos con polticas
particulares.

19.6 Herramientas de contexto


Como se mencion anteriormente, los contextos son etiquetas que se aplican a archivos,
directorios, puertos y procesos. Estas etiquetas se usan para describir reglas de acceso.
Existen cuatro contextos de SELinux:

User (usuario)

Role (rol)

Type (tipo)

Level (nivel)

Sin embargo, nos focalizaremos en type (tipo), el cual es el contexto ms usado


comnmente. La convencin de nombres de etiquetas determina que las etiquetas de
contexto type deben terminar con _t, como en kernel_t.

LFS201: Fundamentos de Administracin de Sistemas Linux

248

19.7 SELinux y herramientas estndar de lnea de comandos


Muchos comandos estndar de la lnea de comandos, como ls y ps, fueron extendidos
para soportar SELinux y las secciones correspondientes fueron agregadas a las pginas
man, explicando los detalles. A menudo el parmetro Z se pasa a las herramientas
estndar de lnea de comandos, como en:
$ ps axZ
LABEL PID TTY STAT TIME COMMAND
system_u:system_r:init_t:s0 1 ? Ss 0:04 /usr/lib/systemd/systemd
switched-root ...
system_u:system_r:kernel_t:s0 2 ? S 0:00 [kthreadd]
...
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2305 ? D 0:00 sshd:
peter@pts/0
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2306 pts/0 Ss 0:00
-bash
...
system_u:system_r:httpd_t:s0 7490 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 7491 ? S 0:00 /usr/sbin/httpd -DFOREGROUND
...
$ ls -Z /home/ /tmp/
/home/:
drwx------. peter peter unconfined_u:object_r:user_home_dir_t:s0 peter
/tmp/:
-rwx------. root root system_u:object_r:initrc_tmp_t:s0 ks-script-c4ENhg
drwx------. root root system_u:object_r:tmp_t:s0 systemd-private-0ofSvO
-rw-------. root root system_u:object_r:initrc_tmp_t:s0 yum.log

Otras
herramientas
que
soportar SELinux incluyen cp, mv y mkdir.

fueron

extendidas

para

Tenga en cuenta que si SELinux est deshabilitado, no se mostrar informacin relevante


en los campos asociados a esas herramientas.

LFS201: Fundamentos de Administracin de Sistemas Linux

249

19.8 Herencia y preservacin de contexto de SELinux


Los archivos nuevos heredan el contexto del directorio padre, pero al mover o copiar
archivos, el contexto del directorio fuente es el cual debe ser preservado, lo cual puede
causar problemas.
Continuando con el ejemplo anterior, vemos que el contexto de tmpfile no ha cambiado al
mover el archivo desde/tmp a /home/peter:
$ cd /tmp/
$ touch tmpfile
$ ls -Z tmpfile
rw-rw-r--. peter peter unconfined_u:object_r:user_tmp_t:s0 tmpfile
$ cd
$ touch homefile
$ ls -Z homefile
rw-rw-r--. peter peter unconfined_u:object_r:user_home_t:s0 homefile
$ mv /tmp/tmpfile .
$ ls -Z
rw-rw-r--. peter peter unconfined_u:object_r:user_home_t:s0 homefile
rw-rw-r--. peter peter unconfined_u:object_r:user_tmp_t:s0 tmpfile

El ejemplo clsico en el cual se crea un problema en SELinux al mover archivos es


cuando son movidos al directorio DocumentRoot del servidor httpd. En sistemas que
tienen habilitado SELinux, el servidor web solo puede acceder a archivos con las
etiquetas de contexto adecuadas. Si se crea un archivo en /tmp y luego se mueve al
directorio DocumentRoot, estar inaccesible para el servidor httpd hasta que el
contexto SELinux del archivo se modifique.

LFS201: Fundamentos de Administracin de Sistemas Linux

250

19.9 restorecon
La herramienta restorecon restablece los contextos de un archivo, basado en la
configuracin del directorio padre. En el siguiente ejemplo, restorecon restablece la
etiqueta por defecto recursivamente para todos los archivos en el directorio home.
$ ls -Z
rw-rw-r--. peter peter unconfined_u:object_r:user_home_t:s0 homefile
rw-rw-r--. peter peter unconfined_u:object_r:user_tmp_t:s0 tmpfile
$ restorecon -Rv /home/peter
restorecon reset /home/peter/tmpfile context \
unconfined_u:object_r:user_tmp_t:s0->unconfined_u:object_r:user_home_t:s0
$ ls -Z
rw-rw-r--. peter peter unconfined_u:object_r:user_home_t:s0 homefile
rw-rw-r--. peter peter unconfined_u:object_r:user_home_t:s0 tmpfile

Note que el contexto de tmpfile fue reconfigurado al contexto por defecto para archivos
creados en el directorio home. El tipo fue cambiado desde user_tmp_t a user_home_t.

19.19 semanage fcontext


Otro problema es cmo configurar el contexto por defecto para un directorio nuevo. La
herramienta semanage fcontext(proveda por el paquete policycoreutils-python)
despliega y cambia el contexto por defecto de archivos y directorios. Tenga en cuenta
que semanage fcontext cambia la configuracin por defecto solamente y no se aplica a
objetos existentes. Esto requiere ejecutar restorecon luego. Por ejemplo:
[root@rhel7 /]# mkdir /virtualHosts
[root@rhel7 /]# ls -Z
...
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 virtualHosts
[root@rhel7 /]# semanage fcontext -a -t httpd_sys_content_t /virtualHosts
[root@rhel7 /]# ls -Z
...
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 virtualHosts
[root@rhel7 /]# restorecon -RFv /virtualHosts
restorecon reset /virtualHosts context
unconfined_u:object_r:default_t:s0>system_u:object_r:httpd_sys_content_t:s0
[root@rhel7 /]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0
virtualHosts

Por lo tanto, el cambio del contexto desde default_t a httpd_sys_content_t se lleva a


cabo solamente despus de haber ejecutado restorecon.
LFS201: Fundamentos de Administracin de Sistemas Linux

251

19.11 Uso de booleanos de SELinux


El comportamiento de la poltica de SELinux puede ser configurada en tiempo de
ejecucin sin necesidad de reescribir la poltica. Esto se consigue configurando
los Booleanos de SELinux, los cuales son parmetros de polticas que pueden ser
habilidados y deshabilitados.
Para listar todos los booleanos de la poltica actual, incluyendo el estado actual y una
descripcin corta, haga lo siguiente:
$ sudo semanage boolean -l
SELinux boolean
State
Default
Description
ftp_home_dir
(off , off)
Allow ftp to home dir
smartmon_3ware
(off , off)
Allow smartmon to 3ware
mpd_enable_homedirs
(off , off)
Allow mpd to enable
homedirs
xdm_sysadm_login
(off , off)
Allow xdm to sysadm login
xen_use_nfs
(off , off)
Allow xen to use nfs
mozilla_read_content
(off , off)
Allow mozilla to read
content
...
nfs_export_all_rw
(on , on)
Allow nfs to export all rw
pcp_bind_all_unreserved_ports (off , off)
Allow pcp to bind all
unreserved ports
postgresql_selinux_transmit_client_label (off , off) Allow postgresql to
selinux transmit client label
collectd_tcp_network_connect (off , off)
Allow collectd to tcp
network connect
cobbler_use_cifs
(off , off)
Allow cobbler to use cifs
mcelog_server
(off , off)
Allow mcelog to server
httpd_setrlimit
(off , off)
Allow httpd to setrlimit
squid_connect_any
(on , on)
Allow squid to connect any
ssh_sysadm_login
(off , off)
Allow ssh to sysadm login
domain_fd_use
(on , on)
Allow domain to fd use
virt_use_samba
(off , off)
Allow virt to use samba
cluster_use_execmem
(off , off)
Allow cluster to use
execmem
nfs_export_all_ro
(on , on)
Allow nfs to export all ro
cron_can_relabel
(off , off)
Allow cron to can relabel
sftpd_anon_write
(off , off)
Allow sftpd to anon write

LFS201: Fundamentos de Administracin de Sistemas Linux

252

19.12 getsebool y setsebool


Una alternativa para desplegar la informacin booleana que produce una salida ms
simple, es getsebool -a, la cual imprime solo el nombre booleano y su estado actual.
setsebool se usa para cambiar el estado booleano. El comportamiento por defecto es
aplicar los cambios inmediatamente y no son persistentes luego del reinicio. Sin embargo,
el parmetro -P puede ser provedo para hacer que los cambios sean persistentes.
Un ejemplo de cambio no persistente usando setsebool:
$ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> off
$ sudo setsebool ssh_chroot_rw_homedirs on
$ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> on
$ sudo reboot
...
$ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> off

Un ejemplo de cambio persistente usando setsebool -P:


$ getsebool ssh_chroot_rw_homedirs

ssh_chroot_rw_homedirs --> off


$ sudo setsebool -P ssh_chroot_rw_homedirs on
$ getsebool ssh_chroot_rw_homedirs

ssh_chroot_rw_homedirs --> on
$ sudo reboot

...
$ getsebool ssh_chroot_rw_homedirs

ssh_chroot_rw_homedirs --> on

LFS201: Fundamentos de Administracin de Sistemas Linux

253

19.13 Heramientas de resolucin de problemas


SELinux viene con un conjunto de herramientas que recopilan informacin acerca de
problemas en tiempo de ejecucin; registran esos problemas y proponen soluciones para
prevenir que esos problemas ocurran de nuevo. Estas herramientas son provedas por el
paquete setroubleshoot-server. Aqu hay un ejemplo de su uso:
[root@rhel7 ~]# echo File created at /root > rootfile
[root@rhel7 ~]# mv rootfile /var/www/html/
[root@rhel7 ~]# wget -O - localhost/rootfile
2014-11-21 13:42:04--

http://localhost/rootfile

Resolving localhost (localhost)... ::1, 127.0.0.1


Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2014-11-21 13:42:04 ERROR 403: Forbidden.
[root@rhel7 ~]# tail /var/log/messages
Nov 21 13:42:04 rhel7 setroubleshoot: Plugin Exception restorecon
Nov 21 13:42:04 rhel7 setroubleshoot: SELinux is preventing
/usr/sbin/httpd from getattr access on the file .
For complete SELinux messages. run sealert -l d51d34f9-91d5-4219ad1e-5531e61a2dc3
Nov 21 13:42:04 rhel7 python: 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

LFS201: Fundamentos de Administracin de Sistemas Linux

254

[root@rhel7 ~]#

sealert -l d51d34f9-91d5-4219-ad1e-5531e61a2dc3

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 system_u:system_r:httpd_t:s0
Target Context unconfined_u:object_r:admin_home_t:s0
Target Objects [ file ]
Source httpd
Source Path /usr/sbin/httpd
Port <Unknown>
Host rhel7
Source RPM Packages httpd-2.4.6-18.el7_0.x86_64
Target RPM Packages
Policy RPM selinux-policy-3.12.1-153.el7_0.11.noarch
Selinux Enabled True
Policy Type targeted
Enforcing Mode Enforcing
Host Name rhel7
Platform Linux rhel7 3.10.0-123.9.3.el7.x86_64 #1 SMP Thu
Oct 30 00:16:40 EDT 2014 x86_64 x86_64
Alert Count 2
First Seen 2014-11-21 12:34:13 CET
Last Seen 2014-11-21 13:42:04 CET
Local ID d51d34f9-91d5-4219-ad1e-5531e61a2dc3
Raw Audit Messages
type=AVC msg=audit(1416573724.395:1598): avc: denied { getattr }
for pid=20180 comm=httpd
path=/var/www/html/rootfile dev=dm-0 ino=70624441
scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file

LFS201: Fundamentos de Administracin de Sistemas Linux

255

type=SYSCALL msg=audit(1416573724.395:1598): arch=x86_64


syscall=lstat success=no exit=EACCES
a0=7f2896ed0578 a1=7fffcc64fb30 a2=7fffcc64fb30 a3=0 items=0
ppid=20178 pid=20180
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

Tenga en cuenta que en RHEL 7 se sugiere ejecutar lo siguiente:


$ grep httpd /var/log/audit/audit.log |

audit2allow -M mypol

audit2allow es una herramienta que genera reglas de polticas de SELinux desde


registros de operaciones denegadas. Una herramienta similar es audit2why, la cual
traduce los mensajes de auditora de SELinux en descripciones de porqu el acceso fue
denegado.
El ejemplo siguiente muestra cmo resolver este problema usando la
herramienta restorecon, la cual fue descrita anteriormente. Sintase libre de intentar
ambas aproximaciones para resolver el problema encontrado en SELinux.
[root@rhel7 ~]# restorecon -Rv /var/www/html/
restorecon reset rootfile context
unconfined_u:object_r:admin_home_t:s0>unconfined_u:object_r:httpd_sys_content_t:s0
[root@rhel7 ~]# wget -q -O - localhost/rootfile
File created at /root

LFS201: Fundamentos de Administracin de Sistemas Linux

256

19.14 Recursos adicionales en lnea


En esta seccin hemos cubierto las tareas de administracin de sistemas bsicas y ms
comunes relacionadas a SELinux. Existen recursos gratuitos que estn disponibles en
lnea para tems avanzados de SELinux, los cuales incluyen (documentacin disponible
en ingls):

Red Hat Enterprise Linux 7 SELinux Users and Administrators Guide


(https://access.redhat.com/ documentation/enUS/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/)

Red Hat Enterprise Linux 6 Security-Enhanced Linux


(https://access.redhat.com/documentation/enUS/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/)

19.15 AppArmor
AppArmor es una alternativa LSM a SELinux. El soporte para sta fue incorporado en el
kernel Linux desde 2006. Ha sido usado por SUSE, Ubuntu y otras distribuciones.
AppArmor:

Provee Control de Acceso Obligatorio (MAC).

Habilita a administradores a asociar un perfil de seguridad a un programa, lo cual


restringe sus capacidades.

Es considerado ms fcil de usar (por algunos, pero no todos) que SELinux.

Se considera como neutral al sistema de archivos (no requiere etiquetas de


seguridad).

AppArmor complementa el modelo tradicional de Control de Acceso Discrecional de


UNIX (DAC) al proveer Control de Acceso Obligatorio (MAC).
De forma adicional a la capacidad de especificar perfiles de forma manual, AppArmor
incluye un modo de aprendizaje, en el cual las violaciones al perfil son registradas, pero
no prevenidas. Este registro puede ser convertido en un perfil, basado en el
comportamiento tpico del programa.

LFS201: Fundamentos de Administracin de Sistemas Linux

257

Comprobacin de conocimientos 19.1

Comprobacin de conocimientos 19.2

LFS201: Fundamentos de Administracin de Sistemas Linux

258

19.16 laboratorio 19.1


Laboratorio 19.1: SELinux
Antes de comenzar este ejercicio verifique que SELinux est instalado y en modo enforcing. Edite
/etc/selinux/config y reinicie si es necesario.
Obviamente solo puede hacer esto en un sistema que tiene SELinux instalado. En este ejemplo
estamos usando RHEL.
1. Instale los paquetes vsftpd y ftp.
2. Cree una cuenta user1 con la contrasea password.
3. Cmbiese a la cuenta user1 y escriba algn texto en un archivo llamado
/home/user1/user1file.
4. Salga de la cuenta user1 y asegrese que el servicio ftp (el nombre del servicio es vsftpd) est
en ejecucin.
5. Haga ftp al localhost, conctese como user1 e intente obtener user1file. Esto debera fallar.
Tenga en cuenta que esto podra fallar ya sea al conectarse a la cuenta o al transferir el archivo.
La solucin a ambos problemas es el mismo, por lo cual el ejercicio no se ver afectado. Las
diferencias en el comportamiento son una consecuencia de las diferencias en las polticas de
SELinux.
6. Verifique /var/log/messages para determinar porqu. Usted debera ver un error relativo a
setroubleshoot. Ejecute el comando sealert mostrado anteriormente.
7. Resuelva el problema e intente de nuevo hacer ftp, conectarse como user1 y obtener el
archivo user1file. Esta vez debera funcionar.

Solucin 19.1
1. $ sudo yum install vsftpd ftp
2. $ sudo useradd user1
$ sudo passwd user1
Changing password for user user1.
New password: password
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password: password
passwd: all authentication tokens updated successfully.

LFS201: Fundamentos de Administracin de Sistemas Linux

259

3. $ sudo su - user1
[user1@rhel7 ~]$ echo file created at /home/user1 > user1file
[user1@rhel7 ~]$ ls
user1file
4. [user1@rhel7 ~]$ exit
$ sudo systemctl status vsftpd.service
vsftpd.service - Vsftpd ftp daemon Loaded:
loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
Active: active (running) since Fri 2014-11-21 14:08:14 CET; 32min ago
...
5. $ ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:peter): user1
331 Please specify the password.
Password: password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get user1file
local: user1file remote: user1file
229 Entering Extended Passive Mode (|||35032|).
550 Failed to open file.
ftp> quit
221 Goodbye.
6. $ tail /var/log/messages
Nov 21 14:23:26 rhel7 setroubleshoot: SELinux is preventing /usr/sbin/vsftpd from read
access on the file .
For complete SELinux messages. run sealert -l 7f8e5e6f-bcee-4c59-9cd172b90fb1f462
***** Plugin catchall_boolean (47.5 confidence) suggests ***************
If you want to allow ftp to home dir
Then you must tell SELinux about this by enabling
the ftp_home_dir boolean.
Do
setsebool -P ftp_home_dir 1
Notice that the suggestion to fix the issue can be found at the log file, and it is not even
necessary to run sealert.

LFS201: Fundamentos de Administracin de Sistemas Linux

260

7. $ sudo setsebool -P ftp_home_dir 1


$ ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2) Name (localhost:peter): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get user1file
local: user1file remote: user1file
229 Entering Extended Passive Mode (|||18769|).
150 Opening BINARY mode data connection for user1file (28 bytes).
226 Transfer complete.
28 bytes received in 4.2e-05 secs (666.67 Kbytes/sec)
ftp> quit
221 Goodbye.
$ cat user1file
file created at /home/user1

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Comprender cmo funciona y se implementa la infraestructura de los Mdulos de


Seguridad de Linux.
Listar las diversas implementaciones disponibles de LSM.
Describir las principales caractersticas de SELinux.
Explicar los diversos modos y polticas disponibles.
Comprender la importancia de los contextos, cmo obtenerlos y configurarlos.
Cmo usar las herramientas importantes de SELinux.

LFS201: Fundamentos de Administracin de Sistemas Linux

261

Captulo 20. Procesos


Un proceso es la encarnacin de una aplicacin en ejecucin que puede o no consistir de
varias hebras. Los procesos tienen atributos y permisos bien definidos. Tienen que estar
en uno de un nmero de procesos enumerados; los ms comunes son running (corriendo)
o sleeping (durmiendo). Es importante saber cundo un proceso est corriendo en modo
usuario con privilegios limitados o en modo kernel, con privilegios extendidos,
incluyendo un acceso ms directo al hardware. Hay diversas formas de crear un
proceso hijo y tanto configurar como modificar sus prioridades.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Describir un proceso y los recursos asociados a l.


Distinguir entre procesos, programas y hebras.
Comprender los atributos de procesos, permisos y estados.
Saber la diferencia entre la ejecucin de un programa en modo usuario y kernel.
Describir los procesos demonio (daemon).
Comprender cmo se crean los procesos nuevos.
Usar nice y renice para configurar y modificar las prioridades.

LFS201: Fundamentos de Administracin de Sistemas Linux

262

20.1 Procesos, programas y hebras


Un proceso es un programa en ejecucin y los recursos asociados, incluyendo el
ambiente, archivos abiertos, manejadores de seales, etc. El mismo programa puede ser
ejecutado ms de una vez en forma simultnea y por lo tanto es responsable de mltiples
procesos.
Al mismo tiempo, dos o ms tareas, o hebras de ejecucin, pueden compartir diversos
recursos, como los espacios completos de memoria (o solo reas de memoria en
particular), archivos abiertos. etc. Cuando hay cualquier circunstancia en la cual
se comparten recursos, hablamos de un proceso multihebra.
En otros sistemas operativos puede haber una gran diferencia entre procesos pesados y
ligeros (full heavy weight processes/light weight); en forma estricta, los procesos pesados
pueden incluir procesos livianos, o solo uno de ellos.
En Linux la situacin es bastante diferente. Cada hebra de ejecucin se considera
individualmente, la diferencia entre un proceso pesado y ligero tiene relacin solamente
con el uso de recursos compartidos y con la velocidad algo ms rpida en la conmutacin
de contextos entre hebras en ejecucin.
A diferencia de otros sistemas operativos, Linux siempre ha hecho un trabajo
excepcionalmente rpido al crear, destruir y conmutar entre procesos. Por lo tanto el
modelo adoptado para aplicaciones de multihebra se asemeja a procesos mltiples; cada
hebra se programa individualmente, como si fuera un proceso independiente normal. Esto
se realiza en vez de involucrar ms niveles de complejidad como tener un mtodo por
separado para la programacin de las hebras de un proceso, como tambin tener mtodo
de programacin entre diferentes procesos.
Al mismo tiempo, Linux respeta el POSIX y otros estndares de multihebra; por ejemplo,
cada hebra devuelve el mismo ID de proceso (llamado internamente como ID de grupo de
hebra), mientras que devuelve un ID de hebra distinta (llamado internamente como el ID
de proceso). Esto puede conducir a los desarrolladores a una confusin, pero debera ser
transparente a los administradores.

20.2 El proceso init


El primer proceso de usuario en el sistema es init, el cual tiene ID = 1. Este se inicia tan
pronto como el kernel ha sido inicializado y se montado el sistema de archivos raz.
init se ejecutar hasta que el sistema se apague; este ser el ltimo proceso de usuario
que ser terminado en ese punto. Este sirve como el padre ancestral de todos los dems
procesos de usuario, tanto directa como indirectamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

263

20.3 Procesos
Un proceso es una instancia de un programa en ejecucin. Puede estar en diversos
estados, tales como running (en ejecucin) o sleeping (durmiendo). Cada proceso tiene
un pid (Process ID), un ppid (Parent Process ID) y un pgid(Process Group ID).
Adicionalmente, cada proceso tiene un cdigo de programa, datos, variables, descriptores
de archivos y un ambiente.
init es generalmente el primer proceso de usuario que se ejecuta en el sistema, y por lo
tanto es el antecesor de todos los procesos subsecuentes, con la excepcin de aquellos
que han sido iniciados directamente por el kernel (los cuales se muestran con [] alrededor
del nombre en un listado de ps).
Si el proceso padre muere antes que el hijo, el ppid del hijo se configura en 1; es decir, el
proceso es adoptado por init. Nota: en sistemas Linux recientes que usan systemd,
el ppid ser configurado en 2, lo cual corresponde a una hebra interna del kernel
conocida como kthreadd, el que ha asumido de init el rol de adopcin de los hijos
hurfanos.
Un proceso hijo que termina su ejecucin (ya sea normal o anormalente) antes que su
padre, el cual no esper por este ni examin su cdigo de salida, se conoce como un
proceso zombie (o difunto). Los procesos zombies liberan prcticamente todos los
recursos y se mantienen en ese estado solo para transmitir su estado de salida. Una
funcin del proceso init consiste en verificar los hijos adoptivos y dejar que mueran de
forma adecuada aquellos que ya han terminado. Por lo anterior, a veces se le denomina
el asesino de zombies, o de forma ms sombra, el segador de nios.
Los procesos son controlados por la programacin de los mismos, lo cual es
completamente preferente. Solo el kernel tiene el derecho de preferencia sobre un
proceso, algo que el resto de los procesos no pueden hacerse entre ellos.
Por razones histricas, el PID ms grande ha sido limitado a un nmero de 16 bit, el cual
corresponde
a
32768.
Es
posible
modificar
este
valor
cambiando
/proc/sys/kernel/pid_max, ya que el valor por defecto puede ser inadecuado para
servidores ms grandes. A medida en la que los procesos son creados, eventualmente
alcanzarn elpid_max, punto en el cual comenzarn de nuevo en PID = 300.

LFS201: Fundamentos de Administracin de Sistemas Linux

264

20.4 Atributos de un proceso


Todos los procesos tienen ciertos atributos:

El programa que est siendo ejecutado


Contexto (estado)
Permisos
Recursos asociados

Cada proceso ejecuta algn programa. En cualquier momento el proceso puede tomar
una snapshot de s mismo a travs de la captura del estado de los registros de la CPU,
dnde se est ejecutando, qu hay en la memoria del proceso y alguna otra informacin.
Esto es el contexto del proceso.
Ya que los procesos pueden ser agendados para entrar y salir del tiempo compartido de
CPU con otros (o a veces tienen que ser puestos a dormir mientras esperan que alguna
condicin se cumpla, tal como una peticin de usuario o datos que estn por llegar), es
posible almacenar el contexto completo cuando cambia la condicin del proceso y se
restablece su ejecucin. Lo anterior es crtico para que el kernel sea capaz de cambiar al
contexto que se requiera en un instante determinado.

20.5 Control de procesos con ulimit


ulimit est construido sobre la base de un comando bash, el cual despliega o restablece
una serie de lmites de recursos asociados con procesos corriendo bajo una shell. Si se
ejecuta con el argumento -a muestra lo siguiente:
$ ulimit -a
core file size
data seg size
scheduling priority
file size
pending signals
max locked memory
max memory size
open files
pipe size
POSIX message queues
real-time priority
stack size
cpu time
max user processes
virtual memory
file locks

(blocks, -c) 0
(kbytes, -d) unlimited
(-e) 0
(blocks, -f) unlimited
(-i) 31843
(kbytes, -l) 64
(kbytes, -m) unlimited
(-n) 1024
(512 bytes, -p) 8
(bytes, -q) 819200
(-r) 0
(kbytes, -s) 8192
(seconds, -t) unlimited
(-u) 4096
(kbytes, -v) unlimited
(-x) unlimited

Un administrador de sistemas podra necesitar cambiar alguno de estos valores en una u


otra direccin:

LFS201: Fundamentos de Administracin de Sistemas Linux

265

Para restringir las capacidades de tal forma que un usuario y/o proceso no pueda
acaparar los recursos del sistema, tales como memoria, tiempo de cpu o el
nmero mximo de procesos en el sistema.
Para ampliar las capacidades de tal forma que un proceso no est limitado en sus
recursos; por ejemplo, para un servidor que maneja muchos clientes el valor por
defecto de 1024 archivos abiertos podra hacer que su trabajo sea imposible de
realizar.

Hay dos tipos de lmites:

Hard: El valor mximo, que solo el usuario root puede configurar, al que un usuario
puede elevar el lmite de recursos.
Soft: El valor del lmite actual, el cual un usuario puede modificar, pero que no
puede exceder el lmite hard.

Es posible configurar cualquier lmite en particular haciendo lo siguiente:


$ ulimit [options] [limit]

como en
$ ulimit -n 1600

lo cual aumentara el nmero mximo de descriptores de archivos a 1600.


Tenga en cuenta que los cambios afectarn solamente a la shell actual. Para que los
cambios sean efectivos para todos los usuarios logueados, es necesario
modificar /etc/security/limits.conf, un archivo muy bien autodocumentado, y luego
reiniciar.

20.6 Permisos de los procesos y setuid


Cada proceso tiene permisos basados en el usuario especfico que lo invoc.
Adicionalmente, puede tener permisos basados en el usuario dueo del archivo del
programa.
Tal como se coment en la seccin de seguridad local, los programas que estn
marcados con una s en el bit de ejecucin tienen un user id efectivo diferente al de
su usuario real. Estos se conocen como programas setuid. Se ejecutan con el user id del
usuario que es dueo del programa; los programas que no tienen setuid definidos se
ejecutan con los permisos del usuario que los corre. Los programas setuid de los cuales
root es dueo tienen el potencial de ser un problema de seguridad conocido.
La herramienta passwd es un ejemplo de un programa setuid. Cualquier usuario puede
ejecutarlo. Cuando un usuario ejecuta este programa, el proceso debe correr con
permisos de root para poder actualizar los archivos restringidos de escritura /etc/passwd
y /etc/shadow, en donde se mantienen las contraseas de usuario.
LFS201: Fundamentos de Administracin de Sistemas Linux

266

20.7 Estados de un proceso


Los procesos pueden estar en uno de varios estados posibles. Los principales son los
siguientes:

En ejecucin:
El proceso est siendo ejecutado actualmente ya sea en una CPU, o ncleo de
CPU o en la cola de ejecucin, esperando una nueva tajada de tiempo. Se
reanudar cuando el planificador decide que merece utilizar la CPU, o cuando otra
CPU queda libre y el planificador migra el proceso a esa CPU.

Durmiendo (es decir, esperando):


El proceso est esperando una solicitud (generalmente E/S) que se realiz y que
no puede continuar hasta que se complete. Cuando la peticin se ha completado,
el kernel despertar el proceso y lo pondr de vuelta en la cola de ejecucin, y se
le otorgar una tajada de tiempo en una CPU cuando el planificador decida
hacerlo.

Detenido:
El proceso ha sido suspendido. Este estado se experimenta comnmente cuando
un programador quiere examinar la memoria del programa en ejecucin, los
registros de la CPU, banderas u otros atributos. Una vez que esto se ha realizado
el proceso podra ser reanudado. Esto generalmente se realiza cuando el proceso
est siendo ejecutado desde un depurador o el usuario teclea Ctrl-Z.

Zombie:
El proceso entra en este estado cuando termina su ejecucin y ningn otro
proceso (generalmente el padre) ha inquirido acerca de su estado de salida. Tales
procesos tambin se denominan difuntos. Un proceso zombie ha liberado todos
sus recursos con excepcin de su estado de salida y su entrada en la tabla de
procesos. Si el padre de cualquier proceso muere, el proceso
es adoptado por init (PID=1) o kthreadd (PID=2).

20.8 Modos de ejecucin


En un momento dado un proceso (o cualquier hilo en particular de un proceso multihebra)
puede ser ejecutado ya sea en modo usuario o modo sistema, el cual es llamado
generalmente modo kernel por los desarrolladores del kernel.
Las instrucciones que pueden ser ejecutadas dependen del modo, el cual se aplica a nivel
de hardware, no de software.
El modo no es un estado del sistema; es un estado del procesador en un sistema
multincleo o multi-CPU, en donde cada unidad puede estar en su estado individual.
En la jerga de Intel, el modo usuario se denomina Ring 3, y el modo de sistema, Ring 0.

LFS201: Fundamentos de Administracin de Sistemas Linux

267

20.9 Modo usuario


Con la excepcin de cuando se ejecuta una llamada al sistema (lo cual se describir en
la seccin siguiente), los procesos se ejecutan en modo usuario, donde tienen menos
privilegios que en modo kernel.
Cuando un proceso se inicia, es aislado en su propio espacio de usuario para protegerlo
de otros procesos. Esto promueve la seguridad y crea una estabilidad mayor. A veces esto
se denomina aislacin de recursos del proceso.
Cada proceso que se ejecuta en modo usuario tiene su propio espacio de memoria,
partes del cual pueden ser compartidos con otros procesos; excepto para los segmentos
de memoria compartida, un proceso de usuario no puede leer desde o escribir hacia el
espacio de memoria de cualquier otro proceso.
Incluso un proceso ejecutado por el usuario root o un programa con setuid se ejecuta en
modo usuario, excepto cuando realiza una llamada al sistema, caso en el cual tiene una
capacidad limitada para acceder al hardware.

20.10 Modo Kernel


En modo kernel (de sistema) la CPU tiene acceso completo a todo el hardware en el
sistema, incluyendo perifricos, memoria, discos, etc. Si una aplicacin necesita acceso a
estos recursos debe realizar una llamada al sistema, lo cual causa un cambio de
contexto desde modo usuario a modo kernel. Este procedimiento se debe realizar
cuando se lee y escribe archivos, se crean procesos nuevos, etc.
El cdigo de las aplicaciones nunca se ejecuta en modo kernel, solo las llamadas al
sistema en s, lo cual corresponde a cdigo del kernel. Cuando la llamada al sistema est
completa, se devuelve un valor y el proceso vuelve a modo usuario con un cambio de
contexto en el sentido contrario.
Hay oportunidades en las que el sistema est en modo kernel y no tiene relacin con los
procesos, tales como manejo de interrupciones de hardware, ejecutar las rutinas del
planificador y otras tareas administrativas del sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

268

20.11 Demonios
Un demonio es un proceso que se ejecuta en segundo plano, cuyo nico propsito es
proveer algn servicio especfico a los usuarios del sistema. Los demonios:

Pueden ser muy eficientes debido a que funcionan solo cuando es necesario.
Muchos de ellos se inician en el arranque.
Sus nombres a menudo (aunque no en todos los casos) terminan con d.
Algunos ejemplos incluyen httpd y udevd.
Los demonios pueden responder a eventos externos (udevd) o a tiempo
transcurrido (crond).
Generalmente no tienen una terminal de control ni dispositivos estndar de
entrada/salida.
A veces proporcionan un mejor control de la seguridad.

Cuando se usa SysVinit, los scripts en el directorio /etc/init.d inician varios demonios del
sistema. Estos scripts invocan comandos como argumentos de una funcin de shell
llamada daemon, definida en el archivo/etc/init.d/functions.
Para ver un ejemplo de cmo se hace esto, mire el script del servicio httpd en el
directorio /etc/init.d.
Los sistemas que usan systemd utilizan mtodos similares para los demonios.

20.12 Procesos creados por el kernel


No todos los procesos son creados (o forked) a raz de los procesos padre del usuario. El
kernel Linux crea directamente dos tipos de procesos por iniciativa propia. Estos son:

Procesos internos del kernel:


Estos se ocupan de tareas de mantencin, tales como asegurar que los buffers
fluyen hacia los discos, que la carga se equilibra de manera uniforme en las
diferentes CPUs, que los controladores de dispositivos se hacen cargo del trabajo
que ha sido encolado para ellos, etc. Estos procesos a se ejecutan mientras el
sistema est corriendo y generalmente estn durmiendo, a menos de que tengan
algo especfico que realizar.

Procesos externos de usuario:


Estos son procesos que corren en espacio como las aplicaciones normales, pero
que son iniciados por el kernel. Hay muy pocos procesos de este tipo y
generalmente tienen una vida corta.

Es fcil ver los procesos de este tipo; cuando se ejecuta el siguiente comando
$ ps -elf

se listan todos los procesos en el sistema y se muestran los IDs de los procesos padres;
todos los que tienen PPID = 2se refieren a kthreadd, el hilo del kernel, cuyo trabajo es
crear tales procesos. Los nombres de estos procesos estarn encapsulados en parntesis
cuadrados, como [ksoftirqd/0], por ejemplo.
LFS201: Fundamentos de Administracin de Sistemas Linux

269

20.13 Creacin de procesos y forking


Un sistema Linux promedio est constantemente creando procesos nuevos. A menudo
esto se denomina forking; el proceso original padre contina ejecutndose mientras que
el proceso hijo recin creado se inicia.
Cuando la mayora de los computadores tenan procesadores individuales solamente,
generalmente eran configurados para que el padre realizara una pausa inicial mientras
que el hijo se iniciaba; hay una expresin de UNIX que dice Los nios son lo primero.
Sin embargo, con sistemas modernos multi CPU ambos corrern simultneamente en
diferentes CPUs.
A menudo, en vez de un fork, se sigue con un exec, en donde el proceso padre termina y
el proceso hijo hereda el ID del proceso padre. Los trminos fork y exec se usan tan a
menudo que la gente piensa que son la misma palabra.
Los sistemas UNIX antiguos a menudo usan un programa llamado spawn, el cual es
similar en diversas formas a fork y exec, pero difiere en algunos detalles. No es parte del
estndard POSIX ni de Linux.
Para tener una idea de cmo un proceso podra iniciarse, considera un servidor web que
maneja muchos clientes. El servidor web puede lanzar un proceso nuevo cada vez que
una conexin nueva se hace a travs de un cliente. Por otro lado, podra iniciar
simplemente un nuevo hilo como parte del mismo proceso; en Linux realmente no existe
mucha diferencia en el aspecto tcnico entre crear un proceso completo o solo un hilo
nuevo, ya que cada mecanismo toma aproximadamente el mismo tiempo y usa una
cantidad similar de recursos.
Otro ejemplo es el demonio sshd: este es iniciado cuando el proceso init ejecuta el script
de inicio sshd, el que a su vez es responsable de iniciar el demonio sshd. Este proceso
demonio escucha solicitudes ssh de usuarios remotos.
Cuando se recibe una solicitud, sshd crea una copia nueva de s mismo para atender el
requerimiento de servicio. Cada usuario remoto obtiene su propia copia del
demonio sshd que est en ejecucin, para atender su conexin remota. El
proceso sshd inciar el programa login para validar el usuario remoto. Si la autenticacin
es exitosa, el proceso login har un fork de shell (por ejemplo, bash) para interpretar los
comandos de usuario, y as sucesivamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

270

20.14 Creacin de procesos en una Shell


Qu sucede cuando un usuario ejecuta un comando en un intrprete de shell, tal
como bash?

Un proceso nuevo se crea, como un fork desde la shell de inicio de sesin del
usuario.

Una llamada al sistema de espera pone a dormir el proceso de la shell padre.

El comando se carga en el espacio del proceso hijo a travs de la llamada al


sistema exec. En otras palabras, el cdigo del comando reemplaza el
programa bash en el espacio de memoria del proceso hijo.

El comando completa su ejecucin y el proceso hijo muere a travs de la llamada


al sistema de salida.

La shell padre se despierta nuevamente por la muerte del proceso hijo y procede a
crear un nuevo intrprete de comandos. Entonces la shell padre espera por la
prxima solicitud de comando desde el usuario, momento en el cual el ciclo se
repetir.

Si un comando se ejecuta en segundo plano (agregando un signo & al final de la lnea de


comandos), la shell padre se salta la solicitud de espera y queda libre para crear una
nueva shell inmediatamente, permitiendo que el proceso en segundo plano se ejecute en
paralelo. Por otro lado, para las solicitudes de primer plano la shell espera hasta que el
proceso hijo se ha completado o es detenido a travs de una seal.
Algunos comandos de shell (tales como echo y kill) estn construidos en la shell misma y
no implican la carga de archivos de programa. Para la ejecucin de esos comandos no se
utiliza fork ni exec.

20.15 Uso de nice para establecer prioridades


La prioridad de los procesos puede ser controlada a travs de los
comandos nice y renice. Desde los primeros das de UNIX la idea ha sido que el proceso
nice disminuya su prioridad para cedrsela de los dems. Por lo tanto, a medida en
que nice es
mayor,
la
prioridad
es
menor.
El rango de nice va desde -20 (la prioridad ms alta) a +19 (la prioridad ms baja). La
forma normal de ejecutar nice es la siguiente:
$ nice -n 5 command [ARGS]

lo

cual

aumentara

nice

en

5.

Esto

es

equivalente

hacer

lo

siguiente:

$ nice -5 command [ARGS]

LFS201: Fundamentos de Administracin de Sistemas Linux

271

Si usted no provee un valor para nice, se utilizar el predeterminado, el cual consiste en


incrementarlo en 10. Si no da ningn argumento se informar del valor actual. Por
ejemplo:
$ nice
0
$ nice cat &
[1] 24908
$ ps -l
F S UID
PID PPID C
0 S 500 4670 4603 0
0 S 500 24855 4670 0
0 T 500 24908 24855 0
0 R 500 24909 24855 0

PRI NI ADDR SZ WCHAN TTY


80
0 - 16618 wait
pts/0
80
0 - 16560 wait
pts/0
90 10 - 14738 signal pts/0
80
0 - 15887 pts/0

TIME
00:00:00
00:00:00
00:00:00
00:00:00

CMD
bash
bash
cat
ps

Tenga en cuenta que al aumentar el valor de nice de un proceso no significa que este no
se ejecutar; incluso podra obtener todo el tiempo de la CPU si no hay nada con lo cual
competir.
Si usted provee un gran incremento o decremento que sale del rango -20 a 19, el valor de
incremento ser truncado.

20.16 Modificar el valor de nice


Por defecto solo un superusuario puede disminuir el valor de nice, es decir, incrementar la
prioridad. Sin embargo es posible darle a los usuarios normales la habilidad de disminuir
el valor de nice para sus procesos, en un rango predeterminado, lo cual se realiza
editando el archivo /etc/security/limits.conf.
Para cambiar el valor de nice de un proceso que est en ejecucin, usamos el
comando renice, as:
$ renice +3 13848

lo cual incrementar en valor de nice en 3, del proceso con pid = 13848. Puede hacerlo
con ms de un proceso a la vez y hay algunas otras opciones interesantes que puede ver
con man renice.

Comprobacin de conocimientos 20.1

LFS201: Fundamentos de Administracin de Sistemas Linux

272

Comprobacin de conocimientos 20.2

20.17 Laboratorio 20.1


Laboratorio 20.1: Control de procesos con ulimit
Por favor haga:
$ help ulimit
y lea /etc/security/limits.conf
antes de ejecutar los pasos que vienen a continuacin.
1. Inicie una terminal shell ejecutando bash (o abra una terminal nueva) de tal forma que los
cambios sean efectivos en esa shell solamente. Vea el lmite actual del nmero de archivos
abiertos y explcitamente el nmero de los lmites hard y soft.
2. Configure el valor del lmite hard y verifique que haya funcionado.
3. Configure el valor del lmite hard a 2048 y verifique que haya funcionado.
4. Intente configurar el lmite al valor previo. Funcion?

LFS201: Fundamentos de Administracin de Sistemas Linux

273

Solucin 20.1
1. $ bash
$ ulimit -n
1024
$ ulimit -S -n 1024
$ ulimit -H -n
4096
2. $ ulimit -n hard
$ ulimit -n
4096
3. $ ulimit -n 2048
$ ulimit -n
2048
$ ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n
2048
No es posible hacerlo!
Tenga en cuenta que si hubiramos escogido un lmite diferente, como el tamao del stack (-s),
podramos aumentar el valor nuevamente debido a que el lmite hard es unlimited.

LFS201: Fundamentos de Administracin de Sistemas Linux

274

20.17 Laboratorio 20.2


Laboratorio 20.2: Examinar la actividad de System V IPC

System V IPC es un mtodo bastante antiguo de Comunicacin Entre Procesos (IPC) que se
remonta a los primeros das de UNIX. Este involucra tres mecanismos:

Segmentos de memoria compartida


Semforos
Colas de mensajes

Algunos programas modernos tienen a usar los mtodos de POSIX IPC para esos tres mecanismos,
pero todava se puede encontrar un montn de aplicaciones System V IPC.
Ejecute el siguiente comando para obtener un resumen general de la actividad System V IPC en su
sistema:
$ ipcs
------ Message Queues -------key
msqid owner perms used-bytes
------ Shared Memory Segments -------key
0x01114703
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000

shmid
0
98305
196610
23068675
23101444
23134213
24051718
23756807
24018952
23363593
1441811

owner
root
coop
coop
coop
coop
coop
coop
coop
coop
coop
coop

perms
600
600
600
700
600
600
600
600
600
700
600

messages
bytes
1000
4194304
4194304
1138176
393216
524288
393216
524288
67108864
95408
2097152

nattch
6
2
2
2
2
2
2
2
2
2
2

status
dest
dest
dest
dest
dest
dest
dest
dest
dest
dest

------ Semaphore Arrays -------key


0x00000000
0x00000000
0x00000000
0x00000000
0x00000000

semid
98304
131073
163842
196611
229380

owner
apache
apache
apache
apache
apache

perms
600
600
600
600
600

nsems
1
1
1
1
1

LFS201: Fundamentos de Administracin de Sistemas Linux

275

Tenga en cuenta que casi todos los segmentos de memoria compartida actualmente en ejecucin
tienen 0 en el campo key (tambin conocido como IPC_PRIVATE), lo cual significa que solo se
comparten entre procesos en una relacin padre/hijo. Adems, todos con la excepcin de uno,
estn marcados para destruccin, ya que no tienen procesos asociados.
Es posible obtener ms informacin acerca de los procesos que han creado los segmentos y que se
han asociado a ellos con:
$ ipcs p
------ Message Queues PIDs -------msqid
owner lspid lrpid
------ Shared Memory Creator/Last-op PIDs -------shmid
0
98305
196610
23068675
23101444
23134213
24051718
23756807
24018952
23363593
1441811

owner
root
coop
coop
coop
coop
coop
coop
coop
coop
coop
coop

cpid
1023
2265
2138
989
989
989
20573
10735
17875
989
2048

lpid
1023
18780
18775
1663
1663
1663
1663
1663
1663
1663
20573

Por lo tanto, haciendo:


$ ps aux |grep -e 20573 -e 2048
coop
coop
coop

2048 5.3 3.7 1922996 305660 ? Rl Oct27 77:07 /usr/bin/gnome-shell


20573 1.9 1.7 807944 141688 ? Sl 09:56 0:01 /usr/lib64/thunderbird/thunderbird
20710 0.0 0.0 112652 2312 pts/0 S+ 09:57 0:00 grepcolor=auto -e 20573 -e 2048

LFS201: Fundamentos de Administracin de Sistemas Linux

276

vemos que thunderbird est usando un segmento de memoria compartida creado por gnomeshell.
Realice estos pasos en su sistema e identifique los diversos recursos que estn siendo usados y por
quin. Hay alguna fuga potencial en el sistema (recursos compartidos que no estn en uso por
ningn proceso)? Por ejemplo:
$ ipcs
....
------ Shared Memory Segments -------key

shmid

owner

perms bytes

nattch status

....
0x00000000
0x0000001a
....

622601
13303818

coop
coop

600
666

2
0

2097152
8196

dest

muestra un segmento de memoria compartida que no tiene procesos asociados y que no est
marcado para ser destruido. Por lo anterior, si el proceso contina as para siempre y no se asocia a
ningn proceso, podra significar una fuga de memoria.

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Describir un proceso y los recursos asociados a l.


Distinguir entre procesos, programas y hebras.
Comprender los atributos de procesos, permisos y estados.
Saber la diferencia entre la ejecucin de un programa en modo usuario y kernel.
Describir los procesos demonio (daemon).
Comprender cmo se crean los procesos nuevos.
Usar nice y renice para configurar y modificar las prioridades.

LFS201: Fundamentos de Administracin de Sistemas Linux

277

Captulo 21. Seales


Las seales se usan para emitir notificaciones para que los procesos tomen accin en
respuesta a eventos que generalmente son impredecibles. Estos pueden ser generados
desde dentro de un proceso, o desde eventos externos y otros procesos. Muchas seales
son fatales y resultan en el trmino del proceso. Sin embargo, la muerte de los procesos
se puede evitar si los desarrolladores del programa deciden manejar ciertas seales de
finalizacin.
Por otro lado, muchas seales son ms benignas y son informativas solamente o solicitan
otro tipo de acciones. Es posible enviar seales (incluyendo aquellas que inducen a la
finalizacin de un proceso) desde la lnea de comandos usando kill, killall y pkill.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar qu son las seales y cmo se usan.


Conocer los diferentes tipos de seales que estn disponible en Linux.
Usar kill, killall and pkill para enviar seales desde la lnea de comandos.

LFS201: Fundamentos de Administracin de Sistemas Linux

278

21.1 Qu son las seales?


Las seales son uno de los mtodos ms antiguos de Comunicacin InterProcesos (IPC) y se usan para notificar procesos acerca de eventos asincrnicos (o
excepciones).
Por asincrnico entendemos que el proceso receptor de la seal puede:

No esperar que ocurra el evento.

Esperar el evento, pero no saber en qu momento va a ocurrir.

Por ejemplo, si un usuario decide terminar un programa en ejecucin, podra enviar una
seal al proceso a travs del kernel para interrumpir y finalizar el proceso.
Hay dos vas a travs de las cuales se envan seales a los procesos:

Desde el kernel a un proceso de usuario como resultado de una excepcin o de un


error de programacin.

Desde un proceso de usuario (usando una llamada al sistema) al kernel, el cual la


enviar a un proceso de usuario. El proceso que enva la seal puede ser el
mismo que la reciba de vuelta.

Las seales solamente pueden enviarse entre procesos de propiedad del mismo usuario,
o desde un proceso del superusuario a cualquier proceso.
Cuando un proceso recibe una seal, lo que har a continuacin depende de la forma en
la cual el programa est escrito. Puede tomar acciones especficas, codificadas en el
programa para manipular la seal, o solo responder de acuerdo a los valores por defecto
en el sistema. Dos seales (SIGKILL y SIGSTOP, que se mencionarn en seguida) no
pueden ser manipuladas y siempre finalizarn el programa.

21.2 Tipos de seales


Hay una variedad de tipos de seales, y la seal en particular que es enviada indica el
tipo de evento (o excepcin) ocurrida. Generalmente las seales se usan para manejar
dos cosas:
1. Excepciones detectadas por el hardware (tal como una referencia ilegal a

memoria).
2. Excepciones generadas por el ambiente (tal como la finalizacin prematura de un

proceso desde la terminal del usuario).


Para ver una lista de las seales en Linux, junto con los nmeros correspondientes, haga
lo siguiente:

LFS201: Fundamentos de Administracin de Sistemas Linux

279

$ kill -l
1)
6)
11)
16)
21)
26)
31)
38)
43)
48)
53)
58)
63)

SIGHUP
SIGABRT
SIGSEGV
SIGSTKFLT
SIGTTIN
SIGVTALRM
SIGSYS
SIGRTMIN+4
SIGRTMIN+9
SIGRTMIN+14
SIGRTMAX-11
SIGRTMAX-6
SIGRTMAX-1

2)
7)
12)
17)
22)
27)
34)
39)
44)
49)
54)
59)
64)

SIGINT
SIGBUS
SIGUSR2
SIGCHLD
SIGTTOU
SIGPROF
SIGRTMIN
SIGRTMIN+5
SIGRTMIN+10
SIGRTMIN+15
SIGRTMAX-10
SIGRTMAX-5
SIGRTMAX

3)
8)
13)
18)
23)
28)
35)
40)
45)
50)
55)
60)

SIGQUIT
SIGFPE
SIGPIPE
SIGCONT
SIGURG
SIGWINCH
SIGRTMIN+1
SIGRTMIN+6
SIGRTMIN+11
SIGRTMAX-14
SIGRTMAX-9
SIGRTMAX-4

4)
9)
14)
19)
24)
29)
36)
41)
46)
51)
56)
61)

SIGILL
SIGKILL
SIGALRM
SIGSTOP
SIGXCPU
SIGIO
SIGRTMIN+2
SIGRTMIN+7
SIGRTMIN+12
SIGRTMAX-13
SIGRTMAX-8
SIGRTMAX-3

5)
10)
15)
20)
25)
30)
37)
42)
47)
52)
57)
62)

SIGTRAP
SIGUSR1
SIGTERM
SIGTSTP
SIGXFSZ
SIGPWR
SIGRTMIN+3
SIGRTMIN+8
SIGRTMIN+13
SIGRTMAX-12
SIGRTMAX-7
SIGRTMAX-2

Las seales de SIGRTMIN se denominan como de tiempo real y son una adicin
relativamente reciente. No tienen un propsito predefinido y difieren de forma importante
en algunos aspectos con relacin a las seales normales; pueden ser encoladas y son
manejadas en orden FIFO (First In First Out).
El significado implcito en el tipo de seal indica qu evento caus que fuera enviada.
Mientras los usuarios pueden explcitamente enviar cualquier tipo de seal a uno de sus
procesos, el significado implcito podra no estar relacionado al nmero o tipo de la seal,
y puede usarse en cualquier forma que el proceso desea.
man 7 signal le dar mayor informacin al respecto.

21.3 kill
Un proceso no puede enviar una seal directamente a otro proceso; este debe pedirle al
kernel que enve la seal mediante la ejecucin de una llamada al sistema. Los usuarios
(incluyendo el superusuario) pueden enviar seales a otros procesos desde la lnea de
comandos o scripts usando kill, tal como se muestra a continuacin:
$ kill 1991
$ kill -9 1991
$ kill -SIGKILL 1991

en el comando anterior enviamos una seal al proceso con PID = 1991. Si no se provee
un nmero de seal (como en el primer ejemplo), el valor por defecto a enviar es SIGTERM
(15), una seal de finalizacin que puede ser manipulada; el programa puede tomar una
accin evasiva o limpiarse a s mismo en vez de finalizar inmediatamente. Si esta seal es
ignorada, el usuario puede enviar una SIGKILL (9), la cual no puede ser ignorada.
El nombre kill es un nombre realmente malo, el cual sobrevive por razones histricas.
Aunque a menudo se utiliza para matar (terminar) procesos, la funcin real del comando
es enviar cualquier y todas las seales a los procesos, incluso a los que son benignos y
totalmente informativos.

LFS201: Fundamentos de Administracin de Sistemas Linux

280

LFS201: Fundamentos de Administracin de Sistemas Linux

281

21.4 killall y pkill


killall termina todos los procesos con un nombre dado, en el caso que el usuario tenga
los permisos necesarios. Usa un nombre de comando en vez de un ID de proceso y
puede ser ejecutado as:
$ killall bash
$ killall -9 bash
$ killall -SIGKILL bash

pkill enva una seal a un proceso utilizando un criterio de seleccin:


$ pkill [-signal] [options] [pattern]

Por ejemplo:
$ pkill -u libby foobar

terminar todos los procesos de libby que se llamen foobar.


Otro ejemplo:
$ pkill -HUP rsyslogd

hace que rsyslog relea su archivo de configuracin.

Comprobacin de conocimientos 21.1

Comprobacin de conocimientos 21.2

LFS201: Fundamentos de Administracin de Sistemas Linux

282

Comprobacin de conocimientos 21.3

Comprobacin de conocimientos 21.4

LFS201: Fundamentos de Administracin de Sistemas Linux

283

21.5 Laboratorio 21.1


Laboratorio 21.1: Examinar prioridades de las sealas y su ejecucin
Le hemos proporcionado un programa en C que incluye un manejador de seales el que puede
manejar cualquier seal. El manejador en cuestin evita hacer llamadas al sistema (tales como las
que podran ocurrir mientras se realizan operaciones de E/S).
/*
* Examining Signal Priorities and Execution.
*
* The code herein is: Copyright the Linux Foundation, 2014
* Author: J. Cooperstein
*
* This Copyright is retained for the purpose of protecting free
* redistribution of source.
*
* This code is distributed under Version 2 of the GNU General Public
* License, which you should have received with the source.
* @*/
#include #include #include #include #include #include
#include
#include
#include
#include
#include
#define NUMSIGS 64
/* prototypes of locally-defined signal handlers */
void (sig_handler) (int);
int sig_count[NUMSIGS + 1]; /* counter for signals received */
volatile static int line = 0;
volatile int signumbuf[6400], sigcountbuf[6400];
int main(int argc, char *argv[])
{
sigset_t sigmask_new, sigmask_old;
struct sigaction sigact, oldact;
int signum, rc, i;
pid_t pid;
pid = getpid();
/* block all possible signals */
rc = sigfillset(&sigmask_new);
rc = sigprocmask(SIG_SETMASK, &sigmask_new, &sigmask_old);
/* Assign values to members of sigaction structures */
LFS201: Fundamentos de Administracin de Sistemas Linux

284

memset(&sigact, 0, sizeof(struct sigaction));


sigact.sa_handler = sig_handler; /* we use a pointer to a handler */
sigact.sa_flags = 0; /* no flags */
/* VERY IMPORTANT */
sigact.sa_mask = sigmask_new; /* block signals in the handler itself */
/*
* Now, use sigaction to create references to local signal
* handlers * and raise the signal to myself
*
/ printf
("\nInstalling signal handler and Raising signal for signal number:\n\n");
for (signum = 1; signum <= NUMSIGS; signum++) {
if (signum == SIGKILL || signum == SIGSTOP || signum == 32
|| signum == 33) {
printf(" --");
continue;
}
sigaction(signum, &sigact, &oldact);
/* send the signal 3 times! */
rc = raise(signum);
rc = raise(signum);
rc = raise(signum);
if (rc) {
printf("Failed on Signal %d\n", signum);
} else {
printf("%4d", signum);
if (signum % 16 == 0)
printf("\n");
}
}
fflush(stdout);
/* restore original mask */
rc = sigprocmask(SIG_SETMASK, &sigmask_old, NULL);
printf("\nSignal Number(Times Processed)\n");
printf("--------------------------------------------\n");
for (i = 1; i <= NUMSIGS; i++) {
printf("%4d:%3d ", i, sig_count[i]);
if (i % 8 == 0)
printf("\n");
}
LFS201: Fundamentos de Administracin de Sistemas Linux

285

printf("\n");
printf("\nHistory: Signal Number(Count Processed)\n");
printf("--------------------------------------------\n");
for (i = 0; i < line; i++) {
if (i % 8 == 0)
printf("\n");
printf("%4d(%1d)", signumbuf[i], sigcountbuf[i]);
}
printf("\n");
exit(EXIT_SUCCESS);
}
void sig_handler(int sig)
{
sig_count[sig]++;
signumbuf[line] = sig;
sigcountbuf[line] = sig_count[sig];
line++;
}

Si est tomando la versin autodidacta en lnea de este curso, encontrar el cdigo fuente
disponible para su descarga en la pantalla Lab. Necesitar compilarlo y ejecutarlo como se muestra
a continuacin:
$ gcc -o signals signals.c
$ ./signals
Al ser ejecutado, el programa realiza lo siguiente:
No enva las seales SIGKILL o SIGSTOP, las cuales no pueden ser manejadas y siempre
finalizan un programa.
Almacena la secuencia de seales a medida en que llegan y actualiza un arreglo de contadores
para cada seal que indica cuntas veces la seal ha sido manejada.
Comienza por suspender el proceso de todas las seales y luego instala un conjunto nuevo de
manejadores de seal para todas ellas.
Enva cada seal posible mltiples veces, luego desbloquea el manejo de seales e invoca a los
manipuladores de seales que estaban en espera.
Imprime las estadsticas, incluyendo:
o El nmero total de veces que cada seal fue recibida.
o El orden en el cual se recibieron las seales, sealando cada vez el nmero total de
veces que la seal se haa recibido hasta ese momento.
Tenga en cuenta lo siguiente:

LFS201: Fundamentos de Administracin de Sistemas Linux

286

Si una seal determinada se emite en varias oportunidades mientras el proceso las haba
bloqueado, el proceso las recibe mltiples veces? El comportamiento de seales en tiempo
real es diferente de las seales normales?
El proceso recibe todas las seales, o algunas de ellas son manejadas antes que lleguen a l?
En qu orden se reciben las seales?

La seal SIGCONT (18 en x86 puede que no logre llegar a destino, se le ocurre por qu?
Nota:
En algunas distribuciones Linux las seales 32 y 33 no pueden ser bloqueadas y causarn que el
programa falle. A pesar de que los archivos de cabecera del sistema indican SIGRTMIN=32, el
comando kill -l indica SIGRTMIN=34. Tenga en cuenta que POSIX dice que se deberan usar
nombres en vez de nmeros, los cuales estn habilitados para ser completamente dependientes de
la implementacin. En general se debea evitar el envo de estas seales.

LFS201: Fundamentos de Administracin de Sistemas Linux

287

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar qu son las seales y cmo se usan.


Conocer los diferentes tipos de seales que estn disponibles en Linux.
Usar kill, killall and pkill para enviar seales desde la lnea de comandos.

LFS201: Fundamentos de Administracin de Sistemas Linux

288

Captulo 22. Monitoreo del sistema


Linux tiene una amplia variedad disponible de herramientas de monitoreo del sistema,
incluyendo top, ps y sar. La mayora de estas herramientas hacen un uso extensivo de
los pseudosistemas de archivos montados en /proc y /sys. Si bien es cierto que hay
interfaces grficas (dependientes de la distribucin), nos concentraremos en los mtodos
de la lnea de comandos.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Reconocer y usar las herramientas disponibles de monitoreo del sistema.


Usar los pseudosistemas de archivos /proc y /sys.
Usar sar para obtener informacin de la actividad y rendimiento del sistema, para
crear reportes en forma cmoda para su anlisis.

LFS201: Fundamentos de Administracin de Sistemas Linux

289

22.1 Herramientas disponibles de monitoreo


Las distribuciones Linux vienen con diversas herramientas estndar instaladas por
defecto para medir el rendimiento y visualizar el estado del sistema. Muchas de ellas
provienen de otros sistemas operativos tipo UNIX, mientras que otras fueron
desarrolladas especficamente para Linux.
La mayora de estas herramientas hacen uso de pseudosistemas de archivos montados,
especialmente /proc, y /sys de forma secundaria (los cuales discutimos anteriormente
cuando tratamos los sistemas de archivos y configuracin del kernel). En este captulo
trabajaremos con ambos.
Aunque existe una serie de monitores grficos del sistema, los cuales esconden muchos
detalles, en este curso consideraremos solamente las herramientas de la lnea de
comandos.
Antes de considerar algunas de las herramientas principales veremos un resumen
clasificado por tipo; tenga en cuenta que algunas de las herramientas tienen dominios
superpuestos de cobertura.

LFS201: Fundamentos de Administracin de Sistemas Linux

290

22.2 Los pseudosistemas de archivos /proc y /sys


Los pseudosistemas de archivos /proc y /sys contienen bastante informacin acerca del
sistema. Por otro lado, muchas de las entradas en estos rboles de directorios son
escribibles y pueden usarse para cambiar el comportamiento del sistema; en la mayora
de los casos esto requiere del usuario root.
Estos son pseudosistemas de archivos porque existen totalmente en memoria; si usted
revisa la particin del disco cuando el sistema no est en ejecucin, se dar cuenta que
solo hay un directorio vaco, el cual se usa como punto de montaje.
Por otra parte, la informacin que se despliega es obtenida solamente cuando se lee; no
hay un sondeo constante o peridico para actualizar las entradas.

22.3 Conceptos bsicos de /proc


El pseudosistema de archivos /proc tiene una historia larga; tiene su origen en otras
variantes de sistemas operativos tipo UNIX y en un comienzo fue desarrollado para
desplegar informacin acerca de los procesos en el sistema, cada uno de los cuales
tiene su propio directorio en /proc, con todas las caractersticas importantes de los
procesos.
A travs del tiempo creci para contener mucha informacin acerca de las propiedades
del sistema, tales como interrupciones, memoria, red, etc, en una forma un tanto
anrquica. Todava es usado de forma extensiva y a menudo nos referiremos a l.

22.4 un vistazo de /proc


Echemos un vistazo a lo que hay en el pseudosistema de archivos /proc:
$ ls -F /proc
1/
11214/
modules
10/
12/
mounts@
1017/
1284/
mtrr
1018/
1290/
net@
1023/
13/
pagetypeinfo
1031/
1301/
partitions
10544/ 14/
sched_debug
10545/ 1400/
schedstat
1061/
1444/

15887/ 19/

26/

3706/ 509/

614/ 7402/ asound/

15891/ 1929/

260/

3707/ 510/

619/ 741/

buddyinfo

15896/ 1934/

26218/ 3708/ 511/

620/ 742/

bus/

15899/ 1959/

264/

3709/ 512/

622/ 743/

cgroups

15905/ 19950/ 265/

3713/ 513/

623/ 744/

cmdline

15909/ 2/

267/

3714/ 514/

625/ 761/

config.gz

15912/ 2008/

268/

375/

515/

626/ 763/

consoles

15919/ 2079/

27/

396/

517/

641/ 7699/ cpuinfo

15928/ 21/

28/

398/

519/

642/ 8/

LFS201: Fundamentos de Administracin de Sistemas Linux

crypto

291

scsi/
10671/ 1452/
self@
10802/ 1465/
slabinfo
10803/ 1484/
softirqs
10911/ 1490/
stat
11/
1503/
swaps
11087/ 15466/
sys/
11089/ 15471/
sysrq-trigger
11090/ 15616/
sysvipc/
11103/ 1563/
timer_list
11104/ 15632/
timer_stats
11105/ 15642/
tty/
11123/ 15650/
uptime
11124/ 15651/
version
11125/ 1570/
vmallocinfo
11126/ 1571/
vmnet/
11163/ 15719/
vmstat
11165/ 15723/
zoneinfo
11166/ 15791/
11187/ 1582/
11194/ 15837/
11196/ 15840/
11197/ 15844/
11199/ 15847/
11206/ 15871/

15938/ 22/

280/

414/

521/

15941/ 2298/

281/

42/

5302/ 645/ 8226/ diskstats

15944/ 23/

29/

43/

537/

15957/ 237/

3/

4555/ 5376/ 649/ 8323/ driver/

15963/ 238/

30/

460/

15966/ 239/

30170/ 480/

5503/ 652/ 8443/ fb

15982/ 24/

31/

481/

5506/ 66/

8444/ filesystems

16/

240/

32/

482/

5515/ 67/

845/

16016/ 241/

33/

484/

5516/ 68/

8479/ interrupts

16030/ 242/

34/

485/

5524/ 684/ 8594/ iomem

16037/ 243/

35/

486/

5525/ 690/ 8633/ ioports

16039/ 244/

3557/

489/

5530/ 697/ 8643/ irq/

16065/ 245/

3558/

491/

5531/ 698/ 8644/ kallsyms

16066/ 246/

3560/

494/

5536/ 699/ 8726/ kcore

16071/ 247/

36/

496/

559/

7/

16073/ 248/

3687/

498/

560/

701/ 9/

16089/ 24819/ 3697/

5/

5645/ 709/ 9277/ kmsg

16112/
1621/
16477/
16515/
1654/
17/
18/

500/
501/
502/
503/
504/
505/
507/

5665/
5678/
583/
584/
599/
600/
613/

24822/
24823/
24879/
257/
258/
259/
2591/

3698/
3699/
37/
3702/
3703/
3704/
3705/

538/

644/ 8036/ devices

648/ 824/

dma

651/ 8435/ execdomains

712/
714/
715/
717/
718/
723/
727/

fs/

8903/ keys

9284/
9816/
9853/
9871/
988/
9885/
acpi/

key-users

kpagecount
kpageflags
latency_stats
loadavg
locks
meminfo
misc

Primero vemos que hay un subdirectorio por cada proceso en el sistema, ya sea si estn
durmiendo,
en
ejecucin
o
programados.
Revisando
uno
al
azar:
$ ls -lF /proc/16477
total 0
-r-------- 1 coop coop 0 Sep 10 18:11 auxv
-rrr-- 1 coop coop 0 Sep 10 12:28 cgroupw------- 1 coop coop 0 Sep 10
18:11 clear_refs
-rrr-- 1 coop coop 0 Sep 10 08:30 cmdline
-rw-rr-- 1 coop coop 0 Sep 10 12:28 comm
-rw-rr-- 1 coop coop 0 Sep 10 18:11 coredump_filter
-rrr-- 1 coop coop 0 Sep 10 18:11 cpuset
lrwxrwxrwx 1 coop coop 0 Sep 10 18:11 cwd -> /usr/local/coop7/
-r-------- 1 coop coop 0 Sep 10 18:11 environ
LFS201: Fundamentos de Administracin de Sistemas Linux

292

lrwxrwxrwx 1 coop coop 0 Sep 10 08:30 exe ->


/usr/lib64/thunderbird/thunderbird*
dr-x------ 2 coop coop 0 Sep 10 08:30 fd/
dr-x------ 2 coop coop 0 Sep 10 18:11 fdinfo/
-rw-rr-- 1 coop coop 0 Sep 10 18:11 gid_map

r-------- 1 coop coop 0 Sep 10 18:11 io


-rrr-- 1 coop coop 0 Sep 10 18:11 latency
-rrr-- 1 coop coop 0 Sep 10 18:11 limits
-rrr-- 1 coop coop 0 Sep 10 08:30 maps
-rw------- 1 coop coop 0 Sep 10 18:11 mem
-rrr-- 1 coop coop 0 Sep 10 08:30 mountinfo
-rrr-- 1 coop coop 0 Sep 10 18:11 mounts
-r-------- 1 coop coop 0 Sep 10 18:11 mountstats
dr-xr-xr-x 4 coop coop 0 Sep 10 18:11 net/
dr-xxx 2 coop coop 0 Sep 10 18:11 ns/
-rw-rr-- 1 coop coop 0 Sep 10 18:11 oom_adj
-rrr-- 1 coop coop 0 Sep 10 18:11 oom_score
-rw-rr-- 1 coop coop 0 Sep 10 18:11 oom_score_adj
-r-------- 1 coop coop 0 Sep 10 18:11 pagemap
-r-------- 1 coop coop 0 Sep 10 18:11 personality
-rw-rr-- 1 coop coop 0 Sep 10 18:11 projid_map
lrwxrwxrwx 1 coop coop 0 Sep 10 18:11 root -> //
-rw-rr-- 1 coop coop 0 Sep 10 18:11 sched
-rrr-- 1 coop coop 0 Sep 10 18:11 schedstat
-rrr-- 1 coop coop 0 Sep 10 18:11 smaps
-r-------- 1 coop coop 0 Sep 10 18:11 stack
-rrr-- 1 coop coop 0 Sep 10 08:35 stat
-rrr-- 1 coop coop 0 Sep 10 16:59 statm
-rrr-- 1 coop coop 0 Sep 10 08:31 status
-r-------- 1 coop coop 0 Sep 10 18:11 syscall
dr-xr-xr-x 35 coop coop 0 Sep 10 10:10 task/
-rw-rr-- 1 coop coop 0 Sep 10 18:11 uid_map
-rrr-- 1 coop coop 0 Sep 10 18:11 wchan

vemos que este corresponde al cliente de correo electrnico thunderbird. Este directorio
est lleno de informacin, tanto acerca del estado y de los recursos que el proceso est
usando. Por ejemplo:
$ cat /proc/16477/status
Name: thunderbird
State: S (sleeping)
Tgid: 16477
Ngid: 0
Pid: 16477
PPid: 15912
TracerPid: 0
Uid: 500 500 500 500
Gid: 500 500 500 500
FDSize: 256
Groups: 500
VmPeak: 1262996 kB
VmSize: 1139452 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 241644 kB
VmRSS: 201404 kB
LFS201: Fundamentos de Administracin de Sistemas Linux

293

VmData: 435360 kB
VmStk: 224 kB
VmExe: 88 kB
VmLib: 89756 kB
VmPTE: 1488 kB
VmSwap: 0 kB
Threads: 33
SigQ: 1/31853
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001001000
SigCgt: 0000000f800144ef
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 590633
nonvoluntary_ctxt_switches: 5881

Otras entradas proveen informacin de todo el sistema. Por ejemplo, las estadsticas
de interrupciones se muestran aqu:
$ cat /proc/interrupts
CPU0
CPU1
CPU2
CPU3
0:
127
0
0
0 IO-APIC-edge
timer
1:
22610
26632
22019
24652 IO-APIC-edge
i8042
8:
0
0
1
0 IO-APIC-edge
rtc0
9:
0
0
0
0 IO-APIC-fasteoi acpi
16:
10
13
13
11 IO-APIC-fasteoi uhci_hcd:usb3
18:
81801
33810 269011
97396 IO-APIC-fasteoi ehci_hcd:usb1,
uhci_hcd:usb5, uhci_hcd:usb8,enp4s2
19:
0
0
0
0 IO-APIC-fasteoi uhci_hcd:usb7
21:
0
0
0
0 IO-APIC-fasteoi uhci_hcd:usb4
23: 459503 414973 2294258 1886762 IO-APIC-fasteoi ehci_hcd:usb2,
uhci_hcd:usb6
43: 7839477
12
17
14 PCI-MSI-edge
enp2s0
44:
90833
73862 431567 197408 PCI-MSI-edge
ahci
45: 2308942 2324143 2037740 2226651 PCI-MSI-edge
nouveau
46:
1706
1853
1806
1740 PCI-MSI-edge
snd_hda_intel
NMI:
4021
3150
3201
3076 Non-maskable interrupts
LOC: 8186969 8028365 8257507 7848638 Local timer interrupts
SPU:
0
0
0
0 Spurious interrupts
PMI:
4021
3150
3201
3076 Performance monitoring interrupts
IWI: 455847 423644 402570 390176 IRQ work interrupts
RTR:
0
0
0
0 APIC ICR read retries
RES: 6489645 6430364 6430834 6271845 Rescheduling interrupts
CAL: 4816017 4550737 4171364 4829737 Function call interrupts
TLB: 909001 1140883 879189 1152043 TLB shootdowns
TRM:
0
0
0
0 Thermal event interrupts
THR:
0
0
0
0 Threshold APIC interrupts
MCE:
0
0
0
0 Machine check exceptions
LFS201: Fundamentos de Administracin de Sistemas Linux

294

MCP:
ERR:
MIS:

133
0
0

133

133

133 Machine check polls

Para cada interrupcin vemos su tipo, cuntas veces ha sido manipulada en cada CPU y
qu dispositivos estn registrados para responder a ella. Tambin obtenemos estadsticas
globales.

22.5 /proc/sys
La mayora de los parmetros ajustables del sistema pueden encontrarse en el rbol de
subdirectorios /proc/sys:
$ ls -F /proc/sys
total 0
dr-xr-xr-x 1 root
dr-xr-xr-x 1 root
dr-xr-xr-x 1 root
dr-xr-xr-x 1 root
dr-xr-xr-x 1 root

root
root
root
root
root

0
0
0
0
0

Sep
Sep
Sep
Sep
Sep

10
10
10
10
10

18:17
18:17
15:53
02:14
02:14

abi/
debug/
dev/
fs/
kernel/

dr-xr-xr-x 1 root root 0 Sep 10 18:17 net/


dr-xr-xr-x 1 root root 0 Sep 10 16:10 vm/

Cada uno de estos subdirectorios contiene informacin como tambin controles que
pueden ser ajustados (con cuidado):

abi/
Contiene archivos con informacin binaria de aplicaciones; raramente se usa.

debug/
Parmetros de depuracin; por ahora solo un control de reportes de excepcin.

dev/
Parmetros
de
dispositivo
cdrom, scsi, raid y parport.

incluyendo

subdirectorios

para

fs/
Parmetros de sistemas de archivos, incluyendo cuota, identificadores de archivos
usados y mximos, informacin de inodos y directorios, etc

kernel/
Parmetros del kernel. Hay muchas entradas importantes aqu.

net/
Parmetros de red. Hay subdirectorios para ipv4, netfilter, etc.

vm/
Parmetros de memoria virtual. Hay muchas entradas importantes aqu.
LFS201: Fundamentos de Administracin de Sistemas Linux

295

Ver y cambiar los parmetros puede ser realizarse con comandos simples. Por ejemplo, el
nmero mximo de hilos permitidos en el sistema puede verse as:
$ ls -l /proc/sys/kernel/threads-max
$ cat /proc/sys/kernel/threads-max 129498

Entonces podemos modificar el valor y verificar que el cambio tuvo efecto:


$ sudo bash -c echo 100000 > /proc/sys/kernel/threads-max
$ cat /proc/sys/kernel/threads-max 100000

Recuerde de la discusin acerca de sysctl que lo mismo se consigue con:


$ sudo sysctl kernel.threads-max=100000

Los usuarios normales pueden visualizar los valores, sin embargo para modificarlos se
requiere de privilegios de superusuario.

22.6 Conceptos bsicos de /sys


El pseudosistema de archivos /sys es una parte integral de lo que se llama el Modelo
Unificado de Dispositivos(Unified Device Model). Conceptualmente est basado en
un rbol de dispositivos a travs del cual se puede ir y ver los buses, dispositivos,
controladores, etc. Tambin contiene informacin que puede o no estar relacionada
estrictamente a los dispositivos, tales como los mdulos del kernel.
Tiene una estructura ms definida que /proc. La mayora de las entradas contienen solo
una lnea de texto, aunque existen excepciones, no llega a ser como su precedesor
(/proc), el cual tiene entradas de mltiples lneas cuyo contenido exacto ha ido
cambiando entre versiones del kernel. Por lo tanto, la interfaz de /sys es ms estable
hasta el momento.
Hay propiedades del sistema que tienen entradas tanto en /proc como en /sys; los tems
antiguos se estn eliminando gradualmente con el fin de mantener una compatibilidad
entre las utilidades de sistema usadas ampliamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

296

22.7 Un vistazo de /sys


El soporte para el sistema de archivos virtual sysfs est construido en todos los kernel
modernos, y debera montarse bajo /sys. Sin embargo, el modelo unificado de
dispositivos no requiere que sysfs sea montado para entrar en operacin.
Echemos un vistazo a lo que podemos encontrar usando el kernel 3.18; advertimos que el
diseo exacto de este sistema de archivos tiene una tendencia a cambiar. Al visualizar los
directorios de nivel superior encontramos:
$ ls -F /sys
block/ bus/ class/ dev/ devices/ firmware/ fs/ kernel/ module/ power/

lo cual despliega la jerarqua bsica de dispositivos. La implementacin del modelos de


dispositivos sysfs tambin incluye informacin que no est estrictamente relacionada a
hardware.
Los dispositivos de red pueden examinarse con:
$ ls -lF /sys/class/net
total 0
lrwxrwxrwx 1 root root 0 Apr 30 11:38 eth0 -> \
../../devices/pci0000:00/0000:00:1c.5/0000:02:00.0/net/eth0/
lrwxrwxrwx 1 root root 0 Apr 30 11:38 eth1 -> \
../../devices/pci0000:00/0000:00:1e.0/0000:04:02.0/net/eth1/
lrwxrwxrwx 1 root root 0 Apr 30 06:38 lo -> \
../../devices/virtual/net/lo/

al mirar la primera tarjeta Ethernet obtenemos:


$ ls -l /sys/class/net/eth0/
total 0
-rrr-- 1 root root 4096 Apr 30 13:43 addr_assign_type
-rrr-- 1 root root 4096 Apr 30 11:38 address
-rrr-- 1 root root 4096 Apr 30 11:38 addr_len
-rrr-- 1 root root 4096 Apr 30 13:43 broadcast
-rrr-- 1 root root 4096 Apr 30 13:43 carrier
lrwxrwxrwx 1 root root
0 Apr 30 11:38 device -> ../../../0000:02:00.0
-rrr-- 1 root root 4096 Apr 30 13:43 dev_id
-rrr-- 1 root root 4096 Apr 30 13:43 dormant
-rrr-- 1 root root 4096 Apr 30 13:43 duplex
-rw-rr-- 1 root root 4096 Apr 30 11:38 flags
-rw-rr-- 1 root root 4096 Apr 30 13:43 ifalias
-rrr-- 1 root root 4096 Apr 30 11:38 ifindex
-rrr-- 1 root root 4096 Apr 30 13:43 iflink
-rrr-- 1 root root 4096 Apr 30 13:43 link_mode
-rw-rr-- 1 root root 4096 Apr 30 13:43 mtu
-rw-rr-- 1 root root 4096 Apr 30 13:43 netdev_group
-rrr-- 1 root root 4096 Apr 30 13:43 operstate
drwxr-xr-x 2 root root
0 Apr 30 13:43 power
LFS201: Fundamentos de Administracin de Sistemas Linux

297

drwxr-xr-x 4 root root


0 Apr 30 11:38 queues
-rrr-- 1 root root 4096 Apr 30 13:43 speed
drwxr-xr-x 2 root root
0 Apr 30 13:43 statistics
lrwxrwxrwx 1 root root
0 Apr 30 11:38 subsystem ->
../../../../../../class/net
-rw-rr-- 1 root root 4096 Apr 30 13:43 tx_queue_len
-rrr-- 1 root root 4096 Apr 30 11:38 type
-rw-rr-- 1 root root 4096 Apr 30 11:38 uevent
$ cat /sys/class/net/eth0/mtu
1500

La intencin de sysfs es tener un valor de texto por lnea, aunque no se espera que esto
se aplique rigurosamente.
El dispositivo y controlador subyacente para la primera interfaz de red pueden encontrarse
a travs de device y de los enlaces simblicos de driver (lo cual vamos a revisar
pronto). Si vemos el directorio correspondiente a la primera tarjeta Ethernet veremos lo
siguiente:
$ ls -l /sys/class/net/eth0/device/
total 0
-rw-rr-- 1 root root
4096 Apr 30 13:47 broken_parity_status
-rrr-- 1 root root
4096 Apr 30 06:38 class
-rw-rr-- 1 root root
4096 Apr 30 11:38 config
-rrr-- 1 root root
4096 Apr 30 13:47 consistent_dma_mask_bits
-rrr-- 1 root root
4096 Apr 30 11:38 device
-rrr-- 1 root root
4096 Apr 30 13:47 dma_mask_bits
lrwxrwxrwx 1 root root
0 Apr 30 11:38 driver ->
../../../../bus/pci/drivers/sky2/
-rw------- 1 root root
4096 Apr 30 13:47 enable
-rrr-- 1 root root
4096 Apr 30 11:38 irq
-rrr-- 1 root root
4096 Apr 30 13:47 local_cpulist
-rrr-- 1 root root
4096 Apr 30 11:38 local_cpus
-rrr-- 1 root root
4096 Apr 30 13:47 modalias
-rw-rr-- 1 root root
4096 Apr 30 13:47 msi_bus
drwxr-xr-x 3 root root
0 Apr 30 13:47 msi_irqs/
drwxr-xr-x 3 root root
0 Apr 30 11:38 net/
drwxr-xr-x 2 root root
0 Apr 30 13:47 power/
--ww---- 1 root root
4096 Apr 30 13:47 removeww---- 1 root root
4096 Apr 30 13:47 rescanw------- 1 root root
4096 Apr 30 13:47 reset
-rrr-- 1 root root
4096 Apr 30 13:45 resource
-rw------- 1 root root 16384 Apr 30 13:47 resource0
-rw------- 1 root root
256 Apr 30 13:47 resource2
-rw------- 1 root root 131072 Apr 30 13:47 rom
lrwxrwxrwx 1 root root
0 Apr 30 11:38 subsystem ->
../../../../bus/pci/
-rrr-- 1 root root
4096 Apr 30 11:38 subsystem_device
-rrr-- 1 root root
4096 Apr 30 11:38 subsystem_vendor
-rw-rr-- 1 root root
4096 Apr 30 06:38 uevent
-rrr-- 1 root root
4096 Apr 30 11:38 vendor
-rw------- 1 root root 32768 Apr 30 13:47 vpd

Para ver la gama completa de informacin que est disponible en sysfs tendr que
examinar el directorio.
LFS201: Fundamentos de Administracin de Sistemas Linux

298

22.8 sar
sar viene de Systems Activity Reporter (informador de actividad del sistema). Es una
herramienta multipropsito para obtener informacin acerca de la actividad y rendimiento
del sistema, como tambin para crear reportes de lectura fcil.
En los sistemas Linux el backend de sar es sadc (recopilador de informacin de actividad
del sistema), el cual acumula las estadsticas. Este almacena la informacin en el
directorio /var/log/sa, en una frecuencia diaria por defecto, la cual puede ser ajustada.
La recoleccin de informacin puede ser iniciada desde la lnea de comandos, y de forma
perodica se realiza desde una tarea de cron almacenada en /etc/cron.d/sysstat.
Entonces sar lee esa informacin (ya sea desde la ubicacin por defecto o usando el
archivo especificado con la opcin -f) y luego produce un reporte.
sar se ejecuta de la siguiente forma:
$ sar [ options ] [ interval ] [ count ]

en donde el reporte se repite luego de un intervalo de segundos por un nmero de veces


(la cual es 1 por defecto). Sin opciones resulta as:
$ sar 3 3
Linux 3.15.9 (q7) 09/26/2014 _x86_64_ (4 CPU)
12:27:32 PM CPU %user %nice %system %iowait %steal
12:27:35 PM all 1.34 0.00
0.33
0.67
0.00
12:27:38 PM all 7.08 0.00
2.98
0.34
0.00
12:27:41 PM all 10.60 0.00
1.09
0.08
0.00
Average:
all 6.32 0.00
1.46
0.37
0.00

%idle
97.66
89.60
88.23
91.85

entregando un reporte del uso de la CPU.


Aqu hay una lista de las opciones o modos ms importantes de sar, en donde cada una
tiene sus propias subopciones:
Tabla 22.5: Opciones de sar
Opcin

Significado

-A

Casi toda la informacin

-b

E/S y estadsticas de las tasas de transferencia (similar a iostat)

-B

Estadsticas de paginacin, incluyendo los errores de pagina

-x

Actividad de dispositivos de bloque (similar a iostat -x)

-n

Estadsticas de red

-P

Estadsticas por CPU (como en sar -P ALL 3)

-q

Longitud de las colas (cola de ejecucin, procesos e hilos)


LFS201: Fundamentos de Administracin de Sistemas Linux

299

-r

Estadsticas de uso de memoria y rea de intercambio

-R

Estadsticas de memoria

-u

Uso de CPU (por defecto)

-v

Estadsticas acerca de inodos, archivos e identificadores de archivo.

-w

Estadsticas de cambio de contexto

-W

Estadsticas de la memoria de intercambio, pgina de entrada y salida


por segundo

-f

Extrae informacin desde el archivo especificado, creado con la


opcin -o

-o

Almacena los datos en el archivo especificado, para ser ledo ms tarde


con la opcin -f

Por ejemplo, para obtener las estadsticas de paginacin:


$ sar -B 3 3
Linux 3.15.9 (q7) 09/26/2014 _x86_64_ (4 CPU)
12:28:51 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s
pgscand/s pgsteal/s %vmeff
12:28:54 PM
0.00
21.33
82.33
0.00
676.67
0.00
0.00
0.00
0.00
12:28:57 PM
0.00
13.33
43.33
0.00
285.00
0.00
0.00
0.00
0.00
12:29:00 PM
0.00
9.33 428.00
0.00 1029.00
0.00
0.00
0.00
0.00
Average:
0.00
14.67 184.56
0.00
663.56
0.00
0.00
0.00
0.00

para obtener las estadsticas de E/S y tasa de transferencia:


$ sar -b 3 3
Linux 3.15.9 (q7) 09/26/2014 _x86_64_ (4 CPU)
12:29:30
12:29:33
12:29:36
12:29:39
Average:

PM
PM
PM
PM

tps
rtps
wtps
bread/s
bwrtn/s
8.00
5.00
3.00
597.33
72.00
0.00
0.00
0.00
0.00
0.00
16.33
0.00 16.33
0.00
237.33
8.11
1.67
6.44
199.11
103.11

El programa ksar es una herramienta basada en java para generar grficos agradables a
partir de datos de sar. Puede descargarse desde http://sourceforge.net/projects/ksar .

Comprobacin de conocimientos 22.1

LFS201: Fundamentos de Administracin de Sistemas Linux

300

Comprobacin de conocimientos 22.2

Comprobacin de conocimientos 22.3

LFS201: Fundamentos de Administracin de Sistemas Linux

301

Comprobacin de conocimientos 22.4

22.9 Laboratorio 22.1


Laboratorio 22.1: Uso de stress
stress es un programa escrito en lenguaje C por Amos Waterland de la Universidad de Oklahoma,
licenciado bajo la GPL v2. Est diseado para imponer una cantidad configurable de estrs a travs
de la generacin de varios tipos de carga de trabajo en el sistema.
Si usted tiene suerte podr instalar stress directamente desde el sistema de empaquetamiento de
su distribucin. De lo contrario, puede obtener el cdigo fuente desde
http://people.seas.harvard.edu/~apw/stress y luego compilarlo de la siguiente forma:
$ tar zxvf stress-1.0.4.tar.gz
$ cd stress-1.0.4
$ ./configure
$ make
$ sudo make install
Pueden existir paquetes binarios descargables en los formatos .deb y .rpm; revise el sitio web para
detalles y ubicaciones de los mismos. Una vez que est instalado, puede hacer:
$ stresshelp
para obtener una lista rpida de opciones, o
$ info stress
para acceder a una documentacin ms detallada.

LFS201: Fundamentos de Administracin de Sistemas Linux

302

Por ejemplo, el siguiente comando:


$ stress -c 8 -i 4 -m 6 -t 20s
will:

Crear 8 procesos intensivos en la CPU, cada uno realizando un clculo sqrt().


Crear 4 procesos intensivos de E/S, cada uno realizando una operacin sync().
Crear 6 procesos intensivos de memoria, cada uno realizando una operacin malloc(),
asignando 256 MB por defecto. El tamao puede cambiarse con la opcinvm-bytes
128M.
Ejecutar la prueba de estres por 20 segundos.

Luego de haber instalado stress, usted puede iniciar el monitor de sistema grfico, el cual
seguramente encontrar en el men de aplicaciones. Tambin lo puede ejecutar desde la lnea de
comandos, ya sea gnome-system-monitor o ksysguard.
Ahora comience a poner estrs en el sistema. Los nmeros exactos que usarn estarn en funcin
de los recursos de su sistema, tales como el nmero de CPU y el tamao de la RAM.
Por ejemplo, si hace
$ stress -m 4 -t 20s
estresa solamente la memoria del sistema. Juegue con las combinaciones de los parmetros y vea
el impacto que generan entre ellos. Probablemente se de cuenta que el programa stress es til
para simular diversas condiciones de carga alta.

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Reconocer y usar las herramientas disponibles de monitoreo del sistema.


Usar los pseudosistemas de archivos /proc y /sys.
Usar sar para obtener informacin de la actividad y rendimiento del sistema, para
crear reportes en forma cmoda para su anlisis.

LFS201: Fundamentos de Administracin de Sistemas Linux

303

Captulo 23. Monitoreo de procesos


Realizar un seguimiento de los procesos en ejecucin (y durmiendo) es una tarea de
administracin primordial. El programa ps ha sido la herramienta principal para hacer esto
en sistemas basados en UNIX por dcadas.
Sin embargo, debido a que la herramienta ha tenido una larga y compleja historia de ser
usada de forma diferente en una variedad de sistemas operativos, tiene muchas opciones
que al combinarlas pueden llevar a confusin. Otra herramienta valiosa es top, la cual
monitorea el estado del sistema de forma interactiva.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Usar ps para visualizar caractersticas y estadsticas asociadas a procesos.


Identificar diferentes campos de salida de ps y personalizar la salida del comando.
Usar pstree para obtener una descripcin visual de la ascendencia de los
procesos y aplicaciones multihilos.
Usar top para visualizar la carga del sistema interactivamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

304

23.1 Herramientas de monitoreo


En esta seccin nos concentraremos en monitoreo de procesos. Para llevar a cabo esto,
los administradores de Linux hacen uso de muchas herramientas, tales como
ps, pstree y top, todos los que tienen una larga historia en los sistemas operativos
tipo UNIX.
Revisaremos nuevamente la lista de algunas de las herramientas principales para
monitoreo de procesos:
Tabla 23.1: Herramientas de monitoreo de procesos y carga

Herramienta
top
uptime

Propsito
Actualiza de forma dinmica la actividad de
los procesos
Por cunto tiempo ha estado corriendo el
sistema y la carga promedio

Paquete
procps

procps

ps

Informacin detallada acerca de los procesos procps

pstree

Un rbol de procesos y sus conexiones

psmisc (o pstree)

mpstat

Uso de procesador mltiple

sysstat

iostat

Uso de CPU y estadsticas de E/S

sysstat

sar
numastat
strace

Despliegue y recoleccin de informacin


acerca de la actividad del sistema
Informacin de NUMA (Arquitectura de
memoria no uniforme)
Informacin acerca de todas las llamadas al
sistema realizadas por un proceso

sysstat
numactl
strace

23.2 Visualizacin del estado de los procesos con ps


ps es un caballo de batalla para desplegar caractersticas y estadsticas asociadas a
procesos, todo lo cual se obtiene desde el directorio asociado al proceso en /proc.
Esta herramienta ha existido en todas las variantes del sistema operativo UNIX y esta
diversidad se refleja en la complicada mezcla de opciones que acepta la versin
de ps en Linux, las cuales se dividen en tres categoras:
1. Opciones UNIX, las cuales deben ser precedidas por -, y que pueden estar agrupadas.
2. Opciones BSD, las cuales no deben ser precedidas por -, y que pueden estar
agrupadas.
3. Las opciones largas de GNU, cada una de las cuales debe ser precedida por --.
Tener todas estas opciones posibles puede tornar la vida del administrador de sistemas
un poco confusa. Muchos de ellos tienden a usar una o dos combinaciones estndar para
su uso diario.
LFS201: Fundamentos de Administracin de Sistemas Linux

305

23.3 Opcin de formato BSD para ps


Un uso tpico con la opcin de formato BSD para ps es:
$ ps aux
USER
PID %CPU %MEM
VSZ
RSS TTY
STAT
root
1 0.0 0.0 198384 6232 ?
Ss
/usr/lib/systemd/systemdswitched-root root
2 0.0 0.0
0
0 ?
S
root
3 0.0 0.0
0
0 ?
S
root
5 0.0 0.0
0
0 ?
S<
root
7 0.0 0.0
0
0 ?
S
root
8 0.0 0.0
0
0 ?
S
root
9 0.0 0.0
0
0 ?
S
root
10 0.0 0.0
0
0 ?
S
....
root
237 0.0 0.0
0
0 ?
S
root
238 0.0 0.0
0
0 ?
S<
root
239 0.0 0.0
0
0 ?
S
root
240 0.0 0.0
0
0 ?
S<
....
root
684 0.0 0.0 16744 2648 ?
SNs
-s -n 19 -c -E ALSA_CONF
root
690 0.0 0.0 326396 5472 ?
Ssl
/usr/sbin/ModemManager
root
697 0.0 0.1 181804 8740 ?
Ss
-f
....
coop 24400 2.2 0.6 816720 50876 ?
Sl
/opt/google/chrome/chrometype=ppapic
coop 24819 0.0 0.3 634244 27952 ?
Sl
/usr/libexec/gnome-terminal-server
coop 30170 0.0 0.0 116660 4816 pts/2 Ss+
....

START TIME COMMAND


07:14 0:01
07:14
07:14
07:14
07:14
07:14
07:14
07:14

0:00
0:03
0:00
0:22
0:00
0:00
0:03

[kthreadd]
[ksoftirqd/0]
[kworker/0:0H]
[rcu_preempt]
[rcu_sched]
[rcu_bh]
[migration/0]

07:14
07:14
07:14
07:14

0:00
0:00
0:00
0:00

[scsi_eh_0]
[scsi_tmf_0]
[scsi_eh_1]
[scsi_tmf_1]

07:15 0:00 /usr/sbin/alsactl


07:15 0:00
07:15 0:00 /usr/sbin/cupsd
20:19 0:02
09:01 0:30
16:14 0:00 bash

donde la opcin aux muestra todos los procesos. Los comandos que estn encerrados en
parntesis cuadrados (como [ksoftirqd/0]) son hilos que existen totalmente en el kernel;
si hay uno para cada CPU el comando es seguido por un nmero entero, especificando la
CPU en la cual est ejecutndose.

LFS201: Fundamentos de Administracin de Sistemas Linux

306

23.4 Campos de salida de ps


La mayora de los campos en el ejemplo anterior se autoexplican. En relacin a otros:

VSZ corresponde al tamao de la memoria virtual del proceso en KB.

RSS tamao de la memoria residente; la memoria fsica que una tarea est
usando en KB

STAT describe el estado del proceso; en el ejemplo anterior vemos


solamente S para los procesos que estn durmiendo o R para los que estn en
ejecucin. El carcter adicional en el estado (cuando existe) puede ser:

< para prioridad alta (lo contrario de nice)


N para prioridad baja (para nice)
L indica que tiene pginas bloqueadas en memoria
s para el lder de la sesin
l es miltihebra
- + est en el grupo de procesos en primer plano

Si se agrega la opcin f se mostrarn los procesos conectados por ascendencia, como se


muestra a continuacin:
$ ps auxf
....
coop 23666 0.0 0.0 63880 1180 ? S 11:09 0:00 /bin/sh
/usr/lib64/thunder
coop 23670 0.0 0.0 63880 1220 ? S 11:09 0:00 \_ /bin/sh
/usr/lib64/thu
coop 23675 0.4 2.0 764756 84948 ? Sl 11:09 0:54
\_
/usr/lib64/thunder
.....

LFS201: Fundamentos de Administracin de Sistemas Linux

307

23.5 Opcin de formato UNIX para ps


Un uso tpico con la opcin de formato UNIX:
$ ps -elf
F S UID
PID PPID C PRI NI ADDR SZ
4 S root
1
0 0 80
0 - 49596
/usr/lib/systemd/systemdswitc
1 S root
2
0 0 80
0 0
[kthreadd]
1 S root
3
2 0 80
0 0
[ksoftirqd/0]
1 S root
5
2 0 60 -20 0
[kworker/0:0H]
1 S root
7
2 0 80
0 0
[rcu_preempt]
1 S root
8
2 0 80
0 0
[rcu_sched]
1 S root
9
2 0 80
0 0
[rcu_bh]
1 S root
10
2 0 -40
- 0
[migration/0]
....
1 S root
237
2 0 80
0 0
[scsi_eh_0]
1 S root
238
2 0 60 -20 0
[scsi_tmf_0]
1 S root
239
2 0 80
0 0
[scsi_eh_1]
1 S root
240
2 0 60 -20 0
[scsi_tmf_1]
....
0 S root
684
1 0 99 19 4186
/usr/sbin/alsactl -s -n 19 -c -E
....
1 S coop 24400 5536 2 80
0 - 204180
/opt/google/chrome/chrometype
0 S coop 24819
1 0 80
0 - 158561
/usr/libexec/gnome-terminal-serv
0 S coop 30170 24819 0 80
0 - 29165
....

WCHAN STIME TTY


SYSC_e 07:14 ?

TIME
CMD
00:00:01

kthrea 07:14 ?

00:00:00

smpboo 07:14 ?

00:00:03

worker 07:14 ?

00:00:00

rcu_gp 07:14 ?

00:00:22

rcu_gp 07:14 ?

00:00:00

rcu_gp 07:14 ?

00:00:00

smpboo 07:14 ?

00:00:03

scsi_e 07:14 ?

00:00:00

rescue 07:14 ?

00:00:00

scsi_e 07:14 ?

00:00:00

rescue 07:14 ?

00:00:00

poll_s 07:15 ?

00:00:00

futex_ 20:19 ?

00:00:09

poll_s 09:01 ?

00:00:31

n_tty_ 16:14 pts/2 00:00:00 bash

Tenga en cuenta que en este caso se muestra el PID del proceso padre (PPID) y el factor
de nice (NI). En este ejemplo (tomado en RHEL 7, usando systemd) es posible observar
que muchos procesos muestran PPID=2, el cual es un proceso interno del
kernel, kthreadd, el cual est diseado para adoptar hijos cuando el proceso padre
muere. En sistemas con versiones antiguas del kernel veramos PPID=1, haciendo
mencin a /sbin/init, pero bsicamente es la misma idea.

LFS201: Fundamentos de Administracin de Sistemas Linux

308

Algunas opciones comunes de seleccin en el formato UNIX son:

-A o -e: Selecciona todos los procesos.


-N: Niega la seleccin (es decir, indica lo contrario).
-C: Selecciona por nombre de comando.
-G: Selecciona por ID real de grupo (tambin soporta nombres).
-U: Selecciona por ID real de usuario (tambin soporta nombres).

23.6 Personalizar la salida de ps


Si se usa la opcin -o seguida de una lista de campos identificadores separados por
coma, es posible imprimir una lista personalizada de campos de ps:

pid: nmero identificador del proceso.


uid: nmero identificador del usuario dueo del proceso.
cmd: comando con todos los argumentos .
cputime: tiempo de CPU acumulado.
pmem: relacin de tamao del conjunto residente a la memoria fsica de la
mquina, expresada como porcentaje.

A continuacin un ejemplo:
$ ps -o pid,uid,command
PID UID COMMAND
7989 500 bash
8228 500 ps -o pid,uid,command

Usted puede consultar la pgina man de ps para obtener muchas otras opciones de
salida.

23.7 Uso de pstree


pstree provee una descripcin visual de la ascendencia del proceso y aplicaciones
multihebra:
$ pstree -aAp 2408
bash,2408
|-emacs,24998 pmonitor.tex
| |-{emacs},25002
| -{emacs},25003
|-evince,18036 LFS201-SLIDES.pdf
| |-{evince},18040
| |-{evince},18046
| -{evince},18047

LFS201: Fundamentos de Administracin de Sistemas Linux

309

Consulte la pgina man de pstree para obtener una explicacin completa del resto de las
opciones; en el ejemplo de arriba solo quisimos mostrar informacin para el pid=2048.
Tenga en cuenta que uno de sus procesos hijos (evince con pid=18036) tiene tres hijos
propios. Otra forma de verlo es la siguiente:
$ ls -l /proc/18036/task
total 0
dr-xr-xr-x 5 coop coop 0
dr-xr-xr-x 5 coop coop 0
dr-xr-xr-x 5 coop coop 0
dr-xr-xr-x 5 coop coop 0

Sep
Sep
Sep
Sep

11
11
11
11

07:15
07:15
07:15
07:15

18036
18040
18046
18047

23.8 Visualizar la carga del sistema con top


Cuando se desea saber qu est haciendo el sistema operativo, la primera herramienta
que se suele usar es top. Si se ejecuta sin argumentos muestra lo siguiente:
$ top
top - 09:27:44 up 2:09, 4 users, load average: 1.05, 0.35, 0.11
Tasks: 270 total, 3 running, 267 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.0%us, 1.7%sy, 0.3%ni, 90.0%id, 4.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4045232k total, 3972700k used, 72532k free, 623928k buffers
Swap: 4642048k total, 0k used, 4642048k free, 2370804k cached
PID
4376
4561
4603
5033
5098
5202
1
2
3
4
5
6
7
...

USER
root
coop
coop
root
coop
root
root
root
root
root
root
root
root

PR NI VIRT RES SHR S %CPU %MEM


20 0 430m 72m 10m R 48.9 1.8
20 0 60112 1844 752 S 9.8 0.0
20 0 315m 18m 8516 R 2.0 0.5
20 0 61028 2560 648 S 2.0 0.1
20 0 12876 1108 712 R 2.0 0.0
20 0 60176 1712 712 S 2.0 0.0
20 0 10356 632 536 S 0.0 0.0
20 0
0
0
0 S 0.0 0.0
RT 0
0
0
0 S 0.0 0.0
20 0
0
0
0 S 0.0 0.0
RT 0
0
0
0 S 0.0 0.0
RT 0
0
0
0 S 0.0 0.0
20 0
0
0
0 S 0.0 0.0

TIME+
8:59.68
0:00.14
0:16.45
0:00.04
0:00.01
0:00.01
0:01.78
0:00.00
0:00.06
0:00.02
0:00.00
0:00.15
0:00.04

COMMAND
Xorg
make
gnome-terminal
make
top
make
init
kthreadd
migration/0
ksoftirqd/0
watchdog/0
migration/1
ksoftirqd/1

top se refresca cada 3 segundos por defecto.

LFS201: Fundamentos de Administracin de Sistemas Linux

310

23.9 Opciones de top


top es una herramienta antigua y tiene muchsimas opciones, como tambin comandos
interactivos que se inician cuando se presionan ciertas teclas. Por ejemplo, si se
presiona 1, cada CPU se muestra por separado. Si se presiona i, solo se muestran los
procesos activos. Haciendo ambas cosas se obtiene lo siguiente:
top - 12:51:50 up 1 day, 5:31, 6 users, load average: 0.09, 0.14, 0.22
Tasks: 288 total, 1 running, 287 sleeping, 0 stopped, 0 zombie
%Cpu0 : 3.4 us, 1.3 sy, 0.0 ni, 94.6 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 3.7 us, 0.7 sy, 0.0 ni, 95.0 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 3.6 us, 1.3 sy, 0.0 ni, 95.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 2.3 us, 1.0 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 8170032 total, 6360684 used, 1809348 free, 46888 buffers
KiB Swap: 4193776 total, 4848 used, 4188928 free. 4292304 cached Mem
PID USER
2036 coop
shell
15082 coop
1648 root
2301 coop
terminal18712 root
kworker/1:1
2111 coop
15465 coop
18973 coop

PR NI
VIRT
RES
20 0 1876580 396628

SHR S
37704 S

20
20
20

0
0
0

21444 S
27208 S
18908 S

3.0
2.3
1.0

2.3
0.8
0.4

20

0 S

0.7

0.0

0:00.25

20
20
20

0 995392 29424 21076 S


0 1032892 191332 105244 S
0 123768
3108
2492 R

0.3
0.3
0.3

0.4
2.3
0.0

0:03.13 nautilus
0:10.88 chrome
0:00.04 top

547140 185968
254972 68920
642600 32156
0

%CPU %MEM
TIME+ COMMAND
8.0 4.9 113:14.62 gnome13:22.17 skype-bin
33:11.09 Xorg
1:16.76 gnome-

Se tiene mucho control sobre cmo se ordenan los procesos y qu campos se despliegan;
hay muchas otras opciones adems de las por defecto. Por ejemplo, si se
presiona h o ? se obtiene una lista breve de los comandos interactivos y q se usa para
salir.
Adems es posible terminar una tarea presionando k, o cambiar su prioridad (renice)
con r.
Si hace man top obtendr documentacin extensiva acerca de las opciones de
configuracin y posibilidades interactivas.
Tenga en cuenta que hay alternativas populares al comando estndar top, algunos de los
cuales proveen interfaces ms visuales o informacin adicional, tales
como htop, ntop y atop. La mayora de las distribuciones Linux tienen un monitor grfico
del sistema (como gnome-system-monitor o ksysguard), los cuales tienen una ventana
de despliegue similar a top.

LFS201: Fundamentos de Administracin de Sistemas Linux

311

Comprobacin de conocimientos 23.1

Comprobacin de conocimientos 23.2

23.10 Laboratorio 23.1


Laboratorio 23.1: Procesos
1. Ejecute ps con las opciones -ef. Luego ejectelo de nuevo pero con las opciones aux. Note las
diferencias en la salida de cada comando.
2. Ejecute ps de tal forma que solo se despliegue el ID de proceso, la prioridad, el valor de nice y
la lnea de comandos del proceso.
3. Ejecute bash en la lnea de comandos para iniciar una sesin nueva de esa shell. Inicie otra
sesin bash usando el comando nice, pero esta vez dndole a nice un valor de 10.
4. Ejecute ps como en el paso 2 y note las diferencias entre los valores de prioridad y nice.
Tambin tome nota de los ID de proceso de las dos sesiones de bash.
5. Usando renice, cambie el valor de nice de una de las sesiones de bash a 15. Observe
nuevamente el cambio en los valores de prioridad y nice.
6. Ejecute top y vea la salida a medida en que cambia. Presione q para detener el programa.

LFS201: Fundamentos de Administracin de Sistemas Linux

312

Solucin 23.1
1. $ ps -ef
$ ps aux
2. $ ps -o pid,pri,ni,cmd
PID PRI NI CMD
2389 19 0 bash
22079 19 0 ps -o pid,pri,ni,cmd
(Nota: no debera haber espacios entre los parmetros.)
3. $ bash
$ nice -n 10 bash
$ ps -o pid,pri,ni,cmd
2389 19 0 bash
22115 19 0 bash
22171 9 10 bash
22227 9 10 ps -o pid,pri,ni,cmd
4. $ renice 15 -p 22227
$ ps -o pid,pri,ni,cmd
PID PRI NI CMD
2389 19 0 bash
22115 19 0 bash
22171 4 15 bash
22246 4 15 ps -o pid,pri,ni,cmd
5. $ top

23.10 Laboratorio 23.1


Laboratorio 23.2: Monitoreo del estado de los procesos
1. Use dd para iniciar un proceso que corra en segundo plano, que lea desde /dev/urandom y
escriba a /dev/null.
2. Verifique el estado del proceso. Cul debera ser?
3. Traiga el proceso a primer caso usando el comando fg. Luego teclee Ctrl-Z. Qu hace esto?
Mire el estado del proceso nuevamente, cul es ahora?
4. Ejecute el programa jobs. Qu informacin le entrega?
5. Lleve la tarea a segundo plano, luego termnela usando kill desde otra ventana.

LFS201: Fundamentos de Administracin de Sistemas Linux

313

Solucin 23.2
1. $ dd if=/dev/urandom of=/dev/null &
2. $ ps -C dd -o pid,cmd,stat
25899 dd if=/dev/urandom of=/dev/ R
Should be S or R.
3. $ fg
$ ^Z
$ ps -C dd -o pid,cmd,stat
PID
CMD
STAT
25899
dd if=/dev/urandom of=/dev/ T
El estado debera ser T.
4. ejecute el comando jobs. Qu informacin le entrega?
$ jobs
[1]+ Stopped dd if=/dev/urandom of=/dev/null
5. Lleve la tarea de vuelta al segundo plano, luego termnela usando el comando kill desde otra
ventana.
$ fg
$ kill 25899

LFS201: Fundamentos de Administracin de Sistemas Linux

314

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Usar ps para visualizar caractersticas y estadsticas asociadas a procesos.


Identificar diferentes campos de salida de ps y personalizar la salida del comando.
Usar pstree para obtener una descripcin visual de la ascendencia de los
procesos y aplicaciones multihilos.
Usar top para visualizar la carga del sistema interactivamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

315

Captulo 24. Monitoreo y ajuste de E/S


Existe una fuerte y complicada relacin entre E/S y rendimiento del sistema. No es fcil
desentraar la competencia entre procesos por ancho de banda de E/S para
almacenamiento, uso de CPU, memoria y cuellos de botella de la red.
Dos herramientas que pueden ayudar a identificar y aislar problemas de este tipo
son iostat e iotop. La herramienta ionice puede usarse para ayudar a priorizar la
competicin entre procesos.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Usar iostat para monitorear la actividad de dispositivos de E/S del sistema.


Usar iotop para desplegar una tabla del uso actual de E/S.
Usar ionice para configurar tanto la clase de planificacin de E/S como la
prioridad de un proceso dado.

LFS201: Fundamentos de Administracin de Sistemas Linux

316

24.1 Cuellos de botella de disco


Los problemas de rendimiento de discos pueden acoplarse estrechamente a otros
factores, tales como memoria insuficiente o hardware de red y ajustes inadecuados.
Solucionar este tipo de problemas puede ser complejo.
Como regla, un sistema puede considerarse como atascado en E/S cuando la CPU est
esperando de forma ociosa que alguna operacin de E/S se complete para poder
continuar. Otra posibilidad es que la red est esperando a que los bferes se limpien.
Sin embargo, es posible ser engaado. Lo que parece ser memoria insuficiente puede
resultar de E/S muy lenta; si los bferes de memoria que estn siendo usados para leer y
escribir se llenan, esto puede indicar que el problema est en la memoria, cuando el
problema real es que los bferes no se estn llenando o vaciando lo suficientemente
rpido. De manera similar, las transferencias de red pueden estar esperando por
operaciones de E/S que tienen que completarse, lo cual tiene un efecto negativo en el
rendimiento de red.
Tanto el monitoreo en tiempo real como el seguimiento son herramientas necesarias para
localizar y mitigar cuellos de botella. Sin embargo, problemas extraos o que no son
reproducibles pueden hacer que estas tareas sean difciles de lograr.
Hay muchas variables relevantes y el ajusta de E/S es complejo. Consideraremos
la planificacin de E/S ms adelante.

24.2 iostat
iostat es el caballo de batalla bsico para monitoreo de actividad de E/S en el sistema.
Puede generar reportes con mucha informacin, en donde el contenido exacto se controla
a travs de opciones.
Si se ejecuta iostat sin argumentos obtenemos lo siguiente:
$ iostat
Linux 3.15.9 (q7)
(4 CPU)
avg-cpu:
0.00 94.92
Device:
kB_wrtn
sda
dm-0
dm-2
dm-3
dm-5

09/11/2014

_x86_64_

%user %nice %system %iowait c%stealc %idle


3.07
0.05
1.30

12.10
5.58
1.22
0.01
0.31

tps

kB_read/s

170.52
46.32
4.89
0.06
1.24

61.69
48.74
0.00
0.00
0.00

0.66

kB_wrtn/s

kB_read

2170494
589608
62208
728
15780

785198
620384
12
0
12

LFS201: Fundamentos de Administracin de Sistemas Linux

317

dm-6
dm-7
dm-8
dm-1
dm-4
dm-10
dm-11
dm-13
dm-14
dm-15

0.05
0.03
0.03
0.00
0.01
0.01
0.33
0.03
0.03
0.01

0.20
0.11
0.13
0.01
0.03
0.03
28.50
0.10
0.10
0.03

0.00
0.00
0.00
0.00
0.00
0.00
0.23
0.00
0.00
0.00

2568
1436
1636
152
364
364
362769
1268
1256
364

12
12
12
0
0
0
2964
12
12
0

Luego de un resumen breve del uso de la CPU, se dan las estadsticas de


E/S: tps (transacciones E/S por segundo; las solicitudes lgicas pueden combinarse con
solicitudes reales), bloques ledos y escritos por unidad de tiempo, en donde los bloques
son generalmente sectores de 512 bytes; y el total de bloques ledos y escritos.
La informacin est dividida por particiones del disco (y si LVM est siendo usada por
particiones lgicas de dm, device mapper).

24.3 Opciones de iostat


Si se especifica la opcin -k, se genera una vista un tanto diferente, la cual muestra los
resultados en KB en vez de bloques:
$ iostat -k
Linux 3.15.9 (q7)
CPU)

09/11/2014

_x86_64_

avg-cpu: %user %nice %system %iowait %steal


3.07 0.05
1.29
0.66
0.00

%idle
94.93

Device:
sda
dm-0
dm-2
....

kB_read
2170494
589608
62208

tps
12.07
5.57
1.22

kB_read/s
170.00
46.18
4.87

kB_wrtn/s
61.53
48.61
0.00

(4

kB_wrtn
785574
620632
12

Es posible usar la opcin -m para obtener los resultados en MB.


Otra opcin til es -N, la cual despliega la informacin por nombre de dispositivo (o d para un formato un poco diferente), como se muestra aqu:
iostat -N
Linux 3.18.0 (q7)
avg-cpu:
Device:
sda
VG-local
VG-src
VG-dead
VG-virtual

%user
4.13

12/12/2014

_x86_64_

%nice %system %iowait %steal


0.00
7.38
1.91
0.00
tps
kB_read/s
kB_wrtn/s
20.26
3895.58
554.19
4.04
18.07
45.38
0.03
0.15
0.00
0.02
0.07
0.00
15.37
3718.74
481.88

(4 CPU)
%idle
86.57
kB_read
95397215
442484
3660
1692
91066729

LFS201: Fundamentos de Administracin de Sistemas Linux

kB_wrtn
13571286
1111280
32
12
11800544

318

VG-P
VG-pictures
VG-virtual2
VG-w7back

0.00
0.28
0.01
0.00

0.00
27.30
0.05
0.01

0.00
0.23
0.00
0.00

76
668476
1256
364

0
5700
12
0

24.4 Opciones extendidas de iostat


Se puede obtener un informe mucho ms detallado si se usa la opcin -x (de extendido):
$ iostat -xk
Linux 3.15.9 (q7)
09/11/2014
_x86_64_
avg-cpu: %user %nice %system %iowait %steal %idle
3.06 0.05
1.29
0.66
0.00 94.94

(4 CPU)

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await
w_await svctm %util
sda
1.04
2.61 7.68 4.33 169.34 61.23
38.39
0.16 12.96
10.53
17.27 1.86 2.24
dm-0
0.00
0.00 1.15 4.40 45.92 48.38
34.01
0.03 6.23
7.38
5.92 2.42 1.34

en donde los campos tienen los siguientes significados:


Tabla 24.1: Campos extendidos de iostat

Campo

Significado

Device

Dispositivo o nombre de la particin

rrqm/s

Nmero de solicitudes de lectura por segundo, encoladas al dispositivo

wrqm/s

Nmero de solicitudes de escritura por segundo, encoladas al dispositivo

r/s

Nmero de solicitudes de lectura por segundo, emitidas al dispositivo

w/s

Nmero de solicitudes de escritura por segundo, emitidas al dispositivo

rkB/s

KB por segundo ledos desde el dispositivo

wkB/s

KB por segundo escritos al dispositivo

avgrq-sz

Tamao promedio de solicitud en sectores de 512 bytes por segundo

avgqu-sz

Longitud promedio de la cola de solicitudes emitidas al dispositivo


Tiempo promedio (en milisegundos) de solicitudes de E/S entre cuando
se emite una solicitud y cuando se ha completado: tiempo de la cola ms
tiempo de servicio
Tiempo promedio de servicio (en milisegundos) para solicitudes de E/S
Porcentaje de tiempo de CPU durante las solicitudes servidas a
dispositivos

await
svctm
%util

Tenga en cuenta que si el porcentaje de utilizacin se aproxima a 100, el sistema operativo o el de


E/S est saturado.

LFS201: Fundamentos de Administracin de Sistemas Linux

319

24.5 iotop
Otra herramienta muy til es iotop, la cual debe ser ejecutada como root. Esta despliega
una tabla del uso actual de E/S y se actualiza peridicamente, de la misma forma que lo
hace top. Si se ejecuta sin opciones muestra lo siguiente:
$ sudo iotop
Total DISK READ : 132.32 M/s | Total DISK WRITE : 132.79 M/s
Actual DISK READ: 132.32 M/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER
DISK READ
DISK WRITE
SWAPIN
IO> COMMAND
9791 be/4 root
132.32 M/s
132.79 M/s
0.00 % 72.48 % cp
/usr/s~.sqfs /tmp
1 be/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % systemd
-~rialize 22
2 be/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [kthreadd]
3 be/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [ksoftirqd/0]
5 be/0 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [kworker/0:0H]
2054 be/4 coop
0.00 B/s
0.00 B/s
0.00 %
0.00 % gsd-printer
7 be/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [rcu_preempt]
8 be/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [rcu_sched]
9 be/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [rcu_bh]
10 rt/4 root
0.00 B/s
0.00 B/s
0.00 %
0.00 % [migration/0]
.....

Tenga en cuenta que las entradas be y rt en el campo PRIO se explican en la seccin de


ionice, y provienen de best effort (mejor esfuerzo) y real time (tiempo real).
Las opciones disponibles se muestran con:
$ sudo iotophelp
Usage: /usr/sbin/iotop [OPTIONS]
DISK READ and DISK WRITE are the block I/O bandwidth used during the
sampling
period. SWAPIN and IO are the percentages of time the thread spent
respectively
while swapping in and waiting on I/O more generally. PRIO is the I/O
priority at
which the thread is running (set using the ionice command).
Controls: left and right arrows to change the sorting column, r to invert
the
sorting order, o to toggle theonly option, p to toggle theprocesses
option, a to toggle theaccumulated option, i to change I/O priority, q
to
quit, any other key to force a refresh.
Options:
--version
-h, --help
-o, --only

show programs version number and exit


show this help message and exit
only show processes or threads actually doing I/O
LFS201: Fundamentos de Administracin de Sistemas Linux

320

-b, --batch
-n NUM, --iter=NUM
-d SEC, --delay=SEC
-p PID, --pid=PID
-u USER, --user=USER
-P, --processes
-a, --accumulated
-k, --kilobytes
-t, --time
-q, --quiet

non-interactive mode
number of iterations before ending [infinite]
delay between iterations [1 second]
processes/threads to monitor [all]
users to monitor [all]
only show processes, not all threads
show accumulated I/O instead of bandwidth
use kilobytes instead of a human friendly unit
add a timestamp on each line (impliesbatch)
suppress some lines of header (impliesbatch)

Usar la opcin -o puede ser til para tener una salida ms limpia.

24.6 Uso de ionice para ajustar prioridades de E/S


La herramienta ionice le permite ajustar tanto la clase de planificacin de E/S y
la prioridad para un proceso dado. Usa la siguiente sintaxis:
$ ionice [-c class] [-n priority] [-p pid ] [COMMAND [ARGS] ]

Si se pasa un pid a travs del argumento -p, el resultado aplica al proceso solicitado, de
lo contrario se aplicar al proceso iniciado por COMMAND con los argumentos
correspondientes. Si no se proveen argumentos, ionice provee la clase de planificacin y
prioridad del proceso de shell actual, como se muestra aqu:
$ ionice
idle: prio 7

El parmetro -c especifica la clase de planificacin de E/S, la cual puede tener los tres
valores que siguen:
Tabla 24.2: Clases de planificacin de E/S
Clase de
planificacin de
E/S

valor
de -c

Idle

Best effort

Real Time

Significado
No tiene acceso a E/S de disco a menos que ningn otro
programa lo haya solicitado por un perodo definido.
Todos los programas se atienden con el mtodo roundrobin, de acuerdo a los ajustes de prioridad. Esta es la
configuracin por defecto.
Obtiene acceso primero al disco, lo cual puede desplazar
a otros procesos. La prioridad define el tamao de la
tajada de tiempo que recibe cada proceso.

Las clases Best Effort y Real Time toman el argumento -n, el cual da la prioridad, la que
puede estar en un rango de 0 a 7, en donde 0 es la prioridad mayor. Un ejemplo:
$ ionice -c 2 -n 3 -p 30078

Nota: ionice funciona solo cuando se usa el planificador de E/S CFQ, el cual se
mencionar en el captulo siguiente.
LFS201: Fundamentos de Administracin de Sistemas Linux

321

Comprobacin de conocimientos 24.1

24.7 Laboratorio 24.1


Laboratorio 24.1: bonnie++

bonnie++ es un programa de benchmarking ampliamente disponible que pone a prueba y mide el


rendimiento de discos y sistemas de archivos. Proviene de bonnie, una implementacin anterior.
Los resultados pueden leerse desde la terminal o ser direccionados a un archivo, el que puede ser
exportado a formato csv (comma separated value) en caso de ser necesario. Los programas
auxiliares textbfbon csv2html y bon.csv2txt pueden usarse para convertir a formatos de salida
html y texto plano. Le recomendamos leer la pgina man de bonnie++ antes de usarlo, ya que
tiene bastantes opciones acerca de qu tests realizar y cuan exhaustivos y estresantes pueden ser.
Una sinopsis rpida se obtiene con:
$ bonnie++ -help
bonnie++: invalid optionh
usage:
bonnie++ [-d scratch-dir] [-c concurrency] [-s size(MiB)[:chunk-size(b)]]
[-n number-to-stat[:max-size[:min-size][:num-directories[:chunk-size]]]]
[-m machine-name] [-r ram-size-in-MiB]
[-x number-of-tests] [-u uid-to-use:gid-to-use] [-g gid-to-use]
[-q] [-f] [-b] [-p processes | -y] [-z seed | -Z random-file]
[-D]
Version: 1.96
Un test rpido puede obtenerse con un comando como el siguiente:
$ time sudo bonnie++ -n 0 -u 0 -r 100 -f -b -d /mnt

LFS201: Fundamentos de Administracin de Sistemas Linux

322

donde cada parmetro y valor significa:

-n 0 no realizar las pruebas de creacin de archivos.


-u 0 ejectelo como root.
-r 100 finja que tiene 100 MB de RAM.
-f saltar las pruebas de carcter de E/S.
-b hacer fsync despus de cada escritura, lo cual fuerza a escribir a disco en vez de al
cach.
-d /mnt especifica el directorio que contendr temporalmente los archivos creados;
asegrese que tiene suficiente espacio disponible, en este caso 300 MB.

Si no suministra una cifra para el tamao de memoria, el programa averiguar cunta memoria
tiene el sistema y crear un archivo de prueba de 2 a 3 veces ese tamao. No haremos eso aqu
debido a que tomara mucho tiempo para probar el programa.
En un sistema RHEL 7:
$ time sudo bonnie++ -n 0 -u 0 -r 100 -f -b -d /mnt
Using uid:0, gid:0.
Writing intelligently...done
Rewriting...done
Reading intelligently...done start em...done...done...done...done...done...
Version 1.96
------Sequential Output-------Sequential Input--Random
Concurrency 1
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks
Machine
Size K/sec %CP K/sec %CP K/sec %CP
K/sec %CP K/sec %CP /sec %CP
q7
300M
99769 14
106000 12
+++++ +++ 257.3 1
Latency
226us
237us 418us 624ms
1.96,1.96,q7,1,1415992158,300M,,,,99769,14,106000,12,,,+++++,++
+,257.3,1,,,,,,,,,,,,,,,,,,,226us,237us,,418us,624ms,,,,,,

LFS201: Fundamentos de Administracin de Sistemas Linux

323

En un sistema Ubuntu 14.04, corriendo una mquina virtual bajo un hipervisor en la misma
mquina fsica:
$ time sudo bonnie++ -n 0 -u 0 -r 100 -f -b -d /mnt
Using uid:0, gid:0.
Writing intelligently...done
Rewriting...done
Reading intelligently...done
start em...done...done...done...done...done...
Version 1.97 ------Sequential Output-------Sequential Input- --Random
Concurrency 1
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks
Machine
Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec
%CP
ubuntu
300M
70000 61
43274 31
470061 96
2554 91
Latency
306ms 201ms 9276us 770ms
1.97,1.97,ubuntu,1,1415983257,300M,,,,70000,61,43274,31,,,470061,96,2554,91,,,,,,,,,,,,,,,,,,,306
ms,201ms,,9276us,770ms,,,,,,
Puede apreciar claramente la disminucin del rendimiento. Asumiendo que ha guardado las salidas
previas en un archivo llamado bonnie++.out, puede convertir la salida a html de la siguiente forma:
$ bon_csv2html < bonnie++.out > bonnie++.html
o a texto plano con:
$ bon_csv2txt < bonnie++.out > bonnie++.txt
Luego de leer la documentacin, ejecute pruebas ms largas y ambiciosas. Intente alguna de las
pruebas que no realizamos. Si su sistema se comporta bien, guarde los resultados para realizar
comparaciones de benchmarking en el futuro, en caso de que su sistema manifieste algn
problema de rendimiento.

LFS201: Fundamentos de Administracin de Sistemas Linux

324

24.7 Laboratorio 24.2


Laboratorio 24.2: fs_mark
El programa fs_mark sirve para realizar benchmarking de bajo nivel en sistemas de archivos,
utilizando operaciones asincrnicas de E/S sobre mltiples directorios y unidades, las cuales
generan una carga. El programa escrito por Ric Wheeler es bastante antiguo y ha resistido el paso
del tiempo.
Puede descargarse desde http://sourceforge.net/projects/fsmark/. Una vez que hay obtenido el
archivo, puede desempaquetarlo y compilarlo de la siguiente forma:
$ tar zxvf fs_mark-3.3.tgz
$ cd fs_mark
$ make
Lea el archivo README para obtener ms informacin, ya que vamos a realizar lo bsico. Si la
compilacin falla con un error como este:
$ make
....
/usr/bin/ld: cannot find -lc
es porque no est instalada la versin esttica de glibc. En sistemas basados en Red Hat lo puede
hacer como sigue:
$ sudo yum install glibc-static
y en sistemas basados en SUSE con:
$ sudo zypper install glibc-devel-static
En sistemas basados en Debian la biblioteca esttica est instalada junto a la compartida, por lo
cual no es necesario instalar algn paquete adicional.
A modo de prueba, vamos a crear 1000 archivos, cada uno de 10 KB, luego de lo cual ejecutaremos
fsync para escribir los cambios al disco. Esto puede hacerse en el directorio /tmp con el comando:
$ fs_mark -d /tmp -n 1000 -s 10240
Mientras esto est ejecutndose, obtenga estadsticas extendidas en otra terminal con iostat:
$ iostat -x -d /dev/sda 2 20

LFS201: Fundamentos de Administracin de Sistemas Linux

325

Las estadsticas en las que debera fijarse son los nmeros de archivos por segundo reportados por
fs_mark y el porcentaje de tiempo de CPU utilizado por iostat. Si este se aproxima a 100 por
ciento, el sistema de E/S est estresado.
Dependiendo del tipo de sistema de archivos que est usando, podra mejorar los resultados
cambiando las opciones de mount. Por ejemplo, para ext3 o ext4 puede probar lo siguiente:
$ mount -o remount,barrier=1 /tmp
para ext4 puede intentar:
$ mount -o remount,journal_async_commit /tmp
Vea cmo cambian los resultados. Tenga en cuenta que estas opciones podran causar problemas si
usted tiene un corte de energa elctrica o cualquier otro apagado inesperado; es decir, es
probable que exista una relacin inversa entre estabilidad y velocidad. La documentacin acerca de
algunas opciones de mount se puede encontrar junto a las fuentes del kernel en
Documentation/filesystems y en la pgina man de mount

LFS201: Fundamentos de Administracin de Sistemas Linux

326

Objetivos de aprendizaje (Revisin)


Actualmente usted debera ser capaz de:

Usar iostat para monitorear la actividad de dispositivos de E/S del sistema.


Usar iotop para desplegar una tabla del uso actual de E/S.
Usar ionice para configurar tanto la clase de planificacin de E/Scomo
la prioridad de un proceso dado.

LFS201: Fundamentos de Administracin de Sistemas Linux

327

Captulo 25. Planificacin de E/S


El rendimiento del sistema a menudo depende profundamente de optimizar la estrategia
de planificacin de E/S. Muchos factores (que compiten frecuentemente) influyen en el
comportamiento; esos incluyen minimizar los tiempos de acceso al hardware, evitando de
esta forma el desgaste del medio de almacenamiento, asegurando la integridad de los
datos, garantizando el acceso oportuno a las aplicaciones que necesitan realizar
operaciones de E/S y priorizando las tareas importantes.
Linux ofrece una variedad de planificadores de E/S a elegir, cada uno de los cuales
tiene parmetros ajustables, como tambin un nmero de herramientas para generar
reportes y analizar el rendimiento de E/S.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar la importancia de la planificacin de E/S y describir los requisitos en


conflicto que deben ser resueltos.
Delinear y contrastar las opciones disponibles en Linux.
Comprender cmo funcionan los algoritmos CFQ (Completely FairQueue)
y Deadline.

LFS201: Fundamentos de Administracin de Sistemas Linux

328

25.1 Planificacin de E/S


El planificador de E/S provee la interfaz entre la capa genrica de bloques y los
controladores de dispositivo fsico de bajo nivel. Tanto la VM (memoria virtual) como
el VFS (sistema de archivo virtual) realizan solicitudes de E/S a los dispositivos de bloque;
es trabajo del planificador de E/S el priorizar y ordenar estas solicitudes antes de que
sean enviadas a los dispositivos de bloque.
Cualquier algoritmo planificador de E/S tiene que satisfacer ciertos requerimientos (los
que a veces entran en conflicto):

Los tiempos de acceso al Hardware deben minimizarse; es decir, las solicitudes


deben ordenarse de acuerdo a la ubicacin fsica en el disco. Esto conduce a un
esquema de ascensor, en donde las solicitudes son insertadas en la cola
pendiente en orden fsico.
Las solicitudes deben mezclarse en tanto se pueda para obtener una regin
contigua del mayor tamao posible, lo cual tambin minimiza el tiempo de acceso
al disco.
Las solicitudes deben ser satisfechas con la menor latencia posible; de hecho en
algunos casos el determinismo (en el sentido de los plazos) puede ser importante.
Las operaciones de escritura generalmente pueden esperar a migrar desde cach
a disco sin que los procesos se estanquen. Sin embargo, las operaciones de
lectura requieren siempre que un proceso espere la finalizacin antes de seguir
adelante. Favorecer las lecturas sobre las escrituras conduce a mejorar las
operaciones en paralelo y la capacidad de respuesta del sistema.
Los procesos deben compartir el ancho de banda de E/S de forma justa, o al
menos priorizado de forma consciente; aunque esto signifique cierta
desaceleracin del rendimiento global de la capa de E/S, el rendimiento de los
procesos no debera verse muy afectado.

25.2 Alternativas del Planificador de E/S


Debido a que estas demandas pueden ser conflictivas, diversos planificadores de E/S
pueden ser apropiados para diferentes cargas de trabajo; por ejemplo, un servidor grande
de base de datos vs. un sistema de escritorio. Adems, el hardware especfico podra
ordenar una estrategia diferente. Para proveer flexibilidad, el kernel Linux tiene un
esquema orientado a objetos, en el cual punteros a las diversas funciones necesarias son
proporcionadas en una estructura de datos. Una en particular que puede ser seleccionada
durante el arranque en la lnea de comandos del kernel es:
linux ... elevator=[cfq|deadline|noop]
Al menos uno de los algoritmos de planificacin de E/S debe estar compilado en el kernel.
Las opciones actuales son:

Completely Fair Queueing (CFQ)


Deadline Scheduling
noop (Un esquema simple)

La opcin por defecto es una configuracin de la compilacin; las distribuciones modernas


eligen CFQ o Deadline.
LFS201: Fundamentos de Administracin de Sistemas Linux

329

25.3 Planificador de E/S y dispositivos SSD


La introduccin gradual de los dispositivos SSD (discos de estado slido), los cuales usan
memoria flash para emular discos duros, tienen importantes implicancias para la
planificacin de E/S.
Tales dispositivos no requieren de un esquema de ascensor y se benefician de la tcnica
conocida como nivelacin de desgaste para difundir E/S sobre los dispositivos que
tienen ciclos limitados de escritura/borrado.
Es posible examinar /sys/block/<device>/queue/rotational para ver si el dispositivo
es SSD o no, como se muestra a continuacin:
$ cat /sys/block/sda/queue/rotational
1

25.4 Parmetros y cambio del Planificador de E/S en tiempo de ejecucin


Cada uno de los planificadores de E/S presentan parmetros que se pueden usar para
ajustar el comportamiento en tiempo de ejecucin. Los parmetros se acceden a travs
del pseudosistema de archivos montado en /sys.
Adicionalmente, es posible usar diferentes planificadores de E/S para diversos
dispositivos. La eleccin puede realizarse fcilmente desde la lnea de comandos. Por
ejemplo:
$ cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
$ echo noop > /sys/block/sda/queue/scheduler
$ cat /sys/block/sda/queue/scheduler
[noop] deadline cfq

Los parmetros ajustables pueden variar en relacin al planificador de E/S en particular, y


pueden encontrarse bajo:
/sys/block/<device>/queue/iosched

LFS201: Fundamentos de Administracin de Sistemas Linux

330

Para un disco que usa CFQ:


$ ls -l /sys/block/sda/queue/iosched
total 0
rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr-rw-rr--

1
1
1
1
1
1
1
1
1
1
1
1

root
root
root
root
root
root
root
root
root
root
root
root

root
root
root
root
root
root
root
root
root
root
root
root

4096
4096
4096
4096
4096
4096
4096
4096
4096
4096
4096
4096

Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep

11
11
11
11
11
11
11
11
11
11
11
11

11:15
11:15
11:15
11:15
11:15
11:15
11:15
11:15
11:15
11:15
11:15
11:15

back_seek_max
back_seek_penalty
fifo_expire_async
fifo_expire_sync
group_idle
low_latency
quantum
slice_async
slice_async_rq
slice_idle
slice_sync
target_latency

Comentaremos algunos de estos parmetros en breve.

25.5 CFQ (Completely fair Queue Scheduler)


El mtodo CFQ (Completely Fair Queue) tiene el objetivo de propagar un ancho de banda
de E/S igual entre todos los procesos.
En teora, cada proceso tiene su propia cola de E/S, la cual trabaja en conjunto a una cola
de despacho que recibe las solicitudes hacia el dispositivo. En la prctica, el nmero de
colas es fijo (64) y un proceso hash basado en el ID del proceso se usa para seleccionar
una cola cuando se ingresa una solicitud.
El desencole de las solicitudes se realiza con el mecanismo round robin en todas las
colas, cada una de las cuales funciona en orden FIFO (primero en entrar, primero en
salir). De esa forma se lleva a cabo el trabajo. Para evitar operaciones excesivas de
bsqueda, se selecciona una ronda completa y se pasa a la cola de despacho antes de
que las solicitudes reales de E/S se emitan al dispositivo.

LFS201: Fundamentos de Administracin de Sistemas Linux

331

25.6 Parmetros ajustables de CFQ


En los ejemplos de abajo, el parmetro HZ es una cantidad configurada por el kernel, la
que corresponde al nmero de unidades de tiempo por segundo (jiffies), que el ncleo
usa como una medida gruesa de tiempo. Sin entrar en detalles, permtanos decir que la
unidad de tiempo HZ/2 es 0.5 segundos y 5 * HZ son 5 segundos, etc.

quantum
Longitud mxima de la cola en una ronda de servicio (valor por defecto = 4).

queued
Solicitud mnima de asignacin por cola (valor por defecto = 8).

fifo_expire_sync
timeout FIFO para solicitudes de sincronizacin (valor por defecto = HZ/2).

fifo_expire_async
timeout FIFO para solicitudes asincrnicas (valor por defecto = 5 * HZ).

fifo_batch_expire
Velocidad a la cual expira FIFO (valor por defecto = HZ/8).

back_seek_max
Bsqueda hacia atrs mxima, en KB (valor por defecto = 16K).

back_seek_penalty
Penalizacin por una bsqueda hacia atrs (valor por defecto = 2).

25.7 Planificador Deadline


El planificador de E/S Deadline reordena agresivamente solicitudes con los objetivos de
mejorar el rendimiento general y prevenir latencias grandes para solicitudes individuales;
es decir, limita la inanicin por falta de recursos.
Con cada solicitud el kernel asocia una fecha lmite. Las solicitudes de lectura obtienen
una prioridad ms alta que las de escritura.
Se mantienen cinco colas de E/S por separado:

Se mantienen dos listas ordenadas; una para lectura y otra para escritura,
ordenadas por bloque de inicio.
Se mantienen dos listas FIFO, de nuevo, una para lectura y otra para escritura.
Estas listas se ordenan por tiempo de ingreso.
Una quinta cola contiene las solicitudes que van a ser enviadas al controlador de
dispositivo. Esta cola se conoce como la cola de envo.

Exactamente cmo las solicitudes son removidas de las primeras cuatro colas y puestas
en la quinta (cola de envo) es donde entra en juego el arte del algoritmo.
LFS201: Fundamentos de Administracin de Sistemas Linux

332

25.8 Parmetros ajustables de Deadline


Aqu estn los parmetros ajustables del planificador Deadline:

read_expire:
En cunto tiempo (en milisegundos) se garantiza que ocurra una solicitud de
lectura (por defecto = HZ/2 = 500 ).
write_expire:
En cunto tiempo (en milisegundos) se garantiza que ocurra una solicitud de
escritura (por defecto = 5 * HZ = 5000 ).
writes_starved:
A cuntas solicitudes de lectura se debera dar preferencia por sobre las de
escritura (por defecto = 2 ).
fifo_batch:
Cuntas solicitudes deberan moverse desde la lista ordenada del planificador a la
cola de envo, cuando los plazos han expirado (por defecto = 16).
front_merges:
Las uniones hacia atrs son ms comunes que las hacia adelante, ya que una
solicitud contigua generalmente contina en el bloque siguiente. Se este
parmetro se configura en 0, se deshabilita la unin hacia adelante, lo cual puede
dar un impulso si usted sabe que no va a ser necesario (por defecto = 1 ).

Comprobacin de conocimientos 25.1

Comprobacin de conocimientos 25.2

LFS201: Fundamentos de Administracin de Sistemas Linux

333

25.9 Laboratorio 25.1


Laboratorio 25.1: Comparacin de planificadores de E/S
#!/bin/bash
#/*
# * The code herein is: Copyright the Linux Foundation, 2014
# * Author J. Cooperstein
# *
# * This Copyright is retained for the purpose of protecting free
# * redistribution of source.
# *
# * This code is distributed under Version 2 of the GNU General Public
# * License, which you should have received with the source.
# *
# */
NMAX=8
NMEGS=100
[[ -n $1 ]] && NMAX=$1
[[ -n $2 ]] && NMEGS=$2
echo Doing: $NMAX parallel read/writes on: $NMEGS MB size files
TIMEFORMAT=%R

%U

%S

# simple test of parallel reads


do_read_test(){
for n in $(seq 1 $NMAX) ; do
cat file$n > /dev/null &
done
# wait for previous jobs to finish
wait
}
# simple test of parallel writes
do_write_test(){
for n in $(seq 1 $NMAX) ; do
[[ -f fileout$n ]] && rm -f fileout$n
(cp file1 fileout$n && sync) &
done
# wait for previous jobs to finish
wait
LFS201: Fundamentos de Administracin de Sistemas Linux

334

}
# create some files for reading, ok if they are the same
create_input_files(){
[[ -f file1 ]] || dd if=/dev/urandom of=file1 bs=1M count=$NMEGS
for n in $(seq 1 $NMAX) ; do
[[ -f file$n ]] || cp file1 file$n
done
}
echo -e \ncreating as needed random input files
create_input_files
# begin the actual work
# do parallel read test
echo -e \ndoing timings of parallel reads\n
echo -e REAL
USER
SYS\n
for iosched in noop deadline cfq ; do
echo testing IOSCHED = $iosched
echo $iosched > /sys/block/sda/queue/scheduler
cat /sys/block/sda/queue/scheduler
#

echo -e \nclearing the memory caches\n


echo 3 > /proc/sys/vm/drop_caches
time do_read_test

done
##############################################################
# do parallel write test
echo -e \ndoing timings of parallel writes\n
echo -e REAL
USER
SYS\n
for iosched in noop deadline cfq ; do
echo testing IOSCHED = $iosched
echo $iosched > /sys/block/sda/queue/scheduler
cat /sys/block/sda/queue/scheduler
time do_write_test
done

LFS201: Fundamentos de Administracin de Sistemas Linux

335

Si est tomando la versin autodidacta en lnea de este curso, encontrar el cdigo fuente
disponible para su descarga en la pantalla Lab.
Recuerde darle permisos de ejecucin con:
$ chmod +x ioscript.sh
Lo que viene a continuacin es una explicacin del funcionamiento del script y de cmo usarlo:
El script realiza lo siguiente:

Cambiar entre los planificadores de E/S disponibles en un disco duro, mientras se hace un
nmero configurable de lecturas y escrituras en paralelo de archivos de tamao ajustable.
Pruebas de lectura y escritura en pasos por separado.
Al llevar a cabo las pruebas de lectura, asegrese de que est leyendo desde el disco y no
desde las pginas en memoria cach. Puede forzar que el cach se escriba en disco
ejecutando el comando:
$ echo 3 > /proc/sys/vm/drop_caches
antes de realizar el test de lectura. Puede hacer cat a /dev/null para evitar escribir en el
disco.

Asegrese de que todas las lecturas estn completas antes de obtener informacin del
tiempo tomado; esto puede llevarse a cabo ejecutando el comando wait en una shell.
Las pruebas de escritura se hacen simplemente copiando un archivo (el cual estar en el
cach luego de la primera lectura) mltiples veces de forma simultnea. Para asegurarse
que todas las operaciones de escritura se han completado antes de obtener informacin
del tiempo tomado, puede ejecutar el comando sync.

El script proporcionado toma dos argumentos. El primero es el nmero simuntneo de lecturas y


escrituras a realizar. El segundo es el tamao en MB de cada archivo.
Este script debe ejecutarse como root, dado a que obtiene valores desde los rboles de directorios
/proc y /sys. Compare los resultados obtenidos usando diferentes planificadores de E/S.
Para realizar una exploracin adicional, podra intentar cambiar algunos de los parmetros
ajustables y ver cmo varan los resultados.

LFS201: Fundamentos de Administracin de Sistemas Linux

336

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar la importancia de la planificacin de E/S y describir los requisitos en


conflicto que deben ser resueltos.
Delinear y contrastar las opciones disponibles en Linux.
Comprender cmo funcionan los algoritmos CFQ (Completely FairQueue)
y Deadline.

LFS201: Fundamentos de Administracin de Sistemas Linux

337

Captulo 26. Memoria: monitoreo y ajustes


A travs del tiempo los sistemas se han vuelto ms demandantes de recursos de
memoria, al mismo tiempo que los precios de la RAM han disminuido y el rendimiento ha
mejorado. De todas formas an sucede que los cuellos de botella en el rendimiento
general del sistema estn relacionados a la memoria; las CPUs y el subsistema de E/S
podran estar esperando que los datos se obtengan o escriban a memoria. Hay muchas
herramientas para monitoreo, depuracin y ajuste del comportamiento de un sistema en
relacin a su memoria.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Listar las consideraciones primarias y tareas involucradas en la optimizacin de la


memoria.
Saber cmo usar las entradas en /proc/sys/vm e interpretar/proc/meminfo.
Usar vmstat para desplegar informacin de memoria, paginacin, E/S, actividad
del procesador y el consumo de memoria de los procesos.
Comprender cmo el OOM-killer decide cundo tomar accin y seleccionar qu
procesos deben ser finalizados para liberar memoria.

LFS201: Fundamentos de Administracin de Sistemas Linux

338

26.1 Consideraciones al ajustar la memoria


Ajustar el subsistema de memoria puede ser un proceso complejo. Primero que todo hay
que notar que el uso de memoria y el rendimiento de E/S estn intrnsicamente
relacionados, ya que en la mayora de los casos la memoria se usa para poner en cach
el contenido de los archivos en disco.
Por lo tanto, cambiar parmetros de la memoria puede tener grandes efectos en el
rendimiento de E/S. Y cambiar parmetros de E/S puede tener un efecto contrario de igual
tamao en el subsistema de memoria virtual.
Al ajustar parmetros en /proc/sys/vm, la mejor prctica suele ser modificar una cosa a la
vez y analizar los efectos. Las tareas principales son las siguientes:

Controlar los parmetros de flujo; es decir, cuntas pginas se permite que


estn sucias (en el rea de intercambio) y cun a menudo se vacan al disco.

Controlar el comportamiento del rea de intercambio; es decir, cuntas pginas


que reflejan contenidos de archivo pueden permanecer en memoria en
comparacin a las que necesitan ser escritas a disco debido a que no tienen otra
copia de seguridad.

Controlar cunto desborde de memoria se permite, ya que muchos programas no


necesitan la cantidad total de memoria que solicitan, en particular debido a las
tcnicas COW (copy on write).

La optimizacin de memoria a menudo puede ser sutil, y lo que funciona en la situacin


de un sistema o carga puede no hacerlo de forma ptima en otras circunstancias.

26.2 Herramientas de monitoreo de memoria


Aqu hay una lista de algunas herramientas bsicas importantes para monitorear y
optimizar la memoria en Linux:
Tabla 26.1: Herramientas de monitoreo de memoria
Herramienta

Propsito

Paquete

free

Provee un resumen breve del uso de la memoria

procps

vmstat

Estadsticas detalladas de memoria virtual y bloques de E/S,


actualizados de forma dinmica

procps

pmap

Mapa de memoria de un proceso

procps

LFS201: Fundamentos de Administracin de Sistemas Linux

339

26.3 /proc/sys/vm
El directorio /proc/sys/vm contiene muchos ajustes para controlar el sistema
de Memoria Virtual. Lo que se encuentra exactamente en este directorio depende en
cierto modo de la versin del kernel. El usuario root puede escribir sobre casi todas las
entradas aqu.
Recuerde que estos valores pueden modificarse ya sea escribiendo directamente en la
entrada o usando la herramienta sysctl. Adems, si modifica /etc/sysctl.conf los valores
tendrn efecto en cada arranque.
Tabla 26.2: Entradas en /proc/sys/vm

Entrada

Propsito

admin_reserve_kbytes

Cantidad de memoria libre reservada para


usuarios con privilegios.

block_dump

Habilita depuracin de bloques de E/S.

compact_memory
dirty_background_bytes
dirty_background_ratio
dirty_bytes
dirty_expire_centisecs
dirty_ratio

dirty_writeback_centisecs

drop_caches

extfrag_threshold
hugepages_treat_as_movable
hugetlb_shm_group
laptop_mode
legacy_va_layout
lowmen_reserve_ratio

Habilita o deshabilita la compactacin de


memoria (esencialmente la defragmentacin)
cuando est configurada como parte del kernel.
Umbral de memoria sucia que provoca que las
pginas se escriban a disco.
Porcentaje total de pginas con el que el kernel
comenzar a escribir datos sucios al disco.
La cantidad de memoria sucia que un proceso
necesita para iniciar la escritura por s solo.
Cuando los datos sucios son los suficientemente
antiguos para ser escritos en centsimas de
segundo.
Porcentaje de pginas en el cual un proceso de
escritura comenzar a escribir datos sucios por s
solo.
Intervalo en el cual los demonios de reescritura
peridica se despiertan para limpiar. Si se
configura en cero, no hay reescritura peridica
automtica.
Echo 1 se usa para liberar el cach de pginas, 2
para los cachs dentry e inodo, 3 para liberar
todos. Tenga en cuenta que solo las pginas
limpias en cach se eliminan; primero haga sync
para eliminar las pginas sucias.
Controla cuando el kernel debe compactar
memoria.
Se usa para cambiar la forma en la que huge
pages es tratada.
Configura un ID de grupo que puede usarse para
huge pages System V.
Puede controlar una serie de caractersticas para
ahorrar energa en porttiles.
Use el diseo antiguo (kernel 2.4) en relacin a
cmo se muestran las asignaciones de memoria.
Controla cunta memoria baja est reservada para

LFS201: Fundamentos de Administracin de Sistemas Linux

340

max_map_count
min_free_kbytes

mmap_min_addr

nr_hugepages

pginas que solo pueden estar ah; es decir, las


pginas que pueden estar en memoria alta lo
harn. Solo es importante en sistemas de 32 bit
con memoria alta.
Nmero mximo de reas de memoria asignada
que puede tener un proceso. El valor por defecto
es 64 K.
Memoria libre mnima que debe estar reservada
en cada zona.
Cunto espacio de direcciones puede asignar un
proceso de usuario. Se usa para propsitos de
seguridad, para evitar que bugs del tipo
referencias nulas del kernel puedan sobreescribir
las primeras pginas en una aplicacin.
Tamao mnimo de un pool de hugepage.

nr_pdflush_hugepages
nr_pdflush_threads
oom_dump_tasks
oom_kill_allocating_task
overcommit_kbytes

overcommit_memory

overcommit_ratio

page-cluster
panic_on_oom
percpu_pagelist_fraction
scan_unevictable_pages
stat_interval
swappiness
user_reserve_kbytes

Tamao mximo del pool de


hugepage = nr_hugepages
*nr_overcommit_hugepages
Nmero actual de las hebras de pdflush; no se
puede escribir.
Si est habilitado, se genera un archivo de volcado
cuando el oom-killer entra en accin.
Si est configurado, el oom-killer elimina la tarea
que gener la situacin de sobrememoria, en vez
de tratar de seleccionar el mejor.
Es posible configurar ya
sea overcommit_ratio o esta entrada, pero no
ambas.
Si es 0, el kernel estima cunta memoria libre
queda cuando se realizan las asignaciones. Si es
1, permite todas las asignaciones hasta que la
memoria se agota. Si es 2, evitar cualquier
sobreasignacin.
Si overcommit_memory = 2, la asignacin de
memoria puede alcanzar el rea de intercambio
ms este porcentaje de RAM.
Nmero de pginas que pueden ser escritas al
rea de intercambio de una vez, como una
potencia de dos. El valor por defecto es 3 (lo cual
significa 8 pginas).
Habilita que el sistema se cuelgue en una
situacin de agotamiento de memoria.
Fraccin de pginas asignadas para cada cpu en
cada zona de mquinas de CPU con hotplug.
Si se escribe aqu, el sistema escanear e
intentar mover pginas para tratar de hacerlas
recuperables.
Con qu frecuencia vmstat actualiza las
estadsticas de vm (por defecto en 1 segundo).
Cun agresivamente el kernel puede usar la
memoria de intercambio.
Si overcommit_memory est configurado en 2,
esto configura hasta donde el usuario puede
extraer recursos de memoria.

LFS201: Fundamentos de Administracin de Sistemas Linux

341

Cun agresivamente el kernel podra reclamar


memoria usada para cach de inodo y dentry. El
valor por defecto es 100; si es 0, nunca se reclama
debido a presin de memoria.

vfs_cache_pressure

Usted puede encontrar informacin completa del directorio /proc/sys/vm en las fuentes
del kernel bajo Documentation/sysctl/vm.txt (o en el paquete de documentacin del
kernel de su distribucin).

26.4 vmstat
vmstat es una herramienta multipropsito que despliega informacin acerca de la
memoria, paginacin, E/S, actividad del procesador y procesos. Tiene muchas opciones.
La forma general del comando es la siguiente:
$ vmstat [options] [delay] [count]

Si delay se provee en segundos, el informe se repite en ese intervalo de tiempo; si no se


provee count, vmstat continuar entregando las estadsticas hasta que el proceso sea
detenido por una seal, tal como Ctl-C.
Si no se proveen otros argumentos, vmstat despliega lo que sigue:
$ vmstat 2 4
procs -----------memory---------- ---swap-- -----io---- -system-------cpu----r
2
0
0
1

b
0
0
0
0

swpd
0
0
0
0

free
4521672
4521408
4521408
4521408

buff
375560
375560
375568
375576

cache
1792484
1792516
1792516
1792516

si
0
0
0
0

so
0
0
0
0

bi
49
0
0
0

bo
17
0
14
10

in
363
490
436
452

cs us sy id wa st
275 3 1 95 1 0
352 1 1 98 0 0
316 1 0 99 0 0
330 1 0 98 0

donde la primera lnea muestra los promedios desde el ltimo reinicio, mientras que las
lneas subsiguientes muestran la actividad durante el intervalo especificado.
Los campos que se muestran son:

LFS201: Fundamentos de Administracin de Sistemas Linux

342

Tabla 26.3: Campos de vmstat

Campo

Subcampo Significado

Processes

Nmero de procesos en espera para ser ingresados al planificador

Processes

Nmero de procesos durmiendo

memory

swpd

Memoria virtual usada (KB)

memory

free

Memoria libre (ociosa) (KB)

memory

buff

Memoria usada como bfer (KB)

memory

cache

Memoria usada como cach (KB)

swap

si

Memoria de intercambio desde el disco (KB)

swap

so

Memoria de intercambio hacia el disco (KB)

I/O

bi

Bloques recibidos desde dispositivos (bloques/seg)

I/O

bo

Bloques enviados a dispositivos (bloques/seg)

system

in

Interrupciones/segundos

system

cs

Cambios de contexto/segundo

CPU

us

Tiempo de CPU ejecutando cdigo de usuario (porcentaje)

CPU

sy

Tiempo de CPU ejecutando cdigo del kernel (porcentaje)

CPU

id

Tiempo ocioso de CPU (porcentaje)

CPU

wa

Tiempo de espera por E/S (porcentaje)

CPU

st

Tiempo robado desde la mquina virtual (porcentaje)

Si se provee la opcin -S m , las estadsticas de memoria se mostrarn en MB en vez de


KB.
Con la opcin -a , vmstat despliega informacin acerca de la memoria activa e inactiva:
$ vmstat -a 2 4
procs -----------memory---------- ---swap-- -----io---- -system-------cpu----r b swpd
free
inact active si so bi bo
in
cs us sy id wa st
1 0
0 4448676 1034556 2153152 0 0 49 16 363 274 3 1 95 1 0
0 0
0 4448412 1034556 2153252 0 0 0 0 736 674 2 1 97 0 0
0 0
0 4445908 1034604 2154868 0 0 0 14 2043 2301 5 3 91 0 0
0 0
0 4445560 1034604 2155224 0 0 0 24 1582 1784 5 2 92 0 0

LFS201: Fundamentos de Administracin de Sistemas Linux

343

donde las pginas de memoria activa son aquellas que han sido usadas recientemente;
pueden estar limpias (los contenidos en disco estn actualizados) o sucias (necesitan
ser actualizadas al disco). Por otro lado, las pginas de memoria inactiva no han sido
usadas recientemente, posiblemente estn limpias y se liberan antes bajo presin de
memoria.
La memoria se puede mover entre las listas de memoria activa e inactiva en tanto hay
cambios, o por otra parte, pueden permanecer en su lugar si se deja mucho tiempo entre
usos.
Para obtener una tabla de estadsticas de memoria y ciertos contadores de eventos use la
opcin -s:

$ vmstat -s
8170032 K total memory
3914056 K used memory
2159780 K active memory
1034664 K inactive memory
4255976 K free memory
375984 K buffer memory
1807796 K swap cache
4193776 K total swap
0 K used swap
4193776 K free swap
138381 non-nice user cpu ticks
2408 nice user cpu ticks
58336 system cpu ticks
4126831 idle cpu ticks
31180 IO-wait cpu ticks
0 IRQ cpu ticks
248 softirq cpu ticks
0 stolen cpu ticks
2120046 pages paged in
708910 pages paged out
0 pages swapped in
0 pages swapped out
16047974 interrupts
11926843 CPU context switches
1410434075 boot time
31537 forks

LFS201: Fundamentos de Administracin de Sistemas Linux

344

Use la opcin -d para obtener una tabla de estadsticas de disco:


$ vmstat -d
disk- ------------reads------------ ------------writes---------------IO-----total merged sectors
ms total merged sectors
ms cur sec
ram0
0
0
0
0
0
0
0
0
0
0
ram1
0
0
0
0
0
0
0
0
0
0
ram2
0
0
0
0
0
0
0
0
0
0
ram3
0
0
0
0
0
0
0
0
0
0
ram4
0
0
0
0
0
0
0
0
0
0
ram5
0
0
0
0
0
0
0
0
0
0
ram6
0
0
0
0
0
0
0
0
0
0
....
loop0
0
0
0
0
0
0
0
0
0
0
loop1
0
0
0
0
0
0
0
0
0
0
loop2
0
0
0
0
0
0
0
0
0
0
....
sda
98304 13295 4233052 1036054 50011 29441 1422172 915477
0 268
sr0
0
0
0
0
0
0
0
0
0
0
sdb
0
0
0
0
0
0
0
0
0
0
dm-0 14721
0 1175928 108578 50068
0 1126336 313843
0 159
dm-2 15561
0 124416
52057
5
0
24
1184
0 17
dm-3
182
0
1456
7756
0
0
0
0
0
7
dm-5
....

Tabla 26.4: Campos de disco de vmstat


Campo

Subcampo Significado

reads

total

Lecturas en total completadas de forma exitosa

reads

merged

Lecturas agrupadas (resultando en una E/S)

reads

ms

Milisegundos gastados en lecturas

writes

total

Escrituras en tital completadas de forma exitosa

writes

merged

Escrituras agrupadas (resultando en una I/O)

writes

ms

Milisegundos gastados en escrituras

I/O

cur

E/S en progreso

I/O

sec

segundos gastados en E/S

LFS201: Fundamentos de Administracin de Sistemas Linux

345

Si solo desea obtener algunas estadsticas rpidas en una particin, use la opcin -p:
$ vmstat -p /dev/sda1 2 4
sda1 reads read sectors writes requested writes
23913
1969794
11412
291672
23913
1969794
11417
291712
23913
1969794
11417
291712
23913
1969794
11419
291736

26.5 /proc/meminfo
Como se mencion anteriormente, en /proc/meminfo se puede encontrar un resumen
relativamente largo de estadsticas de memoria:
$ cat /proc/meminfo
MemTotal:
8170032
MemFree:
4506996
MemAvailable:
6747268
Buffers:
376744
Cached:
1865956
SwapCached:
0
Active:
2155424
Inactive:
1036312
Active(anon):
951000
Inactive(anon):
49300
Active(file):
1204424
Inactive(file):
987012
Unevictable:
32
Mlocked:
32
SwapTotal:
4193776
SwapFree:
4193776
Dirty:
48
Writeback:
0
AnonPages:
949168
Mapped:
397340
Shmem:
51312
Slab:
336148
SReclaimable:
302240
SUnreclaim:
33908
KernelStack:
8352
PageTables:
29752
NFS_Unstable:
0
Bounce:
0
WritebackTmp:
0
CommitLimit:
8278792
Committed_AS:
3790248
VmallocTotal: 34359738367
VmallocUsed:
327116
VmallocChunk: 34359398732
AnonHugePages:
344064
HugePages_Total:
0

kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB
kB

LFS201: Fundamentos de Administracin de Sistemas Linux

346

HugePages_Free:
HugePages_Rsvd:
HugePages_Surp:
Hugepagesize:
DirectMap4k:
DirectMap2M:

0
0
0
2048 kB
1252800 kB
7135232 kB

Vale la pena ir a travs de la tabla siguiente y entender las entradas:


Tabla 26.5: Entradas de /proc/meminfo
Significado

Entrada
MemTotal

RAM total disponible (memoria fsica menos la memoria reservada por el


kernel)

MemFree

Memoria libre tanto en zonas bajas como altas

Buffers

Memoria usada para almacenamiento temporal de bloques de E/S

Cached

Memoria de cach de pginas, principalmente para E/S de archivos

SwapCached

Memoria que fue sacada del rea de intercambio pero que todava
permanece en el archivo de intercambio

Active

Memoria usada recientemente, no va a ser recuperada primero

Inactive

Memoria que no ha sido usada recientemente, ms elegible para ser


recuperada

Active(anon)

Memoria activa para pginas annimas

Inactive(anon)

Memoria inactiva para pginas annimas

Active(file)

Memoria activa para pginas de archivos respaldados

Inactive(file)

Memoria inactiva para pginas de archivos respaldados

Unevictable

Pginas que no pueden ser sacadas del rea de intercambio ni liberadas

Mlocked

Pginas que estn bloqueadas en memoria

SwapTotal

Espacio total de intercambio disponible

SwapFree

Espacio de intercambio que no est en uso

Dirty

Memoria que necesita ser escrita nuevamente al disco

Writeback

Memoria que est siendo escrita activamente de nuevo a disco

AnonPages

Pginas respaldadas (que no corresponden a archivos) en cach

Mapped

Pginas mapeadas a memoria, tales como bibliotecas

Shmem

Pginas usadas para memoria compartida

Slab

Memoria usada en slabs

SReclaimable

Memoria de cach en slabs que puede ser recuperada

SUnreclaim

Memoria de cach en slabs que no puede ser recuperada

KernelStack

Memoria usada en el stack del kernel

LFS201: Fundamentos de Administracin de Sistemas Linux

347

PageTables

Memoria que est siendo usada por estructuras de tabla de pgina

Bounce

Memoria usada para bfers de rebote de dispositivos de bloque

WritebackTmp

Memoria usada por sistemas de archivos FUSE para bfers de


reescritura

CommitLimit

Memoria total disponible para ser usada, incluyendo overcommit

Committed_AS

Memoria total asignada actualmente, tanto si est en uso o no

VmallocTotal

Memoria total disponible en el kernel para asignaciones de vmalloc

VmallocUsed

Memoria realmente usada por asignaciones vmalloc

VmallocChunk

Mayor rea contigua posible de vmalloc

HugePages_Total

Tamao total del pool de hugepages

HugePages_Free

Hugepages que todava no se asignan

HugePages_Rsvd

Hugepages que han sido reservadas pero que an no se usan

HugePages_Surp

Hugepages que son un excedente, usadas para overcommit

Hugepagesize

Tamao de una hugepage

Tenga en cuenta que las entradas exactas dependern de la versin especfica del kernel
en ejecucin.

26.6 OOM Killer


La manera ms simple de lidiar con presin de memoria sera permitir las asignaciones de
memoria en tanto hay memoria disponible y luego denegarlas cuando la memoria se ha
agotado.
La segunda forma ms simple es usar un rea de intercambio en disco para hacer
espacio en memoria; en este caso la memoria disponible total (al menos en teora) es
la RAM ms el tamao del rea de intercambio. La parte compleja de esto es determinar
qu pginas de memoria van a ir al rea de intercambio cuando el sistema est bajo
presin. Bajo este enfoque, una vez que el rea de intercambio se llena, las solicitudes
para asignar memoria deben ser denegadas.
Sin embargo, Linux tiene una solucin mejor; permite que el sistema realice un
overcommit de memoria, de tal forma que puede conceder solicitudes de memoria que
exceden el tamao de la RAM ms el rea de intercambio. Si bien es cierto esto puede
parecer temerario, muchos de los procesos (si no la mayora) no usan toda la memoria
solicitada.

LFS201: Fundamentos de Administracin de Sistemas Linux

348

Un ejemplo sera un programa que asigna un bfer de 1 MB y luego usa solo unas pocas
pginas de memoria. Otro ejemplo es que cada vez que un proceso hijo es creado, recibe
una copia completa del espacio de memoria del padre. Debido a que Linux usa la
tcnica COW (copy on write), a menos de que uno de los procesos modifique la memoria,
no se necesita hacer ninguna copia real. Sin embargo el kernel tiene que asumir que sera
necesario realizar esa copia.
As, el kernel permite el overcommit de memoria, pero solo para pginas dedicadas a
procesos de usuario; las pginas usadas en el kernel no van al rea de intercambio y
siempre se asignan al momento de ser solicitadas.
Es posible modificar e incluso desactivar el overcommit ajustando el valor
de /proc/sys/vm/overcommit_memory:

0: (valor por defecto) Se permite el overcommit, pero se deniegan overcommits


obvios. Se les asigna un poco ms de memoria a los usuarios root que a los
normales.

1:

2: Deshabilita el overcommit. Las solicitudes de memoria sern denegadas cuando


el total de memoria requerida alcance el tamao del rea de intercambio ms un
porcentaje configurable de la RAM (50 por defecto). Este factor puede modificarse
en /proc/sys/vm/overcommit_ratio.

Todas

las

solicitudes

de

memoria

pueden

realizar

un

overcommit.

Si la memoria se agota, Linux invoca el OOM-killer (Out Of Memory) para decidir qu


proceso(s) deben ser terminados para liberar memoria.
No hay una ciencia exacta para esto; el algoritmo debe ser heurstico y no puede
satisfacer a todos. En las mentes de muchos desarrolladores, el propsito del OOM-killer
es permitir un cierre exitoso, en vez de ser parte de las operaciones normales.
Andries Brouwer escribi algo divertido al respecto (http://lwn.net/Articles/104185/):
Una compaa de aviones descubri que era ms barato volar sus aviones con menos
combustible a bordo. Los aviones seran ms livianos y usaran menos combustible, de tal
forma que se ahorrara dinero. Sin embargo, en raras ocasiones la cantidad de
combustible fue insuficiente y el avin se estrell. El problema fue resuelto por los
ingenieros de la compaa a travs del desarrollo del mecanismo especial OOF (out-offuel). En casos de emergencia un pasajero era seleccionado y se expulsaba del avin (el
proceso se repeta cuando era necesario). Se desarroll una gran teora al respecto y
muchas publicaciones se dedicaron al problema de elegir adecuadamente la vctima a ser
expulsada. La vctima debera ser elegida al azar? O se debera escoger a la persona
con mayor peso? O el ms viejo? Los pasajeros deberan pagar para no ser
expulsados, de tal manera que la vctima sea el ms pobre a bordo? Y si en caso de que
se eligiera a la persona con mayor peso, debera haber una excepcin en caso de que
fuera el piloto? Los pasajeros de primera clase deberan estar eximidos? Ahora que el
mecanismo OOF existe, podra activarse cada dos por tres y los pasajeros seran
expulsados an cuando no hubiera ninguna escasez de combustible. Los ingenieros
todava estn estudiando cmo se produce precisamente este mal funcionamiento.

LFS201: Fundamentos de Administracin de Sistemas Linux

349

Para tomar decisiones acerca de quin es sacrificado para mantener vivo el sistema, se
calcula un valor llamado maldad (el cual puede ser leerse desde /proc/[pid]/oom_score)
para cada proceso en el sistema. El orden para matar los procesos se determina por este
valor.
Dos entradas en el mismo directorio pueden usarse para aumentar o disminuir la
probabilidad de exterminio. El valor de oom_adj es el nmero de bits en los cuales los
puntos se ajustan. Los usuarios normales pueden incrementar el valor solamente; solo un
superusuario puede disminuirlo (un valor negativo de oom_adj). El valor
de oom_adj_scoreajusta directamente el valor del punto. Tenga en cuenta que
ajustar oom_adj es obsoleto actualmente.

Comprobacin de conocimientos 26.1

Comprobacin de conocimientos 26.2

Comprobacin de conocimientos 26.3

Comprobacin de conocimientos 26.4

LFS201: Fundamentos de Administracin de Sistemas Linux

350

26.7 Laboratorio 26.1


Laboratorio 26.1: Invocando el OOM Killer

Vea qu particiones y archivos de intercambio (swap) estn presentes en su sistema en el


archivo /proc/swaps. Deshabilite todas las reas de intercambio con el comando
$ sudo /sbin/swapoff -a

Asegrese de habilitar las reas de intercambio una vez que haya terminado, con
$ sudo/sbin/swapon -a

Ahora vamos a poner el sistema bajo una presin de memoria creciente. Una forma de
hacerlo es con el programa stress que instalamos anteriormente, al ejecutarlo con los
argumentos que se muestran a continuacin:
$ stress -m 8 -t 10s

lo cual mantendra ocupados 2 GB por 10 segundos.


Usted debera ver al OOM (Out of Memory) lanzarse en picada a terminar procesos para
mantener vivo al sistema. Puede ver que est sucediendo con dmesg o monitoreando
/var/log/messages, o /var/log/syslog, o a travs de alguna interfaz grfica que exponga lo
que est sucediendo en los registros del sistema.
Qu proceso se finaliza primero?

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Listar las consideraciones primarias y tareas involucradas en la optimizacin de la


memoria.
Saber cmo usar las entradas en /proc/sys/vm e interpretar/proc/meminfo.
Usar vmstat para desplegar informacin de memoria, paginacin, E/S, actividad
del procesador y el consumo de memoria de los procesos.
Comprender cmo el OOM-killer decide cundo tomar accin y seleccionar qu
procesos deben ser finalizados para liberar memoria.

LFS201: Fundamentos de Administracin de Sistemas Linux

351

Captulo 27. Sistemas de gestin de paquetes


Es necesario introducir orden en la forma en que el software se instala, actualiza y
remueve en los sistemas Linux. Los sistemas de gestin de paquetes proveen una va
limpia de alcanzar esa meta y puede evitar que los sistemas caigan en un caos, que se
vuelvan viejos o se rompan con el tiempo. Adems, proveen un mtodo para verificar que
el software en el sistema no ha sido corrompido, ya sea maliciosamente o por accidente.
Una funcin esencial de los distribuidores de Linux es desarrollar, mantener los paquetes
y asegurarse que las dependencias son mantenidas apropiadamente con el tiempo.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar por qu se deberan usar los sistemas de gestin de paquetes.


Comprender el rol tanto de los paquetes binarios como de las fuentes.
Listar los principales sistemas de gestin de paquetes disponibles.
Comprender por qu se necesitan dos niveles de herramientas; uno que se ocupa
de los paquetes en s y otro que se ocupa de las dependencias entre ellos.
Explicar cmo el crear su propio paquete mejora el control que tiene sobre
exactamente lo que sucede con el software y cmo est instalado.

LFS201: Fundamentos de Administracin de Sistemas Linux

352

27.1 Conceptos de empaquetamiento de software


Los sistemas de gestin de paquetes proveen las herramientas que les permiten a los
administradores de sistemas automatizar la instalacin, actualizacin, configuracin y
eliminacin de paquetes de software, todo ello de una forma conocida, predecible y
consistente. Estos sistemas:

Reunir y comprimir archivos de software asociado en un solo paquete (archivo), lo


cual puede requerir que uno o ms paquetes se instalen primero.
Permiten que la instalacin y eliminacin de software sea fcil.
Puede verificar la integridad del archivo a travs de una base de datos interna.
Puede autenticar el origen de los paquetes.
Facilita las actualizaciones.
Agrupa los paquetes por caractersticas lgicas.
Administra las dependencias entre paquetes.

Un paquete puede contener archivos ejecutables, archivos de datos, documentacin,


scripts de instalacin y archivos de configuracin. Tambin se incluyen atributos
de metadatos tales como nmero de versin, checksums, informacin del proveedor,
dependencias, descripciones, etc.
Tras la instalacin, toda la informacin se almacena localmente en una base de datos
interna, la cual puede ser consultada de forma conveniente para obtener informacin del
estado y la versin.

27.2 Razones por las cuales usar paquetes


Los sistemas de gestin de paquetes de software son ampliamente vistos como uno de
los avances ms grandes que Linux trajo a los ambientes empresariales de IT. Al llevar
un registro de archivos y metadatos de forma automatizada, predecible y confiable, los
administradores de sistemas pueden usar los sistemas de gestin de paquetes para para
escalar el proceso de instalacin a miles de sistemas sin requerir de trabajo manual en
cada sistema por separado. Las caractersticas incluyen:

Automatizacin:
manuales.

No se necesita realizar instalaciones ni actualizaciones

Escalabilidad: Instalar paquetes en uno o en 10.000 sistemas.

Repetibilidad y predictibilidad.

Seguridad y auditora.

LFS201: Fundamentos de Administracin de Sistemas Linux

353

27.3 Tipos de paquetes


Los paquetes vienen en diferentes tipos:

Los paquetes binarios contienen archivos listos para ser implementados,


incluyendo archivos ejecutables y bibliotecas. Estos son dependientes de la
arquitectura y deben ser compilados para cada tipo de mquina.

Los paquetes de cdigo fuente se usan para generar paquetes binarios; uno
siempre debera tener la posibilidad de reconstruir un paquete binario (por
ejemplo, usando rpmbuildrebuild en sistemas basados en RPM) desde el
cdigo fuente. Un paquete de cdigo fuente puede ser usado en mltiples
arquitecturas.

Los paquetes independientes de la arquitectura contienen archivos y scripts que


se ejecutan bajo intrpretes de script, como tambin documentacin y archivos de
configuracin.

Los metapaquetes son esencialmente grupos de paquetes asociados que


recopilan todo lo necesario para instalar un subsistema relativamente grande, tal
como un ambiente de escritorio, o una suite de oficina, etc.

Los administradores de sistema tienen que lidiar la mayora del tiempo con los paquetes
binarios. En sistemas de 64 bits que pueden ejecutar programas de 32 bits, es posible
tener dos paquetes binarios instalados para un programa dado; tal vez uno
con x86_64 o amd64 en el nombre y otro con i386 o i686.
Los paquetes de cdigo fuente pueden ser tiles para mantener el seguimiento de los
cambios y el cdigo usado que viene en los paquetes binarios. Generalmente no estn
instalados por defecto en un sistema pero siempre pueden ser obtenidos desde el
proveedor de la distribucin.

27.4 Sistemas disponibles para gestin de paquetes


Hay dos tipos muy comunes de sistemas de gestin de paquetes:
1. RPM (Red Hat Package Manager)
Este sistema es usado por todas las distribuciones derivadas de Red Hat, tales
como Red Hat Enterprise Linux,CentOS, Scientific Linux y CentOS. Tambin
por SUSE y la comunidad relacionada a la distribucin openSUSE.
2. dpkg (Debian Package)
Este sistema es usado por Debian y todas las distribuciones derivadas,
incluyendo Ubuntu y Linux Mint.
Hay
otros
sistemas
de
gestin
de
paquetes: portage/emerge,
usados
por Gentoo, pacman, usado por Arch y los especializados, los cuales son utilizados por
sistemas de Linux embebido y Android.
LFS201: Fundamentos de Administracin de Sistemas Linux

354

LFS201: Fundamentos de Administracin de Sistemas Linux

355

Un sistema antiguo es simplemente proveer los paquetes como archivos tar comprimidos,
sin ninguna gestin real o estrategia de eliminacin limpia del paquete; este enfoque es
usada todava por Slackware, una de las distribuciones ms antiguas de Linux.
Pero la mayora de las veces se usa RPM o dpkg, por lo cual esas sern los nicos
sistemas que consideraremos en este curso.

27.5 Niveles de empaquetamiento y variedad de herramientas


Hay dos niveles de sistemas de empaquetamiento:
1. Herramienta de bajo nivel: esto simplemente instala o elimina un paquete nico o
una lista de paquetes en donde cada uno tiene su nombre de forma individual y
especfica. Las dependencias no estn completamente gestionadas, solo se
generan advertencias acerca de:
- Si otro paquete necesita ser instalado primero, la instalacin fallar.
- Si el paquete es una dependencia de otro, su eliminacin fallar.
2. Las herramientas rpm y dpkg realizan
empaquetamiento que los usan.

este

rol

en

los

sistemas

de

3. Herramienta de alto nivel. Esta resuelve los problemas de dependencias:


- Si otro paquete o grupo de paquetes necesita ser instalado antes de que el
software
pueda
serlo,
tales
necesidades
sern
satisfechas.
- Si la eliminacin de un paquete interfiere con otro que ya est instalado, el
administrador podr elegir si abortar la operacin o remover todo el software
afectado.
Las herramientas yum y zypper (y ms recientemente PackageKit) se hacen
cargo de la resolucin de dependencias para sistemas con rpm. Por otro lado, aptget, apt-cache y otras herramientas se hacen cargo en sistemas con dpkg.
En este curso discutiremos solamente las interfaces de lnea de comandos a los sistemas
de gestin de paquetes. Si bien es cierto que las interfaces grficas usadas por cada
distribucin Linux pueden ser tiles, nos gustara estar menos atado a solo una de ellas y
tambin tener ms flexibilidad.

27.6 Fuentes de paquetes


Cada distribucin tiene uno o ms repositorios de paquetes desde donde las
herramientas del sistema obtienen software y las actualizaciones de versiones nuevas. Es
trabajo de la distribucin asegurarse que todos los paquetes en los repositorios
interactan bien unos con otros.
Hay otros repositorios, externos, que pueden agregarse a la lista estndar que soporta la
distribucin. A veces estn estrechamente asociadas a la distribucin y raramente
generan problemas importantes; un ejemplo puede ser EPEL(Extra Packages
for Enterprise Linux), un conjunto de repositorios dependientes de la versin de la
distribucin, los cuales encajan bien con RHEL ya que su fuente Fedora y los
mantenedores de sta son cercanos a Red Hat.
LFS201: Fundamentos de Administracin de Sistemas Linux

356

Sin embargo, algunos repositorios externos no estn muy bien construidos o mantenidos.
Por ejemplo, cuando un paquete se actualiza en el repositorio principal, las dependencias
podran no estar actualizadas en el repositorio externo, el cual podra conducir a
una dependencia infernal de paquetes.

27.7 Creacin de paquetes de software


Construir paquetes de software personalizado facilita distribuir e instalar su propio
software. Casi todas las versiones de Linux tienen algn mecanismo para realizarlo.
Construir su propio paquete le permite controlar exactamente qu va en el software y
cmo se instala. Puede crear el paquete de tal forma que cuando se instale, ejecute
scripts para realizar todas las tareas necesarias a fin de instalar el nuevo software y/o
eliminar el antiguo. Tales tareas incluyen:

Creacin de los enlaces simblicos necesarios.


Creacin de directorios segn sea necesario.
Configuracin de permisos.
Cualquier cosa que pueda incluirse en un script y que cumpla una tarea especfica.

No vamos a discutir los mecanismos acerca de cmo construir paquetes .rpm o .deb, ya
que ese es un asunto que atae ms a desarrolladores de software que a
administradores.

Comprobacin de conocimientos 27.1

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar por qu se deberan usar los sistemas de gestin de paquetes.


Comprender el rol tanto de los paquetes binarios como de las fuentes.
Listar los principales sistemas de gestin de paquetes disponibles.
Comprender por qu se necesitan dos niveles de herramientas; uno que se ocupa
de los paquetes en s y otro que se ocupa de las dependencias entre ellos.

LFS201: Fundamentos de Administracin de Sistemas Linux

357

Explicar cmo el crear su propio paquete mejora el control que tiene sobre
exactamente lo que sucede con el software y cmo est instalado.

LFS201: Fundamentos de Administracin de Sistemas Linux

358

Captulo 28. RPM


El Red Hat Package Manager (RPM) es usado por una serie de las distribuciones
principales (y sus derivadas) para controlar la instalacin, verificacin, actualizacin y
eliminacin de software en sistemas Linux. El programa de bajo nivel rpm puede realizar
todas esas operaciones, ya sea en un solo paquete o en una lista de ellos. Las
operaciones que podran causar problemas no se pueden completar con rpm, tales como
remover un paquete del cual depende otro, o instalar un paquete sin haber satisfecho las
dependencias primero.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Comprender cmo est organizado el sistema RPM y conocer las operaciones


ms importantes que el programa rpm puede realizar.
Explicar las convenciones de nombre usadas tanto para los archivos rpm binarios
y de cdigo fuente.
Saber cmo consultar, verificar, instalar, desinstalar y actualizar paquetes.
Comprender por qu los kernels nuevos deberan ser instalados en vez de
actualizados.
Saber cmo usar rpm2cpio para copiar archivos empaquetados en un
archivo cpio, como tambin extraer los archivos sin instalarlos.

LFS201: Fundamentos de Administracin de Sistemas Linux

359

28.1 RPM
RPM (Redhat Package Manager) fue desarrollado por Red Hat (como era de esperar).
Todos los archivos relacionados a una tarea especfica estn empaquetados en un
archivo rpm nico, el cual tambin contiene informacin acerca de cmo y donde
instalar/desinstalar los archivos. Las versiones nuevas de software conducen a
archivos rpm nuevos, los que se usan para la actualizacin.
Los archivos rpm tambin contienen informacin acerca de las dependencias. Tenga en
cuenta que a menos que se especifique una URL para obtener los paquetes, rpm no ir a
buscar los paquetes a internet, sino que ms bien los instalar desde la mquina local
solamente, usando rutas absolutas o relativas para tal efecto.
Los archivos rpm generalmente dependen de la distribucin; de hecho instalar un paquete
en una distribucin diferente para la cual fue creado podra ser difcil o imposible.

28.2 Ventajas en el uso de RPM


RPM le facilita las siguientes tareas a los administradores de sistemas:

Determinar a qu paquete pertenece un archivo en el sistema (si es el caso).

Determinar qu versin est instalada.

Instalar y desinstalar paquetes sin dejar residuos o cabos sueltos.

Verificar que un paquete se instal correctamente; esto es til tanto para


solucionar problemas como para la auditora del sistema.

Distinguir los archivos de documentacin del resto de los archivos del paquete, y
opcionalmente decidir no instalarlos para ahorrar espacio en disco.

Usar ftp o HTTP para instalar paquetes desde internet.

RPM ofrece ventajas para los desarrolladores tambin:

El software a menudo est disponible en ms de un sistema operativo. Con RPM,


la fuente original (sin modificar) se usa como base, pero un desarrollador puede
incluir informacin para construirlo (compilarlo) en Linux.

Usando un solo paquete de cdigo fuente es posible construir un paquete binario


para ms de una arquitectura.

LFS201: Fundamentos de Administracin de Sistemas Linux

360

28.3 Nombres de archivos de paquetes


Los nombres de los paquetes RPM estn basados en campos que representan
informacin especfica, tal como se documenta en el estndar RPM (http://www.rpm.org/).

El formato de nombre estandarizado para un paquete binario es:


<name>-<version>-<release>.<distro>.<architecture>.rpm
sed-4.2.1-10.el6.x86_64.rpm

El formato de nombre estandarizado para un paquete de cdigo fuente es:


<name>-<version>-<release>.<distro>.src.rpm
sed-4.2.1-10.el6.src.rpm

Tenga en cuenta que el campo distro a menudo especifica el repositorio del cual
proviene el paquete, dado a que una instalacin puede usar varios repositorios de
paquetes como discutiremos en la seccin de yum y zypper, herramientas que trabajan
sobre RPM.

28.4 Directorio de la base de datos


/var/lib/rpm es el directorio por defecto en el sistema, el cual contiene los archivos de

la base de datos RPM en la forma de archivos hash de Berkeley DB. Los archivos de la
base de datos no deberan ser modificados manualmente; las actualizaciones deberan
realizarse solamente a travs del programa rpm.
Es posible especificar un directorio alternativo para la base de datos con la opcin
dbpath en el programa rpm. Por ejemplo, esto podra ser til para examinar una base de
datos RPM copiada desde otro sistema.
Usted puede usar la opcinrebuilddb para reconstruir los ndices de la base de datos
desde los headers de los paquetes instalados; esto es ms bien una reparacin y no una
reconstruccin desde cero.

LFS201: Fundamentos de Administracin de Sistemas Linux

361

28.5 Programas auxiliares y ajustes modificables


Los programas auxiliares y scripts usados por RPM residen en /usr/lib/rpm. Hay un buen
nmero; por ejemplo, en un sistema RHEL 7:
$ ls /usr/lib/rpm | wc -l
69

donde wc reporta el nmero de lneas de la salida.


Es posible crear un archivo rpmrc para especificar los ajustes por defecto para rpm. Por
defecto, rpm revisa los siguientes archivos, en el orden tal como se muestra a
continuacin:

/usr/lib/rpm/rpmrc

/etc/rpmrc

~/.rpmrc

Tenga en cuenta que se leen todos esos archivo; rpm no se detiene tan pronto encuentra
uno de esos archivos. Puede especificarse un archivo rpmrc alternativo con la opcin
rcfile.

28.6 Consultas
Todas las consultas rpm incluyen la opcin -q, la cual puede ser combinada con diversas
subopciones, como las que siguen:

Qu versin de un paquete est instalada?


$ rpm -q bash

De qu paquete proviene este archivo?


$ rpm -qf /bin/bash

Qu archivos instal este paquete?


$ rpm -ql bash

Muestra informacin acerca del paquete


$ rpm -qi bash

Muestra informacin acerca del paquete desde el archivo del paquete en s, no


desde la base de datos.
$ rpm -qip foo-1.0.0.1.noarch.rpm
LFS201: Fundamentos de Administracin de Sistemas Linux

362

Lista todos los paquetes instalados en el sistema


$ rpm -qa

Un par de opciones tiles sonrequires ywhatprovides.

Entrega una lista de los prerrequisitos de un paquete:


$ rpm -qprequires foo-1.0.0-1.noarch.rpm

Muestra qu paquete instalado provee un archivo de requisito en particular:


$ rpm -qwhatprovides libc.so.6

28.7 Verificacin de paquetes


La opcin -V de rpm permite verificar si los archivos de un paquete en particular son
consistentes con la base de datos de RPM del sistema. Para verificar todos los paquetes
instalados en el sistema:
$ rpm Va
missing
....
S.5....T.
S.5....T.
....L....
....L....
....
.M.......
....
.....UG..
.....UG..

/var/run/pluto
c /etc/hba.conf
/usr/share/applications/defaults.list
c /etc/pam.d/fingerprint-auth
c /etc/pam.d/password-auth
/var/lib/nfs/rpc_pipefs
/usr/local/bin
/usr/local/etc

donde la salida anterior muestra solo unos pocos tems. Tenga en cuenta que este
comando podra tomar bastante tiempo ya que examina todos los archivos asociados a
cada
paquete.
Se genera una salida cuando hay un problema solamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

363

Cada uno de los caracteres desplegados arriba denota el resultado de una comparacin
de atributo(s) del archivo con valor de los atributo(s) almacenados en la base de datos. Un
. nico (punto) significa que pas la prueba, mientras que un ? nico (signo de
interrogacin al final) indica que la prueba no se pudo realizar (porque por ejemplo los
permisos del archivo no permiten la lectura). De otra forma, el caracter denota una falla de
la prueba en la verificacin correspondiente:

S: el tamao de archivo difiere


M: los permisos del archivo y/o tipo difieren
5: el checksum MD5 difiere
D: discrepancia entre los nmeros mayor/menor
L: discrepancia de ruta de enlace simblico
U: el usuario propietario difiere
G: el grupo propietario difiere
T: el tiempo de modificacin difiere
P: las capacidades difieren

Tenga en cuenta que muchos de estas pruebas de verificacin no indican un problema.


Por ejemplo, muchos archivos de configuracin se modifican a medida en que el sistema
evoluciona.
Se examinan los nombres de paquete que son pasados como argumento, como en los
ejemplos que siguen a continuacin:

No hay salida cuando todo est bien


$ rpm -V bash

La salida indica que el tamao de archivo, checksum y tiempo de modificacin han


cambiado:
$ rpm -V talk
S.5....T in.ntalkd.8

La salida indica que falta un archivo


$ rpm -V talk
missing /usr/bin/talk

LFS201: Fundamentos de Administracin de Sistemas Linux

364

28.8 Instalacin de paquetes


Instalar un paquete es tan simple como:
$ sudo rpm -ivh foo-1.0.0-1.noarch.rpm

en donde -i es para instalar, -v para tener una salida detallada y -h imprime marcas de
control para mostrar el progreso de la tarea.
RPM realiza varias tareas cuando se instala un paquete:

Verifica las dependencias:


Es necesario debido a que algunos paquetes no funcionarn correctamente a
menos que uno o ms paquetes estn instalados tambin.

Realiza comprobaciones de conflictos:


Incluye intentos de instalar un paquete ya instalado o instalar una versin antigua
sobre unas ms recientes.

Ejecuta comandos requeridos antes de la instalacin:


El desarrollador que construye un paquete puede especificar ciertas tareas que
deben llevarse a cabo antes o despus de la instalacin.

Lidia inteligentemente con los archivos de configuracin:


Cuando se instala un archivo de configuracin, si el archivo existe y ha sido
modificado desde que se instal la previa del paquete, RPM guarda la versin
antigua con el sufijo .rpmsave. Esto permite integrar los cambios realizados
anteriormente en el archivo de configuracin antiguo en la versin nueva del
archivo. Esta caracterstica depende de que los paquetes RPM hayan sido
creados correctamente.

Desempaqueta los archivos desde los paquetes y los instala con los atributos
adecuados:
Adems de instalar archivos en el lugar correcto, RPM tambin configura atributos
tales como permisos, dueos y hora de modificacin.

Ejecuta comandos necesarios despus de la instalacin:


Realiza cualquier tarea de configuracin o inicializacin necesaria posterior a la
instalacin.

Actualiza la base de datos RPM:


Cada vez que RPM instala un paquete se actualiza informacin en la base de
datos. RPM usa esta informacin cuando verifica conflictos.

LFS201: Fundamentos de Administracin de Sistemas Linux

365

28.10 Actualizacin de paquetes


Una actualizacin reemplaza el paquete original (si es que est instalado), como se
muestra aqu:
$ sudo rpm -Uvh bash-4.2.45-5.el7_0.4.x86_64.rpm

Es posible proveer una lista de paquetes en vez de uno solo.


Al realizar una actualizacin, el paquete instalado con anterioridad se desinstala luego de
que la versin nueva se instala. La nica excepcin es el archivo de configuracin de la
instalacin original, la cual se mantiene con una extensin.rpmsave.
Si usa la opcin -U y el paquete no ha sido instalado anteriormente, simplemente se
instalar.
La opcin -i no est diseado para actualizar; si se intenta instalar un
paquete RPM nuevo sobre uno ms antiguo, fallar y dar un mensaje de error, ya que
intenta sobreescribir archivos existentes del sistema.
Sin embargo, diferentes versiones del mismo paquete pueden estar instaladas si cada
versin del paquete no contiene los mismos archivos: los paquetes del kernel y de las
bibliotecas de otras arquitecturas son generalmente los nicos que pueden estar
instalados mltiples veces.
Si desea reemplazar la versin actual de un paquete por una anterior (downgrade)
con rpm -U, debe agregar la opcinoldpackage a la lnea de comandos.

28.11 Refrescar paquetes


El siguiente comando:
$ sudo rpm -Fvh *.rpm
intentar refrescar todos los paquetes en el directorio actual. La forma en la cual funciona
es la siguiente:

Si una versin anterior del paquete est instalada, esta ser actualizada a la ms
nueva que est en el directorio.

Si la versin en el sistema es la misma que est disponible en el directorio, no se


hace nada.

Si no se encuentra ninguna versin instalada del paquete, no se realiza la


instalacin del mismo.

El refrescar paquetes puede ser til para aplicar un montn de partes de una vez (para
actualizar paquetes, por ejemplo).

LFS201: Fundamentos de Administracin de Sistemas Linux

366

28.12 Actualizacin de kernel


Cuando se instala un kernel nuevo en el sistema, se requiere un reinicio para que tome
efecto (una de las pocas actualizaciones que lo requieren). No se debera hacer una
actualizacin (-U) de un kernel: una actualizacin desinstalara el kernel que est
actualmente en ejecucin.
Esto en s mismo no va a detener el sistema, pero si despus de reiniciar el sistema usted
tiene cualquier problema, no tendr la oportunidad de reiniciar con el kernel antiguo, ya
que fue desinstalado del sistema. Sin embargo, si usted lo instala ( -i), ambos kernels van
a coexistir y podr elegir si arrancar con uno u otro; es decir, puede volver al antiguo si lo
necesita.
Para instalar un kernel nuevo haga lo siguiente:
$ sudo rpm -ivh kernel-{version}.{arch}.rpm

reemplace los nombres correctos para la versin y la arquitectura.


Al hacer lo anterior, el archivo de configuracin de GRUB ser actualizado
automticamente para incluir la versin nueva; este ser la opcin de arranque por
defecto, a menos que reconfigure el sistema para que haga otra cosa.
Una vez que la versin nueva del kernel ha sido probada, usted puede desinstalar la
versin antigua si lo desea, aunque no es necesario. A menos que tenga poco espacio en
disco, es recomendable que mantenga una o ms versiones anteriores del kernel.

28.13 uso de rpm2cpio


Supongamos que necesita extraer archivos desde un rpm pero no desea instalar el
paquete.
El programa rpm2cpio puede usarse para copiar archivos desde un rpm a un
archivo cpio, como tambin extraer los archivos si se desea.
Cree el archivo cpio con el siguiente comando:
$ rpm2cpio foobar.rpm > foobar.cpio

Para listar los archivos en un rpm:


$ rpm2cpio foobar.rpm | cpio -t

pero una forma mejor de hacerlo es sta:


$

rpm -qilp foobar.rpm

Para extraerlo en el sistema:


$ rpm2cpio bash-4.2.45-5.el7_0.4.x86_64.rpm | cpio -ivd bin/bash
$ rpm2cpio foobar.rpm | cpioextractmake-directories

LFS201: Fundamentos de Administracin de Sistemas Linux

367

Comprobacin de conocimiento 28.1

Comprobacin de conocimiento 28.2

28.14 Laboratorio 28.1


Laboratorio 28.1: Uso de RPM
Vamos a hacer algunas operaciones simples de consulta y verificacin de paquetes rpm. Este
laboratorio funcionar igualmente bien tanto en sistemas basados en Red Hat como SUSE.
1.
2.
3.
4.

Encuentre a qu paquete pertenece el archivo /etc/logrotate.conf


Liste la informacin acerca del paquete, incluyendo todos los archivos que contiene.
Verifique la instalacin del paquete.
Intente desinstalar el paquete.

LFS201: Fundamentos de Administracin de Sistemas Linux

368

Solucin 28.1
1. $ rpm -qf /etc/logrotate.conf
logrotate-3.8.6-4.el7.x86_64
2. $ rpm -qil logrotate
...
Lo mismo podra hacerse de una forma ms elegante, que combina estos dos pasos:
3. $ rpm -qil $(rpm -qf /etc/logrotate.conf)
rpm -V logrotate
..?...... /etc/cron.daily/logrotate
S.5....T. c /etc/logrotate.conf
4. En RHEL 7:
$ sudo rpm -e logrotrate
error: Failed dependencies:
logrotate is needed by (installed) vsftpd-3.0.2-9.el7.x86_64
logrotate >= 3.5.2 is needed by (installed) rsyslog-7.4.7-7.el7_0.x86_64
En openSUSE 13.1:
$ sudo rpm -e logrotate
error: Failed dependencies:
logrotate is needed by (installed) xdm-1.1.10-24.2.1.x86_64
logrotate is needed by (installed) syslog-service-2.0-772.1.2.noarch
logrotate is needed by (installed) wpa_supplicant-2.0-3.4.1.x86_64
logrotate is needed by (installed) mcelog-1.0pre3.6e4e2a000124-19.4.1.x86_64
logrotate is needed by (installed) apache2-2.4.6-6.27.1.x86_64
logrotate is needed by (installed) net-snmp-5.7.2-9.8.1.x86_64
logrotate is needed by (installed) kdm-4.11.12-119.1.x86_64
Tenga en cuenta que el rbol exacto de dependencias de paquetes est en funcin tanto de la
distribucin como del software instalado.

LFS201: Fundamentos de Administracin de Sistemas Linux

369

28.14 Laboratorio 28.2


Laboratorio 28.2: Reconstruccin de la base de datos RPM
Existen condiciones bajo las cuales la base de datos RPM almacenada en /var/lib/rpm puede
corromperse. En ese ejercicio construiremos una nueva y verificaremos su integridad.
Este laboratorio funcionar igualmente bien tanto en sistemas basados en Red Hat como SUSE.
1. Realice una copia de seguridad de /var/lib/rpm ya que el proceso de reconstruccin
sobreescribir el contenido. Si usted no lo hace y algo sale mal, podra estar en serios
problemas.
2. Reconstruya la base de datos.
3. Compare el contenido nuevo del directorio con la copia de seguridad; no examine el contenido
de los archivos, ya que son datos binarios, sino ms bien el nmero de archivos y los nombres.
4. Obtenga una lista de todos los rpms en el sistema. Sera interesante que tome una lista antes
del proceso de reconstruccin y la compare con la obtenida despus del mismo. Si el comando
de consulta funciona, la base de datos nueva debera estar bien.
5. Compare de nuevo los contenidos de los dos directorios. Tienen los mismos archivos ahora?
6. Usted podra borrar la copia de seguridad (de unos 100 MB de tamao probablemente), pero
podra ser buena idea mantenerla por un tiempo mientras se asegura de que el sistema se est
comportando adecuadamente.
Eche un vistazo a http://www.rpm.org/wiki/Docs/RpmRecovery para examinar con ms detalle los
pasos para verificar y/o recuperar la integridad de la base de datos.

Solucin 28.2
1. $ cd /var/lib
$ sudo cp -a rpm rpm_BACKUP
2. $ sudo rpmrebuilddb
3. $ ls -l rpm rpm_BACKUP
4. $ rpm -qa | tee /tmp/rpm-qa.output
5. $ ls -l rpm rpm_BACKUP
6. Realice este paso una vez que est seguro de que el sistema est funcionando
correctamente!
$ sudo rm -rf rpm_BACKUP

LFS201: Fundamentos de Administracin de Sistemas Linux

370

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Comprender cmo est organizado el sistema RPM y conocer las operaciones


ms importantes que el programa rpm puede realizar.
Explicar las convenciones de nombre usadas tanto para los archivos rpm binarios
y de cdigo fuente.
Saber cmo consultar, verificar, instalar, desinstalar y actualizar paquetes.
Comprender por qu los kernels nuevos deberan ser instalados en vez de
actualizados.
Saber cmo usar rpm2cpio para copiar archivos empaquetados en un
archivo cpio, como tambin extraer los archivos sin instalarlos.

LFS201: Fundamentos de Administracin de Sistemas Linux

371

Captulo 29. DPKG


El Debian Package Manager (DPKG) es usado por todas las distribuciones basadas
en Debian para controlar la instalacin, verificacin, actualizacin y desinstalacin de
software en sistemas Linux. El programa de bajo nivel dpkg puede realizar todas esas
operaciones, ya sea en un solo paquete o en una lista de ellos. Las operaciones que
podran causar problemas (como remover un paquete del cual depende otro, o instalar un
paquete sin haber satisfecho las dependencias primero) no se completan.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Discutir el sistema de empaquetamiento DPKG y sus usos.


Explicar la convencin de nombres usadas tanto para archivos deb binarios y de
cdigo fuente.
Saber cmo lucen los paquetes de cdigo fuente.
Usar operaciones de consulta y verificacin sobre los paquetes.
Instalar, actualizar y desinstalar paquetes Debian.

LFS201: Fundamentos de Administracin de Sistemas Linux

372

29.1 Conceptos bsicos de DPKG


DPKG (Debian Package) es el sistema de empaquetamiento usado para instalar,
desinstalar
y
gestionar
paquetes
de
software
en Debian y
otras
distribuciones Linux derivadas de ella. De la misma forma que RPM, no est diseada
para obtener e instalar paquetes directamente en el uso diario, pero s para instalarlos y
desinstalarlos localmente.
Los archivos de paquete tienen un sufijo .deb y la base de datos de DPKG reside en el
directorio /var/lib/dpkg.
Tal como rpm, el programa dpkg tiene una vista parcial del universo: solamente sabe qu
est instalado en el sistema y cualquier cosa que se provee a travs de la lnea de
comandos. Pero no sabe nada de los otros paquetes disponibles, si estn en otro
directorio en el sistema o en internet. Como tal, fracasar tambin si una dependencia no
se cumple, o si alguien trata de desinstalar un paquete que otros que estn instalados
necesitan.

29.2 Nombres de archivo de paquete


Los nombres de archivo de los paquetes de Debian estn basados en campos que
representan informacin especfica. El formato estndar de nombres para un paquete
binario es el siguiente:
<name>_<version>-<revision_umber>_<architecture>.deb

como en Debian:
logrotate_3.8.7-1_amd64.deb

y en Ubuntu:
logrotate_3.8.7-1ubuntu1_amd64.deb

Tenga en cuenta que por razones histricas la arquitectura x86 de 64 bits se


llama amd64 en vez de x86_64. Los sistemas tales como Ubuntu insertan el nombre de
la distribucin en el nombre del paquete.

29.3 Paquetes de cdigo fuente


En el sistema de empaquetamiento de Debian un paquete de cdigo fuente consiste en 3
archivos:
1. Un archivo upstream comprimido con tar, terminado en .tar.gz. Esto consiste en
las fuentes originales tal como son proporcionadas por los mantenedores del
paquete.
2. Un archivo de descripcin, terminado en .dsc, el cual contiene el nombre del
paquete y otros metadatos, tales como la arquitectura y dependencias.
LFS201: Fundamentos de Administracin de Sistemas Linux

373

3. Un segundo archivo tar que contiene los parches a la fuente de upstream, y


tambin archivos adicionales creados para el paquete, los cuales terminan
en .debian.tar.gz o .diff.gz, dependiendo de la distribucin.
Por ejemplo, en un sistema Ubuntu es posible descargar un paquete fuente como se
muestra a continuacin:
$ apt-get source logrotate

y luego es posible ver qu archivos fueron descargados o creados:


$ ls -lR logrotate*
-rw-rr-- 1 root root 23842 Jan 22 2014 logrotate_3.8.71ubuntu1.debian.tar.gz
-rw-rr-- 1 root root 1936 Jan 22 2014 logrotate_3.8.7-1ubuntu1.dsc
-rw-rr-- 1 root root 58898 Jan 22 2014 logrotate_3.8.7.orig.tar.gz
logrotate-3.8.7:
total 228
-rw-rr-- 1 root root 890 Aug 1 2012 basenames.c
-rw-rr-- 1 root root 219 Aug 1 2012 basenames.h
....

29.4 Consultas DPKG


Aqu hay algunos ejemplos de consultas que se pueden realizar:

Listar todos los paquetes instalados:


$ dpkg -l

Tambin es posible especificar un nombre de paquete.

Listar los archivos instalados con el paquete wget:


$ dpkg -L wget

Mostrar informacin acerca de un paquete instalado:


$ dpkg -p wget

Mostrar informacin acerca de un archivo de paquete:


$ dpkg -I webfs_1.21+ds1-8_amd64.deb

LFS201: Fundamentos de Administracin de Sistemas Linux

374

Listar los archivos contenidos en un archivo de paquete:


$ dpkg -c

webfs_1.21+ds1-8_amd64.deb

Mostrar a qu paquete pertenece /etc/init/networking.conf:


$ dpkg -S /etc/init/networking.conf

Mostrar el estado de un paquete:


$ dpkg -s wget

Verificar la integridad de un paquete instalado:


$ dpkg -V package

Sin argumentos, el comando verificar todos los paquetes en el sistema. Revise la


pgina man para interpretar la salida. Nota: solo versiones recientes de dpkg (1.17+)
soportan esta opcin.

29.5 Instalacin/Actualizacin/Desinstalacin
El comando:
$ sudo dpkg -i foobar.deb

puede usarse ya sea para instalar o actualizar el paquete foobar.


Si el paquete no est instalado actualmente, entonces se instalar. Si el paquete es ms
nuevo que el instalado actualmente, entonces se actualizar.
El comando:
$ sudo dpkg -r package

se usa para desinstalar por completo un paquete instalado, con excepcin de los archivos
de configuracin. El comando:
$ sudo dpkg -P package

se usa para desinstalar por completo un paquete instalado, incluyendo los archivos de
configuracin.
Nota: -P significa limpiar.

LFS201: Fundamentos de Administracin de Sistemas Linux

375

Comprobacin de conocimientos 29.1

19.6 Laboratorio 29.1


Laboratorio 29.1: Uso de dpkg
1.
2.
3.
4.
5.

Haremos algunas operaciones simples de consulta y verificacin de paquetes de Debian.


Encuentre a qu paquete pertenece el archivo /etc/logrotate.conf
Liste la informacin acerca del paquete, incluyendo todos los archivos que contiene.
Verifique la instalacin del paquete.
Intente desinstalar el paquete.

Solucin 29.1
1. $ dpkg -S /etc/logrotate.conf
logrotate: /etc/logrotate.conf
2. $ dpkg -L logrotate
...
3. $ dpkg -V logrotate
4. $ sudo dpkg -r logrotate
dpkg: dependency problems prevent removal of logrotate:
libvirt-bin depends on logrotate.
ubuntu-standard depends on logrotate.
dpkg: error processing package logrotate (--remove):
dependency problems - not removing
Errors were encountered while processing:
logrotate

LFS201: Fundamentos de Administracin de Sistemas Linux

376

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Discutir el sistema de empaquetamiento DPKG y sus usos.


Explicar la convencin de nombres usadas tanto para archivos deb binarios y de
cdigo fuente.
Saber cmo lucen los paquetes de cdigo fuente.
Usar operaciones de consulta y verificacin sobre los paquetes.
Instalar, actualizar y desinstalar paquetes Debian.

LFS201: Fundamentos de Administracin de Sistemas Linux

377

Captulo 30. yum


El programa yum provee un nivel de servicios inteligentes mayor para usar el programa
subyacente rpm. Puede resolver dependencias automticamente al instalar, actualizar y
desinstalar paquetes. Accede repositorios de software externos, sincronizndose con
ellos, obteniendo e instalando software a medida en que se necesita.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Discutir los instaladores de paquetes y sus caractersticas.


Explicar qu es yum.
Configurar yum para usar repositorios.
Conocer las consultas que pueden realizarse con yum.
Usar yum para verificar, instalar, desinstalar y actualizar paquetes.

LFS201: Fundamentos de Administracin de Sistemas Linux

378

30.1 Instaladores de paquetes


Las herramientas de bajo nivel tales como rpm y dpkg lidian con los detalles de instalar
archivos de paquetes de software especfico y gestionan el software que ya est
instalado.
Los sistemas de gestin de paquetes de alto nivel (tales como yum, apt y zypper)
trabajan con bases de datos de software disponible e incorporan las herramientas
necesarias para encontrar, instalar, actualizar y desinstalar software de una forma
inteligente. Realizan lo siguiente:

Pueden usar repositorios tanto locales como remotos. Tambin paquetes de


cdigo fuente
para instalar y actualizar paquetes binarios y de cdigo fuente.
Son usados para automatizar la instalacin, actualizacin y desinstalacin de
paquetes de software.
Resolver dependencias automticamente.
Ahorran tiempo porque no hay necesidad tanto de descargar los paquetes
manualmente o de buscar informacin acerca de las dependencias.

Los repositorios de software son proporcionados por distribuciones y otros proveedores


independientes de software. Los instaladores de paquetes mantienen bases de datos del
software disponible, provenientes de catlogos almacenados en los repositorios. A
diferencia de las herramientas de paquetes de bajo nivel, tienen la habilidad de encontrar
e instalar dependencias automticamente, lo cual es una caracterstica fundamental.
En esta seccin hablaremos acerca de yum; abordaremos zypper y apt en captulos
siguientes.

30.2 Que es yum?


yum provee una interfaz a rpm. Su tarea principal es obtener paquetes desde mltiples
repositorios remotos y resolver dependencias entre paquetes. Es usado por la mayora de
las distribuciones que usan rpm (aunque no todas), incluyendo RHEL, CentOS,
Scientific Linux y Fedora.
yum almacena en cach informacin y la base de datos para incrementar el rendimiento.
Para eliminar alguna o toda la informacin en cach, ejecute el siguiente comando:
$ yum clean [ packages | metadata | expire-cache | rpmdb | plugins |
all ]

yum tiene una serie de extensiones modulares (plugins) y programas complementarios


que pueden encontrarse en/usr/bin/yum* y /usr/sbin/yum*.
Nos concentraremos en el uso de yum en la lnea de comandos y no consideraremos las
interfaces grficas que las distribuciones proveen.

LFS201: Fundamentos de Administracin de Sistemas Linux

379

30.3 Ubicacin de los repositorios yum


Los archivos de configuracin de los repositorios se encuentran en /etc/yum.repos.d/ y
tienen una extensin.repo. Por ejemplo, en un sistema RHEL 6:
$ ls -l /etc/yum.repos.d
total 40
-rw-rr-- 1 root root 957 Nov 4 2012 epel.repo
-rw-rr-- 1 root root 1056 Nov 4 2012 epel-testing.repo
-rw-rr-- 1 root root 188 May 28 2013 google-chrome.repo
-rw-rr-- 1 root root 113 Dec 11 2011 google-earth.repo
-rw-rr-- 1 root root 128 Dec 23 2013 google-talkplugin.repo
-rw-rr-- 1 root root 477 Jan 29 2012 nux-dextop.repo
-rw-rr-- 1 root root 529 Oct 30 2013 rhel-source.repo
-rw-rr-- 1 root root 1113 Jan 4 2011 rpmforge.repo
-rw-rr-- 1 root root 256 May 22 07:00 virtualbox.repo

Tenga en cuenta que en RHEL 6 no hay un archivo redhat.repo, pero est presente
en RHEL 7:
total 112
drwxr-xr-x.
drwxr-xr-x.
-rw-rr-- 1
-rw-rr-- 1
-rw-rr-- 1
-rw-rr-- 1
-rw-rr-- 1

2 root root 4096 Sep 24 13:44 ./


151 root root 12288 Oct 2 12:52 ../
root root 957 Sep 2 11:14 epel.repo
root root 1056 Sep 2 11:14 epel-testing.repo
root root 116 Sep 3 11:40 google-chrome.repo
root root 477 Jul 31 02:50 nux-dextop.repo
root root 37763 Sep 24 13:44 redhat.repo

RHEL 6 y las versiones anteriores manejaban los repositorios suministrados por la


distribucin de una forma diferente, aunque los clones de RHEL tales
como CentOS usaron repositorios convencionales para los paquetes principales de la
distribucin.

30.4 Archivos de repositorio


Un archivo muy simple de repositorio podra lucir como el siguiente:
[repo-name]
name=Description of the repository
baseurl=http://somesystem.com/path/to/repo
enabled=1
gpgcheck=1

Algunos ejemplos ms complejos pueden encontrarse en /etc/yum.repos.d y le


recomendamos que los examine.
Es posible habilitar o deshabilitar un repositorio en particular cambiando el valor de
enabled a 0 o 1, o usando las opcionesdisablerepo=somerepo y
enablerepo=somerepo al usar yum. Tambin se puede (pero no se debera hacer)
deshabilitar la verificacin de integridad con la variable gpgcheck.

LFS201: Fundamentos de Administracin de Sistemas Linux

380

30.5 Consultas
Tal como rpm, yum puede usarse para realizar consultas y bsquedas; sin embargo
puede buscar no solo lo que est instalado en el sistema local, sino que tambin en
repositorios remotos. Algunos ejemplos:

Bsqueda de paquetes con la palabra keyword en el nombre:


$ sudo yum search keyword
$ sudo yum list *keyword*

Estos dos comandos proporcionan informacin un tanto diferente. El primero provee ms


informacin acerca de los paquetes en s, mientras que el segundo se enfoca en lo que
est instalado y en lo disponible.

Despliega informacin acerca de un paquete:


$ sudo yum info package

La informacin incluye tamao, versin, repositorio y URL de origen, y una descripcin


larga. Es posible proveer comodines como en yum info libc* para la mayora de
los comandos yum. Tenga en cuenta que no es un requisito que el paquete est
instalado, a diferencia de las consultas que se realizan con rpm -q.

Lista todos los paquetes, o solo aquellos que estn instalados, disponibles o
actualizaciones que an no han sido instaladas.
$ sudo yum list [installed | updates | available]

Muestra informacin acerca de grupos de paquetes instalados, disponibles, etc.:


$ sudo yum grouplist [group1] [group2]
$ sudo yum groupinfo group1 [group2]

Muestra paquetes que contienen un cierto nombre de archivo:


$ sudo yum provides

como en
$ sudo yum provides /logrotate.conf

Tenga en cuenta que es necesario usar al menos un / en el nombre de archivo, lo cual


puede ser confuso.

LFS201: Fundamentos de Administracin de Sistemas Linux

381

30.6 Verificacin de paquetes


La verificacin de paquetes requiere la instalacin del paquete yum-plugin-verify, para lo
cual puede realizar lo siguiente:
$ sudo yum install yum-plugin-verify

Tenga en cuenta que este es una extensin de yum, no un ejecutable. Hay muchos otros
plugins disponibles para yum, los cuales extienden el set de comandos y argumentos que
puede tomar.

Para verificar un paquete, entregando la mayor informacin posible:


$ sudo yum verify [package]

Para imitar exactamente rpm -V:


$ sudo yum verify-rpm [package]

Para listar todas las diferencias, incluyendo archivos de configuracin:


$ sudo yum verify-all [package]

Si no se proveen argumentos en el comando anterior, este verificar todos los paquetes


instalados en el sistema.
Por defecto, los comandos de verificacin ignoran los archivos de configuracin, los
cuales pueden cambiar con el uso normal. Hay otras opciones; para acceder a ellas
haga man yum-verify.

30.7 Instalacin/Actualizacin/Desinstalacin
Aqu hay algunos ejemplos de operaciones que se realizan generalmente:

Instalar uno o ms paquetes desde los repositorios, resolver e instalar cualquier


dependencia necesaria:
$ sudo yum install package1 [package2]

Instalar desde un rpm local:


$ sudo yum localinstall package-file

Lo anterior no es lo mismo que:


$ rpm -i package-file

porque esto intentara resolver dependencias mediante el acceso a repositorios


remotos.
LFS201: Fundamentos de Administracin de Sistemas Linux

382

Instalar un grupo de software especifico desde un repositorio, resolver e instalar


cualquier dependencia necesaria para cada paquete en el grupo:
$ sudo yum groupinstall group-name

o
$ sudo yum install @group-name

Desinstalar paquetes del sistema:


$ sudo yum remove package1 [package2]

Hay que ser cuidadoso con la desinstalacin de paquetes, ya que yum no solo
remover los paquetes seleccionados, sino que tambin los que dependen de l.
Puede que usted no desee esto, por lo cual no ejecute yum remove con la opcin -y,
la cual asume una confirmacin automtica de desinstalacin.

Actualizar un paquete desde un repositorio:


$ sudo yum update [package]

Si no se provee un nombre de paquete, todos los paquetes son actualizados (de existir
actualizaciones para todos ellos).
Durante la instalacin (o actualizacin), si un paquete tiene un archivo de configuracin
que va a ser actualizado, el archivo con la configuracin antigua ser renombrado con una
extensin .rpmsave. Si el archivo con la configuracin antigua va a funcionar con el
software nuevo, el archivo de configuracin nuevo ser renombrado con una
extensin .rpmnew. Usted puede buscar estas extensiones de nombres de archivo (la
mayora en el rbol de subdirectorios /etc) para determinar si necesita llevar a cabo
alguna reconciliacin, haciendo:
$ sudo find /etc -name *.rpm*

Tenga en cuenta que las consideraciones anteriores se aplican tambin a la herramienta


subyacente rpm.

LFS201: Fundamentos de Administracin de Sistemas Linux

383

30.8 Comandos yum adicionales


Es posible tener una gama amplia de capacidades adicionales de yum, de acuerdo a qu
extensiones estn instaladas. Puede listarlas con:
$ sudo yum list yum-plugin*

En particular:

Mostrar una lista de los repositorios habilitados:


$ sudo yum repolist

Iniciar una shell interactiva para ejecutar mltiples comandos yum:


$ sudo yum shell [text-file]

Si se provee text-file, yum leer y ejecutar los comandos del archivo en vez de la
terminal.

Descargue los paquetes pero no los instale,


directorio /var/cache/yum, u otro directorio a especificar:

almacnelos

en

el

$ sudo yum installdownloadonly package

Para que esto funcione hay que instalar el paquete yum-plugin-downloadonly.


Tambin es posible hacer lo siguiente:
$ sudo yumdownloader package

lo cual descargar la ltima versin de package en el directorio de trabajo actual.


Opcionalmente uno puede calcular y descargar todas las dependencias necesarias.

Para ver la historia de los comandos yum, con las opciones correctas, incluso
deshacer o rehacer comandos anteriores:
$ sudo yum history

LFS201: Fundamentos de Administracin de Sistemas Linux

384

Comprobacin de conocimientos 30.1

Comprobacin de conocimientos 30.2

Comprobacin de conocimientos 30.3

Comprobacin de conocimientos 30.4

LFS201: Fundamentos de Administracin de Sistemas Linux

385

30.9 Laboratorio 30.1


Laboratorio 30.1: Comandos bsicos de YUM
1. Verifique si hay actualizaciones disponibles para su sistema.
2. Actualice un paquete en particular.
3. Liste todos los paquetes instalados que tienen relacin con el kernel. Tambin liste todos los
instalados o disponibles, relacionados al kernel.
4. Instale el paquete httpd-devel o cualquier otro que no est instalado. Ejecute el siguiente
comando simple:
$ sudo yum list
el cual le mostrar una lista completa; puede proveer un comodn como argumento para
reducir la lista.
Solucin 30.1
1. $ sudo yum update
$ sudo yum check-update
$ sudo yum list updates
Solo la primera forma intentar realizar las instalaciones.
2. $ sudo yum update bash
3. $ sudo yum list installed kernel*
$ sudo yum list kernel*
4. $ sudo yum install httpd-devel

LFS201: Fundamentos de Administracin de Sistemas Linux

386

30.9 Laboratorio 30.2


Laboratorio 30.2: Uso de yum para encontrar informacin acerca de un paquete
Usando yum (y no rpm directamente), encuentre:
1.
2.
3.
4.

Todos los paquetes que contienen una referencia a bash en su nombre o descripcin.
Los paquetes bash instalados y disponibles.
La informacin del paquete bash.
Las dependencias del paquete bash.

Ejecute los comandos del ejercicio tanto como root y usuario normal. Nota alguna diferencia?

Solucin 30.2
Nota: en RHEL 7 podra recibir algunos errores de permisos si no usa sudo con los siguientes
comandos, a pesar de que estamos obteniendo informacin solamente.
1. $ sudo yum search bash
2. $ sudo yum list bash
3. $ sudo yum info bash
4. $ sudo yum deplist bash
Todos los comandos de arriba deberan funcionar tanto para usuarios normales como para root.

LFS201: Fundamentos de Administracin de Sistemas Linux

387

30.9 Laboratorio 30.3


Laboratorio 30.3: Manejo de grupos de paquetes con yum
Nota: En RHEL 7 podra recibir errores de permisos si no usa sudo con algunos de los siguientes
comandos, aun cuando estemos obteniendo informacin solamente. yum provee la habilidad de
manejar grupos de paquetes.
1. Use el siguiente comando para listar todos los grupos de paquetes disponibles en el
sistema:
$ yum grouplist
2. Identifique el grupo Backup Client y genere informacin acerca de l usando el comando:
$ yum groupinfo Backup Client
3. Instlelo usando:
$ sudo yum groupinstall Backup Client
4. Identifique un grupo de paquetes que est instalado actualmente en el sistema y que
usted no lo necesite. Desinstlelo usando yum groupremove, como se muestra a
continuacin:
$ sudo yum groupremove Backup Client
Tenga en cuenta que se le pedir confirmar la desinstalacin, por lo que puede ejecutar el
comando de forma segura y ver cmo funciona.
Puede notar que groupremove no desinstala todo lo que estaba instalado; si se trata de un bug o
una caracterstica queda para una discusin.

LFS201: Fundamentos de Administracin de Sistemas Linux

388

30.9 Laboratorio 30.4


Laboratorio 30.4: Agregar un repositorio yum
De acuerdo a sus autores (en http://www.webmin.com/index.htm):
Webmin es una interfaz web para administracin de sistemas Unix. Usando cualquier navegador
web moderno, es posible configurar cuentas de usuario, Apache, DNS, compartir archivos y mucho
ms. Webmin elimina la necesidad de editar manualmente archivos de configuracin como
/etc/passwd, y le permite gestionar un sistema desde la consola o remotamente.
Crearemos un repositorio para la instalacin y actualizacin. Si bien es cierto que podramos ir a la
pgina de descargas y obtener el rpm actual, esto no nos proporcionara ninguna actualizacin
automtica.
1. Cree un archivo de repositorio llamado webmin.repo en el directorio /etc/yum.repos.d.
Debera contener lo siguiente:
[Webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1
gpgcheck=0
(Note que tambin puede copiar y pegar el contenido desde
http://www.webmin.com/download.html.)
2. Instale el paquete webmin.
$ sudo yum install webmin

LFS201: Fundamentos de Administracin de Sistemas Linux

389

Objetivos de aprendizaje
Actualmente usted debera ser capaz de:

Discutir los instaladores de paquetes y sus caractersticas.


Explicar qu es yum.
Configurar yum para usar repositorios.
Conocer las consultas que pueden realizarse con yum.
Usar yum para verificar, instalar, desinstalar y actualizar paquetes.

LFS201: Fundamentos de Administracin de Sistemas Linux

390

Captulo 31. ZYPPER


En sistemas basados en SUSE, el programa zypper provee un alto nivel de servicios
inteligentes para usar el programa subyacente rpm, y juega el mismo rol que yum en
sistemas basados en Red Hat. Puede resolver dependencias automticamente al instalar,
actualizar y desinstalar paquetes. Accede a repositorios externos de software,
sincronizndose con ellos, obteniendo e instalando software segn se necesario.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar qu es zypper.
Discutir las consultas que zypper puede hacer.
Instalar, desinstalar y actualizar paquetes usando zypper.

LFS201: Fundamentos de Administracin de Sistemas Linux

391

31.1 Que es zypper?


zypper es la herramienta de la lnea de comandos para instalar y gestionar paquetes
en SUSE Linux y openSUSE. Es muy similar a yum en cuanto al funcionamiento, incluso
en la sintaxis bsica, y tambin trabaja con paquetes rpm.
zypper obtiene los paquetes desde los repositorios, instala, desinstala, actualiza y
resuelve cualquier dependencia necesaria. En la prctica es equivalente a yum y aptget en cuanto a que obtiene paquetes desde un repositorio y que resuelve dependencias.

31.2 Consultas con zypper


Aqu hay algunos ejemplos de las operaciones de consulta ms comunes:

Muestra una lista de actualizaciones disponibles:


$ zypper list-updates

Lista los repositorios disponibles:


$ zypper repos

Busca repositorios por el texto string:


$ zypper search <string>

Despliegue informacin acerca de un paquete:


$ zypper info <package>

Buscar en los repositorios para determinar qu paquetes proveen un archivo:


$ zypper searchprovides <file>

LFS201: Fundamentos de Administracin de Sistemas Linux

392

31.3 Instalacin/Actualizacin/Desinstalacin
A continuacin se muestran algunos ejemplos de operaciones que se realizan
comnmente:

Instalar o actualizar un paquete(s):


$ sudo zypper install package

No solicite confirmacin al instalar o actualizar:


$ sudo zyppernon-interactive install <package>

Esto

es

til

para

usarse

en

scripts

es

equivalente

a yum

-y.

Actualice todos los paquetes instalados:


$ sudo zypper update

Si se proveen nombres como argumentos, se actualizarn estos paquetes


solamente y cualquier dependencia requerida. En el siguiente comando se realiza
sin solicitar confirmacin:
$ sudo zyppernon-interactive update

Desinstale un paquete del sistema:


$ sudo zypper remove <package>

Tal como con yum, es necesario ser cuidadoso con el comando de desinstalacin,
ya que cualquier paquete que necesite del que se est eliminando va a ser
removido tambin.

31.4 Comandos zypper adicionales


A veces es necesario ejecutar una serie de comandos zypper en secuencia. Para evitar
volver a leer todas las bases de datos para cada comando, es posible ejecutar
zypper en modo shell, como se muestra aqu:
$ sudo zypper shell
> install bash
...
> exit

Debido a que zypper soporta la biblioteca readline, es posible usar las mismas funciones
disponibles de edicin de lnea de comandos de la shell bash en la shell zypper.

LFS201: Fundamentos de Administracin de Sistemas Linux

393

Para agregar un repositorio:


$ sudo zypper addrepo URI alias

el cual est ubicado en la URI proporcionada y que se usar con el alias que se pas
como parmetro.
Para eliminar un repositorio de la lista:
$ sudo zypper removerepo alias

usando el alias del repositorio que desea eliminar.

Comprobacin de conocimientos 31.1

Comprobacin de conocimientos 31.2

Comprobacin de conocimientos 31.3

Comprobacin de conocimientos 31.4

LFS201: Fundamentos de Administracin de Sistemas Linux

394

31.5 Laboratorio 31.1


Laboratorio 31.1: Comandos bsicos de zypper
Verifique si hay actualizaciones disponibles para su sistema.
Actualice un paquete en particular.
Liste todos los repositorios conocidos por el sistema, tanto si estn habilitados o no.
Liste todos los paquetes relacionados al kernel, tambin liste todos los instalados o
disponibles.
5. Instale el paquete apache2-devel o cualquier otro que no lo haya instalado an (tenga en
cuenta que httpd es apache2 en sistemas SUSE). Haciendo un simple:
1.
2.
3.
4.

$ sudo zypper search


le mostrar una una lista completa; puede pasarle un comodn como argumento para reducir la
lista.
Solucin 31.1
$ zypper list-updates
$ sudo zypper update bash
$ zypper repos
$ zypper search -i kernel
$ zypper search kernel
5. $ sudo zypper install apache2-devel
1.
2.
3.
4.

LFS201: Fundamentos de Administracin de Sistemas Linux

395

31.5 Laboratorio 31.2


Laboratorio 31.2: Usando zypper para encontrar informacin acerca de un paquete
Usando zypper (y no rpm directamente), encuentre:
1.
2.
3.
4.

Todos los paquetes que contienen una referencia a bash en su nombre o descripcin.
Todos los paquetes bash instalados y disponibles.
La informacin del paquete bash.
Las dependencias del paquete bash.

Ejecute los comandos de arriba tanto como root y como usuario normal. Nota alguna diferencia?
Solucin 31.2
1. $ zypper search -d bash
Sin la opcin -d se muestran solamente los paquetes con bash en el nombre del archivo.
Tendra que hacer zypper info en el paquete para ver donde se menciona bash.
2. $ zypper search bash
3. $ zypper info bash
4. $ zypper inforequires bash
le dar una lista de archivos requeridos por bash. Tal vez la forma ms fcil es ver las
dependencias de bash cuando est instalado, haciendo
$ sudo zypper removedry-run bash
Para este ejercicio bash es una mala eleccin ya que es una parte esencial del sistema. De
todas formas no podr desinstalarlo.

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar qu es zypper.
Discutir las consultas que zypper puede hacer.
Instalar, desinstalar y actualizar paquetes usando zypper.

LFS201: Fundamentos de Administracin de Sistemas Linux

396

Captulo 32. APT


Disponible para sistemas basados en Debian, el conjunto de programas APT
(Advanced Packaging Tool) provee un alto nivel de servicios inteligentes para usar el
programa subyacente dpkg, y jugar el mismo rol que yum en sistemas basados en Red
Hat. Las herramientas principales son apt-get y apt-cache. Puede resolver dependencias
automticamente al instalar, actualizar y desinstalar paquetes. Accede a repositorios
externos de software, sincronizdose con ellos, obteniendo e instalando software segn
se necesario.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar qu es APT.
Usar apt-cache para realizar consultas.
Instalar, desinstalar y actualizar paquetes usando apt-get.

LFS201: Fundamentos de Administracin de Sistemas Linux

397

32.1 Que es APT?


APT no
es
un
programa
en
s
mismo:
corresponde
a
las
siglas
de Advanced Packaging Tool (Herramienta Avanzada de Paquetes), el cual incluye un
nmero de herramientas tales como apt-get y apt-cache. Estas herramientas invocan a
su vez al programa de nivel inferior dpkg.
El sistema APT funciona con paquetes Debian, cuyos archivos tienen una extensin .deb.
Hay muchas distribuciones que descienden de Debian (incluyendo Ubuntu y Linux Mint),
las cuales han adoptado el sistema de empaquetamiento de Debian sin modificaciones
esenciales. De hecho no es raro que sus repositorios se usen en
distribuciones Linux basadas en Debian.
Una vez ms vamos a ignorar interfaces grficas en el equipo, tales como synaptic,
el Centro de Software de Ubuntu u otras interfaces grficas de APT como aptitude.
De todas formas, se pueden encontrar excelentes recursos basados en internet
en http://packages.debian.org yhttp://packages.ubuntu.com. Estas bases de datos le
permiten buscar paquetes, examinar sus contenidos y descargarlos.

32.2 apt-get
apt-get es la herramienta principal de la lnea de comandos de APT para gestionar
paquetes. Se usa para instalar, gestionar y actualizar paquetes individuales o el sistema
completo. Incluso puede actualizar la distribucin a una versin completamente nueva, lo
cual puede ser una tarea difcil.
Incluso hay extensiones
archivos rpm.

(imperfectas)

que

le

permiten

a apt-get trabajar

con

Tal como yum y zypper, apt-get funciona con mltiples repositorios remotos.

32.3 Consultas con apt-cache


Las consultas se realizan usando la herramienta apt-cache:

Consulte por un paquete llamado apache2 en el repositorio:


$ apt-cache search apache2

Despliegue informacin bsica acerca del paquete apache2:


$ apt-cache show apache2

LFS201: Fundamentos de Administracin de Sistemas Linux

398

Despliegue informacin ms detallada acerca del paquete apache2:


$ apt-cache showpkg apache2

Liste todos los paquetes de los cuales depende apache2:


$ apt-cache depends apache2

Busque un archivo llamado apache2.conf en el repositorio:


$ apt-file search apache2.conf

Liste todos los archivos del paquete apache2:


$ apt-file list apache2

32.4 Instalacin/Actualizacin/Desinstalacin
El programa apt-get es el caballo de batalla para instalar, desinstalar y actualizar
paquetes:

Sincronizar el ndice de archivos de paquete con el repositorio fuente. Los ndices


de los paquetes disponibles son obtenidos desde la(s) ubicacin(es) especificadas
en /etc/apt/sources.list.
$ sudo apt-get update

Instalar

un

paquete

actualizar

uno

que

ya

est

instalado:

$ sudo apt-get install [package]

Desinstalar un paquete del sistema sin remover los archivos de configuracin:


$ sudo apt-get remove [package]

Desinstalar un paquete del sistema y sus archivos de configuracin tambin:


$ sudo apt-getpurge remove [package]

Aplicar todas las actualizaciones disponibles a los paquetes ya instalados:


$ sudo apt-get upgrade

Hacer una actualizacin inteligente que realizar una resolucin de


dependencias ms profunda, instalar dependencias nuevas y desinstalar
paquetes
obsoletos.
$ sudo apt-get dist-upgrade

LFS201: Fundamentos de Administracin de Sistemas Linux

399

Esto no actualizar el sistema a una versin completamente nueva de la


distribucin Linux, como se malentiende comnmente.
Tenga en cuenta que se debe realizar una operacin update antes que upgrade,
ya que a diferencia de yum, el cual realiza ambas operaciones al recibir el
argumento update, este actualiza los repositorios y luego los paquetes. Esto puede
ser confuso para usuarios habituales de yum en sistemas basados en Debian.
Deshgase de los paquetes que ya no se necesitan, tal como versiones antiguas
del kernel Linux:
$ sudo apt-get autoremove

Limpie los archivos del cach y cualquier archivo de paquete que haya sido
instalado:
$ sudo apt-get clean

Esto puede ahorrar mucho espacio en disco.

Comprobacin de conocimientos 32.1

Comprobacin de conocimientos 32.2

Comprobacin de conocimientos 32.3

LFS201: Fundamentos de Administracin de Sistemas Linux

400

Comprobacin de conocimientos 32.4

32.5 Laboratorio 32.1


Laboratorio 32.1: Comandos bsicos APT
1. Verifique si hay actualizaciones disponibles para su sistema.
2. Actualice un paquete en particular.
3. Liste todos los paquetes relacionados al kernel, tambin liste todos los instalados o
disponibles.
4. Instale el paquete apache2-devel o cualquier otro que no lo haya instalado an. Haciendo
un simple:
$ apt-cache pkgnames
le mostrar una una lista completa; puede pasarle un comodn como argumento para reducir la
lista.

Solucin 32.1
1. Primero sincronice los archivos de ndice de paquetes con los repositorios remotos:
$ sudo apt-get update
Para actualizar realmente:
$ sudo apt-get upgrade
$ sudo apt-get -u upgrade
Tambin puede usar dist-upgrade, como se discuti anteriormente. Solo la primera forma
tratar de realizar las instalaciones.
2. $ sudo apt-get upgrade bash
3. $ apt-cache search kernel
$ apt-cache search -n kernel
$ apt-cache pkgnames kernel
La segunda y tercera formas solo buscarn paquetes que tengan kernel en el nombre.
$ dpkgget-selections *kernel*
LFS201: Fundamentos de Administracin de Sistemas Linux

401

para obtener los paquetes instalados solamente. Tenga en cuenta que en los sistemas basados
en Debian tendr que usar linux en vez kernel para los paquetes relacionados al kernel, ya que
usualmente no tienen kernel en el nombre.
4. $ sudo apt-get install apache2-dev

LFS201: Fundamentos de Administracin de Sistemas Linux

402

32.5 laboratorio 32.2


Laboratorio 32.2: Usando APT para encontrar informacin acerca de un paquete
Usando apt-cache y apt-get (y no dpkg), encuentre:
1.
2.
3.
4.

Todos los paquetes que contienen una referencia a bash en su nombre o descripcin.
Todos los paquetes bash instalados y disponibles.
La informacin del paquete bash.
Las dependencias del paquete bash.

Ejecute los comandos de arriba tanto como root y como usuario normal. Nota alguna diferencia?
Solucin 32.2
1.
2.
3.
4.

$ apt-cache search bash


$ apt-cache search -n bash
$ apt-cache show bash
$ apt-cache depends bash
$ apt-cache rdepends bash

LFS201: Fundamentos de Administracin de Sistemas Linux

403

32.5 laboratorio 32.3


Laboratorio 32.3: Gestionando grupos de paquetes con APT
APT provee la habilidad de gestionar grupos de paquetes, de forma similar a como lo hace yum a
travs del uso de los metapaquetes. Estos pueden ser vistos como paquetes virtuales, los que
renen los paquetes relacionados entre s que deben ser instalados y desinstalados como grupo.
Para obtener una lista de los metapaquetes disponibles:
$ apt-cache search metapackage
bacula - network backup service - metapackage
bacula-client - network backup service - client metapackage
bacula-server - network backup service - server metapackage
cloud-utils - metapackage for installation of upstream cloud-utils source
compiz - OpenGL window and compositing manager
emacs - GNU Emacs editor (metapackage)
....
Usted puede instalarlos fcilmente como cualquier paquete individual, tal como se muestra aqu:
$ sudo apt-get install bacula-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
bacula-common bacula-console bacula-fd bacula-traymonitor
Suggested packages:
bacula-doc kde gnome-desktop-environment
The following NEW packages will be installed:
bacula-client bacula-common bacula-console bacula-fd bacula-traymonitor
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 742 kB of archives.
After this operation, 1,965 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Seleccione un metapaquete desinstalado y remuvalo.

LFS201: Fundamentos de Administracin de Sistemas Linux

404

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar qu es APT.
Usar apt-cache para realizar consultas.
Instalar, desinstalar y actualizar paquetes usando apt-get.

LFS201: Fundamentos de Administracin de Sistemas Linux

405

Captulo 33. Gestin de cuentas de usuario


En un sistema Linux pueden trabajar muchos usuarios simultneamente. Cada uno tiene
su propio espacio de almacenamiento de directorios y archivos, como tambin scripts de
inicio y variables de ambiente. Las contraseas se eligen o asignan individualmente y
cada usuario tiene un conjunto de privilegios bien definido. Bajo ciertas circunstancias, las
cuentas de usuario pueden tener privilegios restringidos o estar bloqueadas. El usuario
root (conocido como superusuario) tiene habilidades nicas, las cuales deberan usarse
raramente y con la mayor precaucin posible.
Es posible usar SSH para cifrar el acceso a computadores remotos.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar el propsito de las cuentas individuales de usuario y listar sus atributos


principales.
Crear cuentas de usuario y modificar propiedades de cuentas existentes, como
tambin eliminar o bloquear cuentas.
Comprender cmo se configuran las contraseas de usuario, su cifrado y
almacenamiento, y cmo requerir cambios en las contraseas a travs del tiempo
por propsitos de seguridad.
Explicar cmo funciona la shell y las cuentas restringidas.
Comprender el rol de la cuenta root y saber cundo usarla.
Estar familiarizado con el uso de ssh y saber cmo configurarlo para el acceso
remoto.

LFS201: Fundamentos de Administracin de Sistemas Linux

406

33.1 Cuentas de usuario


Los sistemas Linux proveen un ambiente multiusuario el cual le permite a personas y
procesos tener ambientes de trabajo simultneos y separados.
Los propsitos de tener cuentas individuales de usuario incluyen:

Proveer a cada usuario de un espacio individual y privado.


Crear cuentas de usuario en particular con propsitos especficos.
Distinguir privilegios entre los usuarios.

Una cuenta de usuario especial es la de root, la cual tiene la capacidad de


hacer cualquier cosa en el sistema. Para evitar cometer errores costosos y por razones
de seguridad, la cuenta root debe usarse solo cuando es absolutamente necesario.
Las cuentas de usuarios normales son para personas que trabajarn en el sistema.
Algunas cuentas de usuario (como la cuenta daemon) existen con el propsito de permitir
que procesos como un usuario diferente a root.
En el prximo captulo vamos a continuar con el tema de gestin de grupos, en donde un
subconjunto de usuarios en el sistema pueden compartir archivos, privilegios, etc., de
acuerdo a intereses comunes.

33.2 Atributos de una cuenta de usuario


Cada usuario en el sistema tiene una lnea correspondiente en el
archivo /etc/passwd que describe los atributos bsicos de la cuenta (vamos a tratar el
tema de las contraseas en este archivo ms adelante). Por ejemplo:
....
beav:x:1000:1000:Theodore Cleaver:/home/beav:/bin/bash
warden:x:1001:1001:Ward Cleaver:/home/warden:/bin/bash
dobie:x:1002:1002:Dobie Gillis:/home/dobie:/bin/bash
....

Los siete elementos aqu son:

Nombre de usuario
El nombre nico asignado a cada usuario.

Contrasea de usuario
La contrasea asignada a cada usuario.

Nmero de identificacin de usuario (UID)


Un nmero nico asignado a la cuenta de usuario. El UID es usado por el sistema
para una variedad de propsitos, incluyendo la determinacin de privilegios de
usuario y seguimiento de actividades.
LFS201: Fundamentos de Administracin de Sistemas Linux

407

Nmero de identificacin de grupo (GID)


Indica el grupo principal o predeterminado del usuario.

Comentario o informacin GECOS


Un mtodo definido que usa el campo de comentario para almacenar informacin
de contacto (nombre completo, email, oficina, nmero de contacto). No se
preocupe de qu significa GECOS, es un trmino muy antiguo.

Directorio home
Para la mayora de los usuarios este es un directorio nico que le ofrece un rea
de trabajo. Normalmente cada usuario es dueo de su directorio, y con la
excepcin de root, se encontrar en el sistema bajo /home.

Shell de inicio
Generalmente este es un programa shell tal como /bin/bash o /bin/csh. Sin
embargo, en casos especiales se referencia un programa alternativo. En general
este campo aceptar cualquier ejecutable.

33.3 Creacin de cuentas de usuario con useradd


El comando:
$ sudo useradd stephane

crear una cuenta de usuario llamada stephane, usando los algoritmos predeterminados
para asignar el id de usuario y grupo, como tambin para la eleccin de shell.
Especficamente, el comando useradd anterior provocar la ejecucin de los siguientes
pasos:

El prximo UID mayor a UID_MIN (especificado en /etc/login.defs) es asignado


de forma predeterminada como el UID de stephane.
Tambin se crea un grupo llamado stephane con GID=UID y se asigna como el
grupo principal de stephane.
Se crea un directorio home /home/stephane del cual stephane es propietaria.
La shell de inicio de stephane ser /bin/bash.
Los contenidos de /etc/skel se copian a /home/stephane. De forma
predeterminada, /etc/skel incluye archivos de inicio para bash y para el sistema X
Window.
Una entrada de ya sea !! o ! se pone en el campo password del
archivo /etc/shadow en la entrada de stephane, lo cual requiere que el
administrador le asigne una contrasea a la cuenta para que la misma se pueda
usar.

Los valores predeterminados pueden modificarse fcilmente a travs del uso de opciones
en useradd, como se muestra aqu:
$ sudo useradd -s /bin/csh -m -k /etc/skel -c Bullwinkle J Moose bmoose

LFS201: Fundamentos de Administracin de Sistemas Linux

408

donde se ha suministrado valores no predeterminados para algunos de los atributos de


usuario.

33.4 Modificacin y eliminacin de cuentas de usuario


El usuario root puede eliminar cuentas de usuario usando el comando userdel:
$ sudo userdel isabelle

Todas

las

referencias

al

usuario isabelle sern

eliminadas

desde

/etc/passwd, /etc/shadow y /etc/group.

Mientras que esto elimina la cuenta, no borra el directorio home


(generalmente /home/isabelle), en caso de que la cuenta sea reestablecida ms tarde.
Si se provee la opcin -r a userdel, el directorio home ser eliminado tambin. Sin
embargo, permanecer el resto de los archivos en el sistema que sean propiedad del
usuario eliminado.
usermod puede usarse para cambiar caractersticas de una cuenta de usuario, tales
como la pertenencia a grupos, directorio home, nombre de usuario, contrasea, shell
predeterminada, ID de usuario, etc.
Su uso es bastante sencillo. Tenga en cuenta que usermod se har cargo de cualquier
modificacin de los archivos en el directorio /etc, segn sea necesario.
$ sudo usermodhelp
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT
new
-d, --home HOME_DIR
new
-e, --expiredate EXPIRE_DATE set
-f, --inactive INACTIVE
set
INACTIVE
-g, --gid GROUP
-G, --groups GROUPS
-a, --append
-h,
-l,
-L,
-m,

--help
--login NEW_LOGIN
--lock
--move-home

value of the GECOS field


home directory for the user account
account expiration date to EXPIRE_DATE
password inactive after expiration
to

force use GROUP as new primary group


new list of supplementary GROUPS
append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
display this help message and exit
new value of the login name
lock the user account
move contents of the home directory to the
new location (use only with -d)

LFS201: Fundamentos de Administracin de Sistemas Linux

409


o, --non-unique
-p, --password PASSWORD
-R, --root CHROOT_DIR
-s, --shell SHELL
-u, --uid UID
-U, --unlock
-Z, --selinux-user SEUSER
account

allow using duplicate (non-unique) UID


use encrypted password for the new password
directory to chroot into
new login shell for the user account
new UID for the user account
unlock the user account
new SELinux user mapping for the user

33.5 Cuentas bloqueadas


Linux viene con algunas cuentas del sistema que estn bloqueadas, lo cual significa que
pueden ejecutar programas, pero no pueden iniciar sesin en el sistema y no tienen una
contrasea vlida asociada. Por ejemplo,/etc/passwd tiene entradas como:
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

La shell nologin devuelve lo siguiente si un usuario bloqueado intenta iniciar sesin en el


sistema:
This account is currently not available.

o cualquier mensaje que est almacenado en /etc/nologin.txt.


Tales cuentas bloqueadas se crean con propsitos especiales, ya sea para servicios del
sistema o aplicaciones; si busca usuarios con la shell nologin en el
archivo /etc/passwd de su sistema ver cuales son esas cuentas.
Tambin es posible bloquear una cuenta de usuario en particular de la siguiente forma:
$ sudo usermod -L stephane

lo cual significa que la cuenta se mantiene en el sistema pero que no puede iniciar sesin.
Es posible desbloquearla con la opcin -U.
Una prctica habitual es bloquear una cuenta de usuario cada vez que dejan la
organizacin o que hacen uso de una ausencia extendida.
Otra forma de bloquear una cuenta es usar chage para cambiar la fecha de expiracin de
una cuenta a una fecha en el pasado:
$ sudo chage -E 2014-09-11 isabelle

La fecha exacta es irrelevante, siempre y cuando est en el pasado. Vamos a


discutir chage pronto.
Otra aproximacin consiste en editar el archivo /etc/shadow y reemplazar el hash de la
contrasea con !! o cualquier otro string invlido.

LFS201: Fundamentos de Administracin de Sistemas Linux

410

33.6 ID de usuario y /etc/passwd


Ya hemos visto que /etc/passwd contiene un registro (una lnea) por cada usuario en el
sistema, como se muestra aqu:
beav:x:1000:1000:Theodore Cleaver:/home/beav:/bin/bash
rsquirrel:x:1001:1001:Rocket J Squirrel:/home/rsquirrel:/bin/bash

y ya hemos discutido los campos en cuestin. Cada registro consiste en un nmero de


campos separados por dos puntos (:). Los campos son los atributos que mencionamos
anteriormente.
Si /etc/shadow no se usa, el campo password contiene el hash de la contrasea. Si se
usa, contiene un marcador de posicin (x).
La convencin que la mayora de las distribuciones Linux han usado es que cualquier
cuenta con un ID de usuario menor a 1000 se considera especial y pertenece al sistema;
las cuentas de usuario normal comienzan en 1000. El valor exacto es definido
por UID_MIN segn el valor que tiene en /etc/login.defs.
Histricamente, las distribuciones derivadas de Red Hat usaban UID_MIN=500, no 1000,
pero con RHEL 7 han adoptado 1000 como valor comn.
Si no se especifica un ID de usuario al usar useradd, el sistema asignar los UID en
forma incremental, comenzando en UID_MIN.
Adicionalmente, cada usuario obtiene un ID de grupo primario, el cual por defecto es el
mismo nmero que el UID. Estos son llamados a veces Grupos Privados de
Usuario (UPG).
Se

considera

una

mala

prctica

el

editar

directamente

/etc/passwd, /etc/group o /etc/shadow; en vez de eso use la herramienta apropiada,

ya sea usermod o el editor especial vipw, ya que se ocupa bien del bloqueo de los
archivos involucrados, corrupcin de datos, etc.

LFS201: Fundamentos de Administracin de Sistemas Linux

411

33.7 /etc/shadow
El archivo /etc/shadow contiene un registro (una lnea) por cada usuario, como en:
daemon:*:16141:0:99999:7:::
.....
beav:$6$iCZyCnBJH9rmq7P.
$RYNm10Jg3wrhAtUnahBZ/mTMg.RzQE6iBXyqaXHvxxbKTYqj.d
9wpoQFuRp7fPEE3hMK3W2gcIYhiXa9MIA9w1:16316:0:99999:7:::

Los campos separados por dos puntos son:

username: nombre nico de usuario

password: el valor hash (sha512) de la contrasea

lastchange: das desde el 1ero de enero de 1970 desde que la contrasea fue
cambiada por ltima vez

mindays: cantidad mnima de das antes de que la contrasea pueda ser


cambiada

maxdays: cantidad mxima de das luego de lo cual la contrasea debe ser


cambiada

warn: nmero de das antes de que la contrasea expire en que el usuario es


advertido

grace: nmero de das despus de que la contrasea ha expirado en que la


cuenta es deshabilitada

expire: fecha en que la cuenta ser deshabilitada

reserved: campo reservado

El username en cada registro debe coincidir exactamente lo que se encuentra


en /etc/passwd y tambin debe estar en el mismo orden.
Todas las fechas se almacenan como el nmero de das desde el 1ero de Enero de 1970
(tiempo UNIX o epoch).
El hash de la contrasea es el string $6$ seguido por un valor salt de ocho caracteres, el
cual luego es seguido por un caracter $ y un hash de 88 caracteres (sha512).

LFS201: Fundamentos de Administracin de Sistemas Linux

412

33.8 Por que usar /etc/shadow?


El uso de /etc/shadow habilita la caducacidad de las contraseas por usuario. Al mismo
tiempo permite mantener una mayor seguridad del hash de las contraseas.
Los permisos predeterminados de /etc/passwd son 644 (-rw-rr--); cualquiera puede
leer el archivo. Esto es desafortunadamente necesario porque los programas de sistema y
aplicaciones de usuario necesitan leer la informacin contenida en el archivo. Estos
programas de sistema no se ejecutan como usuario root y ante cualquier evento solo root
puede modificar el archivo.
Una preocupacin en particular son el hash de las contraseas en s. Si estn
en /etc/passwd, cualquiera podra hacer una copia de los hashes de las contraseas y
usar herramientas tales como Crack y John the Ripper para encontrar las contraseas
en texto plano a raz de su hash. Esto es un riesgo de seguridad!
/etc/shadow tiene la configuracin de permisos en 400 (-r--------), lo cual significa
que solo root puede acceder al archivo. Esto hace que sea ms difcil que alguien obtenga
los hashes de las contraseas.
A menos de que haya una buena razn para no hacerlo, usted debera usar el
archivo /etc/shadow.

33.9 Gestin de contraseas


Las contraseas pueden cambiarse con passwd; un usuario normal puede cambiar su
contrasea solamente, mientras que root puede cambiar cualquiera. Cuando usted
escribe su contrasea, esta no se muestra, ya que desplegarla de vuelta a la pantalla est
suprimido.
Por defecto, la contrasea elegida es examinada por pam_cracklib, la cual se encarga
de que elijamos buenas contraseas.
Un usuario normal cambiando su contrasea:
$ passwd
Changing password for clyde
(current) UNIX password: <clydes password>
New UNIX password: <clydes-new-password>
Retype new UNIX password: <clydes-new-password>
passwd: all authentication tokens updated successfully

LFS201: Fundamentos de Administracin de Sistemas Linux

413

Note que cuando root cambia una contrasea de un usuario, no se le pide que ingrese la
contrasea actual del mismo:
$ sudo passwd kevin
New UNIX password: <kevins-new-password>
Retype new UNIX password: <kevins-password>
passwd: all authentication tokens updated successfully

Tenga en cuenta que los usuarios normales no tienen permitido configurar contraseas
malas, tales como las que son muy cortas o estn basadas en palabras de diccionario.
Sin embargo, root puede hacerlo.

33.10 chage: envejecimiento de la contrasea


Generalmente se considera importante cambiar las contraseas peridicamente. Esto
limita la cantidad de tiempo que podra tener un intruso para crackear una contrasea,
como tambin puede usarse para bloquear cuentas que no estn en uso. La desventaja
es que los usuarios podran encontrar que esta poltica es molesta y terminaran
escribiendo sus contraseas a medida en que las van cambiando, lo cual facilitara su
robo.
La herramienta que gestiona esto se llama chage:
chage [-m mindays] [-M maxdays] [-d lastday] [-I inactive] [-E
expiredate] [-W warndays] user

Ejemplos:
$
$
$
$

sudo
sudo
sudo
sudo

chage
chage
chage
chage

-l
-m
-E
-d

stephane
14 -M 30 kevlin
2012-4-1 isabelle
0 clyde

Solo el usuario root puede usar chage. La nica excepcin a esto es que cualquier
usuario puede ejecutar chage -l para ver la informacin especfica de su cuenta.
Ejemplos:
$ sudo chage -l coop
Last password change : Sep 03, 2014
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

Para forzar a un usuario a cambiar su contrasea en el siguiente inicio de sesin:


$ sudo chage -d 0 USERNAME

LFS201: Fundamentos de Administracin de Sistemas Linux

414

33.11 Shell restringida


En Linux es posible usar una shell restringida, la cual se invoca de la siguiente forma:
$ /bin/bash -r

(Algunas distribuciones pueden definir un comando rbash con el mismo efecto)


Una shell restringida opera en un ambiente ms controlado que una shell estndar, pero
por lo dems funciona normalmente. En particular:

Impide que el usuario se cambie a cualquier directorio fuera de su directorio home.

Impide
que
el
usuario
ambiente: SHELL, ENV y PATH.

No permite que el usuario especifique la ruta absoluta o nombres de comandos


ejecutables a partir de /.

Impide que el usuario redireccione la entrada y/o la salida.

redefina

las

siguientes

variables

de

Tenga en cuenta que hay otras restricciones; la mejor manera de verlas es hacer man
bash y buscar por RESTRICTED SHELL.
Debido a que la shell restringida ejecuta $HOME/.bash_profile sin restricciones, el
usuario no debe tener permisos de escritura ni ejecucin en el directorio /home.

33.12 Cuentas restringidas


Hay veces en las que es necesario conceder acceso a un usuario, pero con un alcance
limitado. Configurar una cuenta restringida puede ser til en este contexto. Una cuenta
restringida:

Usa la shell restringida.


Tiene lmites en los programas de sistema disponibles y en las aplicaciones de
usuario.
Tiene lmites en los recursos del sistema.
Tiene lmites en los tiempos de acceso.
Tiene lmites en los directorios que puede acceder.

Una shell restringida puede ser invocada desde la lnea de comandos o desde un script
con /bin/bash -r. Sin embargo, no se puede especificar parmetros en el
archivo /etc/passwd. Una forma simple de solucionar esta restriccin podra ser una de
las siguientes:

LFS201: Fundamentos de Administracin de Sistemas Linux

415

$ cd /bin ; sudo ln -s bash rbash


$ cd /bin ; sudo ln bash rbash
$ cd /bin ; sudo cp bash rbash

y luego usar /bin/rbash como la shell en /etc/passwd.


Al configurar cuentas de este tipo, se debera evitar el agregar directorios del sistema a la
variable de ambiente PATH; esto concedera al usuario restringido la habilidad de ejecutar
otros programas del sistema, tal como una shell no restringida.
Las cuentas restringidas son conocidas tambin como cuentas limitadas.

33.13 La cuenta root


La cuenta root debera usarse solamente con propsitos administrativos, cuando sea
absolutamente necesario y en ningn caso ser usada como una cuenta normal. Los
errores pueden ser muy costosos, tanto para la integridad, estabilidad y seguridad del
sistema.
Generalmente el inicio de sesin remoto est prohibido por defecto, debido a razones de
seguridad. Es posible permitir inicios de sesin a Secure Shell usando ssh, el cual se
configura en /etc/ssh/sshd_config y en PAM (PluggableAuthentication Modules), a
travs del mdulo pam_securetty.so y el archivo asociado /etc/securetty. El inicio de
sesin de root se permite solo desde los dispositivos listados en /etc/securetty.
Por lo general se recomienda que todos los accesos a la cuenta root se realicen a travs
de su o sudo (generando un registro de auditora de todos los accesos a root a travs
de sudo). Tenga en cuenta que algunas distribuciones (tales como Ubuntu) prohben
iniciar sesin directamente en la cuenta root.
PAM tambin puede usarse para restringir a qu usuarios se les permite hacer su a la
cuenta root. Podra valer la pena configurar auditd para registrar todos los comandos
ejecutados como root.

LFS201: Fundamentos de Administracin de Sistemas Linux

416

33.14 SSH
A menudo es necesario conectarse a sistemas remotos travs de la red, ya sea con el
mismo nombre de usuario u otro. O cuando se necesita transferir archivos hacia y desde
una mquina remota. En cualquier caso, uno desea hacerlo de forma segura, libre de
cualquier intercepcin.
SSH (Secure SHell) existe para este propsito. Usa un cifrado basado en algoritmos
fuertes. Asumiendo que los paquetes ssh apropiados estn instalados en el sistema, no
es necesario realizar una configuracin adicional antes de comenzar a usar ssh.
Para conectarse a un sistema remoto:
$ whoami
student
$ ssh farflung.com
student@farflung.com's password: (escriba aqu)
$

donde estamos asumiendo que hay una cuenta student en farflung.com. Para conectarse
con un usuario diferente:
$ ssh root@farflung.com
root@farflung.com's password: (escriba aqu)

o
$ ssh -l root farflung.com
root@farflung.com's password: (escriba aqu)

Para copiar archivos desde un sistema a otro:


$ scp file.txt farflung.com:/tmp
$ scp file.tex student@farflung.com/home/student
$ scp -r some_dir farflung.com:/tmp/some_dir

(Hemos omitido la solicitud de una contrasea para ahorrar espacio).

33.15 Archivos de configuracin de SSH


Es posible configurar SSH para facilitar su uso, en particular para permitir la conexin sin
una contrasea. Los archivos de configuracin especficos del usuario se crean bajo cada
directorio home, en el directorio oculto .ssh:
$ ls -l ~/.ssh
total 20
-rw-rr-- 1 hilda
-rw------- 1 hilda
-rw------- 1 hilda
-rw-rr-- 1 hilda
-rw-rr-- 1 hilda
hilda 1172 Sep 27 2014
hilda 207 Aug 9 2011
hilda 1675 Dec 8 2010
hilda 393 Dec 8 2010
LFS201: Fundamentos de Administracin de Sistemas Linux

417

hilda 1980 Apr 28 07:36


authorized_keys
config
id_rsa
id_rsa.pub
known_hosts

el cual contiene:
id rsa: la clave de cifrado privada del usuario.
id rsa.pub: la clave de cifrado pblica del usuario.
authorized keys: Una lista de claves pblicas que tienen permiso para conectarse.
known hosts: Una lista de hosts desde los cuales se han aceptado conexiones en el
pasado.
config: Un archivo de configuracin para especificar varias opciones.
Primero el usuario tiene que generar sus claves de cifrado privada y pblica con sshkeygen:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hilda/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hilda/.ssh/id_rsa
Your public key has been saved in /home/hilda/.ssh/id_rsa.pub
The key fingerprint is:
76:da:d3:51:1e:c8:2d:3b:34:28:46:b2:2b:db:d1:c4 hilda@c7
The keys randomart image is:
+--[ RSA 2048]----+
|
. .
|
|
=
o o
|
|
. E . * + |
|
= . . * . |
|
. o S . + . |
|
+ o + . o
|
|
. . . o .
|
|
.
|
|
|
+-----------------+

Esto tambin generar la llave pblica, /.ssh/id rsa.pub.


La llave privada nunca debe ser compartida con nadie.
La llave pblica puede ser entregada a cualquier mquina con la cual usted desea permitir
acceso sin contrasea. Tambin debera agregarse a su archivo authorized_keys, junto
con todas las llaves pblicas de otros usuarios que tienen cuentas en su mquina, a los
que desea permitirles el acceso sin contrasea a sus cuentas.
El archivo known_hosts se contruye gradualmente a medida en que ocurren los
accesos ssh. Si el sistema detecta cambios en los usuarios que estn intentando
conectarse a travs de ssh, le advertir de ello y le dar la oportunidad de denegar el
LFS201: Fundamentos de Administracin de Sistemas Linux

418

acceso. Tenga en cuenta que el archivo authorized_keys contiene informacin acerca


de usuarios y mquinas:
$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQ
...0000aSd...hilda@sbc

mientras que el known_hosts solo contiene informacin acerca de computadores:


$ cat known_hosts
192.30.252.129 ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSw
....BK6Tb...==

Usted puede examinar las pginas man para ver qu tipos de opciones pueden ir en el
archivo de configuracin dessh, config.

Comprobacin de conocimientos 33.1

LFS201: Fundamentos de Administracin de Sistemas Linux

419

33.16 Laboratorio 33.1


Laboratorio 33.1: Trabajando con cuentas de usuario
1. Examine /etc/passwd y /etc/shadow, comparando los campos en cada archivo, especialmente

para las cuentas de usuario normales. Cules son iguales y cules diferentes?
2. Usando useradd cree una cuenta llamada user1.
3. Usando ssh conctese como user1. Puede hacerlo as:
$ ssh user1@localhost
4.
5.
6.
7.

8.
9.
10.

Debera fallar porque se necesita una contrasea para user1; no ha sido configurada todava.
Configure la contrasea de user1 como user1pw e intente conectarse de nuevo como user1.
Revise los registros nuevos que fueron creados en los archivos /etc/passwd, /etc/group y
/etc/shadow.
Revise el archivo /etc/default/useradd y vea cules son los valores por defecto actuales.
Tambin eche un vistazo al archivo /etc/login.defs.
Cree una cuenta de usuario llamada user2 que use la shell Korn (ksh) por defecto (si no tiene
/bin/ksh en el sistema, instlela o use la shell Cubicada en /bin/csh). Configure la contrasea
en user2pw.
Eche un vistazo a /etc/shadow. Cul es la fecha de expiracin para la cuenta user1?
Use chage para configurar la fecha de expiracin del usuario user1 a Diciembre 1, 2013.
Eche un vistazo a /etc/shadow para ver cul es la nueva fecha de expiracin.
Use usermod para bloquear la cuenta user1. Eche un vistazo a /etc/shadow para ver qu ha
cambiado en relacin a la contrasea del usuario user1. Restablezca la contrasea de la cuenta
a userp1 para completar este ejercicio.

LFS201: Fundamentos de Administracin de Sistemas Linux

420

Solucin 33.1
1. $ sudo grep student /etc/passwd /etc/shadow

/etc/passwd:student:x:1000:100:LF Student:/home/student:/bin/bash
/etc/shadow:student:$6$jtoFVPICHhba$iGFFUU8ctrtOGoistJ4/30DrNLi1FS66qnn0VbS6Mvm
luKI08SgbzT5.IcOHo5j/SOdCagZmF2RgzTvzLb11H0:16028:0:99999:7:::
Puede usar cualquier nombre de usuario normal en vez de student. Lo nico que coincide es el
campo de nombre de usuario.
2. $ sudo useradd user1
3. $ ssh user1@localhost

user1@localhosts password:
Tenga en cuenta que quizs tenga que iniciar primero el servicio sshd de la siguiente forma:
$ sudo service sshd restart
o
$ sudo systemctl restart sshd.service
4. $ sudo passwd user1

Changing password for user user1.


New password:
5. $ sudo grep user1 /etc/passwd /etc/shadow

/etc/passwd:user1:x:1001:100::/home/user1:/bin/bash
/etc/shadow:user1:$6$OBE1mPMw$CIc7urbQ9ZSnyiniVOeJxKqLFu8fz4whfEexVem2
TFpucuwRN1CCHZ19XGhj4qVujslRIS.P4aCXd/y1U4utv.:16372:0:99999:7:::
6. Ya sea en sistemas RHEL 7 o openSUSE 13.1, por ejemplo:

$ cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
$ cat /etc/login.defs
....
No vamos a pegar el contenido del segundo archivo porque es largo, pero examnelo en su
sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

421

7. $ sudo useradd -s /bin/ksh user2

$ sudo passwd user2


Changing password for user user2.
New password:
8. $ sudo grep user1 /etc/shadow

user1:$6$OBE1mPMw$CIc7urbQ9ZSnyiniVOeJxKqLFu8fz4whfEexVem2TFpucuwRN1CCHZ
19XGhj4qVujslRIS.P4aCXd/y1U4utv.:16372:0:99999:7:::
No debera haber ninguna fecha de expiracin.
9. $ sudo chage -E 2013-12-1 user1

$ sudo sudo grep user1 /etc/shadow


user1:$6$OBE1mPMw$CIc7urbQ9ZSnyiniVOeJxKqLFu8fz4whfEexVem2TFpucuwRN1CCHZ
19XGhj4qVujslRIS.P4aCXd/y1U4utv.:16372:0:99999:7::16040:
10. $ sudo usermod -L user1

$ sudo passwd user1

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar el propsito de las cuentas individuales de usuario y listar sus atributos


principales.
Crear cuentas de usuario y modificar propiedades de cuentas existentes, como
tambin eliminar o bloquear cuentas.
Comprender cmo se configuran las contraseas de usuario, su cifrado y
almacenamiento, y cmo requerir cambios en las contraseas a travs del tiempo
por propsitos de seguridad.
Explicar cmo funciona la shell y las cuentas restringidas.
Comprender el rol de la cuenta root y saber cundo usarla.

LFS201: Fundamentos de Administracin de Sistemas Linux

422

Captulo 34. Gestin de grupos


Los sistemas Linux forman colecciones de usuarios los cuales se denominan grupos,
cuyos miembros comparten algn propsito. Comparten ciertos archivos y directorios y
mantienen privilegios en comn; esto los separa de los dems en el sistema, a veces
llamados de forma colectiva como el mundo. El uso de grupos ayuda enormemente en
proyectos colaborativos.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar por qu es til que los usuarios del sistema pertenezcan a uno o ms
grupos.
Usar herramientas tales como groupadd, groupdel, groupmod yusermod para
crear, eliminar y gestionar grupos y sus miembros.
Describir los Grupos Privados de Usuario.
Explicar el concepto de pertenencia al grupo.

LFS201: Fundamentos de Administracin de Sistemas Linux

423

34.1 Grupos
Los usuarios en Linux pertenecen a uno o ms grupos. Los propsitos de esto incluyen:

Permitirle a los usuarios compartir un rea de trabajo (directorios, archivos, etc.).


Configurar permisos de archivos para permitir el acceso a los miembros del grupo,
pero no al resto de los usuarios.
Permitirle a ciertos usuarios especficos acceder a recursos que de otra forma no
podran.

Los grupos estn definidos en /etc/group, el cual cumple el mismo rol para los grupos
como /etc/passwd lo hace para los usuarios. Cada lnea del archivo luce de la siguiente
forma:
groupname:password:GID:user1,user2,...

donde:

groupname es el nombre del grupo.


password es el campo que almacena la contrasea. Es posible configurar
contraseas para los grupos, pero solamente si existe el archivo /etc/gshadow.
GID es el identificador de grupo. Los valores entre 0 y 99 son para grupos del
sistema. Los valores entre 100 y GID_MIN (como est definido en
/etc/login.defs, el cual suele ser el mismo que UID_MIN) se consideran
especiales. Los valores sobre GID_MIN son para UPG (Grupos Privados de

Usuario).

user1,user2,... es una lista de usuarios separados por coma, quienes son

miembros del grupo. El usuario no necesita estar listado aqu si este es su grupo
principal.

34.2 Gestin de grupos


Los grupos y sus miembros pueden ser gestionados y mantenidos con:

groupadd: Agrega un grupo.

groupdel: Elimina un grupo.

groupmod: Modifica las propiedades del grupo.

usermod: Modifica la pertenencia a grupos de un usuario (agrega o elimina).

Tambin se puede editar directamente /etc/group, pero es mejor usar


herramienta vigr, la cual generalmente est enlazada simblicamente a
herramienta vipw, mencionada anteriormente.

la
la

Estas herramientas de gestin de grupos modifican /etc/group y /etc/gshadow (en


caso de existir), y solo pueden ser ejecutadas por root:
LFS201: Fundamentos de Administracin de Sistemas Linux

424

Ejemplos:
$
$
$
$

sudo
sudo
sudo
sudo

groupadd -r -g 215 staff


groupmod -g 101 blah
groupdel newgroup
usermod -G student,group1,group2 student

Nota: Sea muy cuidadoso con el comando usermod -G; la lista de grupos que le sigue
corresponde a la lista completa, no solo a los cambios que desea realizar. Cualquier grupo
que quede afuera de la lista ya no incluir al usuario. Para evitar ese comportamiento
utilice la opcin -a, la cual preservar cualquier pertenencia previa a grupos al agregar
otros nuevos.

34.3 Grupos privados de Usuario


Linux usa Grupos Privados de Usuario (UPG).
La idea detrs de UPG es que cada usuario tendr su propio grupo. Sin embargo, no se
garantiza que los UPG sean privados; miembros adicionales pueden ser agregados al
grupo privado de alguien en /etc/group.
Por defecto, los usuarios cuyas cuentas son creadas con useradd tienen: GID principal
= UID y el nombre del grupo es idntico al de usuario.
Como se especifica en /etc/profile, el umask se configura en 002 para todos los
usuarios creados con UPG. Bajo este esquema, los archivos de usuario son creados con
permisos 644 (rw-rw-r--) y los directorios con 775(rwxrwxr-x).
Vamos a
discutir umask en el captulo siguiente.

34.4 Perteneca a grupos


Un usuario en Linux tiene un grupo primario; el grupo est en /etc/passwd y tambin
en /etc/group. Un usuario puede pertenecer entre 0 a 15 grupos secundarios.
El grupo primario es el GID, el cual se usa cada vez que el usuario crea archivos o
directorios. La pertenencia a grupos secundarios le concede permisos adicionales al
usuario.
La pertenencia a grupos puede ser desplegada ejecutando:
$ groups [user1 user2 ...]
$ id -Gn [user1 user2 ...]

Sin argumentos, ambos comandos entregan la informacin asociada al usuario actual.

LFS201: Fundamentos de Administracin de Sistemas Linux

425

Comprobacin de conocimientos 34.1

34.5 Laboratorio 34.1


Laboratorio 34.1: Trabajando con grupos
1. Cree dos cuentas de usuario (rocky y bullwinkle) y asegrese de que tengan directorios home.
2. Cree dos grupos, friends y bosses (con GID 490). Eche un vistazo al archivo /etc/group. Vea qu

GID se le asign a cada grupo.

3. Agregue rocky a ambos grupos.

Agregue bullwinkle al grupo friends.


Eche un vistazo al archivo /etc/group para ver cmo cambi.
4. Conctese como rocky. Cree un directorio llamado somedir y configure el propietario del
grupo en bosses (use chgroup, el cual se discutir en la prxima sesin).
Nota: probablemente necesitar agregar permisos de ejecucin para todos en el directorio
home de rocky.
5. Conctese como bullwinkle e intente crear un archivo en /home/rocky/somedir llamado
somefile, usando el comando touch.
Puede hacer esto? No, debido al propietario del grupo y los permisos chmod a+x en el
directorio.
6. Agregue bullwinkle al grupo bosses e intente de nuevo. Note que tendr que desconectarse y
conectarse de nuevo para que la participacin en el grupo sea efectiva.

LFS201: Fundamentos de Administracin de Sistemas Linux

426

Solucin 34.1
1. $ sudo useradd -m rocky

$ sudo useradd -m bullwinkle


$ sudo passwd rocky
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
$ sudo passwd bullwinkle
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
$ ls -l /home
total 12
drwxr-xr-x 2
bullwinkle
bullwinkle
drwxr-xr-x 2
rocky
rocky
drwxr-xr-x 20
student
student

4096 Oct 30 09:39


4096 Oct 30 09:39
4096 Oct 30 09:18

bullwinkle
rocky
student

2. $ sudo groupadd friends

$ sudo groupadd -g 490 bosses


$ grep -e friends -e bosses /etc/group
friends:x:1003:
bosses:x:490:
3. $ sudo usermod -G friends,bosses rocky

$ sudo usermod -G friends bullwinkle


$ grep -e rocky -e bullwinkle /etc/group
rocky:x:1001:
bullwinkle:x:1002:
friends:x:1003:rocky,bullwinkle
bosses:x:490:rocky
$ groups rocky bullwinkle
rocky : rocky friends bosses
bullwinkle : bullwinkle friends

LFS201: Fundamentos de Administracin de Sistemas Linux

427

4. $ ssh rocky@localhost

$ cd ~
$ mkdir somedir
$ chgrp bosses somedir
$ ls -l
total 16
-rw-r--r-- 1 rocky rocky 8980 Oct 4 2013 examples.desktop
drwxrwxr-x 2 rocky bosses 4096 Oct 30 09:53 somedir
$ chmod a+x .
$ ssh bullwinkle@localhost
$ touch /home/rocky/somedir/somefile
touch: cannot touch /home/rocky/somedir/somefile: Permission denied
$ exit
$ sudo usermod -a -G bosses bullwinkle
$ ssh bullwinkle@localhost
$ touch /home/rocky/somedir/somefile
$ ls -al /home/rocky/somedir
(fjese en quin es el propietario de los archivos)

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar por qu es til que los usuarios del sistema pertenezcan a uno o ms
grupos.
Usar herramientas tales como groupadd, groupdel, groupmod yusermod para
crear, eliminar y gestionar grupos y sus miembros.
Describir los Grupos Privados de Usuario.
Explicar el concepto de pertenencia al grupo.

LFS201: Fundamentos de Administracin de Sistemas Linux

428

Captulo 35. Permisos de archivos y propietarios


En Linux cada archivo tiene un dueo quien tiene privilegios para leer y/o escribir, y/o
ejecutar el archivo; estos permisos se asignan de forma independientemente. Tales
permisos pueden ser otorgados sobre la base de pertenencia a un grupo o a todos los
usuarios en el sistema. Este modelo de permisos de archivos y propietarios es el corazn
del modelo de seguridad de Control de Acceso Discrecional.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar los conceptos de propietario, grupo y mundo.


Configurar los derechos de acceso a archivos (lectura, escritura y ejecucin) para
cada categora.
Autenticar solicitudes para accesar archivos, respetando los permisos que
correspondan.
Usar chmod para cambiar los permisos de archivos, chown para cambiar el
usuario propietario y chgrp para cambiar el grupo propietario.
Comprender el rol de umask en el establecimiento de permisos deseados en
archivos nuevos.
Usar ACLs para extender el modelo de usuarios, grupos, mundo, lectura, escritura
y ejecucin.

LFS201: Fundamentos de Administracin de Sistemas Linux

429

35.1 Propietario, grupo y mundo


Cuando usted hace ls -l como aqu:
$ ls -l a_file
-rw-rw-r-- 1 coop aproject 1601 Mar 9 15:04

a_file

despus del primer caracter, el cual indica el tipo del objeto archivo, hay nueve ms que
indican los derechos de acceso a potenciales usuarios de archivos. Estos se agrupan en
tres grupos de tres caracteres:

propietario: el usuario que es dueo del archivo (tambin llamado usuario).


grupo: el grupo de usuarios que tiene acceso.
mundo: el resto del mundo (tambin llamado otros).

En el ejemplo de arriba, el usuario es coop y el grupo es aproject.

35.2 Derechos de acceso a archivos


Cada tro puede tener un elemento del siguiente conjunto:

r: el acceso a lectura est permitido.

w: el acceso a escritura est permitido.

x: el acceso a ejecucin est permitido.

Si el permiso no est permitido, aparece un - en vez de uno de estos caracteres.


Adicionalmente, existen otros permisos especializados para cada categora, tales como
los permisos setuid/setgid.
De esta forma, en el ejemplo anterior, el usuario coop y los miembros del
grupo aproject tienen acceso a lectura y escritura, mientras que el resto tiene solo
acceso a lectura.

LFS201: Fundamentos de Administracin de Sistemas Linux

430

35.3 Permisos de archivo, seguridad y autenticacin


Estos permisos de acceso a archivos son una parte crtica del sistema de seguridad
de Linux. Cualquier solicitud de acceso a un archivo requiere la comparacin de las
credenciales e identidad del usuario con las del propietario del archivo.
Esta autenticacin se concede dependiendo de uno de los siguientes tres conjuntos de
permisos, en el siguiente orden:
1. Si el solicitante es el propietario del archivo, se usan los permisos del propietario.
2. Por otro lado, si el solicitando est en el grupo propietario de los archivos, se

examinan los permisos del grupo.


3. Si lo anterior no tiene xito, se examinan los permisos del mundo.

35.4 Modificacin de permisos: chmod


La modificacin de permisos de archivos se realiza con chmod. Usted puede cambiar los
permisos de los archivos que son de su propiedad solamente, a menos que sea el
superusuario.
Hay diversas formas de usar chmod. Por ejemplo, para otorgar permisos de ejecucin al
propietario y al mundo, y eliminar el permiso de escritura del grupo:
$ ls -l a_file
-rw-rw-r-- 1 coop coop 1601 Mar
$ chmod uo+x,g-w a_file
$ ls -l a_file
-rwxr--r-x 1 coop coop 1601 Mar

9 15:04 a_file
9 15:04 a_file

donde u representa el usuario (propietario), o a otros (mundo) y g el grupo.

LFS201: Fundamentos de Administracin de Sistemas Linux

431

35.5 chmod: sintaxis numrica de permisos


Los permisos pueden ser representados ya sea como un mapa de bits, escrito
generalmente en octal, o en una forma simblica. Los mapas de bits octales generalmente
lucen
como 0755,
mientras
que
las
representaciones
simblicas
lucen
como u+rwx,g+rwx,o+rx.
La sintaxis simblica puede ser difcil de escribir y recordar, por lo que a menudo se utiliza
la abreviatura octal, la cual permite configurar todos los permisos en un paso. Esto se
hace un con algoritmo simple, en donde una cifra es suficiente para especificar los tres
bits de permisos para cada entidad. Esta cifra es la suma de:

4 si se desea otorgar permiso de lectura.


2 si se desea otorgar permiso de escritura.
1 si se desea otorgar permiso de ejecucin.

Por
lo
tanto, 7 significa
y 5 lectura/ejecucin.

lectura/escritura/ejecucin, 6 significa

lectura/escritura

Cuando esto se aplica con chmod, es necesario darle un valor para cada uno de los tres
dgitos, tal como aqu:
$ chmod 755 a_file
$ ls -l a_file
-rwxr-xr-x 1 coop coop 1601 Mar

9 15:04 a_file

35.6 Modificacin de usuario y grupo propietario: chown y chgrp


La modificacin del propietario de un archivo se hace con chown y la del grupo
con chgrp.
Usted puede cambiar el propietario de los archivos del cual es dueo, a menos que sea el
superusuario. De la misma forma, usted puede cambiar el propietario de los grupos a los
cuales pertenece.
Cambiar el grupo propietario de un archivo es tan simple como:
$ chgrp aproject a_file

y cambiar el propietario es tan fcil como hacer:


$ chown coop a_file

Usted puede cambiar ambos al mismo tiempo con:


$ chown coop:aproject a_file

en donde se separa el usuario propietario del grupo con dos puntos (o uno).
LFS201: Fundamentos de Administracin de Sistemas Linux

432

LFS201: Fundamentos de Administracin de Sistemas Linux

433

Estos programas aceptan la opcin -R, lo cual significa recursivo. Por ejemplo:
$ chown -R coop:aproject ./
$ chown -R coop:aproject subdir

el primer comando cambiar el usuario propietario y grupo de todos los archivos en el


directorio actual. En el segundo comando se realizar la misma operacin en el
directorio subdir y todos sus subdirectorios.

35.7 umask
Los permisos por defecto dados al crear un archivo son lectura/escritura para el
propietario, grupo y mundo (0666). Para un directorio es lectura/escritura/ejecucin para
todos (0777). Sin embargo, si hace lo siguiente:
$ touch afile
$ mkdir adir
$ ls -l | grep -e afile -e adir
drwxrwxr-x 2 coop coop 4096 Sep 16 11:18 adir
-rw-rw-r-- 1 coop coop
0 Sep 16 11:17 afile

notar que los permisos actuales cambiaron a 664 para el archivo y 775 para el directorio.
Han sido modificados por el umask actual, cuyo propsito es mostrar qu permisos
deberan ser denegados. El valor actual se puede mostrar con:
$ umask
0002

el cual es el valor ms comnmente configurado por los administradores de sistema para


los usuarios. Este valor se combina con los permisos de creacin de archivos para
obtener el resultado real, es decir:
0666 & ~002 = 0664; i.e., rw-rw-r--

Puede cambiar el umask en cualquier momento con un comando como el siguiente:


$ umask 0022

LFS201: Fundamentos de Administracin de Sistemas Linux

434

35.8 ACLs de sistema de archivos


Linux tiene una implementacin completa de ACLs POSIX (listas de control de acceso),
la cual extiende el modelo simple de usuario, grupo, mundo, lectura, escritura y ejecucin.
Privilegios en particular pueden ser concedidos a usuarios especficos o grupos de
usuarios al acceder ciertos objetos o clases de objetos. Es posible compartir archivos y
directorios sin usar permisos 777.
Mientras que el kernel Linux habilita el uso de ACLs, an debe ser implementado en el
sistema de archivos en particular. Todos los sistemas de archivos principales usados en
las distribuciones modernas de Linux incorporan las extensiones ACL, y es posible
usarlas con la opcin -acl al montar el sistema de archivos. Durante la instalacin del
sistema de archivos se crea un conjunto de ACLs por defecto.

35.9 Listado y configuracin de ACLs


Para ver las ACLs:
$ getfacl file|directory

Ejemplo:
$ getfacl file1

Para configurar ACLs:


$ setfacl options permissions file|directory

Ejemplos:
$ setfacl -m u:isabelle:rx /home/stephane/file1
$ setfacl -x u:isabelle
/home/stephane/file

Tenga en cuenta que los archivos nuevos heredan la ACL predeterminada (si ha sido
configurada) desde el directorio en el cual residen. Note tambin que mv y cp
-p mantienen las ACLs.
Para eliminar una ACL:
$ setfacl -x u:isabelle /home/stephane/file1

Para establecer el valor predeterminado en un directorio:


$ setfacl -m d:u:isabelle:rx somedir

LFS201: Fundamentos de Administracin de Sistemas Linux

435

Comprobacin de conocimientos 35.1

Comprobacin de conocimientos 35.1

35.10 Laboratorio 35.1


Laboratorio 35.1: Usando chmod
Es posible usar ya sea el mtodo de dgitos octales o simblico para especificar los permisos al usar
chmod. Elaboremos un poco ms en el mtodo simblico.
Se puede otorgar permisos directamente, agregar o quitar permisos. La sintaxis es bastante obvia.
Intente los siguientes ejemplos:
$ chmod u=r,g=w,o=x afile
$ chmod u=+w,g=-w,o=+rw afile
$ chmod ug=rwx,o=-rw afile
Despus de cada paso haga:
$ ls -l afile
para ver cmo cambiaron los permisos. Intente algunas variaciones.

LFS201: Fundamentos de Administracin de Sistemas Linux

436

35.10 Laboratorio 35.2


Laboratorio 35.2: umask
Cree un archivo vaco con:
$ touch afile
$ ls -l afile
-rw-rw-r-- 1 coop coop 0 Jul 26 12:43 afile
lo que demuestra que por defecto se crea tanto con permisos de lectura y escritura para el
propietario y el grupo, pero solo de lectura para el mundo.
En realidad, a nivel de sistema operativo los permisos por defecto que se dan al crear un archivo o
directorio son lectura/escritura para el propietario, grupo y mundo (0666); los valores
predeterminados han sido modificados por el actual umask.
Si ejecuta umask obtendr su valor actual:
$ umask
0002
lo cual es el valor ms convencional que los administradores de sistemas configuran para los
usuarios. Este valor se combina con los permisos de creacin de archivos para obtener el resultado
actual. Es decir:
0666 & ~002 = 0664; i.e., rw-rw-r
Intente modificar el umask, cree archivos y vea los permisos resultantes, como en:
$ umask 0022
$ touch afile2
$ umask 0666
$ touch afile3
$ ls -l afile*

LFS201: Fundamentos de Administracin de Sistemas Linux

437

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar los conceptos de propietario, grupo y mundo.


Configurar los derechos de acceso a archivos (lectura, escritura y ejecucin) para
cada categora.
Autenticar solicitudes para accesar archivos, respetando los permisos que
correspondan.
Usar chmod para cambiar los permisos de archivos, chown para cambiar el
usuario propietario y chgrp para cambiar el grupo propietario.
Comprender el rol de umask en el establecimiento de permisos deseados en
archivos nuevos.
Usar ACLs para extender el modelo de usuarios, grupos, mundo, lectura, escritura
y ejecucin.

LFS201: Fundamentos de Administracin de Sistemas Linux

438

Captulo 36. Pluggable Authentication Modules


(PAM)
El sistema Pluggable Authentication Modules provee un mecanismo uniforme para
asegurar que usuarios y aplicaciones son identificados y autenticados apropiadamente.
Es posible aplicar reglas condicionales para limitar el alcance de permisos, y puede
establecerse un control sobre qu hacer en caso de xito o fracaso. PAM tambin puede
trabajar con LDAP para centralizar la autenticacin a travs de una red.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar los conceptos bsicos que motivan el uso de PAM.


Listar los pasos involucrados en el proceso de autenticacin.
Usar y modificar los archivos de configuracin de PAM.
Saber cmo interpretar y crear reglas de PAM.
Aplicar LDAP para usar y administrar servicios de directorio distribuidos en la red.

LFS201: Fundamentos de Administracin de Sistemas Linux

439

36.1 PAM: Una aproximacin unificada para la autenticacin


Histricamente la autenticacin de usuarios se realizaba individualmente por las
aplicaciones en s: por ejemplo, su,login y ssh autenticaran y estableceran cuentas de
usuario de forma independiente una de otra.
Las aplicaciones modernas de Linux han sido escritas o reescritas para
usar PAM (Pluggable Authentication Modules), de tal forma que la autenticacin puede
llevarse a cabo de una manera uniforme, usando libpam.
Esta biblioteca de mdulos provee una enorme flexibilidad y consistencia en relacin a la
autenticacin, contraseas, sesin y servicios de la cuenta.
PAM incorpora las siguientes componentes:

Aplicaciones que trabajan con PAM.

Archivos de configuracin en /etc/pam.d/ .

Mdulos PAM en las bibliotecas libpam*, las cuales se encuentran


en /lib/security, /lib/x86_64-linux-gnu o /lib64/security, dependiendo
de la distribucin.

Cada aplicacin o servicio que trabaja con PAM debe ser configurada en relacin a PAM,
en un archivo de configuracin individual en /etc/pam.d.

36.2 Proceso de autenticacin


Son varios los pasos que estn involucrados en la autenticacin:

Un usuario invoca a la aplicacin que trabaja con PAM, tal como login, ssh o su.
La aplicacin llama a libpam.
La biblioteca verifica si hay archivos relacionados en /etc/pam.d; estos definen
qu mdulos PAM se invocarn, incluyendo system-auth.
Cada mdulo referenciado se ejecuta de acuerdo con las reglas del archivo de
configuracin relevante para esta aplicacin.

LFS201: Fundamentos de Administracin de Sistemas Linux

440

36.3 Archivos de configuracin de PAM


Cada archivo en /etc/pam.d corresponde a un servicio y cada lnea (no comentada) en
el archivo especifica una regla. El formato de la regla consiste en una lista de tokens
separados por espacios, en donde los dos primeros pueden estar en maysculas o
minsculas:
type control module-path module-arguments

A modo de ejemplo, a continuacin se muestra el contenido de /etc/pam.d/su en un


sistema RHEL 7:
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the
"wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the
"wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so

Observe que aqu hay una serie de dependencias; su requerir cargar system-auth, etc.

36.4 Reglas de PAM


El mdulo type especifica el grupo de gestin al que el mdulo estar asociado:
auth: Le indica a la aplicacin que debe pedir la identificacin del usuario (nombre
de usuario, contrasea, etc). Puede configurar las credenciales y otorgar
privilegios.
account: Verifica aspectos de la cuenta del usuario, tales como envejecimiento de
la contrasea, control de acceso, etc.
password: Es responsable de actualizar el token de autenticacin del usuario,
generalmente una contrasea.
session: Se usa para proveer funciones antes y despus de que se establece la
sesin (tales como la configuracin del ambiente, inicio de sesin, etc).

LFS201: Fundamentos de Administracin de Sistemas Linux

441

El parmetro control controla cmo el xito o fracaso de un mdulo afecta el proceso


general de autenticacin:
required: Debe devolver xito para que el servicio se otorgue. Si es parte de un
conjunto, el resto de mdulos sern ejecutados. No se le informa a la aplicacin
qu mdulo o mdulos fallaron.
requisite: Igual a required, con la excepcin de que una falla en cualquier
mdulo termina el stack (conjunto de mdulos) y devuelve un estado, el cual se
enva a la aplicacin.
optional: El mdulo no es requerido. Si este es el nico mdulo, el estado que
se enva a la aplicacin puede causar una falla.
sufficient: Si este mdulo termina con xito no hay mdulos subsecuentes a
ser ejecutados. Si este falla, no causa una falla general en el resto de mdulos, a
menos de que sea el nico mdulo del stack.
Hay otros parmetros para control, tales como include y substack.
haga man pam.d para ver los detalles.

Por favor

module-path da el nombre del archivo de la biblioteca que


en /lib*/security, ya que en un forma de ruta absoluta o relativa.

encuentra

se

module-arguments puede ser proporcionado para modificar el comportamiento del

mdulo PAM.

36.5 Autenticacin LDAP


LDAP (Protocolo Ligero de Acceso a Directorios) es un protocolo estndar de la industria
para usar y administrar servicios de directorios distribuidos sobre la red, el cual fue creado
para ser abierto y neutral al proveedor.
Al usar LDAP para autenticacin centralizada, cada sistema (o cliente) se conecta a un
servidor LDAP centralizado para la autenticacin del usuario. El uso de TLS hace que sea
una opcin segura y recomendada.
LDAP usa PAM y system-config-authentication o authconfig-tui.
Es
necesario
especificar el servidor, base de bsqueda de DN (nombre de dominio) y TLS (Seguridad
de la Capa de Transporte). Tambin se requiere openldap-clients, pam_ldap y nss-pamldapd.
Se modifican cinco archivos al configurar un sistema para autenticacin con LDAP:
/etc/openldap/ldap.conf
/etc/pam_ldap.conf
/etc/nslcd.conf
/etc/sssd/sssd.conf
/etc/nsswitch.conf

Usted puede editar estos archivos manualmente o usar uno de los programas disponibles
(system-config-authentication o authconfig-tui)
LFS201: Fundamentos de Administracin de Sistemas Linux

442

Comprobacin de conocimientos 36.1

Comprobacin de conocimientos 36.2

36.6 Laboratorio 36.1


Laboratorio 36.1: Configuracin de PAM

Una de las configuraciones ms comunes de PAM es denegar el acceso luego de un cierto nmero
de intentos fallidos. Esto se hace con el mdulo pam-tally2. En este ejercicio vamos a denegar el
acceso a travs de ssh despus de tres intentos fallidos de acceso.
1

Edite /etc/pam.d/sshd y configrelo para denegar el acceso luego de tres intentos fallidos.
Pista: agregue las siguientes dos lneas al archivo
auth required pam_tally2.so deny=3 onerr=fail
account required pam_tally2.so 2.

Intente acceder tres veces con un usuario en particular (uno que tenga cuenta) y escriba mal la
contrasea.

Intente acceder con el mismo usuario, pero esta vez con la contrasea correcta.

Verifique cuntos inicios de sesin fallidos registra el usuario.

Reinicie el contador de inicios fallidos.

Verifique nuevamente cuntos inicios de sesin fallidos registra el usuario.

Intente acceder de nuevo con la contrasea correcta.

Solucin 36.1
LFS201: Fundamentos de Administracin de Sistemas Linux

443

1. Agregue las siguientes dos lneas a /etc/pam.d/sshd:

auth required pam_tally2.so deny=3 onerr=fail


account required pam_tally2.so
2. $ ssh student@localhost

Password:
Password:
Password:
Permission denied (publickey,keyboard-interactive).
3. $ ssh student@localhost

Password:
Account locked due to 3 failed logins
4. $ sudo pam_tally2

Login Failures Latest failure From


student 3 11/01/14 20:41:12 localhost
5. $ sudo pam_tally2 -u student -r

Login Failures Latest failure From


student 3 11/01/14 20:41:12 localhost
6. $ sudo pam_tally2 -u student -r

Login Failures Latest failure From


student
0
7. $ ssh student@localhost

Password:
Last failed login: Sat Nov 1 20:41:14 CDT 2014 from localhost on ssh:notty
There were 6 failed login attempts since the last successful login.
Last login: Sat Nov 1 20:28:38 2014 from localhost
Have a lot of fun...

LFS201: Fundamentos de Administracin de Sistemas Linux

444

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Explicar los conceptos bsicos que motivan el uso de PAM.


Listar los pasos involucrados en el proceso de autenticacin.
Usar y modificar los archivos de configuracin de PAM.
Saber cmo interpretar las reglas de PAM y crear nuevas.
Aplicar LDAP para usar y administrar servicios de directorio distribuidos en la red.

LFS201: Fundamentos de Administracin de Sistemas Linux

445

Captulo 37. Mtodos de respaldos y recuperacin


de la informacin
Los sistemas que no tienen una estrategia bien definida de copias de seguridad estn
mal administrados, independientemente de si hospedan un entorno de usuario nico o
una red empresarial con mltiples sistemas y usuarios. Tarde o temprano la informacin
crtica se va a perder, ya sea debido a una falla de hardware, errores del usuario o del
administrador, o a ataques maliciosos. Ser capaz de recuperar el sistema con la mnima
prdida posible de forma rpida y eficiente es una responsabilidad crtica que debe
llevarse a cabo.
Nota: se usarn los trminos respaldo o copia de seguridad indistintamente.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Identificar y priorizar la informacin de la que es necesario tomar una copia de


seguridad.
Emplear diferentes mtodos de copia de seguridad, dependiendo de la situacin.
Establecer estrategias eficientes de copia de seguridad y recuperacin.
Usar diferentes herramientas para sacar copias de seguridad, tales
como cpio, tar, gzip, bzip2, xz, dd, rsync, dump, restore y mt.
Describir los dos programas de copia de seguridad ms conocidos,
Amanda y Bacula.

LFS201: Fundamentos de Administracin de Sistemas Linux

446

37.1 Por que realizar respaldos?


Ya sea que usted est administrando solo un sistema personal o una red con muchas
mquinas, las copias de seguridad del sistema son muy importantes. Algunas de las
razones son las siguientes:

Los datos son valiosos.


Los datos en disco son producto de trabajo importante y por lo tanto una
mercanca que debemos proteger. Recrear datos perdidos cuesta tiempo y dinero.
Ciertos datos incluso pueden ser nicos y podra no haber una forma para
recrearlos.

Fallas de hardware.
A medida en la que la fiabilidad ha aumentado, tambin lo ha hecho la capacidad
en disco. An si la tasa de falla por byte disminuye, todava se produciran fallas
impredecibles. Puede ser pesimista decir que hay solo dos tipos de discos:
aquellos que fallaron y los que fallarn, pero es esencialmente cierto. El uso
de RAID ayuda, pero las copias de seguridad an son necesarias.

Fallas de software.
Ningn software es perfecto. Algunos bugs pueden destruir o corromper la
informacin. An los programas estables que se han usado por mucho tiempo
pueden tener problemas.

La gente comete errores.


Todos han escuchado alguna vez OOPS! (o algo mucho peor) del cubculo de al
lado (o desde su propia boca). A veces un simple error de tipeo puede causar una
destruccin de archivos e informacin a gran escala.

Personas maliciosas pueden causar dao deliberadamente.


Podra ser el empleado descontento cannico o un hacker externo con un objetivo
especfico. Las preocupaciones de seguridad y las capacidades de realizar copias
de seguridad estn estrechamente relacionadas.

Eventos inexplicables.
Los archivos pueden desaparecer sin que usted sepa cmo, quin o incluso
cundo ocurri.

Las copias de seguridad anteriores pueden ser tiles.


A veces restaurar a una snapshot anterior de una parte o todo el sistema puede
ser requerido.

LFS201: Fundamentos de Administracin de Sistemas Linux

447

37.2 Que necesita tener un respaldo?


Es crtico respaldar ciertos datos, otros son menos crticos y de algunos no se necesita
tomar una copia de seguridad. En orden de prioridad:
1. Definitivamente:

- Datos relacionados con el negocio.


- Archivos de configuracin del sistema.
- Archivos de usuarios (generalmente en /home).
2. Tal vez:

- Directorios de cola (para imprimir, email, etc).


- Archivos del registro (que se encuentran en /var/log y en otras partes).
3. Probablemente no:

- Software que puede ser reinstalado fcilmente; en un sistema bien gestionado esto
sera prcticamente todo.
- El directorio /tmp, porque su contenido est pensado para ser temporal solamente.
4. Definitivamente no:
- Pseudosistemas de archivos tales como /proc, /dev y /sys.
- Cualquier particin o archivo de intercambio.
Obviamente los archivos esenciales de su organizacin requieren ser respaldados. Los
archivos de configuracin pueden cambiar frecuentemente, y junto a los archivos de los
usuarios requieren una copia de seguridad tambin.
Los archivos del registro pueden ser importante si usted tiene que investigar la historia del
sistema, lo cual puede ser particularmente importante para detectar intrusiones y otras
violaciones a la seguridad.

37.3 Unidades de cinta


Las unidades de cinta no son tan comunes como solan ser. Son relativamente lentas y
permiten el acceso secuencial solamente. En cualquier configuracin moderna rara vez
se utilizan como respaldo primario. A veces se usan para almacenamiento fuera de lnea
para disponer de referencias en el largo plazo. Sin embargo, las cintas magnticas tienen
un ciclo de vida finito antes de que se degraden fsicamente y comiencen a perder datos.
Los dispositivos modernos de cinta son generalmente del tipo LTO (Linear Tape Open),
cuyas primeras versiones aparecieron a fines de los '90 como una alternativa de
estndares abiertos; la mayora de los primeros formatos fueron propietarios. Las
versiones tempranas almacenaban hasta 100 GB; las versiones ms nuevas pueden
contener 2.5 TB o ms en un cartucho del mismo tamao.
Da a da las copias de seguridad son tomadas con alguna forma de NAS
(Network Attached Storage) o con soluciones basadas en la nube, lo cual hace que las
instalaciones basadas en cintas sean cada vez menos atractivas. Sin embargo, todava se
pueden encontrar sistemas que las usan y los administradores de sistemas podran
requerir trabajar con ellas.
De aqu en adelante trataremos de no enfocarnos en algn tipo particular de equipo para
el medio de respaldo, por lo cual nos referiremos a ello de forma abstracta.
LFS201: Fundamentos de Administracin de Sistemas Linux

448

37.4 Mtodos de respaldo


No se debe tener todas las copias de seguridad en el mismo lugar fsico que el de los
sistemas que se estn protegiendo. De otra forma, un incendio u otro dao fsico podra
causar una prdida completa. En el pasado esto generalmente significaba tener que
transportar fsicamente las cintas magnticas a un lugar seguro. Actualmente esto
significa ms bien transferir las copias de seguridad a travs de la red a un lugar fsico
alternativo. Obviamente esto tiene que realizarse de forma segura, usando cifrado de
datos y otras precauciones de seguridad.
Es posible usar diferentes mtodos de respaldos, los cuales a menudo trabajan de forma
coordinada entre ellos:

Completo:
Respalda todos los archivos en el sistema.

Incremental:
Respalda todos los archivos que han cambiado desde la ltima copia de seguridad
incremental o completa.

Diferencial:
Respalda todos los archivos que han cambiado desde la ltima copia de seguridad
completa.

Nivel incremental mltiple:


Respalda todos los archivos que han cambiado desde la copia de seguridad previa
en el mismo nivel o en uno previo.

Usuario:
Solamente se respalda el contenido del directorio de un usuario especfico.

37.5 Estrategias de respaldo


Debemos tener en cuenta que los mtodos de respaldo son intiles sin mtodos
de recuperacin asociados. Uno tiene que considerar la robustez, claridad y facilidad de
ambas estrategias al seleccionarlas.
El esquema de copia de seguridad ms simple consiste en tomar un respaldo completo
una vez, y luego realizar respaldos incrementales de todo lo que cambia posteriormente.
Aunque los respaldos pueden tomar mucho tiempo, restaurar la informacin desde un
respaldo incremental puede ser ms difcil y de todas formas consume tiempo. Por lo
tanto, es posible aplicar una mezcla de ambos para optimizar el tiempo y esfuerzo.

LFS201: Fundamentos de Administracin de Sistemas Linux

449

Un ejemplo de una estrategia til que implica cintas (usted puede sustituir fcilmente por
otro medio en la descripcin):
1. Use la cinta 1 para tomar un respaldo completo el viernes.
2. Use las cintas 2-5 para copias de seguridad incrementales de lunes a jueves.
3. Use la cinta 6 para un respaldo completo el segundo viernes.
4. Use las cintas 2-5 para copias de seguridad incrementales de lunes a jueves
(segunda vez).
5. No sobrescriba la cinta 1 hasta que complete el respaldo completo en la cinta 6.
6. Luego de tener un respaldo completo en la cinta 6, mueva la cinta 1 a un lugar
externo para restauracin en caso de desastre.
7. En el siguiente respaldo completo (prximo viernes) traiga la cinta 1 y reemplcela
por la 6.
Una buena regla de oro es disponer de al menos dos semanas en copias de seguridad.

37.6 Herramientas de respaldo


Son varios los programas que se usan con propsitos de realizar copias de seguridad:

cpio

tar

gzip, bzip2, xz
cpio y tar crean y extraen archivos que contienen archivos. Los archivos a
menudo estn comprimidos congzip, bzip2, o xz. El archivo contenedor puede
escribirse a disco, cinta magntica o cualquier otro dispositivo que pueda
almacenar archivos. Los archivos de este tipo son muy tiles para transferir
archivos desde un sistema de archivos a otro o entre mquinas.

dd
Esta es una herramienta poderosa que se usa a menudo para transferir datos en
bruto entre medios. Es capaz de copiar particiones o discos completos.

rsync
Esta herramienta potente puede sincronizar rboles de subdirectorios o sistemas
de archivos completos a travs de una red, o entre diferentes lugares del sistema
de archivos en una mquina local.

dump y restore
Estas herramientas son antiguas y fueron diseadas especficamente para realizar
copias de seguridad. Leen directamente desde el sistema de archivos, lo cual es
ms eficiente. Sin embargo, los archivos deben ser restaurados en el mismo tipo
de sistema de archivos del cual provienen. Hay alternativas ms nuevas.

mt
Es til para consultar y posicionar cintas antes de realizar copias de seguridad y
restaurarlas.
LFS201: Fundamentos de Administracin de Sistemas Linux

450

37.7 cpio
cpio (copy in and out) es una herramienta general de compresin de archivos que ha
existido desde los primeros das de UNIX y fue diseada originalmente para realizar
copias de seguridad de cintas. Pese a que se han desarrollado otros programas ms
nuevos de este tipo (como tar, el cual no es exactamente nuevo) para realizar muchas de
las tareas que estaban en el dominio de cpio, este sobrevive todava.
Por ejemplo, ya hemos visto el uso de rpm2cpio para convertir paquetes RPM en
archivos cpio y luego extraerlos. Tambin el kernel Linux usa una versin
de cpio internamente
para
tratar
con
sistemas
de
archivos
de
ram
inicialinitramfs e initrd, como tambin con discos durante el arranque. Una de las
razones por las cuales cpio vive todava es que es ms liviano que tar y sus sucesores,
aunque es un poco menos robusto.
Ejemplos del uso de cpio:

Crear un archivo: use -o o --create:


$ ls | cpio --create -O /dev/st0

Extraer un archivo: use -i o --extract:


$ cpio -i somefile -I /dev/st0

Listar el contenido de un archivo: use -t o --list:


$ cpio -t -I /dev/st0

Usted puede especificar la entrada (-I dispositivo) o salida (-O dispositivo), o usar una
redireccin en la lnea de comandos.
La opcin -o o --create instruye a cpio a copiar archivos hacia el archivo
comprimido. cpio lee una lista de nombres de archivos (uno por lnea) desde la entrada
estndar y escribe el archivo a la salida estndar.
La opcin -i o --extract instruye a cpio a copiar archivos desde un archivo comprimido,
leyendo el archivo desde la entrada estndar. Si usted lista nombres de archivos como
patrones (tales como *.c) en la lnea de comandos, solo los archivos en el archivo
comprimido que coinciden con el patrn van a ser copiados desde el archivo comprimido.
Si no se proveen patrones, se extraen todos los archivos.
La opcin -t o --list instruye a cpio a listar el contenido del archivo. Si se agrega la
opcin -v o --verbose se genera un listado largo.

LFS201: Fundamentos de Administracin de Sistemas Linux

451

37.8 Uso de tar para respaldos


tar es ms fcil de usar que cpio:
Al crear un archivo tar se especifica uno o ms directorios como argumentos,
cuyos archivos y subdirectorios se incluirn en el archivo.
Al restaurarlo, este reconstruye los directorios segn sea necesario.
Incluso tiene una opcin --newer que permite realizar respaldos incrementales.
La versin de tar que se usa en Linux tambin puede manipular respaldos que no
caben en una cinta o cualquier dispositivo que utilice.
A continuacin hay un ejemplo de cmo usar tar para respaldos:

Crear un archivo usando -c o --create:


$ tar --create --file /dev/st0 /root
$ tar -cvf /dev/st0 /root

Puede especificar un dispositivo o archivo con las opciones -f o --file.

Crear con la opcin de mltiples volmenes usando -M o --multi-volume si su


copia de seguridad no cabe en un solo dispositivo:
$ tar -cMf /dev/st0 /root

Se le pedir que ponga la cinta siguiente cuando sea necesario.

Verifique los archivos con la opcin comparar, usando -d o --compare:


$ tar --compare --verbose --file /dev/st0
$ tar -dvf /dev/st0

Despus de hacer una copia de seguridad, asegrese de que est completa y es


la correcta, usando la opcin de verificacin anterior.
Por defecto tar incluir recursivamente todos los subdirectorios en el archivo.
Cuando se crea un archivo, tar imprime un mensaje acerca de la eliminacin de los
slashes de la ruta absoluta del nombre. Si bien es cierto que esto permite restaurar los
archivos en cualquier lugar, el comportamiento por defecto puede ser cambiado.
La mayora de las opciones de tar pueden especificarse en la forma corta con un guin, o
de forma larga con dos: -ces completamente equivalente a --create.
Note que tambin puede combinar opciones (al usar la notacin corta), de tal forma que
no
es necesario tipear cada guin.
Adems, las opciones cortas de tar pueden usarse con o sin guiones; es decir, tar cvf
file.tar dir1 tiene el mismo resultado que tar -cvf file.tar dir1.

LFS201: Fundamentos de Administracin de Sistemas Linux

452

37.9 Uso de tar para restaurar archivos


La opcin -x o --extract extrae archivos desde un archivo comprimido, todos por
defecto. Es posible limitar la lista de extraccin al especificar los archivos en particular. Si
se especifica un directorio, todos los archivos y subdirectorios incluidos tambin sern
extrados.
La opcin -p o --same-permissions se asegura de que los archivos son restaurados con
los
permisos
originales.
La opcin -t o --list lista los archivos incluidos en el archivo comprimido, pero no los
extrae.
Ejemplos:

Extrae un archivo:
$tar --extract --same-permissions --verbose --file /dev/st0
$tar -xpvf /dev/st0
$tar xpvf /dev/st0

Especificar algunos archivos para restaurar:


$tar xvf /dev/st0 somefile

Listar el contenido de un respaldo tar:


$tar --list --file /dev/st0
$tar -tf /dev/st0

37.10 Respaldos incrementales con tar


Usted puede hacer respaldos incrementales con tar usando la opcin -N (o el
equivalente --newer) o --after-date. Cualquiera de estas opciones requiere que se
especifique ya sea una fecha o un nombre de archivo de referencia:
$ tar --create --newer '2011-12-1' -vf backup1.tar /var/tmp
$ tar --create --after-date '2011-12-1' -vzf backup1.tar /var/tmp

Cualquiera de estas formas crea una copia de seguridad en /var/tmp de todos los
archivos que fueron creados despus del 1ero de diciembre de 2011.
Debido a que tar solo revisa la fecha de un archivo, no considera otros cambios al
archivo, tales como permisos o nombre de archivo. Para incluir archivos con este tipo de
cambios en el respaldo incremental, use find y cree una lista de archivos a ser tomados
en cuenta.

LFS201: Fundamentos de Administracin de Sistemas Linux

453

Nota: cuando se usa algn parmetro como --newer, usted debe usar el guin en los
parmetros como -vzf, de lo contrario tar se confundir. Esta confusin relacionada al
tipo de la especificacin del parmetro ocurre con herramientas antiguas de UNIX, tales
como ps y tar, las cuales tienen historias complicadas que involucran diferentes familias
de UNIX.

37.11 Compresin: gzip, bzip2, xz y respaldos


A menudo se desea comprimir archivos para ahorrar espacio en disco y/o tiempo de
transmisin por la red, especialmente porque las mquinas modernas encontrarn que el
ciclo comprimir>transmitir>descomprimir ms rpido que simplemente transmitir (o copiar)
un archivo sin comprimir.
Hay una serie de esquemas de compresin comunes en Linux. Para incrementar la
eficiente de la compresin (lo cual implica tiempos de compresin mayores):

gzip: Usa un algoritmo Lempel-Ziv (LZ77) y genera archivos .gz.


bzip2: Usa algoritmos de compresin de Burrows-Wheeler y de codificacin de
Huffman. Genera archivos .bz2.
xz: Genera archivos .xz y tambin soporta formato .lzma.

Los tiempos de descomprensin no varan tanto como los de compresin. Usualmente se


usa gzip para el uso diario en archivos ms pequeos, ya que es extremadamente rpido.
Pero para archivos grandes y para propsitos de almacenamiento de un registro de
archivos se usan a menudo los otros dos. Por ejemplo, html://www.kernel.org ya no ofrece
kernels Linux en formato gzip.
El formato .zip se usa raramente en Linux excepto para extraer archivos antiguos desde
otros sistemas operativos.
Las herramientas de compresin se usan fcilmente y a menudo en combinacin con tar:
$ tar zcvf source.tar.gz source
$ tar jcvf source.tar.bz2 source
$ tar Jcvf source.tar.xz source

para generar un archivo comprimido. Note que el primer comando tiene exactamente el
mismo efecto que si uno hace:
$ tar cvf source.tar source ; gzip -v source.tar

pero es ms eficiente debido a que:


1. No hay un almacenamiento intermedio del archivo.
2. El archivado y compresin suceden simultneamente en la tubera (pipeline).

LFS201: Fundamentos de Administracin de Sistemas Linux

454

Para descomprimir:
$ tar xzvf source.tar.gz
$ tar xjvf source.tar.bz2
$ tar xJvf source.tar.xz

o an ms simple:
$ tar xvf source.tar.gz

las versiones modernas de tar pueden detectar el mtodo de compresin y hacerse cargo
automticamente.
Obviamente no vale la pena usar estos mtodos en archivos cuyos archivos ya estn
comprimidos, tales como imgenes .jpg, archivos .pdf, etc.

37.12 dd
dd es una de las herramientas originales de UNIX y es extremadamente verstil. Si se
ejecuta sin parmetros realiza una copia de datos en bruto de archivos o incluso de discos
completos. Es capaz de realizar todo tipo de conversiones de datos durante la copia (tales
como cambiar el orden de los bytes) y tiene opciones para controlar offsets, nmero de
bytes, tamao de bloque, etc.
dd se usa a menudo para leer cantidades fijas de datos desde nodos de dispositivos
especiales tales como /dev/zero o/dev/random. La sintaxis bsica es la siguiente:
$ dd if=input-file of=output-file options

si no se especifican los archivos


defecto stdin y stdout. Si se hace:

de

entrada

salida,

se

utiliza

por

$ dd --help

mostrar una lista de opciones muy larga, algunas usadas frecuentemente y otras en muy
raras ocasiones.

37.13 Ejemplos de dd
Aqu hay algunos ejemplos del uso de dd:

Crear un archivo de 10 MB lleno con ceros:


$ dd if=/dev/zero of=outfile

bs=1M count=10

Hacer una copia de seguridad de un disco duro completo a otro (datos en bruto):
$ dd if=/dev/sda of=/dev/sdb

LFS201: Fundamentos de Administracin de Sistemas Linux

455

Crear una imagen de un disco duro (la cual podra transferirse a otro disco ms
tarde):
$ dd if=/dev/sda of=sdadisk.img

Respaldar una particin:


$ dd if=/dev/sda1 of=partition1.img

Usar dd en una tubera:


$ dd if=ndata conv=swab count=1024 | uniq > ofile

37.14 rsync
rsync (sincronizacin remota) se usa para transferir archivos a travs de una red (o entre
diferentes lugares en la misma mquina), con la siguiente sintaxis:
$ rsync [options] source destination

La fuente y el destino toman la siguiente forma: target:path, donde target puede estar
en el formato [user@]host. La parte user@ es opcional y se usa si el usuario remoto es
diferente al local. Por lo tanto, estos son todos los comandos rsync posibles:
$ rsync file.tar someone@backup.mydomain:/usr/local
$ rsync -r a-machine:/usr/local b-machine:/usr/
$ rsync -r --dry-run /usr/local /BACKUP/usr

Tiene que ser muy cuidadoso con rsync en relacin a las localizaciones especficas
(especialmente si usa la opcin --delete), por lo que es altamente recomendado usar la
opcin dry-run primero y luego llevar a cabo la accin si la proyeccin luce correcta.
rsync es muy inteligente; verifica los archivos locales contra los remotos en trozos
pequeos. Es muy eficiente cuando copia a un directorio destino similar, ya que solo se
copian las diferencias a travs de la red. Esto sincroniza el segundo directorio con el
primero. A menudo se usa la opcin -r, la cual causa que rsync copie todo el contenido
del directorio recursivamente, por debajo de lo que figura como sourcefile. Por lo tanto
una forma muy til de respaldar un directorio de un proyecto en curso sera similar a:
$ rsync -r project-X archive-machine:archives/project-X

Una estrategia de respaldo simple (tambin muy efectiva y rpida) consiste en duplicar
directorios o particiones a travs de la red, con comandos rsync y hacerlo de forma
frecuente.

LFS201: Fundamentos de Administracin de Sistemas Linux

456

37.15 dump y restore


Las herramientas dump y restore han existido desde los primeros das de UNIX y no
fueron diseadas originalmente para hardware, sistemas de archivos y almacenamiento
modernos.
A diferencia de cpio y tar, estas herramientas leen y escriben directamente en el sistema
de archivos, lo cual es ms eficiente y permite que se creen archivos de respaldo sin
afectar sus marcas de tiempo.
Las ventajas incluyen:

Pueden realizar respaldos completos o incrementales.


Entienden el formato especfico del sistema, cmo leer y escribir en l.
Son eficientes al crear respaldos completos, reduce el movimiento del cabezal.
Puede especificar el tamao de salida de la cinta y la densidad, tamao del bloque
y la cuenta, o incluso ambos.
Puede exportar a cualquier dispositivo o archivo vlido. Por defecto lo hace
a /dev/tape.
Los parmetros en /etc/fstab controlan qu se respalda con dump y cundo.

Las desventajas incluyen:

Se requieren mltiples pasadas por el sistema de archivos para realizar un


respaldo.
Solo funciona para sistemas de archivos ext2, ext3 y ext4 (otros sistemas de
archivos pueden tener sus propias herramientas, tales como xfsdump).
No se puede ejecutar de forma segura en sistemas de archivos montados.

La falta de flexibilidad en el sistema de archivos es una limitacin bastante fuerte, tanto


por la multiplicidad de tipos de sistemas de archivos en Linux, como tambin debido a la
tendencia moderna de abstraerse a los detalles, por ejemplo cmo se almacenan los
datos.
dump y restore a veces son usados por programas de respaldo de ms alto nivel,
como Amanda. Cierta familiaridad con estas herramientas antiguas es til.

37.16 Opciones de dump


dump tiene una serie de opciones, las que incluyen configurar parmetros. Algunas de
estas son:

-0-9

Nivel de dump: Nivel 0 es un respaldo completo y los nmeros mayores son


incrementales.

-B records

Registros por volumen.

LFS201: Fundamentos de Administracin de Sistemas Linux

457

-b blocksize

KB por registro.

-f file

Dispositivo o archivo de salida.

-u

Actualiza /etc/dumpdates.

-W

Imprime la fecha ms recientes de dump de cada sistema de archivos


en /etc/dumpdates.
Los valores de los parmetros no necesitan ser suministrados despus de la opcin, pero
deben incluirse en el mismo orden en que las opciones los especifican.

37.17 Respaldo de Nivel 0 con dump


Aqu hay un ejemplo muy simple de un dump completo de nivel 0 de una
particin /dev/sda2 montada en/boot_master:
$ sudo dump -0uf /tmp/boot_backup /boot_master
DUMP: Date of this level 0 dump: Mon Nov 3 12:54:40 2014
DUMP: Dumping /dev/sda2 (/boot_master) to /tmp/boot_backup
DUMP: Label: boot
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 985 blocks.
DUMP: Volume 1 started with block 1 at: Mon Nov 3 12:54:40
2014
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /tmp/boot_backup
DUMP: Volume 1 completed at: Mon Nov 3 12:54:40 2014
DUMP: Volume 1 1030 blocks (1.01MB)
DUMP: 1030 blocks (1.01MB) on 1 volume(s)
DUMP: finished in less than a second
DUMP: Date of this level 0 dump: Mon Nov 3 12:54:40 2014
DUMP: Date this dump completed: Mon Nov 3 12:54:40 2014
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE
$ cat /etc/dumpdates
/dev/sda2 0 Mon Nov 3 12:54:40 2014 -0600

LFS201: Fundamentos de Administracin de Sistemas Linux

458

37.18 restore
restore se usa para leer archivos comprimidos, cintas o archivos que fueron creados
con dump. Por ejemplo, para restaurar todos los archivos que fueron objeto de dump, en
relacin al directorio actual:
$ sudo restore -rvf /tmp/boot_backup

Parmetros tiles de restore:

-r

Restaura todo. Se lee el material creado con dump y el contenido completo se


carga en el directorio actual.

-t

Los archivos y directorios especificados son listados en la salida estndar si estn


en el respaldo. Si no se especifica un archivo como parmetro, se lista el directorio
raz en la copia de seguridad. Esta opcin en realidad no restaura archivos.

-x

Los archivos y directorios nombrados se extraen desde la copia de seguridad. Si el


archivo mencionado coincide con un directorio en el respaldo, el directorio se
extrae recursivamente. Si no se proveen argumentos, entonces se extrae todo el
contenido desde el respaldo.

-i

Este modo permite la restauracin interactiva de archivos desde la copia de


seguridad. Despus de leer la informacin del directorio en el respaldo, restore
provee una interfaz tipo shell que le permite al usuario moverse a travs del rbol
de directorios y seleccionar los archivos a extraer.
No se puede usar -r y -x al mismo tiempo.

37.19 mt
La herramienta mt se usa para controlar dispositivos de cintas magnticas. Se usa con
mayor frecuencia para consultar o posicionar la cinta antes o despus de realizar copias
de seguridad y restaurar datos. Por defecto, mt usa la unidad de cinta definida en la
variable de ambiente TAPE. Tambin es posible usar el parmetro -f device para
especificar la cinta.
Tenga en cuenta que solo el usuario root puede usar mt. La sintaxis es la siguiente:
mt [-h] [-f device] operation [count] [arguments...]

LFS201: Fundamentos de Administracin de Sistemas Linux

459

donde

-h: despliega la ayuda


-f device: especifica la unidad de cinta
operation: es una de las operaciones sobre la cinta
count: se usa para algunas operaciones que se pueden repetir (el valor

predeterminado es 1)
arguments: se usan en algunas operaciones

Abajo hay unos pocos ejemplos del uso de mt:

Muestra informacin del estado del dispositivo de cinta:


$ mt status

Rebobinar la cinta:
$ mt rewind

Borrar la cinta:
$ mt erase

Moverse hasta el final del archivo actual:


$ mt fsf

37.20 Software de respaldo


No hay escasez de programas de respaldo disponibles en Linux, incluyendo aplicaciones
propietarias o aquellas suministradas por vendedores de almacenamiento, como tambin
aplicaciones de cdigo abierto. Algunas de las que son particularmente bien conocidas
son:
1. Amanda (Advanced Maryland Automatic Network Disk Archiver) usa herramientas
nativas (incluyendo tar y dump) pero es mucho ms robusta y manejable.
Amanda est disponible generalmente en sistemas Linux Empresariales a travs
de los repositorios habituales. Se puede encontrar informacin completa al
respecto en http://www.amanda.org.
2. Bacula est diseado para realizar copias de seguridad automticas en redes
heterogneas. Puede ser ms complicado de usar y se recomienda (por los
mismos autores) para administradores experimentados solamente.
Bacula est disponible generalmente en sistemas Linux Empresariales a travs
de los repositorios habituales. Se puede encontrar informacin completa al
respecto en http://www.bacula.org/7.0.x-manuals/en/main/Main_Reference.html.

LFS201: Fundamentos de Administracin de Sistemas Linux

460

3. Clonezilla es un programa de clonacin de discos muy robusto, el cual puede


crear imgenes de discos y desplegarlas, ya sea para restaurar una copia de
seguridad o para proveer una imagen que pueda usarse para instalar muchas
mquinas. Se puede encontrar informacin completa en http://clonezilla.org.
El programa viene en dos versiones: Clonezilla live, la cual es apropiada para realizar
respaldos y restauraciones a una mquina. La otra es Clonezilla SE (server edition), la
cual puede clonar muchos computadores a la vez.
Clonezilla no es muy difcil de usar y es extremadamente flexible; soporta muchos
sistemas operativos (no soloLinux), tipos de sistemas de archivos y cargadores de
arranque.

Comprobacin de conocimientos 36.1 37.1

LFS201: Fundamentos de Administracin de Sistemas Linux

461

Comprobacin de conocimientos 36.1 37.2

Comprobacin de conocimientos 36.1 37.3

LFS201: Fundamentos de Administracin de Sistemas Linux

462

37.21 Laboratorio 37.1


Laboratorio 37.1: Usando tar en copias de seguridad
1. Cree un directorio llamado backup y ponga aqu un archivo tar comprimido de todos los
archivos bajo /usr/include, en donde el nivel de directorio ms alto sea include. Puede usar
cualquier mtodo de compresin, ya sea gzip, bzip2 o xzip.
2. Liste los archivos del archivo comprimido.
3. Cree un directorio llamado restore, desempaque y descomprima el archivo aqu.
4. Compare el contenido con el directorio original desde el cual el archivo tar fue creado.

LFS201: Fundamentos de Administracin de Sistemas Linux

463

Solucin 37.1
1. $ cd backup
$ cd /usr ; tar zcvf include.tar.gz include
o
$ tar -C /usr -zcf include.tar.gz include
$ tar -C /usr -jcf include.tar.bz2 include
$ tar -C /usr -Jcf include.tar.xz include
Note la eficacia de la compresin de cada uno de los tres mtodos:
$ du -sh /usr/include
55M /usr/include
2. $ ls -lh include.tar.*
-rw-rw-r-- 1 coop coop 5.3M Nov 3 14:44 include.tar.bz2
-rw-rw-r-- 1 coop coop 6.8M Nov 3 14:44 include.tar.gz
-rw-rw-r-- 1 coop coop 4.7M Nov 3 14:46 include.tar.xz
3. $ tar tvf include.tar.xz
qdrwxr-xr-x root/root 0 2014-10-29 07:04 include/
-rw-r--r-- root/root 42780 2014-08-26 12:24 include/unistd.h
-rw-r--r-- root/root 957 2014-08-26 12:24 include/re_comp.h
-rw-r--r-- root/root 22096 2014-08-26 12:24 include/regex.h
-rw-r--r-- root/root 7154 2014-08-26 12:25 include/link.h
.....
Note que no es necesario proveer la opcin j, J o z al descomprimir, ya que tar es lo
suficientemente inteligente para determinar lo que se necesita hacer.
4. $ cd .. ; mkdir restore ; cd restore
$ tar xvf ../backup/include.tar.bz2
include/
include/unistd.h include/re_comp.h include/regex.h
include/link
.....
$ diff -qr include /usr/include

LFS201: Fundamentos de Administracin de Sistemas Linux

464

37.21 Laboratorio 37.2


Laboratorio 37.2: Usando cpio en copias de seguridad
Vamos a realizar el mismo ejercicio ahora, pero usando cpio en vez de tar. Vamos a repetir las
instrucciones con leves modificaciones para facilitar el uso.
1. Cree un directorio llamado backup y ponga aqu un archivo cpio comprimido de todos los
archivos bajo /usr/include, en donde el nivel de directorio ms alto sea include. Puede usar
cualquier mtodo de compresin, ya sea gzip, bzip2 o xzip. 2.
2. Liste los archivos del archivo comprimido.
3. Cree un directorio llamado restore, desempaque y descomprima el archivo aqu.
4. Compare el contenido con el directorio original desde el cual el archivo tar fue creado.

LFS201: Fundamentos de Administracin de Sistemas Linux

465

Solucin 37.2
1. $ (cd /usr ; find include | cpio -c -o > /home/student/backup/include.cpio)
82318 blocks
o para ponerlo de forma comprimida:
$ (cd /usr ; find include | cpio -c -o | gzip -c > /home/student/backup/include.cpio.gz)
82318 blocks
$ ls -lh include*
total 64M
-rw-rw-r-- 1 coop coop 41M Nov 3 15:26 include.cpio
-rw-rw-r-- 1 coop coop 6.7M Nov 3 15:28 include.cpio.gz
-rw-rw-r-- 1 coop coop 5.3M Nov 3 14:44 include.tar.bz2
-rw-rw-r-- 1 coop coop 6.8M Nov 3 14:44 include.tar.gz
-rw-rw-r-- 1 coop coop 4.7M Nov 3 14:46 include.tar.xz
2. $ cpio -ivt < include.cpio
drwxr-xr-x 86 root root 0 Oct 29 07:04 include
-rw-r--r-- 1 root root 42780 Aug 26 12:24 include/unistd.h
-rw-r--r-- 1 root root 957 Aug 26 12:24 include/re_comp.h
-rw-r--r-- 1 root root 22096 Aug 26 12:24 include/regex.h
..
Note la redireccin de la entrada; el archivo no es un argumento. Tambin se podra hacer:
$ cd ../restore
$ cat ../backup/include.cpio | cpio -ivt
$ gunzip -c include.cpio.gz | cpio -ivt
3. $ rm -rf include
$ cpio -id < ../backup/include.cpio
$ ls -lR include
or
$ cpio -idv < ../backup/include.cpio
$ diff -qr include /usr/include

LFS201: Fundamentos de Administracin de Sistemas Linux

466

37.21 Laboratorio 37.3


Laboratorio 37.3: Usando rsync en copias de seguridad
Usando rsync vamos a crear de nuevo una copia completa de /usr/include en su directorio de
respaldo:
1. $ rm -rf include
$ rsync -av /usr/include .
sending incremental file list
include/
include/FlexLexer.h
include/_G_config.h
include/a.out.h
include/aio.h
.....
2. Ejecutemos el comando una segunda vez y veamos si hace algo:
$ rsync -av /usr/include .
sending incremental file list
sent 127398 bytes received 188 bytes 255172.00 bytes/sec
total size is 41239979 speedup is 323.23
3. Un asunto confuso de rsync es que usted podra haber esperado que el comando correcto
fuera:
$ rsync -av /usr/include include
sending incremental file list
...
Sin embargo, si hace esto se dar cuenta que en realidad se crea un nuevo directorio,
include/include.
4. Para evitar los archivos adicionales puede usar la opcin --delete:
$ rsync -av --delete /usr/include .
sending incremental file list
include/
deleting include/include/xen/privcmd.h
deleting include/include/xen/evtchn.h
....
deleting include/include/FlexLexer.h
deleting include/include/
sent 127401 bytes received 191 bytes 85061.33 bytes/sec
total size is 41239979 speedup is 323.22
LFS201: Fundamentos de Administracin de Sistemas Linux

467

5. Para hacer otro ejercicio simple, remueva un rbol de subdirectorio en su copia de seguridad y
luego ejecute rsync de nuevo con y sin la opcin --dry-run:
$ rm -rf include/xen
$ rsync -av --delete --dry-run /usr/include .
sending incremental file list
include/
include/xen/ include/xen/evtchn.h
include/xen/privcmd.h
sent 127412 bytes received 202 bytes 255228.00 bytes/sec
total size is 41239979 speedup is 323.16 (DRY RUN)
$ rsync -av --delete /usr/include .
6. Un script simple con un buen conjunto de parmetros para usar rsync:
#!/bin/sh
set x
rsync --progress -avrxH -e "ssh -c blowfish" --delete $*
el cual funcionar en una mquina local como tambin en red. Tenga en cuenta la importancia
de la opcin -x, la cual impide que rsync cruce los lmites del sistema de archivos.
Para mayor diversin, si tiene acceso a ms de un computador, intente realizar estos pasos con
una fuente y destino en distintas mquinas.

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Identificar y priorizar la informacin de la que es necesario tomar una copia de


seguridad.
Emplear diferentes mtodos de copia de seguridad, dependiendo de la situacin.
Establecer estrategias eficientes de copia de seguridad y recuperacin.
Usar diferentes herramientas para sacar copias de seguridad, tales
como cpio, tar, gzip, bzip2, xz, dd, rsync, dump, restore y mt.
Describir
los
dos
programas
de
copia
de
seguridad
ms
conocidos,Amanda y Bacula.

LFS201: Fundamentos de Administracin de Sistemas Linux

468

Captulo 38. Direcciones de red


Las mquinas en red necesitan poder localizarse entre ellas basndose en su direccin
nica de red. Las direcciones y redes IPv4 todava son las ms comnmente usadas pero
tienen una capacidad de expansin limitada. Las direcciones IPv6, las que an no son tan
ampliamente usadas, superan esa limitante. Las direcciones tienen diferentes clases de
acuerdo al tamao de las redes locales y es importante ser capaz de reconocer la clase
basndose en la direccin.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar el propsito de las direcciones de red.


Diferenciar entre los distintos tipos de direcciones IPv4 e IPv6.
Explicar qu clases de direcciones existen e identificarlas.
Obtener, configurar y cambiar el hostname.

LFS201: Fundamentos de Administracin de Sistemas Linux

469

38.1 Direcciones IP
Las direcciones IP se usan para identificar globalmente y de forma nica a los nodos en
la red. Estn registradas a travs de los ISPs (Internet Service Providers).
La direccin IP es el nmero que identifica su sistema en la red. Est presente en dos
tipos:

IPv4: Una direccin de 32 bits, compuesta de 4 octetos (un octeto son 8 bits, o
un byte). Ejemplo:
148.114.252.10

IPv6: Una direccin de 128 bits, compuesta de 16 octetos. Ejemplo:


2003:0db5:6123:0000:1f4f:0000:5529:fe23

En ambos casos se considera un conjunto de direcciones reservadas. A menos que se


indique lo contrario, nos enfocaremos en IPv4 solamente.

38.2 Tipos de direcciones IPv4


Los tipos de direcciones IPv4 incluyen:

Unicast:
Una direccin

asociada

un host especfico.

Puede

ser

algo

como

140.211.169.4 o 64.254.248.193.

Red:
Una direccin cuya posicin del host est en cero (todos los dgitos binarios en 0).
Ejemplo: 192.168.1.0 (la posicin del host puede estar en los ltimos 1 a 3
octetos como veremos ms adelante. Aqu solo nos referimos al ltimo octeto).

Broadcast:
Una direccin en la cual cada miembro de una red en particular escuchar. Tendr
la seccin del host en 1, tal como en 172.16.255.255, 148.114.255.255
o 192.168.1.255 (la posicin del host son los dos ltimos octetos en los primeros
dos casos, y en el tercer caso es el ltimo octeto).

Multicast:
Una direccin en la que los nodos configurados apropiadamente escucharn. La
direccin 224.0.0.2 es un ejemplo de direccin multicast. Solo los nodos
especficamente configurados para prestar atencin a una direccin multicast
interpretarn los paquetes para ese grupo multicast.

LFS201: Fundamentos de Administracin de Sistemas Linux

470

38.3 Direcciones especiales

Ciertas direcciones y rangos de direcciones estn reservadas para propsitos especiales:

127.x.x.x

Reservada para la interfaz loopback (sistema local), donde 0


Generalmente es 127.0.0.1.

<=

<=

254.

0.0.0.0

Usada por sistemas que an no conocen su propia direccin. Protocolos


como DHCP y BOOTP usan esta direccin cuando intentan comunicarse con un
servidor.

255.255.255.255

Direccin privada genrica de broadcast, reservada para uso interno. Estas


direcciones nunca se asignan o registran. Generalmente no son enrutables.

Otros ejemplos de rangos de direcciones reservadas incluyen:


10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
etc.

Cada uno de estos rangos tiene un propsito. Por ejemplo, el rango de direcciones
conocidas 192.168.x.x solo se usa para comunicaciones locales dentro de una
red privada.
Puede ver una lista larga de direcciones reservadas tanto para IPv4 como IPv6 en
http://en.wikipedia.org/wiki/Reserved_ IP_addresses.

LFS201: Fundamentos de Administracin de Sistemas Linux

471

38.4 Tipos de direcciones IPv6


Los tipos de direcciones IPv6 incluyen:

Unicast:
Un paquete se entrega a una interfaz solamente.
- Enlace local: Autoconfigurado para que toda interfaz tenga uno. No enrutable.
- Global: Asignado dinmica o manualmente. Enrutable.
- Reservado para documentacin.

Multicast:
Un paquete se entrega a mltiples interfaces.

Anycast:
Un paquete se entrega a la interfaz ms cercana de un conjunto (en trminos de
distancia de enrutamiento).

IPv4-mapped:
Una direccin IPv4 mapeada a IPv6. Por ejemplo ::FFFF:a.b.c.d/96

Adicionalmente, IPv6 tiene algunos tipos especiales de direcciones, tales como loopback,
la cual se asigna a la interfazlo, como ::1/128.

38.5 Clases de direcciones IPv4


Histricamente, las direcciones IP se han basado en clases definidas. Las clases A, B y C
se usan para distinguir la parte de la red de la direccin en relacin a la del host. Esto se
utiliza con propsitos de enrutamiento.
Tabla 38.1: Clases de direcciones
Clase de
Red

Rango de octeto de
orden ms alto

Notas

1-127

128 redes, 16,772,214 hosts por red, 127.x.x.x reservado


para loopback

128-191

16,384 redes, 65,534 hosts por red

192-223

2,097,152 redes, 254 hosts por red

224-239

Direcciones multicast

240-254

Rango de direcciones reservadas

LFS201: Fundamentos de Administracin de Sistemas Linux

472

38.6 Mscara de red


La mscara de red (netmask) se usa para determinar qu porcin de la direccin se usa
para la red y cunto para la parte del host. Tambin se usa para determinar las
direcciones de la red y de broadcast.
Tabla 38.2: Clases de direcciones y mscaras de red
Clase de
Red

Decimal

Hexadecimal

255.0.0.0

ff:00:00:00

255.255.0.0

ff:ff:00:00

255.255.255.0

ff:ff:ff:00

Binario
11111111 00000000 00000000
00000000
11111111 11111111 00000000
00000000
11111111 11111111 11111111
00000000

Las direcciones de Clase A usan 8 bits para la porcin de red de la direccin y 24 bits para
la del host.
Las direcciones de Clase B usan 16 bits para la porcin de red de la direccin y 16 bits
para la del host.
Las direcciones de Clase C usan 24 bits para la porcin de red de la direccin y 8 bits
para la del host.
Las direcciones de Clase D se usan para multicast.
Las direcciones de Clase E no se usan actualmente.
La direccin de red se obtiene a travs de una operacin AND lgica entre la direccin IP
y la mscara de red. Nos interesan las direcciones de red porque definen una red local, la
cual consiste en un conjunto de nodos conectados a travs del mismo medio de
comunicacin, compartiendo la misma direccin de red. Los nodos en una misma red se
pueden ver entre s.
Ejemplo:
172.16.2.17 direccin ip
&255.255.0.0 mscara de red
----------------172.16.0.0 direccin de red

LFS201: Fundamentos de Administracin de Sistemas Linux

473

38.7 Hostname
El hostname es una etiqueta que se usa para identificar un dispositivo en la red, con el fin
de diferenciarlo de otros elementos. Histricamente tambin ha sido llamado nodename
(nombre de nodo).
Para efectos del DNS, a los hostnames se les agrega un punto y un nombre de dominio,
de tal forma que un hostname llamado antje podra tener un fully qualified domain
name (FQDN) como antje.linuxfoundation.org.
El hostname generalmente se configura durante la instalacin y puede modificarse en
cualquier momento posterior.

38.8 Obtener y configurar el hostname


En cualquier momento es posible obtener el hostname fcilmente, con el siguiente
comando:
$ hostname
wally

Para cambiar el hostname basta con pasar un parmetro:


$ sudo hostname lumpy
lumpy

Cambiar el nombre del hostname de esa manera no es persistente; al reiniciar el sistema,


se volver al valor que tena antes de la modificacin. Tenga en cuenta que en la mayora
de
las
distribuciones Linux el
valor
actual
se
almacena
en /etc/hostname (en openSUSE est en /etc/HOSTNAME).
Como es usual, para que los cambios sean persistentes es necesario cambiar un archivo
de configuracin en el rbol de directorios /etc. En sistemas basados en Red Hat esto se
ha hecho desde un comienzo en/etc/sysconfig/network, como se muestra aqu:
$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=gilbert
NTPSERVERARGS=iburst

En sistemas basados en Debian se puede editar (como root) el archivo /etc/hostname y


especificar un nombre nuevo. En algunos sistemas basados en SUSE esto se hace
en /etc/HOSTNAME.
Nota: RHEL 7 ya no tiene el archivo /etc/sysconfig/network. Junto con versiones
recientes de Ubuntu tal como14.04 LTS y sistemas basados en SUSE, esta usa la
herramienta hostnamectl, la cual proviene de la infraestructura systemd:

LFS201: Fundamentos de Administracin de Sistemas Linux

474

LFS201: Fundamentos de Administracin de Sistemas Linux

475

$ hostnamectl --help
hostnamectl [OPTIONS...] COMMAND ...
Query or change system hostname.
-h --help Show this help
--version Show package version
--transient Only set transient hostname
--static Only set static hostname
--pretty Only set pretty hostname
-P --privileged Acquire privileges before execution
--no-ask-password Do not prompt for password
-H --host=[USER@]HOST Operate on remote host
Commands:
status Show current hostname settings
set-hostname NAME Set system hostname
set-icon-name NAME Set icon name for host
set-chassis NAME Set chassis type for host

Cambiar el hostname es tan simple como hacer lo siguiente:


$ sudo hostnamectl set-hostname MYPC

La mayora de las distribuciones no usan el hostname para nada.

LFS201: Fundamentos de Administracin de Sistemas Linux

476

Comprobacin de conocimientos 38.1

Comprobacin de conocimientos 38.2

Comprobacin de conocimientos 38.3

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Diferenciar entre los distintos tipos de direcciones IPv4 e IPv6.

Obtener, configurar y cambiar el nombre del host, de acuerdo al sistema que est
utilizando.

LFS201: Fundamentos de Administracin de Sistemas Linux

477

Captulo 39. Configuracin de dispositivos de red


Los dispositivos de red tales como conexiones Ethernet e inalmbricas requieren una
configuracin cuidadosa, especialmente cuando hay mltiples dispositivos del mismo tipo.
El asunto de la consistencia y persistencia de los nombres de dispositivos puede tornarse
complicado en tales circunstancias. Recientemente, la adopcin de nuevos esquemas ha
vuelto ms predecible la asignacin de nombres.
Se usa un nmero importante de herramientas para activar los dispositivos, configurar sus
caractersticas, establecer rutas, etc. Y los administradores de sistemas deben convertirse
en expertos en su uso.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Ser capaz de identificar dispositivos de red y entender cmo el sistema operativo


les asigna nombres y vincula a tareas especficas.

Usar ifconfig para configurar, controlar y consultar parmetros de una interfaz red,
ya sea desde la lnea de comandos o desde scripts de configuracin del sistema.

Usar la herramienta ip para desplegar y controlar dispositivos, enrutamiento,


enrutamiento basado en polticas y tneles (tunnelling).

Saber cmo configurar rutas por defecto y rutas estticas.

Configurar la resolucin de nombres como tambin ejecutar herramientas de


diagnstico.

LFS201: Fundamentos de Administracin de Sistemas Linux

478

39.1 Dispositivos de red


A diferencia de los dispositivos de bloques y caracteres, los dispositivos de red no estn
asociados a archivos de dispositivos especiales, tambin conocidos como nodos de
dispositivo. En vez de tener entradas asociadas en el directorio /dev, son conocidos por
sus nombres.
Estos nombres consisten en un identificador de tipo seguido por un nmero, como los
siguientes:

eth0, eth1, eth2 etc. para dispositivos Ethernet.

wlan0, wlan1, wlan2 etc. para dispositivos inalmbricos.

br0, br1, br2 etc. para interfaces de puente de red (bridge).

vmnet0,

vmnet1, vmnet2, etc. para dispositivos virtuales de VMware para la


comunicacin con clientes virtuales.

A veces mltiples dispositivos virtuales pueden estar asociados con dispositivos fsicos
individuales; estos se nombran con dos puntos y nmeros, de tal forma que eth0:0 sera
el primer alias en el dispositivo eth0. Esto se hace para soportar mltiples direcciones IP
en una tarjeta de red.

39.2 Problemas con nombres de dispositivos de red


Las convenciones clsicas de dispositivos de nombres descritas anteriormente
presentaban algunos problemas, particularmente cuando varias interfaces del mismo tipo
estaban presentes. Por ejemplo, supongamos que el sistema tiene dos tarjetas de red;
una sera nombrada eth0 y la otra eth1. Sin embargo, qu dispositivo fsico debera
estar asociado a cada nombre?
El mtodo ms simple sera que el primer dispositivo encontrado fuera eth0, el
segundo eth1, etc. Desafortunadamente el sondeo de los dispositivos no es
determinstico en los sistemas modernos y los dispositivos pueden ser ubicados o
conectados en un orden impredecible. Por lo anterior, se podra terminar con la interfaz de
internet intercambiada con la local. Incluso si el hardware no cambia, el orden en el cual
las interfaces se detectan podra variar segn la versin del kernel y la configuracin.
Muchos administradores de sistemas han solucionado este problema de una manera
simple; a travs de la inclusin manual de asociaciones entre las direcciones de hardware
(MAC) y los nombres de dispositivos en los archivos de configuracin del sistema y scripts
de arranque. Si bien es cierto que este mtodo ha funcionado por aos, requiere de ajuste
manual y tiene otros problemas, como cuando las direcciones MAC no eran fijas; esto
puede pasar tanto en sistemas embebidos como sistemas virtualizados.

LFS201: Fundamentos de Administracin de Sistemas Linux

479

39.3 Nombres predecibles de las interfaces de red


El esquema Nombres Predecibles de las Interfaces de Red est fuertemente
relacionado con el uso de udev y la integracin con systemd. Actualmente hay 5 tipos de
nombres que los dispositivos pueden recibir:
1. Incorporando nmeros de ndices proporcionados por el Firmware o la BIOS para

2.

3.
4.
5.

dispositivos integrados:
Ejemplo: eno1
Incorporando nmeros de ndices de slots hotplug de PCI Express proporcionados
por el Firmware o la BIOS:
Ejemplo: ens1
Incorporando ubicacin fsica y/o geogrfica de la conexin de hardware:
Ejemplo: enp2s0
Incorporando la direccin MAC:
Ejemplo: enx7837d1ea46da
Usando el mtodo clsico:
Ejemplo: eth0

39.4 Ejemplos del esquema nuevo de nombres


Por ejemplo, en una mquina con dos interfaces de red PCI que habran
sido eth0 y eth1:
$ ifconfig | grep enp
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
flags=4099<UP,BROADCAST,MULTICAST> mtu 1500

mtu 1500 enp4s2:

Estos nombres estn correlacionados con las ubicaciones fsicas del hardware en el
sistema PCI:
02:00.0
Gigabit
04:02.0
Gigabit

Ethernet
Ethernet
Ethernet
Ethernet

controller: Marvell Technology Group Ltd. 88E8056 PCI-E


Controller (rev 12)
controller: Marvell Technology Group Ltd. 88E8001
Controller (rev 14)

El tro de nmeros al comienzo de cada lnea de la salida lspci es el bus, dispositivo (o


slot) y funcin del dispositivo, informacin con la cual se obtiene la ubicacin fsica.
De la misma forma, para un dispositivo que anteriormente se hubiese sido llamado wlan0:
$ ifconfig grep wl
wlp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
$ lspci | grep Centrino
03:00.0 Network controller: Intel Corporation Centrino Advanced-N 6205
[Taylor Peak] (rev 34)

Vemos el mismo patrn. Es fcil desactivar el nuevo esquema y volver a los nombres
clsicos. Vamos a dejar eso como un proyecto de investigacin. De aqu en adelante
vamos a usar los nombres clsicos en pro de la claridad y simplicidad.
LFS201: Fundamentos de Administracin de Sistemas Linux

480

39.5 Archivos de configuracin de una NIC


Una serie de archivos (dependientes de la distribucin de Linux) almacenan informacin
de la configuracin de las NIC persistentes.
En RHEL 6 tenemos:
$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=bethe
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="00:0C:29:26:3F:B3"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="5b52bee2-8fda-450d-729e-3996dd12ef7d"

En openSUSE 13.1 tenemos:


$ cat /etc/sysconfig/network/ifcfg-eno16777736
$ cat /etc/sysconfig/network/ifcfg-eno2ps1
nux-n292:/etc/sysconfig/network> sudo cat ifcfg-enp2s1
BOOTPROTO='dhcp'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME='82545EM Gigabit Ethernet Controller (Copper)'
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'

LFS201: Fundamentos de Administracin de Sistemas Linux

481

En Ubuntu 14.04 (representante de los sistemas basados en Debian):


$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.254
auto eth1
iface eth1 inet dhcp

Tenga en cuenta que puede desactivar directamente una interfaz as:


$ ifdown eth0

o activarla de la siguiente forma:


$ ifup eth0

Las interfaces de red tambin pueden configurarse al vuelo usando ya sea ifconfig o las
herramientas ip. Sin embargo estas configuraciones no son persistentes.

39.6 ifconfig
ifconfig es una herramienta de administracin de sistemas que se encuentra en sistemas
operativos tipo UNIX y que sirve para configurar, controlar y consultar los parmetros de
las interfaces de red ya sea desde la lnea de comandos o desde scripts de configuracin
del sistema. Tambin a menudo es invocado por los scripts de inicio de la red. Aqu hay
algunos ejemplos:

Mostrar informacin de todas las interfaces:


$ ifconfig

Mostrar informacin de eth0 solamente:


$ ifconfig eth0

Configurar la direccin IP en 192.168.1.50 en la interfaz eth0:


$ sudo ifconfig eth0 192.168.1.50

Configurar la mscara de red a 24 bits:


$ sudo ifconfig eth0 netmask 255.255.255.0

Activar la interfaz eth0:


$ sudo ifconfig eth0 up

Desactivar la interfaz eth0:


$ sudo ifconfig eth0 down

Configurar el MTU (Maximum Transfer Unit) en 1480 bytes en la interfaz eth0:


$ sudo ifconfig eth0 mtu 1480

LFS201: Fundamentos de Administracin de Sistemas Linux

482

39.7 La herramienta ip
ip es una herramienta de la lnea de comandos ms nueva (y lejos ms verstil) que la
conocida ifconfig. A nivel tcnico es ms eficiente porque usa sockets netlink en vez de
llamadas ioctl al sistema.
ip puede usarse para una amplia variedad de tareas. Puede ser usado para desplegar y
controlar dispositivos, enrutamiento, polticas de enrutamiento y tneles (tunneling).
La sintaxis bsica es:
ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename

en donde la segunda forma puede leer comandos desde un archivo especificado.


ip es una herramienta mltiple: el argumento OBJECT describe qu tipo de accin se va a
realizar. Los valores posibles deCOMMAND dependen de la eleccin del valor de OBJECT.
Valores principales de los argumentos de OBJECT:
Tabla 39.1: Valores principales de OBJECTs
OBJECT

Funcin

address

Direccin del dispositivo de protocolo IPv4 o IPv6

link

Dispositivos de red

maddress

Direccin Multicast

monitor

Monitorear mensajes netlink

route

Entrada de la tabla de enrutamiento

rule

Regla en la base de datos de polticas de enrutamiento

tunnel

Tnel sobre IP

LFS201: Fundamentos de Administracin de Sistemas Linux

483

39.8 Ejemplos del uso de ip


La herramienta ip puede usarse de varias formas, tales como:

Mostrar informacin de todas las interfaces:


$ ip link

Mostrar informacin de eth0 solamente:


$ ip -s link show eth0

Configurar la direccin IP de eth0:


$ sudo ip addr add 192.168.1.7 dev eth0

Desactivar la interfaz eth0:


$ sudo ip link set eth0 down

Configurar el MTU en 1480 bytes en la interfaz eth0:


$ sudo ip link set eth0 mtu 1480

Configurar la ruta de red:


$ sudo ip route add 172.16.1.0/24 via 192.168.1.5

39.9 Enrutamiento
Enrutamiento es el proceso de seleccionar vas en una red a travs de la cual enviar
trfico de red. La tabla de enrutamiento es una lista de rutas a otras redes manejadas
por el sistema. Define vas a todas las redes y hosts, enviando trfico a routers remotos.
Con el comando route es posible visualizar la tabla de enrutamiento actual:
$ /sbin/route
Kernel IP routing table
Destination
Gateway
default
192.168.1.1
172.16.132.0
0.0.0.0
192.168.1.0
0.0.0.0
192.168.113.0 0.0.0.0

Genmask
0.0.0.0
255.255.255.0
255.255.255.0
255.255.255.0

Flags
UG
U
U
U

Metric
1024
0
0
0

Ref Use Iface


0
0 enp2s0
0
0 vmnet1
0
0 enp2s0
0
0 vmnet8

o con ip:
$ ip route
default via 192.168.1.1 dev enp2s0 proto static metric 1024
172.16.132.0/24 dev vmnet1 proto kernel scope link src 172.16.132.1
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.100
192.168.113.0/24 dev vmnet8 proto kernel scope link src 192.168.113.1

LFS201: Fundamentos de Administracin de Sistemas Linux

484

39.10 Ruta por defecto


La ruta por defecto corresponde a la va por la cual se envan paquetes cuando no hay
otra coincidencia en la tabla de enrutamiento para alcanzar la ruta especificada.
Puede obtenerse dinmicamente usando DHCP. Sin embargo, tambin puede
configurarse manualmente (esttica). En sistemas basados en Red Hat es posible
configurar la ruta por defecto en el archivo /etc/sysconfig/network, en el siguiente
parmetro:
GATEWAY=x.x.x.x

o alternativamente en /etc/sysconfig/network-scripts/ifcfg-ethX, en el parmetro


del dispositivo especfico en el archivo de configuracin de la NIC individual. En
equivalente en sistemas basados en Debian es:
gateway=x.x.x.x

en /etc/network/interfaces.
En cualquier sistema es posible configurar el router por defecto con un comando como el
siguiente:
$ sudo route add default gw 192.168.1.10
$ route
Kernel IP routing table
Destination
Gateway
Genmask
default
192.168.1.10 0.0.0.0
default
192.168.1.1 0.0.0.0
172.16.132.0 0.0.0.0
255.255.255.0
192.168.1.0
0.0.0.0
255.255.255.0
192.168.113.0 0.0.0.0
255.255.255.0

enp2s0
Flags
UG
UG
U
U
U

Metric
0
1024
0
0
0

Ref Use Iface


0
0 enp2s0
0
0 enp2s0
0
0 vmnet1
0
0 enp2s0
0
0 vmnet8

Tenga en cuenta que esto podra dejarlo sin conexin a la red. Usted puede restaurarla ya
sea reconfigurando la red, o haciendo lo siguiente en relacin al ejemplo anterior:
$ sudo route add default gw 192.168.1.1 enp2s0

Estos cambios no son persistentes y no sobrevivirn luego de reiniciar el sistema.

LFS201: Fundamentos de Administracin de Sistemas Linux

485

39.11 Rutas estticas


Las rutas estticas se usan para controlar el flujo de paquetes cuando hay ms de un
router o ruta. Estn definidas para cada interfaz y pueden ser persistentes o no.
Cuando el sistema puede acceder ms de una ruta, o tal vez donde hay varias interfaces
de red, es til controlar selectivamente qu paquetes van a qu router.
Se puede usar ya sea el comando route o ip para configurar una ruta no persistente, tal
como aqu:
$ sudo ip route add 10.5.0.0/16 via 192.168.1.100
$ route
Destination Gateway
Genmask
Flags Metric
default
192.168.1.1 0.0.0.0
UG
0
10.5.0.0
quad
255.255.0.0
UG
0
192.168.1.0 *
255.255.255.0 U
1

Ref Use Iface


0
0 eth0
0
0 eth0
0
0 eth0

Una ruta persistente puede ser configurada editando /etc/sysconfig/networkscripts/route-ethX como se muestra aqu:
$ cat /etc/sysconfig/network-scripts/route-eth0
10.5.0.0/16 via 172.17.9.1

En un sistema basado en Debian es necesario agregar lneas al


archivo /etc/network/interfaces tales como:
iface eth1 inet dhcp
post-up route add -host 10.1.2.51 eth1
post-up route add -host 10.1.2.52 eth1

En

un

sistema

basado

en SUSE es
necesario
agregar
lneas
a
/etc/sysconfig/network/ifroute-eth0 (o crear el archivo si no existe) como las
siguientes:
# Destination Gateway Netmask Interface [Type] [Options]
192.168.1.150 192.168.1.1 255.255.255.255 eth0
10.1.1.150 192.168.233.1.1 eth0
10.1.1.0/24 192.168.1.1 - eth0

en donde los campos estn separados por tabs.

LFS201: Fundamentos de Administracin de Sistemas Linux

486

39.12 Resolucin de nombres


La resolucin de nombres es el acto de traducir hostnames a la direccin IP de sus
sistemas correspondientes. Por ejemplo, un navegador o cliente de correo electrnico
recibir training.linuxfoundation.org y resolver el nombre de la direccin IP del
servidor (o servidores) que sirven training.linuxfoundation.org para transmitir datos
a y desde esa ubicacin en internet.
Hay dos vas para realizar esta traduccin:

Resolucin esttica de nombres (usando /etc/hosts).

Resolucin dinmica de nombres (usando servidores DNS).

A veces tambin se requiere resolucin inversa: convertir una direccin IP a un


hostname.

39.13 /etc/hosts
/etc/hosts mantiene una base de datos local de hostnames y direcciones IP. Contiene

un conjunto de registros (uno por lnea), el cual mapea direcciones IP con sus
correspondientes hostnames y alias.
Un archivo /etc/hosts tpico luce como esto:
127.0.0.1
localhost
localhost4.localdomain4
::1
localhost
localhost6.localdomain6
192.168.1.100
hans
192.168.1.150
bethe
192.168.1.2
192.168.1.10
test32

localhost.localdomain

localhost4

localhost.localdomain

localhost6

hans7
bethe7

hans64
bethe64
hp-printer
oldpc

test64

Esta resolucin de nombres esttica se usa principalmente para redes locales, pequeas
y aisladas. Generalmente se verifica antes de usar un servidor DNS para resolver una
direccin; sin embargo, esta prioridad puede ser controlada en/etc/nsswitch.conf.

LFS201: Fundamentos de Administracin de Sistemas Linux

487

39.14 DNS
Si la resolucin de nombres no puede
realizarse localmente usando /etc/hosts,
entonces el sistema consultar a un
servidor DNS (Domain Name Server).
El DNS es dinmico y consiste en una red de
servidores, los cuales son usados por clientes
para buscar nombres. El servicio es distribuido;
cada servidor DNS tiene informacin acerca de
su zona de autoridad solamente. Sin embargo,
todos ellos juntos pueden colaborar para
resolver cualquier nombre.
El
uso
del
cliente DNS se
configura
en /etc/resolv.conf, el cual histricamente
ha tenido una forma como la siguiente:
search example.com aps.org
nameserver 192.168.1.1
nameserver 8.8.8.8

lo cual:

Puede
especificar
dominios
de
bsqueda en particular.
Define un orden estricto de servidores
de nombre para consultar.
Puede configurarse manualmente o ser actualizado desde un servicio como
DHCP (Dynamic Host Configuration Protocol).

La mayora de los sistemas modernos tienen un archivo /etc/hosts.resolv, el cual es


generado automticamente y luce de la siguiente forma:
# Generated by NetworkManager
192.168.1.1

el cual fue generado por NetworkManager, invocando DHCP en la interfaz de red


principal.

LFS201: Fundamentos de Administracin de Sistemas Linux

488

LFS201: Fundamentos de Administracin de Sistemas Linux

489

39.15 Herramientas de diagnstico de red


Hay una serie de utilidades bsicas de red en la caja de herramientas de cada
administrador de sistemas, incluyendo:

ping:
Enva paquetes de prueba de 64 bytes a determinados hosts en la red, y si los
encuentra, trata de enviar un reporte de vuelta en relacin a los tiempos
requeridos para alcanzarlo (en milisegundos). Tambin se incluyen los paquetes
perdidos y algunos otros parmetros. Considere que la salida exacta variar de
acuerdo al host objetivo, pero al menos podr ver que la red est funcionando y
que el host es accesible.

traceroute:
Se usa para mostrar una ruta de red a un destino. Muestra los paquetes a travs
de los routers hasta alcanzar el host, como tambin el tiempo que toma en
cada salto (hop).

mtr:
Combina la funcionalidad de ping y traceroute,
continuamente actualizada, como top.

muestra

una

salida

dig:
Es til para probar la funcionalidad de DNS. Tenga en cuenta que tambin se
puede usar host o nslookup, programas ms antiguos que tambin devuelven
informacin del DNS de un host.

Note que algunas distribuciones recientes (como RHEL 7) requieren privilegios de root
(o sudo) para ejecutar las primeras tres herramientas de diagnstico mencionadas.
Ejemplos:
$ ping -c 10 linuxfoundation.org
$ traceroute linuxfoundation.org
$ mtr linuxfoundation.org

LFS201: Fundamentos de Administracin de Sistemas Linux

490

Comprobacin de conocimientos 39.1

Comprobacin de conocimientos 39.2

Comprobacin de conocimientos 39.3

LFS201: Fundamentos de Administracin de Sistemas Linux

491

Comprobacin de conocimientos 39.4

Comprobacin de conocimientos 39.5

39.16 Laboratorio 39.1


Laboratorio 39.1: Configuracin esttica de una interfaz de red
Nota: puede que tenga que usar una interfaz de red diferente a eth0. Usted puede hacer este
ejercicio desde una interfaz grfica, pero nosotros presentaremos una solucin en la lnea de
comandos.
1. Muestre la direccin IP actual, ruta por defecto y la configuracin del DNS para eth0. Tome
una copia de los valores para reconfigurarlos ms tarde.
2. Deshabilite eth0 y reconfigrela para usar una direccin esttica en vez de DCHP, usando la
informacin que registr en el punto anterior.
3. Habilite la interfaz y configure el cliente del servidor de nombres con la informacin que
anot previamente. Verifique el hostname del sistema y luego hgale ping.
4. Asegrese que la configuracin que realiz funciona despus de reiniciar el sistema.
Restaure la configuracin original una vez que haya terminado el ejercicio.

LFS201: Fundamentos de Administracin de Sistemas Linux

492

Solucin 39.1

1. $ ifconfig eth0

$ route -n
$ cp /etc/resolv.conf resolv.conf.keep
2. $ sudo ifconfig eth0 down

Asegrese que realiza lo siguiente en /etc/sysconfig/network-scripts/ifcfg-eth0, en sistemas


basados en Red Hat:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=noted from step 1
NETMASK=noted from step 1
GATEWAY=noted from step 1
En sistemas basados en SUSE edite el archivo /etc/sysconfig/network de la misma forma. En
sistemas basados en Debian edite /etc/networking/interfaces e incluya:
iface eth0 inet static
address noted from step 1
netmask noted from step 1
gateway noted from step 1
3. $ sudo ifconfig eth0 up

$ sudo cp resolv.conf.keep /etc/resolv.conf


$ cat /etc/sysconfig/network
$ cat /etc/hosts
$ ping yourhostname
4. $ sudo reboot

$ ping hostname

LFS201: Fundamentos de Administracin de Sistemas Linux

493

39.16 Laboratorio 39.2


Laboratorio 39.2: Agregando un hostname esttico

En este ejercicio agregaremos entradas a la base de datos de hosts locales.


1. Edite /etc/hosts y agregue una entrada para mysystem.mydomain que apunte a la direccin IP

asociada a su tarjeta de red.

2. Agregue una segunda entrada que haga que todas las referencias a ad.doubleclick.net

apunten a 127.0.0.1.
3. Como ejercicio opcional, descargue el archivo de host desde:

http://winhelp2002.mvps.org/hosts2.htm o ms directamente desde


http://winhelp2002.mvps.org/hosts.txt e instalelo en su sistema. Nota alguna diferencia en su
navegador al usar/remover el archivo nuevo de host?

Solucin 39.2
1. As root do:

$ echo "192.168.1.180 mysystem.mydomain" >> /etc/hosts


$ ping mysystem.mydomain
2. As root do:

$ echo "127.0.0.1 ad.doubleclick.net" >> /etc/hosts


$ ping ad.doubleclick.net
$ wget http://winhelp2002.mvps.org/hosts.txt
--2014-11-01 08:57:12-- http://winhelp2002.mvps.org/hosts.txt
Resolving winhelp2002.mvps.org (winhelp2002.mvps.org)... 216.155.126.40
Connecting to winhelp2002.mvps.org (winhelp2002.mvps.org)|216.155.126.40|:80...
connected. HTTP request sent, awaiting response... 200 OK
Length: 514744 (503K) [text/plain]
Saving to: hosts.txt
100%[======================================>] 514,744 977KB/s in 0.5s
2014-11-01 08:57:13 (977 KB/s) - hosts.txt saved [514744/514744]
3. As root do:

$ cat hosts.txt >> /etc/hosts

LFS201: Fundamentos de Administracin de Sistemas Linux

494

39.16 Laboratorio 39.3


Laboratorio 39.3: Agregando un alias de interfaz de red
1. Configure su sistema con un nuevo alias de dispositivo de red llamado eth0:0, que use una

nueva direccin IP que usted le asignar. Esta direccin debe ser persistente.
Habilite el dispositivo y prebelo.

Solucin 39.3

1. $ cd /etc/sysconfig/network-scripts

$ cp ifcfg-eth0 ifcft-eth0:0

Edite este archivo (como root) y asegrese que tiene las siguientes lneas:
DEVICE=eth0:0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.110
NETMASK=255.255.255.0
usando cualquier direccin que desee, En RHEL 7 usted debera usar NAME en vez de DEVICE.
Para habilitar el dispositivo puede usar ifconfig, ifup o ip, pero haciendo simplemente:
$ sudo service network restart
tambin demostrar que el alias nuevo es persistente. Puede probarlo con
$ sudo ping 192.168.1.110
usando la direccin que configur.

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Ser capaz de identificar dispositivos de red y entender cmo el sistema operativo


les asigna nombres y vincula a tareas especficas.
Usar ifconfig para configurar, controlar y consultar parmetros de una interfaz red,
ya sea desde la lnea de comandos o desde scripts de configuracin del sistema.
Usar la herramienta ip para desplegar y controlar dispositivos, enrutamiento,
enrutamiento basado en polticas y tneles (tunnelling).
Saber cmo configurar rutas por defecto y rutas estticas.
Configurar la resolucin de nombres como tambin ejecutar herramientas de
diagnstico.
LFS201: Fundamentos de Administracin de Sistemas Linux

495

Captulo 40. Cortafuegos


Los cortafuegos se usan para controlar tanto el acceso entrante como saliente a los
sistemas y a la red local. Es un equipo esencial de seguridad en las redes modernas, en
donde las intrusiones y otros tipos de ataques son una realidad cotidiana en cualquier
computador conectado a internet. Es posible controlar el nivel de confianza que ofrece el
trfico a travs de interfaces particulares. y/o con direcciones de red especficas.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Entender qu es un cortafuegos y porqu son necesarios.


Saber qu herramientas estn disponibles tanto en la lnea de comandos como en
la interfaz grfica.
Familiarizarse con firewalld y el programa firewall-cmd.
Saber cmo trabajar con zonas, fuentes, servicios y puertos.

LFS201: Fundamentos de Administracin de Sistemas Linux

496

40.1 Que es un cortafuegos?


Un cortafuegos es un sistema de seguridad de red que monitorea y controla todo el
trfico de la red. Aplica reglas tanto en conexiones de red entrantes como salientes, como
tambin construye barreras flexibles (es decir, cortafuegos) dependiendo del nivel de
seguridad de una conexin determinada.
Los cortafuegos pueden estar basados en hardware o software. Se encuentran tanto en
enrutadores de red como tambin en computadores individuales, o nodos de red. Muchos
cortafuegos tambin tienen capacidades de enrutamiento.
Los primeros cortafuegos (que datan de finales de los 80s) estaban basados en filtrado
de paquetes; el contenido de cada paquete de red era inspeccionado y era ya sea
eliminado, rechazado o enviado. No se tena en cuenta el estado de la conexin; a qu
stream o trfico perteneca el paquete.
La siguiente generacin de cortafuegos estuvo basada en filtros de estado, los cuales
examinaban el estado de la conexin del paquete, entre otras cosas; si era una
conexin nueva, parte de una existente o de ninguna. Los ataques de denegacin de
servicio pueden bombardear este tipo de cortafuegos para tratar de sobrecargarlo y
desactivarlo.
La tercera generacin de cortafuegos se llama Cortafuegos de Capa de Aplicacin, y
estn conscientes del tipo de aplicacin y del protocolo que est usando la conexin.
Pueden bloquear cualquier cosa que no debera ser parte del flujo normal.

40.2 Interfaces y herramientas del cortafuegos


La configuracin del sistema del cortafuegos puede ser realizada con:
Usando herramientas relativamente de bajo nivel desde la lnea de comandos,
combinado con la edicin de varios archivos de configuracin en el rbol de
subdirectorios /etc:
iptables
firewall-cmd
ufw

Usando interfaces grficas robustas:


system-config-firewall
firewall-config
gufw
yast

LFS201: Fundamentos de Administracin de Sistemas Linux

497

Trabajaremos con las herramientas de bajo nivel por las siguientes razones:

Cambian menos a menudo que las herramientas grficas.


Tienden a tener un conjunto ms amplio de capacidades.
Varan poco de una distribucin a otra, mientras que las GUI tienen a ser muy
diferentes y cada una de ellas se limita a una sola familia de distribuciones.

La desventaja es que pueden ser ms difciles de aprender al comienzo. De aqu en


adelante vamos a concentrarnos en el uso del paquete moderno firewalld, el cual incluye
tanto firewall-cmd como firewall-config. Hay distribuciones que no lo traen por defecto
(como RHEL 6), sin embargo no es un problema, ya que puede ser instalado desde las
fuentes fcilmente, cosa que haremos como ejercicio de ser necesario.

40.3 firewalld
firewalld es
el Administrador
Dinmico
del
Cortafuegos.
Utiliza zonas de
red/cortafuegos que han definido niveles de confianza para interfaces de red o
conexiones. Soporta los protocolos IPv4 e IPv6.
Adicionalmente, separa los cambios a la configuracin que se realizan en tiempo de
ejecucin de los persistentes. Tambin incluye interfaces para servicios o aplicaciones,
para agregar reglas al cortafuegos.
Los archivos de configuracin se guardan en /etc/firewalld y /usr/lib/firewalld;
los archivos en/etc/firewalld anulan los del otro directorio y un administrador de
sistemas debera trabajar sobre ellos.
La herramienta de la lnea de comando es firewall-cmd, la cual discutiremos pronto.
Recomendamos que antes de seguir adelante ejecute:
$ firewall-cmd --help
Usage: firewall-cmd [OPTIONS...]
....
Status Options
--state
Return and print firewalld state
--reload
Reload firewall and keep state
information
--complete-reload
Reload firewall and loose state
information
--runtime-to-permanent Create permanent from runtime configuration
....

lo cual muestra alrededor de 200 lneas, demasiado largo para incluirlo aqu.
Sin embargo, ver que la mayora de las opciones son obvias ya que estn correctamente
nombradas. Como servicio,firewalld reemplaza el antiguo iptables. Es un error ejecutar
ambos servicios - firewalld e iptables - al mismo tiempo.

LFS201: Fundamentos de Administracin de Sistemas Linux

498

40.4 Estado del servicio firewalld


firewalld es un servicio que debe estar en ejecucin para usar el cortafuegos, y se
habilita/deshabilita, o inicia y detiene de la forma habitual:
$ sudo systemctl [enable/disable] firewalld
$ sudo systemctl [start/stop] firewalld

Es posible mostrar el estado actual de cualquiera de las formas siguientes:


$ sudo systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since Tue 2015-04-28 12:00:59 CDT; 5min
ago
Main PID: 777 (firewalld)
CGroup: /system.slice/firewalld.service
777 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Apr 28 12:00:59 CentOS7 systemd[1]: Started firewalld - dynamic
firewall daemon.
$ sudo firewall-cmd --status
running

Tenga en cuenta que si tiene ms de una interfaz de red al usar IPv4, usted tiene que
activar ip forwarding. Puede hacer esto en tiempo de ejecucin con una de las dos
alternativas:
$ sudo sysctl net.ipv4.ip_forward=1
$ echo 1 > /proc/sys/net/ipv4/ip_forward

(necesita ejecutarse como root para que echo funcione apropiadamente)


Sin embargo esto no es persistente. Para hacerlo persistente, tiene que agregar la
siguiente lnea a
/etc/sysctl.conf:
net.ipv4.ip_forward=1

y luego reincie o ejecute:


$ sudo sysctl -p

para usar la configuracin nueva sin tener que reiniciar.

LFS201: Fundamentos de Administracin de Sistemas Linux

499

40.5 Zonas
firewalld trabaja con zonas, cada una de las cuales tiene un nivel definido de seguridad y
un cierto comportamiento ya definido para paquetes entrantes y salientes. Cada interfaz
pertenece a una zona en particular. Normalmente NetworkManager le informa
a firewalld acerca de la zona que aplica, pero esto puede modificarse con firewall-cmdo
la GUI firewall-config.
Las zonas son:
drop
Todos los paquetes entrantes son eliminados sin una respuesta. Solo se permiten
las conexiones salientes.
block
Todas las conexiones entrantes son rechazadas. Las nicas conexiones permitidas
son las internas del sistema.
public
No confe en ningn computador en la red; solo ciertas conexiones entrantes
seleccionadas conscientemente estn permitidas.
external
Se utiliza cuando masquerading est en uso, como en los routers. Los niveles de
confianza son los mismos que en public.
dmz (Zona desmilitarizada)
Se usa cuando algunos (pero no todos) servicios estn permitidos al pblico. Solo
se permiten conexiones entrantes en particular.
work
Confa (pero no completamente) en los nodos conectados que no son perjudiciales.
Solo se permiten ciertas conexiones entrantes.
home
Usted confa en la mayora de los dems nodos en la red, pero an selecciona qu
conexiones entrantes estn permitidas.
internal
Es similar a la zona work.
trusted
Todas las conexiones de red estn permitidas.
Durante la instalacin del sistema, la mayora, por no decir todas las
distribuciones Linux seleccionarn la zona pblica por defecto para todas las interfaces.
Las diferencias entre algunas de las zonas descritas anteriormente no son obvias, pero
tampoco necesitamos entrar mucho en detalle, pero tenga en cuenta que no hay que usar
una zona ms abierta de lo que realmente se necesita.

LFS201: Fundamentos de Administracin de Sistemas Linux

500

40.6 Gestin de las zonas


Obtener la zona por defecto:
$ sudo firewall-cmd --get-default-zone
public

Obtener una lista de las zonas actualmente en uso:


$ sudo firewall-cmd --get-active-zones
public
interfaces: eno16777736

Listar todas las zonas disponibles:


$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Para cambiar la zona por defecto a trusted y luego volver atrs:


$ sudo firewall-cmd --set-default-zone=home
success
$ sudo firewall-cmd --set-default-zone=public
success

Para asignar temporalmente una interfaz a una zona en particular:


$ sudo firewall-cmd --zone=internal --change-interface=eno1
success

Para hacerlo permanentemente:


$ sudo firewall-cmd --permanent --zone=internal --changeinterface=eno1
success

lo cual crea el archivo /etc/firewalld/zones/internal.xml.


Para determinar la zona asociada con una interfaz en particular:
$ sudo firewall-cmd --get-zone-of-interface=eno1
public

LFS201: Fundamentos de Administracin de Sistemas Linux

501

Finalmente, para obtener todos los detalles acerca de una zona en particular:
$ sudo firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eno16777736
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

40.7 Gestin de fuentes


Cualquier zona puede estar ligada no solo a una interfaz de red, sino que tambin a una
direccin de red en particular. Un paquete est asociado a una zona si:

Este proviene desde una direccin fuente que ya est asociada a la zona. O por
otra parte:
Este proviene desde una interfaz asociada a la zona.

Cualquier paquete que no encaje en los criterios anteriores se asigna a la zona por
defecto (que generalmente es public).
Para asignar una fuente a una zona (permanentemente):
$
sudo
firewall-cmd
source=192.168.1.0/24
success

--permanent

--zone=trusted

--add-

Esto dice que cualquier paquete con direccin IP 192.168.1.x ser agregado a la
zona trusted.
Tenga en cuenta que puede remover una fuente previamente asignada a una zona
usando la opcin --remove-source, o cambiar la zona usando --change-source.
Puede listar las fuentes asociadas a una zona con:
$ sudo firewall-cmd --permanent --zone=trusted --list-sources
192.168.1.0/24

En ambos comandos anteriores, si quita la opcin --permanent obtendr


comportamiento actual en tiempo de ejecucin solamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

el

502

40.8 Gestin de los servicios y puertos


Hasta el momento hemos asignado interfaces particulares y/o direcciones a zonas, pero
no hemos delineado quservicios y puertos deben estar accesibles en una zona.
Para ver todos los servicios disponibles:
$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6client dns ftp \
high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd
ldap ldaps \
libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy
pmwebapi \
pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client
smtp ssh \
telnet tftp tftp-client transmission-client vnc-server wbem-https

o para ver aquellos accesibles actualmente en una zona en particular:


$ sudo firewall-cmd --list-services --zone=public
dhcpv6-client ssh

Para agregar un servicio a una zona:


$ sudo firewall-cmd --permanent --zone=home --add-service=dhcp
success
$ sudo firewall-cmd --reload

El segundo comando, con --reload, es necesario para que los cambios sean efectivos.
Tambin
es
posible
agregar
servicios
editando
los
archivos
en /etc/firewalld/services.
La gestin de puertos es muy similar a la de servicios:
$ sudo firewall-cmd --zone=home --add-port=21/tcp
success
$ sudo firewall-cmd --zone=home --list-ports
21/tcp

en donde examinando /etc/services podemos comprobar que el puerto 21 corresponde


a ftp:
$ grep " 21/tcp" /etc/services
ftp
21/tcp

LFS201: Fundamentos de Administracin de Sistemas Linux

503

40.9 Laboratorio 40.1


Laboratorio 40.1: Instalacin de firewalld
Si bien es cierto que el paquete firewalld (el cual incluye la herramienta multipropsito firewallcmd) est disponible en la mayora de las distribuciones Linux recientes, es posible que no est
instalado en su sistema.
Primero es necesario verificar si ya est instalado, de la siguiente forma:
$ which firewalld firewall-cmd
/usr/sbin/firewalld
/usr/bin/firewall-cmd
Si no encuentra el programa, entonces instlelo de la forma usual, usando una de las treas
maneras que se muestran aqu, dependiendo de su distribucin:
$ sudo yum install firewalld
$ sudo zypper install firewalld
$ sudo apt-get install firewalld
Si esto falla, entonces el paquete firewalld no est disponible en su distribucin. Por ejemplo, este
sera el caso de las distribuciones RHEL6/CentOS6. En este caso tendr que instalarlo desde las
fuentes.

LFS201: Fundamentos de Administracin de Sistemas Linux

504

Para hacer esto vaya a https://fedorahosted.org/firewalld/, desde donde puede obtener el


repositorio fuente de git, pero es mucho ms fcil descargar el archivo comprimido (firewalld0.3.13.tar.bz2, versin disponible a la fecha en que se escribi este artculo.
Tendr que seguir el procedimiento general para instalar desde las fuentes:
$ tar xvf firewalld-0.3.13.tar.bz2
$ cd firewalld-0.3.13
$ ./configure
$ make
$ sudo make install
Tenga en cuenta que la fuente tambin tiene el parmetro uninstall:
$ sudo make uninstall
en el caso que se arrepienta y quiera volver atrs.
Tendr que lidiar con cualquier problema que se presente en el paso ./configure, tal como una
biblioteca faltante, etc. Cuando realiza una instalacin desde un sistema de paquetes, la
distribucin se hace cargo de esto, pero en el caso de instalar desde las fuentes esto puede ser un
complejo. Si ha ejecutado en su sistema el script ready-for.sh de la Linux Foundation, es poco
probable que tenga problemas.
Nota: A pesar de que en openSUSE 13.2 la compilacin e instalacin funcionar, la ejecucin de
firewall-cmd fallar con un mensaje informando de la ausencia de python-slip.
Desafortunadamente este paquete no existe en los repositorios de zypper, por lo cual tendr que
descargarlo desde el mismo sitio web, https://fedorahosted.org/firewalld/, y luego hacer:
$ tar xvf /tmp/python-slip-0.6.1.tar.bz2
$ cd python-slip-0.6.1
$ make
$ sudo make install
substituyendo por el nombre adecuado de la versin que descarg. Esperemos que la prxima
versin de openSUSE elimine la necesidad de compilar desde las fuentes, ya que han habido
solicitudes de agregar firewalld a las opciones disponibles.

LFS201: Fundamentos de Administracin de Sistemas Linux

505

40.9 Laboratorio 40.2


Laboratorio 40.2: Examinando firewall-cmd

Solo hemos revisado la superficie de cmo se puede usar el paquete firewalld. Casi todo se hace a
travs de la herramienta filewall-cmd, la cual est facultada para realizar una gran variedad de
tareas, usando opciones con nombres muy claros.
Para tener una idea de esto solo hay que hacer:
$ firewall-cmd --help
Usage: firewall-cmd [OPTIONS...]
....
Service Options
--new-service=<service>
Add a new service [P only]
--delete-service= <service>
Delete and existing service [P only]
....
lo cual no reproduciremos aqu, ya que tiene 208 lneas en un sistema RHEL 7.
Para una explicacin ms detallada de todo lo que despierte su inters, haga man firewall-cmd, lo
cual provee de un resumen, como tambin una lista de otras pginas man que describen los
diversos archivos de configuracin en /etc. Tambin se aclaran conceptos como zonas y servicios.

LFS201: Fundamentos de Administracin de Sistemas Linux

506

40.9 Laboratorio 40.3


Laboratorio 40.3: Agregando servicios a una zona

Agregue los servicios http y https a la zona pblica y verifique que se muestran correctamente.

Solucin 40.3
$ sudo firewall-cmd --zone=public --add-service=http
success
$ sudo firewall-cmd --zone=public --add-service=https
success
$ sudo firewall-cmd --list-services --zone=public
dhcpv6-client http https ssh
Tenga en cuenta que si ejecut
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services --zone=public
dhcpv6-client ssh
despus de agregar los servicios nuevos, van a desaparecer de la lista. Este comportamiento
curioso se debe a que no incluimos el parmetro --permanent, y la opcin --reload recarga los
servicios persistentes solamente.

LFS201: Fundamentos de Administracin de Sistemas Linux

507

40.9 Laboratorio 40.4


Laboratorio 40.4: Uso de la GUI del cortafuegos
Cada distribucin tiene su propia herramienta grfica para administrar el cortafuegos. En sistemas
basados en Red Hat es posible ejecutar firewall-config. En Ubuntu se llama gufw y en openSUSE la
puede encontrar como parte de yast en el men grfico de sistema.
Nos hemos concentrado en la aproximacin de la lnea de comandos simplemente porque
queremos ser flexibles con la distribucin. Sin embargo, para la mayora de las tareas de
configuracin relativamente simples, probablemente encontrar que es ms eficiente realizarlas
desde la GUI, ya que requiere de una menor memorizacin.
Una vez que ha iniciado la GUI de configuracin del cortafuegos, haga el ejercicio previo de agregar
http y https a la zona public, y asegrese de que tom efecto. Asegrese de tomarse el tiempo
para entender la interfaz grfica.

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Entender qu es un cortafuegos y porqu son necesarios.


Saber qu herramientas estn disponibles tanto en la lnea de comandos como en
la interfaz grfica.
Familiarizarse con firewalld y el programa firewall-cmd.
Saber cmo trabajar con zonas, fuentes, servicios y puertos.

LFS201: Fundamentos de Administracin de Sistemas Linux

508

Captulo 41. Resolucin bsica de problemas


Incluso los sistemas Linux mejores administrados presentarn problemas. La resolucin
bsica de problemas puede determinar si un problema proviene de software o hardware,
como tambin si son del sistema local, o provienen desde la red local o internet. Se
requiere de un juicio adecuado y experiencia, y si bien es cierto que siempre ser una
forma de arte, el seguir procedimientos buenos y metdicos realmente puede ayudar a
aislar las fuentes de problemas de manera reproducible.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Resolver problemas bsicos en su sistema, siguiendo un nmero de pasos de


forma iterativa hasta que se encuentren soluciones.
Verificar la red y la integridad de archivos por posibles problemas.
Resolver problemas cuando hay una falla en el arranque del sistema.
Reparar y recuperar sistemas de archivos daados.
Entender cmo pueden usarse los medios de rescate y recuperacin para
resolver problemas.

LFS201: Fundamentos de Administracin de Sistemas Linux

509

41.1 Resumen de la resolucin bsica de problemas


Hay tres niveles en la solucin de problemas:
1. Pricipiante: Tiene todava grandes posibilidades de ampliar sus conocimientos.
2. Experimentado: Es algo que se consigue luego de algunos aos de prctica.
3. Experto: Algunas personas piensan que el experto naci para esto, pero no tiene

sentido, ya que todas las habilidades necesarias se pueden adquirir. Todas las
organizaciones deberan tener al menos una persona en este nivel de experiencia a la
cual recurrir cuando sea requerido.

41.2 Tcnicas bsicas


La resolucin de problemas involucra realizar una serie de pasos, los cuales necesitan
repetirse de forma iterativa hasta encontrar soluciones. Una receta bsica podra ser la
siguiente:
1.
2.
3.
4.
5.
6.

Identificar y describir el problema.


Reproducir el problema.
Siempre intentar las cosas fciles primero.
Descartar las causas posibles de una en una.
Cambie una sola cosa a la vez; si eso no resuelve el problema, vuelva atrs.
Verifique el registro del sistema ( /var/log/messages, /var/log/secure, etc.) para
obtener mayor informacin.

41.3 Intuicin y experiencia


A veces la filosofa y metodologa vigentes requieren de seguir al pie de la letra un
procedimiento establecido; no se recomienda dar saltos en funcin de la intuicin. La
motivacin para usar un procedimiento con una lista de verificacin es evitar depender de
un experto, y asegurar que cualquier administrador de sistemas sea capaz de resolver un
problema si se apega a procedimientos bien conocidos. Porque de lo contrario, si el
experto deja la organizacin, no habr ninguna persona lo suficientemente capacitada
para resolver problemas complejos.
Si por otro lado, decide seguir su intuicin y verificar algunas corazonadas, debe
asegurarse de recopilar informacin lo suficientemente rpido para decidir si continuar o
abandonar el camino de la intuicin, basado en si esto parece que va a ser productivo o
no.
Si bien es cierto que ignorar la intuicin puede alargar el proceso de resolver un problema,
el registro de la persona que solucionaba personas anteriormente es el punto de
referencia fundamental para determinar si se continan invirtiendo recursos de esta forma.

LFS201: Fundamentos de Administracin de Sistemas Linux

510

En otras palabras, la intuicin que resulta en algo til no viene de forma mgica, sino que
se obtiene de la experiencia.

41.4 cosas para verificar: la red


Es necesario verificar los siguientes tems cuando hay problemas relacionados a la red:

Configuracin de la IP:
Use ifconfig o ip para comprobar si la interfaz est arriba, y si es as, ver si est
configurada.

Controlador del dispositivo de red:


Si la interfaz no puede ser levantada, tal vez el controlador de dispositivo
adecuado para la(s) tarjeta(s) de red no est cargado. Verifique con lsmod si el
controlador asociado est cargado como mdulo del kernel, o examine los
pseudoarchivos
relevantes
en /proc y /sys,
tales
como /proc/interrupts o /sys/class/net.

Conectividad:
Use ping para ver si la red es visible, verifique el tiempo de respuesta y si hay
prdida de paquetes. Traceroute puede seguir paquetes a travs de la red,
mientras que mtr puede hacerlo de forma continua. El uso de estas herramientas
puede decirle si el problema es local o est en internet.

Ruta por defecto y configuracin del enrutamiento:


Ejecute route -n y vea si la tabla de enrutamiento tiene sentido.

Resolucin de hostname:
Ejecute dig o host con una
apropiadamente.

URL

verifique

si

el DNS est

funcionando

Los problemas de red pueden ser causados ya sea por software o hardware, y puede ser
tan simple como que el controlador del dispositivo no est cargado o el cable de red no
est conectado. Si la red est arriba pero el rendimiento es terrible, el asunto cae en el
canasto de ajuste del rendimiento, no en la resolucin de problemas bsicos. Los
problemas pueden ser externos a la mquina, o requerir el ajuste de varios parmetros de
red, incluyendo tamaos del bfer y otros.

LFS201: Fundamentos de Administracin de Sistemas Linux

511

41.5 Cosas para verificar: integridad de archivos


Hay una variedad de formas de verificar si hay archivos de configuracin y binarios
corruptos. Los sistemas de empaquetamiento tienen mtodos de comprobar la integridad
de archivos y los cambios en ellos, como se discuti anteriormente. Para sistemas
basados en RPM:
$ rpm -V some_package

verifica un paquete solamente, mientras que


$ rpm -Va

verifica todos los paquetes en el sistema.


En sistemas basados en Debian es posible verificar la integridad con:
$ debsums options some_package

lo cual verificar los checksums en los archivos del paquete. Sin embargo, no todos los
paquetes tienen checksums, de tal forma que esto podra no ser completamente til. Es
posible usar las opciones -V o --verify en las versiones recientes de dpkg.
aide detecta intrusiones y es otra forma de verificar si hay cambios en los archivos:
$ sudo aide --check

ejecutar un anlisis de los archivos y los comparar con el ltimo reporte. Por supuesto,
tendr que mantener la base de datos de aide luego de inicializarla.

41.6 Fallas en el proceso de arranque


Si el sistema falla en el arranque, ya sea completamente o si da errores, estar
familiarizado con lo que sucede en cada etapa es importante a la hora de identificar
fuentes de problemas en particular. Suponiendo que ya ha pasado la etapa de la BIOS, es
posible que alcance alguno de estos desafortunados estados:

No aparece la pantalla del cargador de arranque:


Busque errores de configuracin en GRUB, o un sector de arranque daado. Es
posible que tenga que reinstalar el cargador de arranque.

LFS201: Fundamentos de Administracin de Sistemas Linux

512

El kernel no carga:
Se se produce un kernel panic durante el proceso de arranque, es probable que el
kernel est mal configurado o se haya daado, o que se hayan pasado parmetros
incorrectos en la lnea de comandos del kernel, en el archivo de configuracin
de GRUB. Si el kernel ha arrancado satisfactoriamente en el pasado, entonces se
da o la lnea de comandos del kernel en el archivo de configuracin
de GRUB se alter de una forma improductiva. De ser posible, puede reinstalar el
kernel, o entrar en el men interactivo de GRUB en el arranque y usar parmetros
mnimos en la lnea de comandos para intentar resolver el problema de esa forma.
Tambin puede intentar arrancar con una imagen de rescate, como se describir
en
el
siguiente
captulo.

El kernel carga pero falla al montar el sistema de archivos raz:


Las principales causas son
1. El archivo de configuracin de GRUB est mal configurado.
2. El archivo /etc/fstab est mal configurado.
3. No hay soporte para el tipo de sistema archivos raz, ya sea integrado en el
kernel como mdulo en el disco inicial ram initramfs o en el sistema de
archivos.

Falla durante el proceso init.


Hay muchas cosas que pueden salir mal una vez que init comienza; mire de cerca
los mensajes que se despliegan antes que el inicio se detenga. Si todo estaba
funcionando antes con un kernel diferente, ya sabe por donde empezar. Revise si
hay sistemas de archivos daados, errores en scripts del inicio, etc. Intente
arrancar en un runlevel menor, como 3 (sin interfaz grfica) o 1 (modo
monousuario)

41.7 Corrupcin y recuperacin de sistemas de archivos


Si durante el proceso de arranque uno o ms sistemas de archivos no se pueden
montar, fsck puede usarse para intentar repararlos. Sin embargo, antes de hacer eso uno
debera verificar que /etc/fstab no contenga errores ni est daado. Tenga en cuenta
nuevamente que habr problemas si el kernel no soporta el sistema de archivos en uso.
Si el sistema de archivos se mont, usted puede examinar el archivo, pero / podra
haberse montado como solo lectura; para editar el archivo y arreglarlo en caso de ser
necesario, usted puede ejecutar:
$ sudo mount -o remount,rw /

para montarlo nuevamente, pero esta vez con permisos de escritura.


Si /etc/fstab parece estar correcto, siga con fsck. Primero debera intentar:
$ sudo mount -a

para intentar montar todos los sistemas de archivos. Si esto no tiene xito por completo,
puede tratar de montar manualmente los que tienen problemas. Primero debera ejecutar

LFS201: Fundamentos de Administracin de Sistemas Linux

513

fsck solo para examinar; luego de eso puede correrlo de nuevo para intentar de reparar
cualquier error que pueda haber.

LFS201: Fundamentos de Administracin de Sistemas Linux

514

41.8 Medios de rescate/recuperacin


Discutiremos los discos de rescate y recuperacin (y otros medios) en el captulo
siguiente; aqu lo veremos en trminos de resolucin de problemas. Estos medios
contienen herramientas valiosas para evaluar y reparar sistemas que presentan
problemas.
Las opciones exactas van a variar de una distribucin Linux a otra, pero cuando usted
arranca desde un CD/DVD de instalacin/live o disco USB tiene la posibilidad de
seleccionar una opcin con un nombre como Rescue Installed System.
La imagen de rescate generalmente contiene un conjunto de herramientas limitado pero
poderoso para arreglar problemas en un sistema:

Herramientas de mantencin de discos


Herramientas de red
Herramientas variadas
Acceso a los archivos de registro

41.9 Herramientas comunes en medios de rescate/recuperacin


Los discos de rescate contienen muchos programas tiles, incluyendo:

Herramientas para crear particiones, gestionar dispositivos RAID, gestionar


volmenes locales y crear sistemas de archivos:
fdisk, mdadm, pvcreate, vgcreate, lvcreate, mkfs y muchas otras.

Herramientas de red para identificacin de problemas y conectividad de red:


ifconfig, route, traceroute, mtr, host, ftp, scp, ssh.

Tambin estn disponibles muchos otros comandos:


bash, chroot, ps, kill, vi, dd, tar, cpio, gzip, rpm, mkdir, ls, cp, mv y rm,
nombrar algunos.

por

41.10 Uso de medios de rescate/recuperacin


La imagen de rescate realizar una serie de preguntas al iniciar. Una de ellas es si desea
o no montar los sistemas de archivos (de ser posible).
De ser as, se montan en alguna parte, generalmente en /mnt/sysimage. Usted puede
moverse a ese directorio para acceder a los archivos, o tambin puede cambiarse a ese
ambiente con:
$ sudo chroot /mnt/sysimage.

LFS201: Fundamentos de Administracin de Sistemas Linux

515

Para un rescate basado en la red se le puede pedir que monte /mnt/source.


Usted puede instalar paquetes de software desde dentro del ambiente chrooteado.
Tambin estar habilitado para instalarlos desde fuera del ambiente chrooteado. Por
ejemplo, en un sistema basado en RPM, a travs de la opcin --root para especificar la
ubicacin del directorio root:
$ sudo rpm -ivh --force --root=/mnt/sysimage
/mnt/source/Packages/vsftpd-2*.rpm

Comprobacin de conocimientos 41.1

Comprobacin de conocimientos 41.2

LFS201: Fundamentos de Administracin de Sistemas Linux

516

Objetivos de aprendizaje (revisin)


Actualmente usted debera ser capaz de:

Resolver problemas bsicos en su sistema, siguiendo un nmero de pasos de


forma iterativa hasta que se encuentren soluciones.
Verificar la red y la integridad de archivos por posibles problemas.
Resolver problemas cuando hay una falla en el arranque del sistema.
Reparar y recuperar sistemas de archivos daados.
Entender cmo pueden usarse los medios de rescate y recuperacin para
resolver problemas.

LFS201: Fundamentos de Administracin de Sistemas Linux

517

Captulo 42. Rescate del sistema


Tarde o temprano un sistema va a caer en una falla importante, como no poder arrancar
adecuadamente, montar sistemas de archivos, iniciar un ambiente grfico de escritorio,
etc. Los medios de rescate del sistema en la forma de discos pticos o
unidades USB portables pueden usarse para resolver la situacin. Arrancar ya sea en
modo de emergencia o monousuario puede permitir el uso completo de las
herramientas de Linux para reparar el sistema y devolverlo a su operacin normal.

Objetivos de aprendizaje
Al final de este captulo usted debera ser capaz de:

Explicar en qu formas vienen los medios de rescate del sistema, como se pueden
preparar y disponer de ellos.
Saber cmo entrar en modo de emergencia y qu se puede hacer ah.
Saber cmo entrar en modo monousuario, qu se puede hacer ah, y en qu se
diferencia del modo de emergencia.

LFS201: Fundamentos de Administracin de Sistemas Linux

518

42.1 Medios de arranque de emergencia


Los medios de arranque de emergencia son tiles cuando el sistema no arranca debido a
algn problema como archivos perdidos, mal configurados o daados, o un servicio
configurado incorrectamente.
Los medios de rescate pueden ser tiles si la contrasea de root se perdi y necesita ser
reseteada.
La mayora de las distribuciones Linux permiten que los medios de instalacin
y/o Live (CD, DVD, USB) cumplan un doble propsito como disco de rescate, lo cual es
muy conveniente. Tambin hay discos disponibles cuyo fin en particular es el rescate de
sistemas.
Los medios Live (o vivos, y en cualquier formato) proveen un sistema operativo completo
y arrancable, el cual se ejecuta en memoria, en vez de cargar desde el disco. Los
usuarios pueden experimentar y evaluar el sistema operativo y/o la distribucin Linux sin
instalarla realmente, o realizar cualquier cambio al sistema operativo existente en el
computador.
Los medios extrables Live son nicos en cuanto a que pueden correr en un computador
que no tiene un almacenamiento secundario, tal como un disco duro, o con un disco duro
o sistema de archivos daado, permitiendo a los usuarios rescatar datos.

42.2 Uso de medios de rescate


Ya sea que est usando un medio Live, de instalacin o rescate, los procedimientos para
entrar en un sistema operativo especial de rescate y recuperacin son los mismos, y
como hemos sealado, estos tres medios sirven para el mismo propsito.
El modo de rescate/recuperacin puede accederse desde una opcin en el men del
arranque cuando el sistema inicia desde el medio extrable. En muchos casos podra
tener que escribir rescue en una lnea como la siguiente:
boot: Linux rescue

No le podemos decir todas las posibilidades ya que cada distribucin tiene algo diferente,
pero es fcil determinar el procedimiento a seguir.
Lo siguiente es que puede esperar que se le hagan algunas preguntas tales como el
lenguaje a utilizar, como tambin tomar algunas elecciones dependiendo de su
distribucin. Entonces se le pedir seleccionar la ubicacin de una imagen vlida de
rescate: CD/DVD, Disco Duro, NFS, FTP o HTTP.
La ubicacin seleccionada debe contener un rbol de instalacin vlido, y este debe ser
de la misma versin Linux que tiene el disco de rescate. Y si est usando medios
extrables, el rbol de instalacin debe ser el mismo desde el cual fue creado el medio en
cuestin. Si est utilizando una imagen boot.iso proporcionada por el vendedor,
entonces tambin necesitar un rbol de instalacin basado en la red.
LFS201: Fundamentos de Administracin de Sistemas Linux

519

Se le realizarn preguntas adicionales acerca de montar los sistemas de archivos. Si son


encontrados, se montan bajo/mnt/sysimage. Entonces se le proporcionar una shell y
acceso a diversas herramientas para realizar las correcciones apropiadas a su sistema.
Puede usar chroot para acceder de mejor forma al sistema de archivos raz (/).

42.3 Dispositivo USB de rescate


Muchas distribuciones proveen un archivo de imagen boot.iso para descargar (el
nombre puede cambiar). Usted puede usar dd para copiar el archivo a un
dispositivo USB, de la siguiente forma:
$ dd if=boot.iso of=/dev/sdX

asumiendo que su sistema reconoce el dispositivo extrable como /dev/sdX. Tenga en


cuenta que esto borrar el contenido previo existente en el disco.
Asumiendo que su sistema tiene la capacidad de arrancar desde medios USB y que
la BIOS est configurada para ello, usted entonces podr arrancar desde este disco USB.
Este funcionar de la misma forma que un CD o DVD de rescate. Sin embargo, tenga en
cuenta que el rbol de instalacin no estar presente en la unidad USB; por lo tanto este
mtodo requiere de un rbol de instalacin basado en la red, en el caso de requerirse.
Hay herramientas tiles como livecd-tools y liveusb-creator que permiten especificar
una ubicacin ya sea un disco local o en internet para obtener e instalar una imagen, y
luego hacer todo el trabajo duro de construir una imagen arrancable y crearla en el disco
extrable. Esto es extremadamente conveniente y funciona en prcticamente todas las
distribuciones Linux.

42.4 Modo de emergencia


En modo de emergencia se arranca en un ambiente lo ms mnimamente posible. El
sistema de archivos raz se monta como lectura solamente, no se ejecutan los scripts init
y casi nada est configurado.
La principal ventaja del modo de emergencia sobre el modo monousuario (el que se
describe en la pgina siguiente) es que si init est daado o no funciona,