LFS201
LFS201
LFS201
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).
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.
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.
Creaci6n de respaldos Is 1 37
Creaci6n de grupos de usuarios locales g 34
Gesti6n de permisos de archivos 19 1 35
Gesti6n de entradas de fstab 12
Gesti6n de cuentas de usuarios locales 19 1 33
Gesti6n del proceso de arranque y de servicios
relacionados 3 33
Gesti6n de cuentas de usuarios 19 1 33
Gesti6nde atributosde las cuentasde usuarios 9 33
Gesti6n de procesos de usuarios 1 17 1 20, 23
Restaurar informaci6n desde una copia de seguridad 8 37
Configuraci6n de permisos y duenos de archivos 19 1 35
Seguridad local
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
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.
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.
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.
Hay una lista casi infinita de distribuciones de Linux; simplemente hojee la lista
en http://lwn.net/Distributions.
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.
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.
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.
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 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.
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.
2 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.
3 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.15 Certificaciones
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
Inicie una terminal de root a travs del comando su y luego provea la clave de root, no su clave de
usuario.
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:
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.
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).
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.
Objetivos de aprendizaje
La secuencia de arranque
Los equipos ms nuevos estn cambiando a UEFI, un reemplazo para la BIOS, que
realiza muchas de las mismas funciones.
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.
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 modules samba
auditd htcacheclean netconsole sandbox
authconfig httpd network saslauthd
autofs i18n networking selinux
cbq init network-scripts sendmail
cgconfig ip6tables-config nfs smartmontools
cgred.conf ip6tables-config.rpmnew ntpd snmpd
clock iptables-config ntpdate snmptrapd
collectl iptables-config.rpmnew pluto sshd
console irqbalance prelink sysstat
cpuspeed kdump quota_nld sysstat.ioconf
crond kernel radvd system-config-
firewall
dhcpd keyboard raid-check system-config-
users
dhcpd6 ksm readahead udev
dhcrelay libvirtd readonly-root vncservers
dhcrelay6 libvirt-guests rhn wpa_supplicant
ebtables-config lm_sensors rngd xinetd
firstboot mcelogd rsyslog
NETWORKING=yes
HOSTNAME=quad64
GATEWAY=192.168.1.1
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
2.6 /etc/default
$ ls -F /etc/default
acpid console-setup grub.ucf-dist locale rsyslog
acpi-support crda halt nfs-common saned
alsa cron im-config nss speech-dispatcher
anacron cups irqbalance ntfs-3g sysstat
apport dbus kdump-tools ntpdate ufw
avahi-daemon devpts kerneloops pulseaudio useradd
bridge-utils grub kexec qemu-kvm whoopsie
brltty grub~ keyboard rcS
bsdmainutils grub.d/ libvirt-bin rsync
Los archivos son utilizados para proveer opciones adicionales al iniciar un servicio.
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
$ 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.
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.
Solucin
1. $ sudo shutdown now
Objetivos de aprendizaje
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 U-
BOOT utilizado en muchas configuraciones de sistemas embebidos.
Los kernels alternativos o ramdisk inicial pueden ser elegidos durante el arranque
para un determinado sistema operativo.
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.
/boot/grub/grub.cfg o /boot/grub2/grub.cfg
/boot/grub/grub.conf o /boot/grub/menu.lst.
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.
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).
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.
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.
$ 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.
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:
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
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.
$ 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
$ ls -l /etc/grub.d
total 76
rwxr-xr-x 1 root root 9424 Sep 8 17:35 00_header
rwxr-xr-x 1 root root 6058 Sep 8 17:35 05_debian_theme
rwxr-xr-x 1 root root 11608 Sep 8 17:35 10_linux
rwxr-xr-x 1 root root 10412 Sep 8 17:35 20_linux_xen
rwxr-xr-x 1 root root 1992 Sep 8 17:35 20_linux_xen
rwxr-xr-x 1 root root 11692 Sep 8 17:35 30_os-prober
rwxr-xr-x 1 root root 1416 Sep 8 17:35 30_uefi-firmware
rwxr-xr-x 1 root root 214 Sep 8 17:35 40_custom
rwxr-xr-x 1 root root 216 Sep 8 17:35 41_custom
rw-rr-- 1 root root 483 Sep 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.
Falso
Verdadero
Falso
Verdadero
Falso
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.
$ sudo telinit 5
$ sudo service gdm restart
$ sudo service lightdm restart
Objetivos de Aprendizaje
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.
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.
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.
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.
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.
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.
$ chkconfig some_service
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.
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.
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}
$ 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.
Usted deber consultar las pginas man para acceder a la documentacin completa.
/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).
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
4.11 systemd
El sistema de administracin central systemd y manejador de sesin para Linux est
tomando lugar rpidamente en todas las distribuciones importantes.
4.13 systemctl
$ systemctl
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.
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
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
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
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
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.
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
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.
Una vez ms, es necesario reiniciar el sistema para asegurarse que los cambios realizados estn
siendo efectivos.
Objetivos de aprendizaje
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.
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 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.
5.6 /bin
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.
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.0-
123.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-rescue-
30cc7a6d7bb4525815f4d2b4298e611.img
-rw-rr-- 1 root root 16406996 Dec 10 07:25 initramfs-3.10.0-
123.13.1.el7.x86_64.img
-rw-rr-- 1 root root 13967066 Dec 7 12:03 initramfs-3.17.5.img
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.
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).
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.
Listado de /dev
$ cd /dev ; ls -lF
lrwxrwxrwx 1 root root 3 Aug 28 10:12 cdrom1 -> sr0
....
lrwxrwxrwx 1 root root 15 Aug 28 10:12 fitbit -> bus/usb/003/002
....
crw-rw---- 1 root lp 6, 0 Aug 28 10:12 lp0
crw-rw---- 1 root lp 6, 1 Aug 28 10:12 lp1
....
brw-rw---- 1 root disk 8, 4 Aug 28 10:12 sda4
brw-rw---- 1 root disk 8, 5 Aug 28 10:12 sda5
brw-rw---- 1 root disk 8, 6 Aug 28 10:12 sda6
....
brw-rw----+ 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).
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.
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 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
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.
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.
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.
5.18 /sys
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.
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:
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.
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.
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.
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.
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.
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 /
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.
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
Objetivos de Aprendizaje
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.
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.
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.
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
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-af24-
cda272265e08 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-9068-
49923952338e ro rhgb quiet loop.max_loop=256 LANG=en_US.UTF-8
Hay una lista sorprendentemente larga de los parmetros disponibles del kernel.
Documentacin detallada al respecto se puede encontrar aqu:
En lnea, en http://kernel.org/doc/Documentation/kernel-parameters.txt.
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.
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.
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
....
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.
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.
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.
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).
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
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.
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.
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.
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
Note que al remover un mdulo no es necesario proveer ya sea la ruta completa del
archivo o la extensin .ko.
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.
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)
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.
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
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
Objetivos de aprendizaje
$ 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 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.
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
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 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.
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.
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.
$ 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 try-
restart kdump.service
SUBSYSTEM==cpu, ACTION==offline, PROGRAM=/bin/systemctl try-
restart kdump.service
SUBSYSTEM==memory, ACTION==add, PROGRAM=/bin/systemctl try-
restart kdump.service
SUBSYSTEM==memory, ACTION==remove, PROGRAM=/bin/systemctl try-
restart kdump.service
$ cat 80-kvm.rules
KERNEL==kvm, GROUP=kvm, MODE=0666
$ cat 99-fuse.rules
KERNEL==fuse, MODE=0666,OWNER=root,GROUP=root
Objetivos de aprendizaje
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.
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).
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.
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.
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:
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.
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
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)
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).
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:
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.
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.
dev/sda: PTTYPE=dos
/dev/sda10: UUID=JQshRp-Jxa5-0oiC-X1Oe-si8d-lRQD-48aYNt
TYPE=LVM2_member
/dev/sda3: PTTYPE=dos
/dev/sda6: UUID=YJ2PA3-GSsm-m9rH-XNUM-Ca2X-fkju-OYtiO8
TYPE=LVM2_member
/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.
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.
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.
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!
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.
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.
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.
$ 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
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:
$ 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
.....
$ mkdir mntpoint
$ sudo mount -o loop imagefile mntpoint
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.
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:
Changes will remain in memory only, until you decide to write them.
Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048):
Using default value 2048
Partition type:
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.
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)
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.
$ 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
$ 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
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 29G 8.5G 19G 32% /
....
/dev/loop1p1 ext3 233M 2.1M 219M 1% mnt1
/dev/loop1p2 ext4 233M 2.1M 215M 1% mnt2
/dev/loop1p3 vfat 489M 0 489M 0% mnt3
8. Una vez que ha terminado de utilizar los sistemas de archivos puede deshacer lo realizado con:
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.
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.
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.
10.2 Luks
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.
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
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:
Y montarlo:
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:
luego remueva la asociacin mapper por el momento (siempre podr usar la particin
nuevamente):
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.
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
kernel est al tanto de la nueva tabla de particin. Un reinicio lo lograr, pero hay otros
mtodos tambin.
2. Formatee la particin con cryptsetup usando LUKS para la capa de cifrado.
3. Cree la clave para abrir el dispositivo de bloque cifrado.
4. Agregue una entrada a /etc/crypttab para que el sistema pregunte la clave en el reinicio.
5. Formatee el sistema de archivos con ext4.
6. Cree un punto de montaje para el sistema de archivos nuevo, por ejemplo /secret.
7. Agregue una entrada a /etc/fstab para que el sistema sea montado en el arranque.
8. Intente montar el sistema cifrado.
9. Reinicie y valide la configuracin completa.
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.
secret-disk /dev/sda4
5. $ sudo mkfs -t ext4 /dev/mapper/secret-disk
$ sudo mount a
9. Reinicie.
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
2. Realice los mismos pasos del ejercicio anterior para configurar el cifrado:
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
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.
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.
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.
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.
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 sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cpuset
nodev tmpfs
nodev devtmpfs
nodev binfmt_misc
nodev debugfs
nodev sockfs
nodev pipefs
nodev devpts
squashfs
nodev hugetlbfs
iso9660
nodev mqueue
ext3
ext2
ext4
fuseblk
nodev fuse
nodev 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.
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.
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
Prcticamente todas las distribuciones modernas de Linux montan una instancia de tmpfs en
/dev/shm:
$ df -h /dev/shm
Filesystem Type Size Used Avail Use% Mounted on
Tmpfs tmpfs 3.9G 24M 3.9G 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/vmware-
coop/564d7668-ec55-ee45-f33e-c8e97e956190 tmpfs 2.3G 2.0G 256M 89%
/tmp/vmware-coop/ 564d7668-ec55-ee45-f33e-c8e97e956190
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.
Objetivos de aprendizaje
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.
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:
$ lsattr filename
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
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
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.
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:
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.
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.
Cada sistema de archivos es montado bajo un directorio especfico, como en el caso que
se muestra a continuacin:
El sistema de archivos est localizado en una particin especfica del disco duro
(/dev/sdb4).
Cualquier archivo que est en el directorio original /home estar oculto hasta que
la particin se desmonte.
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.
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:
$ 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
.....
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 / ext4 defaults 1 1
LABEL=RHEL6-32 /RHEL6-32 ext4 defaults 1 2
LABEL=boot /boot ext3 defaults 1 2
....
LABEL=local /usr/local ext4 defaults 1 2
LABEL=tmp /tmp ext4 defaults 1 2
LABEL=src /usr/src ext4 defaults 1 2
LABEL=VIRTUAL /VIRTUAL ext4 defaults 1 2
LABEL=BEAGLE /BEAGLE ext4 defaults 1 2
/dev/sda1 /c ntfs-3g uid=500,gid=500 0 0
/teaching/FTP/LFT /var/ftp/pub2 none bind 0 0
laptop:/share /share nfs defaults 0 0
LABEL=SWAP swap swap defaults 0 0
Tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=6200 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
Cada registro en el archivo contiene campos separados por espacios en blanco, listando
lo siguiente:
en vez de
$ sudo mount LABEL=src /usr/src
Solucin 12.1
1. $ cd /tmp
$ touch appendit
$ ls -l appendit
Una vez que est listo puede volver a la situacin original removiendo la entrada desde /etc/fstab.
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.
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
Objetivo de aprendizaje
Los nicos comandos que implican el rea de intercambio son los siguientes:
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 les
permite a los administradores controlar el espacio mximo que usuarios o grupos en
particular tienen habilitados para su uso. Se permite una flexibilidad considerable y las
cuotas pueden ser asignadas en base a cada sistema de archivos. Se provee de
proteccin para que los usuarios no agoten los recursos colectivos.
Las siguientes herramientas permiten controlar las cuotas:
quotacheck: genera y actualiza los archivos que llevan la cuenta de las 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
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:
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.
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
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:
Note que estos dos programas son realmente uno y funcionan de acuerdo al nombre con
el cual son invocados.
Por ejemplo:
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
El tercer y cuarto comandos son tiles para ser incluidos en scripts, con el fin de crear
cuentas nuevas y configurar cuotas para ellas.
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 ext4 9.8G 8.1G 1.3G 87% /
tmpfs tmpfs 3.9G 2.3M 3.9G 1% /dev/shm
/dev/sda6 ext4 9.8G 5.0G 4.3G 54% /RHEL6-32
/dev/sda2 ext4 380M 3.2M 353M 1% /boot_master
/dev/mapper/VG-local ext4 24G 16G 7.2G 68% /usr/local
/dev/mapper/VG-src ext4 16G 6.4G 8.6G 43% /usr/src
/dev/mapper/VG-pictures
ext4 12G 8.9G 2.3G 80% /PICTURES
/dev/mapper/VG-dead ext4 59G 35G 22G 62% /DEAD
/dev/mapper/VG-virtual
ext4 222G 162G 49G 77% /VIRTUAL
/dev/mapper/VG-iso_images
ext4 59G 35G 21G 63% /ISO_IMAGES
/usr/src/KERNELS.sqfs
squashfs 3.8G 3.8G 0 100% /usr/src/KERNELS
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 /teaching/CRASH/crash-7.0.3/memory_driver
136K /teaching/CRASH/crash-7.0.3/extensions
35M /teaching/CRASH/crash-7.0.3
101M /teaching/CRASH
101M total
$ 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:
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
$ 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
Solucin 13.2
$ 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
Objetivos de aprendizaje
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.
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.
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.
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:
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.
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
Mapa de Data
Mapa de Tabla de
Descriptores Bits de Bloques de
Superbloque Bits de Inodos
de Grupo Bloques de Datos
Inodos (n bloques)
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:
14.5 dumpe2fs
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 listar el contenido del superbloque incluyendo los valores actuales de los parmetros
que pueden ser modificados:
$ sudo tune2fs -l /dev/sda1
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.
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.
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.
Ejemplos:
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.
...
[152/152]/var/log/Xorg.1.log.old: 100% [ OK ]
Success: [ 112/152 ]
Failure: [ 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.
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%.
Mount count: 0
Maximum mount count: 30 3.
Objetivos de aprendizaje
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:
El alto rendimiento es uno de los elementos clave del diseo de XFS, el cual implementa
mtodos para:
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.
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 .
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.
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.
$ man -k xfs
attr (1) - extended attributes on XFS filesystem objects
filesystems (5) - Linux file-system types: minix, ext, ext2, ext3, ext4,...
fs (5) - Linux file-system types: minix, ext, ext2, ext3, ext4,...
fsck.xfs (8) - do nothing, successfully
fsfreeze (8) - suspend access to a filesystem (Linux Ext3/4, ReiserFS...
mkfs.xfs (8) - construct an XFS filesystem
pmdaxfs (1) - XFS filesystem performance metrics domain agent (PMDA)
xfs (5) - layout of the XFS filesystem
xfs_admin (8) - change parameters of an XFS filesystem
xfs_bmap (8) - print block mapping for an XFS file
xfs_copy (8) - copy the contents of an XFS
filesystem xfs_db (8) - debug an XFS filesystem
xfs_estimate (8) - estimate the space that an XFS filesystem will take
xfs_freeze (8) - suspend access to an XFS filesystem
xfs_fsr (8) - filesystem reorganizer for XFS
xfs_growfs (8) - expand an XFS filesystem
xfs_info (8) - expand an XFS filesystem
xfs_io (8) - debug the I/O path of an XFS filesystem
xfs_logprint (8) - print the log of an XFS filesystem
xfs_mdrestore (8) - restores an XFS metadump image to a filesystem image
xfs_metadump (8) - copy XFS filesystem metadata to a file
xfs_mkfile (8) - create an XFS file
xfs_ncheck (8) - generate pathnames from i-numbers for XFS
Lea acerca de estos programas y vea si puede realizar algunas operaciones con el sistema de
archivos que cre.
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
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.
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.
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.
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.
Para obtener una lista completa de las herramientas LVM ejecute man lvm.
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*
Nota:
Estas herramientas estn en /sbin y no en /usr/sbin , ya que pueden ser
necesitados para arrancar o reparar y recuperar un sistema.
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. Crear particiones en las unidades de disco (escriba 8e en fdisk)
2. Crear volmenes fsicos desde las particiones.
3. Crear el grupo de volmenes.
4. Asignar volmenes lgicos desde el grupo de volmenes.
5. 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 pvdisplay
$ sudo pvdisplay /dev/sda5
$ sudo vgdisplay
$ sudo vgdisplay /dev/vg0
$ sudo lvdisplay
$ sudo lvdisplay /dev/vg0/lvm1
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.
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
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.
$ mkdir /mysnap
$ mount -o ro /dev/vg/mysnap /mysnap
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.
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
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
Objetivos de aprendizaje
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.
El comando:
$ sudo mdadm -S
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>
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.
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:
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.
y agregar a /etc/fstab
5. $ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 dm-14[1] dm-13[0]
204736 blocks [2/2] [UU]
Objetivos de aprendizaje
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.
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.
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.
Disponibilidad
Consistencia
Control
Auditora
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.
PATH=./:$PATH
Si usted fuera al directorio que contiene ese archivo y ejecutara ls, borrara todo su
directorio de usuario.
Proteger los teclados en donde las contraseas son ingresadas para asegurar que
no puedan ser alterados.
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.
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.
passwordmd5 $1$Wnvo.1$qz781HRVG4jUnJXmdSCZ30
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.
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:
o en /etc/fstab:
/dev/sda2 /mymountpt ext4 ro,noexec,nodev 0 0
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
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.
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
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
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
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.
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
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.
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.
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.
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.
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)
$ 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
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
$ mv /tmp/tmpfile .
$ ls -Z
$ 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
$ 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.
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:
...
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
Para listar todos los booleanos de la poltica actual, incluyendo el estado actual y una
descripcin corta, haga lo siguiente:
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 reboot
...
$ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> off
$ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> off
$ sudo reboot
...
$ getsebool ssh_chroot_rw_homedirs
ssh_chroot_rw_homedirs --> on
Do
Hash: httpd,httpd_t,admin_home_t,file,getattr
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).
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.
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-9cd1-
72b90fb1f462
***** 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.
Objetivos de aprendizaje
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.
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.
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.
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.
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.
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.
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
como en
$ ulimit -n 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.
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.
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).
Las instrucciones que pueden ser ejecutadas dependen del modo, el cual se aplica a nivel
de hardware, no de software.
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.
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.
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.
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.
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.
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
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.
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.
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]
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.
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.
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.
$ 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.
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 messages
------ Shared Memory Segments --------
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
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:
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.
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).
Para ver una lista de las seales en Linux, junto con los nmeros correspondientes, haga
lo siguiente:
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.
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.
4 Volcado de
SIGILL si lnstrucci6n ilegal.
memoria
Volcado de
SIGTAAP 5 No Trazalpunto de interrupci6n parala depuraci6n.
memoria
SIGABRT Volcado de
SIGIOT
6 memoria =rsi Finalizaci6n anormal.
Volcado de
SIGBVS 7 memoria
Si Error de bus.
Volcado de
SIGFPE 8 Si
memoria
SIGKILL 9 Finalizar Si Sena! de terminaci6n (no puede ser capturada ni ignorada}.
SIGVSR1 10 Finalizar Si Sena! 1 definida por el usuario.
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
Por ejemplo:
$ pkill -u libby foobar
/*
* 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.
* @*/
/*
* 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);
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:
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.
Objetivos de aprendizaje
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.
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.
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.
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.
$ ls -F /proc
1/ 11214/ 15887/ 19/ 26/ 3706/ 509/ 614/ 7402/ asound/
modules
10/ 12/ 15891/ 1929/ 260/ 3707/ 510/ 619/ 741/ buddyinfo
mounts@
1017/ 1284/ 15896/ 1934/ 26218/ 3708/ 511/ 620/ 742/ bus/
mtrr
1018/ 1290/ 15899/ 1959/ 264/ 3709/ 512/ 622/ 743/ cgroups
net@
1023/ 13/ 15905/ 19950/ 265/ 3713/ 513/ 623/ 744/ cmdline
pagetypeinfo
1031/ 1301/ 15909/ 2/ 267/ 3714/ 514/ 625/ 761/ config.gz
partitions
10544/ 14/ 15912/ 2008/ 268/ 375/ 515/ 626/ 763/ consoles
sched_debug
10545/ 1400/ 15919/ 2079/ 27/ 396/ 517/ 641/ 7699/ cpuinfo
schedstat
1061/ 1444/ 15928/ 21/ 28/ 398/ 519/ 642/ 8/ crypto
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
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
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
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
$ ls -F /proc/sys
total 0
dr-xr-xr-x 1 root root 0 Sep 10 18:17 abi/
dr-xr-xr-x 1 root root 0 Sep 10 18:17 debug/
dr-xr-xr-x 1 root root 0 Sep 10 15:53 dev/
dr-xr-xr-x 1 root root 0 Sep 10 02:14 fs/
dr-xr-xr-x 1 root root 0 Sep 10 02:14 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 incluyendo subdirectorios para
cdrom, scsi, raid y parport.
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.
$ ls -l /proc/sys/kernel/threads-max
$ cat /proc/sys/kernel/threads-max 129498
Los usuarios normales pueden visualizar los valores, sin embargo para modificarlos se
requiere de privilegios de superusuario.
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.
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/
$ 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/
$ 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
$ 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.
Para ver la gama completa de informacin que est disponible en sysfs tendr que
examinar el directorio.
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.
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 3 3
Linux 3.15.9 (q7) 09/26/2014 _x86_64_ (4 CPU)
12:27:32 PM CPU %user %nice %system %iowait %steal %idle
12:27:35 PM all 1.34 0.00 0.33 0.67 0.00 97.66
12:27:38 PM all 7.08 0.00 2.98 0.34 0.00 89.60
12:27:41 PM all 10.60 0.00 1.09 0.08 0.00 88.23
Average: all 6.32 0.00 1.46 0.37 0.00 91.85
Aqu hay una lista de las opciones o modos ms importantes de sar, en donde cada una
tiene sus propias subopciones:
$ sar -B 3 3
Linux 3.15.9 (q7) 09/26/2014 _x86_64_ (4 CPU)
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 .
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
$ info stress
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.
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
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.
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
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 198384 6232 ? Ss 07:14 0:01
/usr/lib/systemd/systemdswitched-root -
root 2 0.0 0.0 0 0 ? S 07:14 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 07:14 0:03 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 07:14 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 07:14 0:22 [rcu_preempt]
root 8 0.0 0.0 0 0 ? S 07:14 0:00 [rcu_sched]
root 9 0.0 0.0 0 0 ? S 07:14 0:00 [rcu_bh]
root 10 0.0 0.0 0 0 ? S 07:14 0:03 [migration/0]
....
root 237 0.0 0.0 0 0 ? S 07:14 0:00 [scsi_eh_0]
root 238 0.0 0.0 0 0 ? S< 07:14 0:00 [scsi_tmf_0]
root 239 0.0 0.0 0 0 ? S 07:14 0:00 [scsi_eh_1]
root 240 0.0 0.0 0 0 ? S< 07:14 0:00 [scsi_tmf_1]
....
root 684 0.0 0.0 16744 2648 ? SNs 07:15 0:00 /usr/sbin/alsactl
-s -n 19 -c -E ALSA_CONF
root 690 0.0 0.0 326396 5472 ? Ssl 07:15 0:00
/usr/sbin/ModemManager
root 697 0.0 0.1 181804 8740 ? Ss 07:15 0:00 /usr/sbin/cupsd
-f
....
coop 24400 2.2 0.6 816720 50876 ? Sl 20:19 0:02
/opt/google/chrome/chrometype=ppapic
coop 24819 0.0 0.3 634244 27952 ? Sl 09:01 0:30
/usr/libexec/gnome-terminal-server
coop 30170 0.0 0.0 116660 4816 pts/2 Ss+ 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.
RSS tamao de la memoria residente; la memoria fsica que una tarea est
usando en KB
$ ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 49596 SYSC_e 07:14 ? 00:00:01
/usr/lib/systemd/systemdswitc
1 S root 2 0 0 80 0 - 0 kthrea 07:14 ? 00:00:00
[kthreadd]
1 S root 3 2 0 80 0 - 0 smpboo 07:14 ? 00:00:03
[ksoftirqd/0]
1 S root 5 2 0 60 -20 - 0 worker 07:14 ? 00:00:00
[kworker/0:0H]
1 S root 7 2 0 80 0 - 0 rcu_gp 07:14 ? 00:00:22
[rcu_preempt]
1 S root 8 2 0 80 0 - 0 rcu_gp 07:14 ? 00:00:00
[rcu_sched]
1 S root 9 2 0 80 0 - 0 rcu_gp 07:14 ? 00:00:00
[rcu_bh]
1 S root 10 2 0 -40 - - 0 smpboo 07:14 ? 00:00:03
[migration/0]
....
1 S root 237 2 0 80 0 - 0 scsi_e 07:14 ? 00:00:00
[scsi_eh_0]
1 S root 238 2 0 60 -20 - 0 rescue 07:14 ? 00:00:00
[scsi_tmf_0]
1 S root 239 2 0 80 0 - 0 scsi_e 07:14 ? 00:00:00
[scsi_eh_1]
1 S root 240 2 0 60 -20 - 0 rescue 07:14 ? 00:00:00
[scsi_tmf_1]
....
0 S root 684 1 0 99 19 - 4186 poll_s 07:15 ? 00:00:00
/usr/sbin/alsactl -s -n 19 -c -E
....
1 S coop 24400 5536 2 80 0 - 204180 futex_ 20:19 ? 00:00:09
/opt/google/chrome/chrometype
0 S coop 24819 1 0 80 0 - 158561 poll_s 09:01 ? 00:00:31
/usr/libexec/gnome-terminal-serv
0 S coop 30170 24819 0 80 0 - 29165 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.
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.
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
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.
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.
2. $ ps -o pid,pri,ni,cmd
PID PRI NI CMD
2389 19 0 bash
22079 19 0 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
3. $ fg
$ ^Z
$ ps -C dd -o pid,cmd,stat
PID CMD STAT
25899 dd if=/dev/urandom of=/dev/ T
$ 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
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
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.
24.2 iostat
$ iostat
Linux 3.15.9 (q7) 09/11/2014 _x86_64_
(4 CPU)
La informacin est dividida por particiones del disco (y si LVM est siendo usada por
particiones lgicas de dm, device mapper).
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) 09/11/2014 _x86_64_ (4
CPU)
iostat -N
$ iostat -xk
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
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
await se emite una solicitud y cuando se ha completado: tiempo de la cola ms
tiempo de servicio
svctm Tiempo promedio de servicio (en milisegundos) para solicitudes de E/S
Porcentaje de tiempo de CPU durante las solicitudes servidas a
%util
dispositivos
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]
.....
$ sudo iotophelp
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 show programs version number and exit
-h, --help show this help message and exit
-o, --only only show processes or threads actually doing I/O
Usar la opcin -o puede ser til para tener una salida ms limpia.
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
valor
planificacin de de -c
Significado
E/S
No tiene acceso a E/S de disco a menos que ningn otro
Idle 1
programa lo haya solicitado por un perodo definido.
Todos los programas se atienden con el mtodo round-
Best effort 2 robin, de acuerdo a los ajustes de prioridad. Esta es la
configuracin por defecto.
Obtiene acceso primero al disco, lo cual puede desplazar
Real Time 3 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
[-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
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...
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.
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:
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:
Mientras esto est ejecutndose, obtenga estadsticas extendidas en otra terminal con iostat:
$ iostat -x -d /dev/sda 2 20
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
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.
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
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
$ ls -l /sys/block/sda/queue/iosched
total 0
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.
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).
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.
# *
# * 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
done
# wait for previous jobs to finish
wait
}
done
done
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.
Objetivos de aprendizaje
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.
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:
Aqu hay una lista de algunas herramientas bsicas importantes para monitorear y
optimizar la memoria en Linux:
Entrada Propsito
admin_reserve_kbytes Cantidad de memoria libre reservada para
usuarios con privilegios.
block_dump Habilita depuracin de bloques de E/S.
Habilita o deshabilita la compactacin de
compact_memory memoria (esencialmente la defragmentacin)
cuando est configurada como parte del kernel.
dirty_background_bytes Umbral de memoria sucia que provoca que las
pginas se escriban a disco.
dirty_background_ratio Porcentaje total de pginas con el que el kernel
comenzar a escribir datos sucios al disco.
dirty_bytes La cantidad de memoria sucia que un proceso
necesita para iniciar la escritura por s solo.
Cuando los datos sucios son los suficientemente
dirty_expire_centisecs antiguos para ser escritos en centsimas de
segundo.
Porcentaje de pginas en el cual un proceso de
dirty_ratio escritura comenzar a escribir datos sucios por s
solo.
Intervalo en el cual los demonios de reescritura
dirty_writeback_centisecs 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
drop_caches todos. Tenga en cuenta que solo las pginas
limpias en cach se eliminan; primero haga sync
para eliminar las pginas sucias.
extfrag_threshold Controla cuando el kernel debe compactar
memoria.
hugepages_treat_as_movable Se usa para cambiar la forma en la que huge
pages es tratada.
hugetlb_shm_group Configura un ID de grupo que puede usarse para
huge pages System V.
laptop_mode Puede controlar una serie de caractersticas para
ahorrar energa en porttiles.
legacy_va_layout Use el diseo antiguo (kernel 2.4) en relacin a
cmo se muestran las asignaciones de memoria.
lowmen_reserve_ratio Controla cunta memoria baja est reservada para
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 2 4
procs -----------memory---------- ---swap-- -----io---- -system--
------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 4521672 375560 1792484 0 0 49 17 363 275 3 1 95 1 0
0 0 0 4521408 375560 1792516 0 0 0 0 490 352 1 1 98 0 0
0 0 0 4521408 375568 1792516 0 0 0 14 436 316 1 0 99 0 0
1 0 0 4521408 375576 1792516 0 0 0 10 452 330 1 0 98 0
0
donde la primera lnea muestra los promedios desde el ltimo reinicio, mientras que las
lneas subsiguientes muestran la actividad durante el intervalo especificado.
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
$ 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
$ cat /proc/meminfo
MemTotal: 8170032 kB
MemFree: 4506996 kB
MemAvailable: 6747268 kB
Buffers: 376744 kB
Cached: 1865956 kB
SwapCached: 0 kB
Active: 2155424 kB
Inactive: 1036312 kB
Active(anon): 951000 kB
Inactive(anon): 49300 kB
Active(file): 1204424 kB
Inactive(file): 987012 kB
Unevictable: 32 kB
Mlocked: 32 kB
SwapTotal: 4193776 kB
SwapFree: 4193776 kB
Dirty: 48 kB
Writeback: 0 kB
AnonPages: 949168 kB
Mapped: 397340 kB
Shmem: 51312 kB
Slab: 336148 kB
SReclaimable: 302240 kB
SUnreclaim: 33908 kB
KernelStack: 8352 kB
PageTables: 29752 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8278792 kB
Committed_AS: 3790248 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 327116 kB
VmallocChunk: 34359398732 kB
AnonHugePages: 344064 kB
HugePages_Total: 0
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
Tenga en cuenta que las entradas exactas dependern de la versin especfica del kernel
en ejecucin.
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.
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.
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:
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.
$ 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
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
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.
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:
Repetibilidad y predictibilidad.
Seguridad y auditora.
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 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.
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.
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.
Objetivos de aprendizaje
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.
Distinguir los archivos de documentacin del resto de los archivos del paquete, y
opcionalmente decidir no instalarlos para ahorrar espacio en disco.
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/).
<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.
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.
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
/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
$ rpm -qa
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 examinan los nombres de paquete que son pasados como argumento, como en los
ejemplos que siguen a continuacin:
$ 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
$ rpm -V talk
missing /usr/bin/talk
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.
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
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.
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.
El refrescar paquetes puede ser til para aplicar un montn de partes de una vez (para
actualizar paquetes, por ejemplo).
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.
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.
Supongamos que necesita extraer archivos desde un rpm pero no desea instalar el
paquete.
4. En RHEL 7:
$ sudo rpm -e logrotrate
error: Failed dependencies:
Tenga en cuenta que el rbol exacto de dependencias de paquetes est en funcin tanto de la
distribucin como del software instalado.
Solucin 28.2
1. $ cd /var/lib
$ sudo cp -a rpm rpm_BACKUP
2. $ sudo rpmrebuilddb
3. $ ls -l rpm rpm_BACKUP
5. $ ls -l rpm rpm_BACKUP
6. Realice este paso una vez que est seguro de que el sistema est funcionando
correctamente!
Objetivos de aprendizaje
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.
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
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
....
$ dpkg -l
$ dpkg -L wget
$ dpkg -p wget
$ dpkg -I webfs_1.21+ds1-8_amd64.deb
$ dpkg -c webfs_1.21+ds1-8_amd64.deb
$ dpkg -S /etc/init/networking.conf
$ dpkg -s wget
$ dpkg -V package
29.5 Instalacin/Actualizacin/Desinstalacin
El comando:
$ sudo dpkg -i foobar.deb
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.
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.
Objetivos de aprendizaje
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.
$ 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. 2 root root 4096 Sep 24 13:44 ./
drwxr-xr-x. 151 root root 12288 Oct 2 12:52 ../
-rw-rr-- 1 root root 957 Sep 2 11:14 epel.repo
-rw-rr-- 1 root root 1056 Sep 2 11:14 epel-testing.repo
-rw-rr-- 1 root root 116 Sep 3 11:40 google-chrome.repo
-rw-rr-- 1 root root 477 Jul 31 02:50 nux-dextop.repo
-rw-rr-- 1 root root 37763 Sep 24 13:44 redhat.repo
[repo-name]
name=Description of the repository
baseurl=http://somesystem.com/path/to/repo
enabled=1
gpgcheck=1
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:
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]
como en
$ sudo yum provides /logrotate.conf
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:
30.7 Instalacin/Actualizacin/Desinstalacin
$ rpm -i package-file
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:
Si no se provee un nombre de paquete, todos los paquetes son actualizados (de existir
actualizaciones para todos ellos).
En particular:
Mostrar una lista de los repositorios habilitados:
Si se provee text-file, yum leer y ejecutar los comandos del archivo en vez de la
terminal.
Para ver la historia de los comandos yum, con las opciones correctas, incluso
deshacer o rehacer comandos anteriores:
Solucin 30.1
1. $ sudo yum update
$ sudo yum check-update
$ sudo yum list updates
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
Todos los comandos de arriba deberan funcionar tanto para usuarios normales como para root.
$ yum grouplist
2. Identifique el grupo Backup Client y genere informacin acerca de l usando el comando:
[Webmin]
name=Webmin Distribution Neutral
baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1
gpgcheck=0
Objetivos de aprendizaje
zypper obtiene los paquetes desde los repositorios, instala, desinstala, actualiza y
resuelve cualquier dependencia necesaria. En la prctica es equivalente a yum y apt-
get en cuanto a que obtiene paquetes desde un repositorio y que resuelve dependencias.
$ zypper list-updates
$ zypper repos
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.
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:
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.
el cual est ubicado en la URI proporcionada y que se usar con el alias que se pas
como parmetro.
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.
Explicar qu es zypper.
Discutir las consultas que zypper puede hacer.
Instalar, desinstalar y actualizar paquetes usando zypper.
Objetivos de aprendizaje
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.
32.2 apt-get
Tal como yum y zypper, apt-get funciona con mltiples repositorios remotos.
32.4 Instalacin/Actualizacin/Desinstalacin
Limpie los archivos del cach y cualquier archivo de paquete que haya sido
instalado:
$ sudo apt-get clean
$ 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*
Ejecute los comandos de arriba tanto como root y como usuario normal. Nota alguna diferencia?
Solucin 32.2
1. $ apt-cache search bash
2. $ apt-cache search -n bash
3. $ apt-cache show bash
4. $ apt-cache depends bash
$ apt-cache rdepends bash
....
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
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
Objetivos de aprendizaje
....
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
....
Contrasea de usuario
La contrasea asignada a cada usuario.
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.
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
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 value of the GECOS field
-d, --home HOME_DIR new home directory for the user account
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-f, --inactive INACTIVE set password inactive after expiration
to
INACTIVE
-g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
-h, --help display this help message and exit
-l, --login NEW_LOGIN new value of the login name
-L, --lock lock the user account
-m, --move-home move contents of the home directory to the
new location (use only with -d)
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
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
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
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.
daemon:*:16141:0:99999:7:::
.....
beav:$6$iCZyCnBJH9rmq7P.
$RYNm10Jg3wrhAtUnahBZ/mTMg.RzQE6iBXyqaXHvxxbKTYqj.d
9wpoQFuRp7fPEE3hMK3W2gcIYhiXa9MIA9w1:16316:0:99999:7::
:
lastchange: das desde el 1ero de enero de 1970 desde que la contrasea fue
cambiada por ltima vez
A menos de que haya una buena razn para no hacerlo, usted debera usar el
archivo /etc/shadow.
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.
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.
Ejemplos:
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
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.
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.
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:
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.
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.
$ 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)
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
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 ssh-
keygen:
$ ssh-keygen
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.
$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQ
...0000aSd...hilda@sbc
$ 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.
Debera fallar porque se necesita una contrasea para user1; no ha sido configurada todava.
4. Configure la contrasea de user1 como user1pw e intente conectarse de nuevo como user1.
5. Revise los registros nuevos que fueron creados en los archivos /etc/passwd, /etc/group y
/etc/shadow.
6. Revise el archivo /etc/default/useradd y vea cules son los valores por defecto actuales.
Tambin eche un vistazo al archivo /etc/login.defs.
7. 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.
8. Eche un vistazo a /etc/shadow. Cul es la fecha de expiracin para la cuenta user1?
9. 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.
10. 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.
Puede usar cualquier nombre de usuario normal en vez de student. Lo nico que coincide es el
campo de nombre de usuario.
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:::
....
No vamos a pegar el contenido del segundo archivo porque es largo, pero examnelo en su
sistema.
New password:
8. $ sudo grep user1 /etc/shadow
user1:$6$OBE1mPMw$CIc7urbQ9ZSnyiniVOeJxKqLFu8fz4whfEexVem2TFpucuwRN1CCHZ
19XGhj4qVujslRIS.P4aCXd/y1U4utv.:16372:0:99999:7:::
user1:$6$OBE1mPMw$CIc7urbQ9ZSnyiniVOeJxKqLFu8fz4whfEexVem2TFpucuwRN1CCHZ
19XGhj4qVujslRIS.P4aCXd/y1U4utv.:16372:0:99999:7::16040:
Objetivos de aprendizaje
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.
Los usuarios en Linux pertenecen a uno o ms grupos. Los propsitos de esto incluyen:
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:
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.
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.
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.
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.
$ ssh bullwinkle@localhost
$ touch /home/rocky/somedir/somefile
touch: cannot touch /home/rocky/somedir/somefile: Permission denied
$ exit
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.
Objetivos de aprendizaje
$ 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:
Adicionalmente, existen otros permisos especializados para cada categora, tales como
los permisos setuid/setgid.
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.
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 9 15:04 a_file
$ chmod uo+x,g-w a_file
$ ls -l a_file
-rwxr--r-x 1 coop coop 1601 Mar 9 15:04 a_file
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:
Cuando esto se aplica con chmod, es necesario darle un valor para cada uno de los tres
dgitos, tal como aqu:
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.
en donde se separa el usuario propietario del grupo con dos puntos (o uno).
$ chown -R coop:aproject ./
$ chown -R coop:aproject subdir
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
$ umask 0022
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.
Ejemplo:
$ getfacl file1
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.
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:
$ ls -l afile
para ver cmo cambiaron los permisos. Intente algunas variaciones.
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:
Intente modificar el umask, cree archivos y vea los permisos resultantes, como en:
$ umask 0022
$ touch afile2
$ umask 0666
$ touch afile3
$ ls -l afile*
Objetivos de aprendizaje
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.
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.
#%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.
Hay otros parmetros para control, tales como include y substack. Por favor
haga man pam.d para ver los detalles.
/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)
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
2 Intente acceder tres veces con un usuario en particular (uno que tenga cuenta) y escriba mal la
contrasea.
3 Intente acceder con el mismo usuario, pero esta vez con la contrasea correcta.
Solucin 36.1
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
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...
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.
Objetivos de aprendizaje
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:
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.
Eventos inexplicables.
Los archivos pueden desaparecer sin que usted sepa cmo, quin o incluso
cundo ocurri.
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.
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.
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.
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.
Usuario:
Solamente se respalda el contenido del directorio de un usuario especfico.
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.
Una buena regla de oro es disponer de al menos dos semanas en copias de seguridad.
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.
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.
$ 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.
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.
La opcin -t o --list lista los archivos incluidos en el archivo comprimido, pero no los
extrae.
Ejemplos:
Extrae un archivo:
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.
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.
El formato .zip se usa raramente en Linux excepto para extraer archivos antiguos desde
otros sistemas operativos.
para generar un archivo comprimido. Note que el primer comando tiene exactamente el
mismo efecto que si uno hace:
o an ms simple:
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 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
mostrar una lista de opciones muy larga, algunas usadas frecuentemente y otras en muy
raras ocasiones.
37.13 Ejemplos de dd
Hacer una copia de seguridad de un disco duro completo a otro (datos en bruto):
$ dd if=/dev/sda of=/dev/sdb
$ dd if=/dev/sda1 of=partition1.img
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.
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.
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.
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.
-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.
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
-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.
37.19 mt
Tenga en cuenta que solo el usuario root puede usar mt. La sintaxis es la siguiente:
$ mt status
Rebobinar la cinta:
$ mt rewind
Borrar la cinta:
$ mt erase
$ mt fsf
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.
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.
1. $ cd backup
$ cd /usr ; tar zcvf include.tar.gz include
$ 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
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.
4. Compare el contenido con el directorio original desde el cual el archivo tar fue creado.
$ 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
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
.....
3. Un asunto confuso de rsync es que usted podra haber esperado que el comando correcto
fuera:
Sin embargo, si hace esto se dar cuenta que en realidad se crea un nuevo directorio,
include/include.
$ 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
#!/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
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).
IPv4: Una direccin de 32 bits, compuesta de 4 octetos (un octeto son 8 bits, o
un byte). Ejemplo:
148.114.252.10
2003:0db5:6123:0000:1f4f:0000:5529:fe23
Unicast:
Una direccin asociada a
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.
127.x.x.x
Reservada para la interfaz loopback (sistema local), donde 0 <= x <= 254.
Generalmente es 127.0.0.1.
0.0.0.0
255.255.255.255
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.
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.
Clase de
Decimal Hexadecimal Binario
Red
11111111 00000000 00000000
A 255.0.0.0 ff:00:00:00
00000000
255.255.0.0 ff:ff:00:00 11111111 11111111 00000000
B 00000000
11111111 11111111 11111111
C 255.255.255.0 ff:ff:ff:00
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
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.
$ hostname
wally
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
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
Obtener, configurar y cambiar el nombre del host, de acuerdo al sistema que est
utilizando.
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
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.
Estos nombres consisten en un identificador de tipo seguido por un nmero, como los
siguientes:
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.
Por ejemplo, en una mquina con dos interfaces de red PCI que habran
sido eth0 y eth1:
Estos nombres estn correlacionados con las ubicaciones fsicas del hardware en el
sistema PCI:
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8056 PCI-E
Gigabit Ethernet Controller (rev 12)
04:02.0 Ethernet controller: Marvell Technology Group Ltd. 88E8001
Gigabit Ethernet Controller (rev 14)
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.
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"
$ 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'
$ 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
$ ifdown 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
ip puede usarse para una amplia variedad de tareas. Puede ser usado para desplegar y
controlar dispositivos, enrutamiento, polticas de enrutamiento y tneles (tunneling).
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
$ ip link
39.9 Enrutamiento
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
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.
en /etc/network/interfaces.
En cualquier sistema es posible configurar el router por defecto con un comando como el
siguiente:
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
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:
$ cat /etc/sysconfig/network-scripts/route-eth0
10.5.0.0/16 via 172.17.9.1
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.
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.
lo cual:
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, y muestra una salida
continuamente actualizada, como top.
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
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.
1. $ ifconfig eth0
$ route -n
$ cp /etc/resolv.conf resolv.conf.keep
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=noted from step 1
NETMASK=noted from step 1
GATEWAY=noted from step 1
4. $ sudo reboot
$ ping hostname
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:
2. As root do:
$ 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:
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.
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:
Objetivos de aprendizaje
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.
iptables
firewall-cmd
ufw
system-config-firewall
firewall-config
gufw
yast
40.3 firewalld
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.
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
Sin embargo esto no es persistente. Para hacerlo persistente, tiene que agregar la
siguiente lnea a
/etc/sysctl.conf:
net.ipv4.ip_forward=1
$ sudo sysctl -p
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.
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.
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.
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).
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.
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.
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.
Si bien es cierto que el paquete firewalld (el cual incluye la herramienta multipropsito firewall-
cmd) est disponible en la mayora de las distribuciones Linux recientes, es posible que no est
instalado en su sistema.
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:
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.
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
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.
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.
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.
$ 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]
....
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.
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
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.
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.
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
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.
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:
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.
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.
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.
Resolucin de hostname:
Ejecute dig o host con una URL y verifique si el DNS est funcionando
apropiadamente.
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.
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.
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
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 realizar una serie de preguntas al iniciar. Una de ellas es si desea
o no montar los sistemas de archivos (de ser posible).
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
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.
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.
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.
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.
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.
Puede usar chroot para acceder de mejor forma al sistema de archivos raz (/).
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.
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, usted todava
puede montar sistemas de archivos para recuperar informacin que podra perderse
durante una reinstalacin.
Para entrar en modo de emergencia usted debe seleccionar una entrada desde el men
de arranque de GRUB y luego presionar e para editar. Luego agregue la
palabra emergency a la lnea de comandos del kernel antes de indicarle al sistema que
arranque. Se le pedir la contrasea de root antes de llevarlo a una shell.
Tenga en cuenta que tambin puede entrar en modo de emergencia cuando el arranque
falla debido a una serie de razones, incluyendo sistemas de archivos daados.
init es iniciado.
La red no se activa.
En este modo su sistema arranca en runlevel 1 (en lenguaje SysVinit). Debido a que el
modo monousuario intenta montar los sistemas de archivos automticamente, no lo puede
usar cuando el sistema de archivos raz no puede montarse satisfactoriamente, o si la
configuracin de init est daada.
Para arrancar en modo monousuario se usa el mismo mtodo descrito para modo de
emergencia, pero con la excepcin de reemplazar la palabra emergencia con single.
En los siguientes ejercicios vamos a daar deliberadamente el sistema y luego recuperarlo a travs
del uso de medios de rescate. Por lo tanto, resulta obviamente prudente asegurarse de que puede
arrancar desde el medio de rescate antes de intentar cualquier cosa ms ambiciosa.
Reinicie y asegrese de que sabe cmo forzar el sistema para que arranque desde el medio de
rescate (es probable que tenga que jugar con la configuracin de la BIOS). Elija el modo de rescate
en el inicio del sistema.
Si est usando una mquina virtual el procedimiento es lgicamente el mismo, con dos diferencias:
Acceder a la BIOS puede ser difcil dependiendo del hipervisor que utilice. Algunos de ellos
requieren combinaciones de teclas muy rpidas, as es que lea la documentacin y
asegrese que sabe cmo hacerlo.
Puede usar un disco ptico o fsico, asegurndose que est montado en la mquina virtual,
y si es USB podra tener algunos obstculos para asegurarse de que la mquina virtual
puede reclamar el dispositivo fsico. Generalmente lo ms fcil es conectar un archivo de
imagen .iso directamente a la mquina virtual.
Si est trabajando con una mquina virtual, obviamente las cosas son menos peligrosas, y si tiene
miedo de corromper el sistema de forma irreparable, simplemente haga una copia de seguridad de
la imagen de la mquina virtual antes de realizar estos ejercicios. Siempre puede reemplazar la
imagen con la del respaldo ms tarde. No realice los siguientes ejercicios a menos que est seguro
de que puede arrancar su medio de rescate/recuperacin
1. Como root (no con sudo), cambie la contrasea de root. Vamos a pretender que no conocemos
la contrasea nueva.
2. Desconctese e intente conectarse de nuevo como root, usando la contrasea antigua.
Obviamente no podr.
3. Arranque usando el medio de rescate y seleccione Rescue cuando se le presente la opcin.
Permita que se monten los sistemas de archivos y luego vaya a una lnea de comandos.
4. Vaya al ambiente chroot, de tal forma que tenga acceso a su sistema:
5. $ chroot /mnt/sysimage
6. y reconfigure la contrasea de root a su valor original.
7. Salga, remueva el medio de rescate y reinicie. Debera poder conectarse de forma normal
ahora
Sea cuidadoso: asegrese de ejecutar el comando correcto y que el archivo tiene el largo
adecuado:
$ sudo ls -l /root/mbrsave
-rw-r--r-- 1 root root 446 Nov 12 07:54 mbrsave
1. Este ejercicio ha sido creado especficamente para sistemas basados en Red Hat. Usted debera
ser capaz de construir fcilmente las substituciones adecuadas para otras familias de
distribuciones.
Tenga en cuenta que hemos elegido un paquete que generalmente no tiene dependencias con
el fin de simplificar las cosas. Si usted elige algo que las tiene, tenga el cuidado de reinstalar
cualquier cosa que desinstale y que sea necesario.
3. Reinstale (o instale) zsh desde el ambiente de rescate. Primero monte el medio de instalacin
en /mnt/source:
La opcin --force le indica a rpm que use el directorio fuente para determinar la informacin
de las dependencias y otras cosas. Tenga en cuenta que si la imagen de instalacin es mucho
ms antigua que su sistema, el cual ha tenido probablemente muchas actualizaciones, el
procedimiento completo podra colapsar.
4. Salga y reinicie.
$ rpm -q zsh
zsh-5.0.2-7.el7.x86_64 6.
6. $ zsh
....
[coop@q7]/tmp/LFS201%
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.