Documentos de Académico
Documentos de Profesional
Documentos de Cultura
pág. 1
Tabla de contenido
Formación de la comunidad de aprendizaje: .................................................................................................... 8
Reglas de oro: .................................................................................................................................................... 8
Cumplimiento de expectativas: ......................................................................................................................... 9
Introducción ................................................................................................... 10
Unidad 1.- Instalación del SistemaOperativo y Ajustes posteriores .................... 11
Introducción .................................................................................................................................................... 11
Sistema Operativo UNIX .................................................................................................................................. 13
Sistema Operativo Linux .................................................................................................................................. 14
Requerimientos de Hardware de Linux ........................................................................................................... 17
Distribuciones de Linux .................................................................................................................................... 18
Organización de Linux ...................................................................................................................................... 18
Sistema de Archivos en Linux ........................................................................................................................... 21
Procesamiento de Texto .................................................................................................................................. 23
pág. 2
fsck ................................................................................................................ 97
Uso de dd ......................................................................................................................................................... 99
Sintaxis Básica: ................................................................................................................................................. 99
A) Sobre discos duros y particiones: .............................................................................................................. 102
B) Sobre un CD/DVD ...................................................................................................................................... 103
C) Sobre MBR y VBS: ...................................................................................................................................... 104
D) Otros: ........................................................................................................................................................ 105
pág. 3
pág. 4
pág. 5
pág. 6
pág. 7
Alineación de expectativas:
• El instructor recabará las expectativas de los participantes respecto al curso, con el fin de
dejarles claro el objetivo del mismo.
• En caso de que alguna expectativa no coincida con los temas que el curso contiene, el
instructor dejará claro cuáles de las expectativas expresadas no serán cubiertas con el curso y
porqué.
• Las expectativas alineadas serán anotadas en hojas de rotafolio para su revisión al término
del curso.
• Durante el desarrollo del curso el instructor deberá cubrir las expectativas alineadas.
Presentación del objetivo del curso:
• El instructor presentará a los participantes el objetivo del curso, aclarando dudas al
respecto si las hubiese.
Reglas de oro:
• El instructor promoverá el establecimiento de reglas por parte de los participantes que se
observarán a través del curso; por lo que puede proponer: tiempo de tolerancia para iniciar las
sesiones, respeto hacia los compañeros, participación de todos en técnicas y ejercicios grupales,
etc.; se incluirán todos los puntos que los participantes consideren pertinentes.
pág. 8
Cumplimiento de expectativas:
• Al finalizar el curso el instructor deberá llevar a cabo una revisión de las expectativas
alineadas que se anotaron en hojas de rotafolio al inicio del curso.
Se revisará cada una de las expectativas alineadas palomeando las que hayan sido
cumplidas, y el instructor explicará de qué manera se llevó a cabo tal cumplimiento.
pág. 9
Introducción
Linux es un sistema operativo de la familia Unix, gratuito, creado mediante la política de
“código abierto”. Estas características implican un gran ahorro en los costes de instalación de
los equipos, pero también una mayor especialización por parte del personal informático.
En todo sistema Unix existe un usuario administrador (root), que controla el funcionamiento
completo del sistema, tiene acceso universal y puede realizar cualquier operación con los
datos y los dispositivos de la máquina.
Por lo tanto, este curso tiene como finalidad la formación de profesionales en el área de
Administración de Redes que le permite al participante obtener conocimientos profundos en el
área de infraestructura. Combina una sólida formación teórico -práctica con una metodología
que logra un importante nivel de entrenamiento técnico.
pág. 10
Introducción
Un sistema de computadora es un dispositivo electrónico programable que puede
almacenar, recuperar y procesar datos. Ejecuta un conjunto de instrucciones llamado
programa. La ejecución del programa da al usuario final el resultado deseado. Un ejemplo de
ejecución de un programa es cuando se trabaja con una calculadora en un sistema
operativo Windows.
Una computadora es capaz de realizar múltiples tareas, tales como:
• Ejecutar programas de usuario
• Conectar computadoras en una Red de Área Local (Local Área Network – LAN)
• Compartir los recursos
• Controlar su hardware
Para que una computadora sea capaz de hacer todo esto, requiere de un programa especial
llamado sistema operativo. El sistema operativo reside en el disco duro de la
computadora y actúa como un puente entre los programas de usuario y los programas
que controlan le hardware de la computadora.
El sistema operativo trabaja principalmente en segundo plano. Se encarga de los
componentes hardware de una computadora, además de asegurar el inicio y ejecución de
diversos programas. También se encarga de los datos almacenados en los dispositivos de
almacenamiento de la computadora.
El sistema operativo es el responsable de las siguientes funciones del sistema de
computadora:
• Arrancar o iniciar la computadora
• Actuar como interfaz entre el CPU y el mundo externo
• Coordinar los dispositivos del sistema
• Coordinar las aplicaciones o programas en ejecución
pág. 11
pág. 12
pág. 13
El sistema operativo UNIX corre en un rango de computadores desde microcomputadoras
hasta mainframes. Algunas de sus características son:
Es conocido como un sistema operativo “ abierto” dado que puede ser llevado e instalado
en cualquier clase de sistema de computadora y plataforma de hardware.
Normalmente, los sistemas operativos son escritos en lenguaje ensamblador. Sin embargo,
UNIX esta escrito en un lenguaje de alto nivel y su código fuente esta disponible
fácilmente. Esto supone una ventaja para los programadores cuando incorporan cambios
para ajustarse a sus necesidades.
Es un sistema multiusuario y multitarea. Multitarea significa que el sistema operativo
coordina múltiples tareas o trabajos en forma simultanea. Mientras un usuario esta
compilando un programa en C, otro puede crear documentos usando un editor, cada
ignorando la presencia del otro.
UNIX es uno de los sistemas operativos más poderosos existentes, por el hecho de poder
compartir recursos en tiempo real.
A pesar de que UNIX esta desarrollado para programadores, proporciona un entorno tan
flexible que también es usado en negocios, ciencias, educación e industria.
Los interruptores de telecomunicación y sistemas de transmisión son algunos ejemplos del
uso del sistema operativo UNIX
A continuación se aprenderá acerca del sistema operativo Linux:
Por los años 80, los sistemas operativos eran básicamente propietarios, lo que significaba que
se tenía que usar solo el sistema operativo proporcionado para una plataforma especifica. El
proyecto GNU fue fundado por Richard Stallman, quien fue el también fundador de Free
Software Foundation (FSF), autor de GNU GPL (General Public License) y el desarrollador
original de algunos programas de software GNU (por ejemplo, el compilador gcc y el editor
de texto Emacs)
pág. 14
Las principales metas del proyecto GNU incluyeron las siguientes:
• Desarrollar un sistema operativo compatible con UNIX
• Soportar diferentes arquitecturas de hardware
• Hacer que el sistema operativo estuviese disponible libre de costo para
asegurar que los usuarios pudiesen redistribuir todo el sistema y cambiar ó
contribuir a alguna parte de él.
En 1990, la mayoría de las piezas de software del sistema operativo basado en GNU se
habían escrito, excepto la más importante, el kernel. El kernel es el núcleo del sistema
operativo. Mas tarde, el kernel gratuito basado en UNIX, desarrollado por Linus
Torvalds fue combinado con el sistema GNU. Así nació un sistema operativo, el sistema GNU
basado en Linux.
Las etapas significativas en la evolución de Linux son:
• En 1991, Linus Torvalds desarrollo Linux con el soporte de desarrolladores a lo
largo del mundo y lo llamo Linux
• El lanzo la versión 0.02 de Linux en 1991
• En 1994, fue lanzada la versión 1.0 de Linux
• La versión 2.6 completa fue lanzada en Diciembre de 2003. Sin embargo, su
desarrollo continúa.
pág. 15
Los siguientes son algunos de los hechos básicos acerca del sistema operativo Linux:
Es desarrollado, escrito, distribuido y respaldado bajo GPL de GNU (GNU no es UNIX).
Como resultado, su código fuente puede ser distribuido gratuitamente y disponible
para el publico en general.
Los sistemas Linux se usan para redes, desarrollo de software, soluciones de
alojamiento basados en Web y como plataforma de usuario final.
La mascota oficial, que Linus eligió para su sistema operativo, es el pingüino Linux
llamado Tux (Torvalds Unix), que se presente en la figura 1.2
pág. 16
Linux soporta plataformas de hardware tales como Intel x86, PowerPC, S/390, SPARC y
Alpha. Los diferentes requerimientos de hardware para Linux se listan en la siguiente tabla
Hardware Requerimientos
CPU La serie x86 de Intel y sus compatibles,
DEC, Alpha, Motorola, PowerPC, etc.
Tarjeta Madre (MotherBoard) Sistemas de bus PCI, EISA, VESA y MCA.
Memoria 64 MB(mínimo), 256 MB recomendados
para mayor eficiencia y ejecución
Monitor y Adaptador de Video CGA, EGA, VGA, IBM monochrome, Súper
VGA y otras tarjetas aceleradoras de video
Dispositivos de Puntero Ratón serial estándar como Logitech, serie
MM, Microsoft 2 botones, Sistemas Mouse de 3
botones, etc.
Controlador de Disco Duro IDE, EIDE, MFM \, RLL y la mayoría de los
controladores ESDI
Espacio de Disco Duro Requiere un mínimo de 100 MB de espacio
para una instalación mínima de Linux. Para una
instalación completa con todos los servicios, los
requerimientos pueden ser tanto como 2 GB
pág. 17
Distribuciones de Linux
Como el código fuente para Linux fue desarrollado esta siendo distribuido gratuitamente,
diferentes compañías han desarrollado sus propias versiones o distribuciones de Linux Cada
una de estas variedades tiene su propio conjunto de características, tales como
procedimientos de instalación y administración, paquetes de software y configuraciones.
Muchas de ellas están configuradas para un tipo específico de computadora.
Las 10 distribuciones principales se listan a continuación:
Organización de Linux
El sistema operativo Linux esta organizado funcionalmente en los siguientes tres niveles:
Kernel (Núcleo)
Shell (Interprete de Comandos)
Herramientas y aplicaciones.
La representación esquemática de las tres partes principales del sistema operativo Linux se
presenta en la Figura 4
pág. 18
kernel
Shell
Programas
El kernel
El kernel es el núcleo de un sistema operativo, así como la CPU es el núcleo de un
sistema de computadora. El kernel es una colección de programas, la mayoría escritos en C y
solo existe un kernel para cualquier sistema operativo. Este se comunica directamente con el
hardware y sin un kernel un sistema operativo no puede interactuar con el hardware.
Algunas de las tareas importantes del kernel son:
• Verificar si el usuario es un usuario autorizado
• Hacer seguimiento de los diferentes programas que están ejecutándose y
asignar un tiempo especifico a cada programa
• Asignar espacio de almacenamiento para los archivos en el sistema
• Ejecutar el programa shell
• Manejar la transferencia de información entre la computadora y las terminales
En un sistema multiusuario, a cada terminal se le asigna un numero y los usuarios trabajan
en terminales conectadas a la computadora principal. El sistema operativo se comunica
con la Terminal a través de los números de Terminal
pág. 19
El Shell
El sistema operativo Linux usa un shell para transferir los comandos desde el teclado a la
computadora. El shell (interprete de comandos) es solo otro programa escrito en C.
Actúa como un intérprete entre los programas de los usuarios y el kernel. Traduce los
comandos del usuario en la acción apropiada. El shell interactúa con el usuario, mientras que
el kernel interactúa con el hardware de la maquina.
El shell es el programa que toma comandos y, ejecuta el programa apropiado o lo traduce en
instrucciones que el kernel entiende. Por ejemplo, un comando tal como chdir será
traducido por el shell a un formato entendible por el kernel, mientras que un comando tal
como ls será ejecutado por el shell como un programa en el directorio /usr/bin/ls.
El shell es una interfaz basada en texto para el sistema Linux. En Linux, las interfaces
graficas tales como el Sistema X Window (similar al presentado por Windows NT y 2000, que
permiten al usuario ejecutar comandos usando el ratón y el teclado) también pueden ser
usadas. El shell por defecto en Linux es bash (Bourne Again Shell). Otros tipos de shell
disponibles en Linux son:
csh (C Shell)
ksh (Korn Shell)
sh (Shell)
esch (enhanced C Shell)
Bourne Shell y el C Shell son los que se usan comúnmente. Ambos son controlados por
comandos. El Korn Shell es el menos usado. Todos los shells sirven para el mismo propósito,
pero tiene diferentes características y sintaxis.
Herramientas y Aplicaciones
pág. 20
pág. 21
Bloque de Arranque
Consiste de un bloque de disco que contiene el código para iniciar la computadora,
Ocupa el primer bloque de un sistema de archivos
Un sistema solo requiere de un bloque de arranque para iniciar el sistema. En el resto de los
sistemas de archivos, este bloque permanece vacío.
Superbloque
Esta a continuación del bloque de arranque en el sistema de archivos
Consiste de un bloque de disco que contiene información acerca del sistema de archivos
Contiene información acerca del número de bloques en el sistema de archivos, el número
de bloques asignados para inodos (se aprenderá acerca de los inodos más adelante) y el
número de bloques que están actualmente libres.
Bloque Inodo
Es el tercer grupo de bloques en un sistema de archivos.
Contiene más de un bloque de disco para mantener información acerca de los archivos
en el sistema de archivos.
Bloque de Datos
Almacena el contenido del archivo
Sigue a los bloques asignados para inodos.
Un sistema de archivos contiene cierto número de bloques de datos.
Antes de proceder a aprender acerca de la partición del disco, se entenderá un poco mas
acerca de la información que mantiene inodos. Los inodos mantienen información acerca del
propietario del archivo, los bloques de disco usados en el archivo, etc. Los archivos, por
otro lado, contienen los datos del archivo.
Asuma que se crea un archivo llamado midocumento.txt. Este debe ser almacenado en el
disco. Dependiendo del sistema de archivos al que este asociado, los datos del archivo se
almacenaran en los bloques de datos y otra información administrativa acerca de este, será
almacenada en los bloques inodos.
pág. 22
Partición de Disco
Aquí, el sistema divide el disco en particiones de disco.
Cada partición consiste en bloques, situados en forma contigua, pero separados de las otras
particiones
La partición puede ser un sistema de archivos o un espacio de intercambio
(space swap).
Un espacio de intercambio (space swap) se usa para implementar la memoria virtual,
donde una porción de la memoria principal se almacena temporalmente
La partición primaria es donde se almacenan los archivos relacionados al arranque.
Las particiones del espacio de intercambio (space swap) son una secuencia lineal de
bloques.
El tamaño de los archivos cambia a través del tiempo (crece o disminuye)
Un bloque de datos de un archivo puede no estar en una secuencia lineal de bloques. En
vez de ello, puede estar disperso a lo largo de toda la partición.
Procesamiento de Texto
El sistema Linux proporciona métodos poderosos de procesamiento de un texto.
Un ejemplo simple de procesamiento es encontrar el número de ocurrencias de un patrón
dado en un texto.
A continuación se considerara un ejemplo:
“La pronunciación de la palabra pronunciación es pronunciación”
En esta oración el patrón ‘pronunciación’ ocurre tres veces en el texto. Cierto número de
herramientas, tales como grep, egrep y fgrep, están disponibles para realizar el
procesamiento de texto.
También existen otras herramientas de procesamiento de texto, que son conocidas como
editores. Estos proporcionan las funcionalidades para crear, editar (modificar) y guardar
texto.
pág. 23
Programación
Se puede programar a través del shell y esto se conoce como programación de shell Linux
proporciona más de un shell. El Bourne Again Shell (popularmente conocido como bash) es
el shell mas usado. Se aprenderá acerca de los diferentes shells que proporciona
Linux en la unidad 2: El Sistema Linux. Cada shell en Linux proporciona la capacidad de
programación. Un programa shell puede invocar las herramientas proporcionadas en Linux
a través de una sintaxis simple. La programación de shell es similar a un lenguaje de
programación como C. pero con una sintaxis diferente.
pág. 24
Combinado con el poder del procesamiento de texto, la programación en Linux es
extremadamente poderosa. La administración de sistemas complejos en sistemas operativos
estilo UNIX se hace típicamente a través de la programación del shell. El administrador del
sistema usa la programación del shell en forma extensiva para administrar y monitorear el
sistema operativo.
Documentación.
Linux proporciona una documentación bastante elaborada para todas sus herramientas. Las
herramientas son referidas comúnmente como comandos.
El sistema Linux proporciona cierto número de comandos. Algunos de ellos son:
clear – limpia la pantalla
date – muestra la fecha y hora
cal – muestra el calendario del mes actual
who – muestra los usuarios que están actualmente conectados al sistema
Sin embargo, dado que los comandos son tan extensos, no es posible para ningún
usuario recordar todos los comandos y la sintaxis asociada con estos.
La documentación puede ser leída fácilmente con la ayuda de una herramienta controlada por
comandos llamada man.
A continuación se dan ejemplos algunos comandos de uso en conjunto con man
man clear
man date
man man
Los primeros dos usos del comando man muestran la documentación para los comandos
clear y date, respectivamente. El tercer uso, muestra la documentación del mismo
comando man
pág. 25
pág. 26
Ilustración 5 Distribuciones de Linux
Una distribución no es otra cosa, que una recopilación de programas y ficheros, organizados y
preparados para su instalación. Estas distribuciones se pueden obtener a traves de Internet, los
cuales contendrán todo lo necesario para instalar un sistema Linux bastante completo y en la
mayoría de los casos un programa de instalación que nos ayudara en la tarea de una primera
instalación. Casi todos los principales distribuidores de Linux, ofrecen la posibilidad de bajarse
sus distribuciones, via FTP (sin cargo alguno).
pág. 27
Ilustración 6 Distribuciones en los ultimos años
Si vas a instalar el sistema por primera vez, te recomiendo que pruebes una distribucion LiveCD.
Con una de ellas podras probar Linux sin necesidad de instalarlo. A continuación puedes
encontrar informacion sobre las distribuciones más importantes de Linux (aunque no las únicas).
http://www.ubuntu.com/
pág. 28
http://www.redhat.com/
https://www.suse.com/
pág. 29
http://www.gentoo.org/
http://www.mandrivalinux.org/
pág. 30
pág. 31
deberían ser montados en una partición aparte en el mismo disco, como por ejemplo,
montar el directorio /home en otra partición del mismo disco, independiente de la
partición principal del sistema; de esta forma, puede repararse el sistema sin afectar o
borrar los documentos de los usuarios. (/var/mail, /var/spool, /var/run, /var/lock,
/home...)
Compartidos: Contiene archivos que se pueden encontrar en un ordenador y utilizarse en
otro, o incluso compartirse entre usuarios.
Restringidos: Contiene ficheros que no se pueden compartir, solo son modificables por el
administrador. (/etc, /boot, /var/run, /var/lock...)
Estructura de Archivos
Existe una estructura de archivos estándar FHS (Filesystem Hierarchy Standard) El estándar de
jerarquía de archivos que es un conjunto de recomendaciones orientadas a la compatibilidad de
aplicaciones, herramientas de administración y desarrollo entre distintos sistemas. Esta es una
de las estructuras de archivos que deja la instalación por defecto de CentOS
Pero esa estructura tiene ventajas tales como:
• Permitir al software conocer la ubicación de directorios y archivos instalados; Permitir al
software conocer donde se deben instalar los archivos de un programa
• Permitir al usuario conocer dónde encontrar los archivos y directorios de los programas
instalados. En un sistema que cumpla con las especificaciones del FHS, los directorios del
sistema de archivos raíz o "/", deben ser suficientes para arrancar, reparar y/o recuperar
el sistema.
Los siguientes directorios son necesarios en el directorio raíz o "/":
En este directorio están los ficheros ejecutables básicos (bin = binarios) Directorio /boot
Aquí están los ficheros y directorios de arranque (boot) Directorio /dev
Contiene ficheros de dispositivos. Directorio /etc
Contiene ficheros y directorios de configuración específicos de tu sistema.
pág. 32
Directorio /bin: En este directorio están los ficheros ejecutables básicos (bin = binaries)
Directorio /boot: Aquí están los ficheros y directorios de arranque (boot)
Directorio /dev: Contiene ficheros de dispositivos.
Directorio /etc: Contiene ficheros y directorios de configuración específicos de tu sistema.
Directorio /home: Contiene los archivos utilizados por el usuario, documentos, escritorio,
descargas, etc.
Directorio /lib: Bibliotecas compartidas esenciales para los binarios de /bin/, /sbin/ y el
núcleo del sistema.
Directorio /lost+found: Directorio especifico para archivos perdidos. Cada partición tiene
el suyo propio independientemente.
Directorio /media: Puntos de montaje para dispositivos de medios como unidades lectoras
de discos compactos.
Directorio /misc: Abreviación de miscelánea.
Directorio /mnt: Sistemas de ficheros montados temporalmente.
Directorio/opt: En este directorio se suelen almacenar todos los archivos de una
instalación fuera de los repositorios como puede ser cuando instalamos un .deb
Directorio/proc: Directorio que contiene información sobre diferentes partes del sistema,
cpu, discos, tiempo uptime, irqs, memoria, etc
Directorio/root: Directorio particular del superusuario del sistema ( root )
Directorio/sbin: Contiene archivos ejecutables que por lo general son comandos usados
para la administración del sistema.
Directorio /srv: Es un directorio que contiene datos específicos que son servidos por el
sistema servidor (SeRVer).
Directorio /sys: Contiene parámetros de configuración del sistema que se está ejecutando.
pág. 33
Los siguientes directorios jamás deberán estar fuera de la partición que corresponda a /, es
decir, “jamás se deben asignar como particiones separadas”:
/etc
/bin
/dev
/lib y /lib64
/media
/mnt
/proc
/root
pág. 34
/sbin
/sys
Para futuras versiones de CentOS, el directorio /var también deberá estar dentro de la misma
partición que corresponda a /, pues el proceso de arranque, que será gestionado por Systemd,
así lo requerirá.
Otras particiones que se recomienda asignar, son:
Partición Función
pág. 35
Partición Función
Instalacion Centos
CentOS es una distribución Linux de clase empresarial derivado de fuentes libremente ofrecidos
al público por un destacado proveedor de América del Norte Enterprise Linux. CentOS se ajuste
plenamente a la política de redistribución del proveedor de aguas arriba y aspira a ser 100%
compatible a nivel binario. (CentOS principalmente cambia los paquetes para eliminar marcas
comerciales del proveedor y obras de arte.) CentOS es gratuito. CentOS es desarrollado por un
equipo pequeño pero creciente número de desarrolladores del núcleo. A su vez, los
desarrolladores principales están respaldados por una activa comunidad de usuarios como los
administradores de sistemas, administradores de redes, los usuarios empresariales, gerentes,
colaboradores principales de Linux y los entusiastas de Linux de todo el mundo. CentOS tiene
numerosas ventajas sobre algunos de los proyectos de otros clones, incluyendo: una activa y la
creciente comunidad de usuarios, reconstruida rápidamente, probado y QA'ed paquetes de
erratas, una extensa red de servidores espejos , los desarrolladores que están tocados y de
respuesta, múltiples vías de apoyo gratuitos, como un Chat IRC , listas de correo , Foros , una
dinámica de preguntas frecuentes . Este sitio hace uso de Javascript. Si su navegador no
funciona con JavaScript, le recomendamos que use Firefox.
pág. 36
Introducción
Bienvenidos a la versión 6.5 de CentOS, una Distribución Linux de Rango Empresarial obtenida a
partir de los fuentes puestos a libre disposición del público por nuestro Proveedor de OS
(Upstream OS Provider , UOP).
CentOS se adapta completamente a la política de redistribución de nuestro proveedor y aspira a
ser 100% compatible con sus binarios (CentOS principalmente modifica los paquetes para
eliminar la marca y el diseño gráfico original).
Hemos decidido no imitar la utilización que hace el UOP de los Códigos de Instalación. Todos los
canales están a disposición del administrador del sistema en el momento de la instalación.
Siguiendo la práctica del proveedor original de los fuentes, no hay soporte para actualizar la
instalación desde una versión principal anterior de CentOS (en estos momentos CentOS 5 o
CentOS 4) a una versión posterior. Esto no es una limitación impuesta por CentOS, sino que
refleja la postura del proveedor en esta cuestión.
Quienes se sientan aventureros y quieran experimentar, que no olviden hacer y comprobar
previamente una copia de respaldo. Como aviso para aquellos que intenten la actualización a
pesar de esta advertencia, por ejemplo mediante la no soportada opción upgreadeany
utilizando la línea de comandos del medio de instalación, por favor, tengan en cuenta que
necesitarán recuperar manualmente el paquete centos-release actual, hacer manualmente un
rpm -e nodeps para eliminar el paquete centos-release anterior, y entonces instalar
manualmente el paquete centos-release de CentOS 6, pues de lo contrario yum no tendría
ninguna posibilidad de funcionar correctamente.
PROCEDIMIENTO
Al hacer boot se nos dan 2 opciones para instalar, la primera el sistema detectara la tarjeta de
vídeo y entrara en modo gráfico (lo cual a veces falla) por lo tanto recomiendo elegir la segunda
opción; la cual carga un driver básico de vídeo que diría que todos los equipos reconocen sin
problemas. Presionamos Enter
pág. 37
pág. 38
ENTORNO GRAFICO:
Vamos a iniciar la instalación del sistema operativo, damos clic en next
Seleccionamos el idioma
pág. 39
Seleccionamos la distribución del teclado
Damos en la opción Basic que aparece por defecto
pág. 40
Damos en la opción no conservar datos, puesto que tenemos un espacio ya designado en
el disco para la instalación
Le asignamos el nombre a nuestro servidor (Dominio)
pág. 41
Verificamos que el DHCP este marcada la casilla conectar automático
Seleccionamos el área o región para los usos horarios
pág. 42
Asignamos una contraseña para nuestro administrador root
«Usar todo el espacio» eliminará cualquier partición de cualquier otro sistema operativo
presente y creará de forma automática las particiones necesarias.
«Reemplazar sistema(s) Linux existente(s)» sólo eliminará todas las particiones Linux
existentes y creará de forma automática las particiones necesarias.
«Achicar el sistema actual» cambiará el tamaño de las particiones existentes de otros
sistemas operativos como Windows, haciendo el espacio necesario para poder instalar un
diseño predeterminado de particiones Linux.
«Usar espacio libre» creará de forma automática las particiones necesarias en el espacio
disponible, basándose sobre un diseño predeterminado.
«Crear un diseño personalizado» permitirá elegir las particiones estándar o volúmenes
lógicos, que uno requiera.
pág. 43
Seleccionamos crear un diseño personalizado, para asignarle los porcentajes a las carpetas
del sistema manualmente
En esta imagen muestra que tenemos 50 GB de espacio disponible, lo distribuiremos de la
siguiente forma: el 50% lo dividimos para las carpetas (/) y (home). Y el 50% restante lo
dividimos en 6 para las demás carpetas, EJEMPLO
pág. 44
Seleccionamos crear partición estándar y le asignamos el porcentaje
pág. 45
Le damos en formatear
pág. 46
Elegimos la opción que necesitemos, en este caso servidor básico y seleccionamos la opción
personalizar ahora para seleccionar los paquetes a instalar
pág. 47
pág. 48
Esperamos que carguen los archivos de la instalación
pág. 49
Reiniciamos
Conceptos importantes, hay que recordar que siempre hay que distinguir los distintos
dispositivos en las instalaciones:
/dev = dispositivo
/sda = disco duro
/st0 = dispositivo de cinta grabable
/nst0 = dispositivo de cinta en modo no regrabable
Y los tipos de particiones, anteriores, actuales y los mas importantes:
ext2 - Second Extended Filesystem es un consolidado y maduro sistema de archivos para
GNU/Linux muy estable. Uno de sus inconvenientes es que no tiene apoyo para el registro
(journaling) (véase más abajo) o las barreras. La falta de registro por diario («journaling») puede
traducirse en la pérdida de datos en caso de un corte de corriente o fallo del sistema. También
puede no ser conveniente para las particiones root (/) y /home, porque las comprobaciones del
sistema de archivos pueden tomar mucho tiempo.
Un sistema de archivos ext2 puede ser convertido a ext3.
ext3(soporta Jornaling) - Third Extended Filesystem es, esencialmente, el sistema de archivos
ext2 pero con el apoyo de journaling y la escritura de barreras. Es compatible con ext2, bien
probado, y extremadamente estable.
ReiserFS(soporta Jornaling) - Sistema de archivos con journaling y altas prestaciones de Hans
Reiser (V3) que utiliza un método muy interesante de transferencia de datos basado en un
algoritmo creativo e innovador. ReiserFS es anunciado como muy rápido, especialmente cuando
se trata de muchos archivos pequeños. ReiserFS es rápido en dar formato, sin embargo,
comparativamente lento en el montaje. Muy maduro y estable. ReiserFS (V3) no está siendo
activamente desarrollado en este momento. Generalmente considerado como una buena
opción para /var.
XFS (soporta Jornaling) - Primeros sistemas de archivos con journaling desarrollado
originalmente por Silicon Graphics para el sistema operativo IRIX y portado después a
GNU/Linux. Proporciona un rendimiento muy rápido en los archivos y sistemas de archivos
grandes y es muy rápido en el formato y montaje. Pruebas de benchmark comparativa han
demostrado que es más lento cuando trata con muchos archivos pequeños. XFS es muy maduro
pág. 50
y ofrece capacidad de desfragmentación en línea, además este permite soporte para ACLs sin
opciones de montado especial.
Felicidades Tu Servidor ha sido instalado de manera satisfactoria!!!!
Hay que tener en cuenta la importancia de recordar lo siguiente:
1. Para que vamos a utilizar nuestro servidor, es decir para administración de páginas
web, administración de puntos de venta, administración corporativa, etc.
2. El ciclo de vida que manejaremos dependiendo del tipo de instalación que tendremos y
el cual es vital para este punto.
3. El Hardware que se maneja y el volumen de usuarios a los cuales se les dara soporte
con este.
Una vez terminando de instalar el servidor por ahora solo hacermos una corrección al server
para poder tener salida a internet y este es realizando una corrección al archivo que esta
ubicado en la siguiente ruta
Vi /etc/sysconfig/network-scripts/ifcfg-eth0
Lo cual nos abrirá un archive con la siguiente estructura:
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT="yes"
HWADDR=08:00:27:89:15:BE
TYPE=Ethernet
BOOTPROTO=dhcp
La opción ONBOOT, debe estar en no, con la tecla i, podremos insertar la modificación, entrares
y lo modificaremos a “yes” y saldremos del archivo con “:wq” y reiniciaremos el sistema.
Tenga cuidado de no modificar nada mas en el archivo pues no tendrá acceso a internet.
pág. 51
Vim (del inglés Vi IMproved) es una versión mejorada del editor de texto vi, presente en todos
los sistemas UNIX.
Su autor, Bram Moolenaar, presentó la primera versión en 1991, fecha desde la que ha
experimentado muchas mejoras. La principal característica tanto de Vim como de Vi consiste en
que disponen de diferentes modos entre los que se alterna para realizar ciertas operaciones, lo
que los diferencia de la mayoría de editores comunes, que tienen un solo modo en el que se
introducen las órdenes mediante combinaciones de teclas o interfaces gráficas.
La mejor forma de entender estos conceptos es simplemente usando vi para editar un archivo de
prueba.
La sintaxis para vi es: vi
Nombrearchivo
donde nombrearchivo es el nombre del archivo que quieres editar.
Así se inicia el editor y, como el fichero no existe todavía, lo crea para ser editado. El editor está
ahora en modo de comandos esperando por un comando.
Partamos vi tipeando [xxx]%
vi prueba
pág. 52
Ejemplo
lo cual editará el archivo prueba. Deberías ver algo como esto:
~
~
~
~
~
~
"prueba" [New file]
para comenzar a insertar texto usa la tecla i
Mientras estés insertando texto, puedes tipear cuantas líneas quieras (presionando [Enter]
después de cada una, por supuesto), y puedes corregir los errores.
Para finalizar el modo de edición, y volver al modo de comandos, presiona [esc]. Mientras estés
en modo de comandos, puedes usar las teclas de flechas para moverte
por todo el archivo. Aquí, como tenemos solo una línea de texto, al tratar de usar las
flechas para subir y para bajar vi hará un pitido.
Las siguientes teclas controlar el movimiento del cursor.
k arriba
j abajo
h izquierda
l derecha
Modo de entrada de texto (añadir, insertar)
a añade texto a partir del carácter en que está situado el cursor i inserta texto a partir de la
posición del cursor
o inserta una línea debajo de la posición del cursor
O inserta una línea encima de la posición del cursor
pág. 53
Los cinco comandos más utilizados para alterar el texto son x borra el carácter en el cursor
r sustituye el carácter en el cursor
dd borra la línea en la que está el cursor
:s/palabrainicial/palabrafinal/c cambia de a una de las coincidencias
:s/palabrainicial/palabrafinal/g cambia todas las coincidencias
Estos cinco comandos son ejecutados en el modo de comandos, y vuelven al modo de
comandos después de ejecutarse.
Deshaciendo cambios
Hay veces que se realizan cambios y nos damos cuenta inmediatamente que hemos cometido
un error. El editor vi facilita mecanismos para deshacer acciones de comandos previos.
El comando u deshace el comando previo.
El comando U deshace todos los cambios realizados en la línea actual.
Guardando cambios y permaneciendo en vi
Es muy recomendable guardar los cambios que se van realizando de una forma regular. Para ello
se utiliza
:w
Si decides que no quieres sobrescribir el fichero que estás editando, sino que quieres guardar los
cambios como un fichero nuevo, añade al comando :w el nombre del nuevo fichero,
:w nuevo_fichero2
Abandonando vi
pág. 54
Borrar texto
pág. 55
Movimientos básicos:
=> Un espacio a la izquierda. j => Una línea hacia abajo.
k => Una línea hacia arriba.
l => Un espacio a la derecha.
$ => Mueve al final de la línea actual.
+ => Comienzo de la línea siguiente.
- => Comienzo de la línea anterior. 0 => Comienzo de la línea actual.
Control de despliegue:
pág. 56
Comandos de control:
pág. 57
Para volver de nuevo al Modo de Comandos, lo cual es necesario, por ejemplo, para mover el
cursor, presiona la tecla de escape o <esc>. Si no recuerdas en qué modo estás presiona <esc>:
si estabas en Modo de Inserción, ahora pasas al Modo de Comandos; si estabas en Modo de
Comandos, vi emitirá un pitido y te dejará en Modo de Comandos.
Un editor de texto es simplemente un programa que se usa para editar ficheros que contengan
texto. Aunque hay muchos editores disponibles, el único que vas a encontrar seguro en todos
los sistemas UNIX es vi (el "editor visual").
Existe un editor vi ampliado llamado vim que contiene facilidades adicionales, así como diversas
versiones del vi original. En todos los casos, el conjunto de comandos básicos es el mismo.
Ejercicio:
Instala VI y VIM
# useradd –m pruebavi
# passwd pruebavi
pág. 58
# su –l pruebavi
$ vim nuevo.txt
~
~
~
~
~
~
"nuevo.txt" [New file]
Una vez abierto el documento presionamos la tecla i para insertar texto nuevo
~
~
~
~
~
-INSERT-
Una vez que presiones i, aparecerá insertar en la interface, esto indica que podemos editar el
archivo creado, una vez hecho esto escribiremos la frase Linux el mejor sistema y pulsamos
enter, a continuación escribiremos “El megor sistema que conosco” este texto tiene errores
ortográficos, escríbalo de manera errónea pues el ejercicio es para realizar dichas correcciones
utilizando el editor VIM.
~Linux el mejor sistema
~El megor sistema que conosco
~
~
~
-INSERT-
Ahora posicionese sobre la malabra “megor” sobre la letra g y presione shift + r y acontinuacion
aparecerá la opción remplazar, pulse la letra “j” y observe como se reemplaza por la letra g,
pág. 59
Precione la tecla “Esc” seguido de : y la letra “w” para guardar los cambios.
Vuelva a pulsar: (dos puntos) y luego escriba otro.txt pulse enter y ahora notara que se guardo
el archivo con el nombre otro.txt
pág. 60
~
~
-INSERT-
Escriba lo siguiente:
Ahora pulse esc, seguido pulse: (dos puntos) y por ultimo escriba lo siguiente:
%s/aburrid/divertid/g
pág. 61
En este caso usted podrá ver que se pega debajo del texto o donde tenga el cursor, lo cual
quiere decir que hay que posicionarse en la línea correcta para pegar lo copiado
Ahora posiciónese en la primera línea del texto y va a oprimir 3 y después dd y podra observar
como se copiaron ahora las 3 lineas consecutivas a partir de donde esta posicionado el texto y
podra pegar de la misma manera
Ahora vuelva a pulsar p y se restauran las tres líneas principales pero si pulsamos p de nueva se
volverán a pegar las líneas copiadas esto podría pasar n cantidad de veces según sea el caso
pág. 62
Ahora procedemos a salir del archivo guardando los datos, pulsaremos: wq seguido de enter
pág. 63
Pulse Esc y seguido la tecla de la letra “o” y observara como se inicializa la función insertar pero
en una nueva línea.
~ conozco solo gente divertida
~ mi novia es muy divertida
~
~ Linux el mejor sistema
~ El mejor sistema que conozco
~ Hoy es un dia divertido
~ Linux el mejor sistema
~ El mejor sistema que conozco
~ Hoy es un dia divertido
~ Linux el mejor sistema
~ El mejor sistema que conozco
~ Hoy es un dia divertido
~
pág. 64
-INSERT-
Pulse nuevamente la tecla <Esc> y en seguida la combinación dG (d, luego SHIFT+G). Notará que
elimina todo el contenido del texto desde la posición del cursor hasta el final del archivo:
A partir de este momento se pretende realizar un checklist con los puntos importantes a
configurar en el server para ponerlo a punto para cualquier entrega.
pág. 65
Localización
La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a
diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería ni en el código.
La localización es el proceso de adaptar el software para una región específica mediante la
adición de componentes específicos de un locale y la traducción de los textos, por lo que
también se le puede denominar regionalización. No obstante la traducción literal del inglés es la
más extendida.1
Es una práctica común en el idioma inglés (sobre todo en el ámbito de la computación),
abreviar internationalization con elnumerónimo "i18n". Ello se debe a que entre la primera i y la
última ene de dicha palabra hay 18 letras. Lo mismo sucede con localization, que se abrevia
"L10n". La L mayúscula se utiliza para distinguirla de la i minúscula de i18n.
Algunas empresas, como Microsoft e IBM, usan el término globalización para referirse a la
combinación de internacionalización y localización. Globalización puede también abreviarse con
el numerónimo "g11n".
Internacionalización y localización son dos de los conceptos más en boca en la
moderna industria del lenguaje.
La localización del sistema se logra mediante la edición de 2 archivos localizados en las rutas:
/etc/sysconfig/i18n:
/boot/grub/menu.lst
En ambos hay que buscar la configuración LANG="es_ES.UTF-8” y hay que modificarla por
LANG=es_MX.UTF-8
Esto nos dará la virtud de modificar la configuración de español de España por la configuración
de español de México.
pág. 66
Una vez realizada esta tarea se realizara un reincio de sistema para hacer los cambios de manera
permanente con el comando:
#reboot y enter.
Plymouth:
Plymouth es un programa de arranque de sistema en modo gráfico que despliega una animación
mientras la computadora se inicia.
Plymouth ha sido desarrollado como reemplazo de RHGB (Red Hat Graphical Boot) y escrito
como un nuevo programa con el fin de lograr que "La experiencia de arranque sea sin
parpadeos, sutil y brillante".
Plymouth se ejecuta muy pronto en el proceso de arranque (incluso antes de que el sistema de
archivos raíz esté montado) Luego muestra una animación mientras el proceso de arranque de
sistema sucede en el fondo, antes y después de que Xcomienza hasta la ejecución de la entrada
de usuario. La idea es que Plymouth esté configurado de forma nativa para el arranque utilizado
por el sistema operativo. El objetivo final es deshacerse de todos los parpadeos durante el
inicio.
Para deshabilitar el Plymouth en Centos y poder mostrar los mensajes de lo que se carga y los
servicion en el sistema hay que desabilitarlo en el archivo que esta en la siguiente ruta:
vi /boot/grub/menu.lst
Nota: Hay que recordar que en este archivo es donde se configuran los distintos sistemas
operativos Linux a configurar y para esto hay que tener en cuenta que se debe configurar:
El titulo, el initrd y el kernel.
Se desabilita simplemente eliminando rhgb y el espacio sobrante del archive que se esta
editando en la linea:
latin1 crashkernel=auto rhgb quiet
se guarda el archive con :wq y listo.
pág. 67
Zona Horaria
Un ordenador tiene dos relojes que deben tenerse en cuenta: el «reloj del
hardware/ordenador» y el «reloj del sistema/software».
El reloj del hardware (también conocido como el Reloj en Tiempo Real (RTC) o reloj CMOS)
guarda los valores de: año, mes, día, hora, minuto y segundos. No tiene la capacidad de guardar
el horario estándar (localtime o UTC), ni si DST (horario de verano) se utiliza.
El reloj del sistema (también conocido como reloj del software) realiza un seguimiento de: Hora,
Zona horaria y DTS (el horario de verano, si procede). Ello es calculado por el kernel de Linux por
el número de segundos transcurridos desde la medianoche del 1 de enero 1970, UTC.
El valor inicial del reloj del sistema se establece a partir del reloj del hardware, en función de lo
establecido en el archivo /etc/adjtime. Una vez completado el arranque, el reloj del sistema se
configura independientemente del reloj del hardware. El kernel de Linux sigue los ajustes del
reloj del sistema para integrar las interrupciones del temporizador.
Para realizar la correccion del la zona horarioa hay que verificar y/o editar en caso de que sea
necesario el archivo que esta en la siguiente ruta:
vi /etc/sysconfig/clock
Asumiendo que nos encontramos en la ciudad de México tendríamos que verificar o cambiar
según sea el caso por
ZONE="America/Mexico_City"
Y realizaremos un remplazo de un archivo con el siguiente comando:
cp /usr/share/zoneinfo/America/Mexico_City /etc/localtime
Para poder garantizar que la hora tanto local como on line están sincronizados también
instalaremos el archivo ntp
yum -y install ntp
pág. 68
Con este método garantizaríamos la sincronización de la hora tanto de manera local con en
línea, siempre y cuando exista una conexión a internet.
100 millones de años después, el famoso evangelista y experto en electrónica: Bill Gates, decidió
crear un sistema operativo para computadoras personales, de manera que pudiese llevar esta
herramienta a todos los hogares del planeta y cristianizar a todo el mundo. Sin embargo, el
sistema operativo de Gates tenia muchos fallos, los cuales obligaban al usuario a desconectar a
la máquina de la toma de corriente, nada parecía solventar los problemas del software y todo
parecía perdido para Bill, pero mientras leía la Biblia se percato de la solución, y el resto es
historia.
Desactivar esta conbinacion de teclas:
Hay que editar el siguiente archivo
vi /etc/init/control-alt-delete.conf
y lo único que hay que hacer es comentar con un #, la línea:
exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
y automaticamente quedara desabilitada dicha función.
pág. 69
Existen varias razones por las que puede ser deseable aplicar métodos de planificación de E/S:
Minimizar el tiempo de búsqueda (seek time) en el disco.
Dar prioridad a las peticiones de E/S de ciertos procesos.
Dar una porción del ancho de banda de lectura del disco a cada proceso.
Garantizar que ciertas peticiones se atenderán antes de un tiempo determinado: la
conocida como deadline (línea de la muerte en inglés).
Los planificadores de E/S normalmente tienen que trabajar con discos que comparten la
propiedad de tardar bastante tiempo en acceder a una posición que esté muy alejada de la
posición actual del cabezal (lo que se conoce como un tiempo de búsqueda o seek time elevado).
Para minizar el efecto que esto tiene sobre el rendimiento del sistema de E/S, muchos
planificadores implementan variantes del algoritmo del ascensor, que lo que hace es reordenar
las peticiones aleatorias siguiendo el orden en que el cabezal se irá encontrando las posiciones
demandadas.
Planificadores de I/O disponibles en linux
Completely Fair Queuing (cfq): CFQ es la predeterminada en muchas distribuciones de
Linux. CFQ coloca solicitudes sincrónicas presentados por los procesos en un número de
colas por proceso y luego asigna intervalos de tiempo para cada una de las colas para
acceder al disco. La longitud de la porción de tiempo y el número de peticiones de una cola
se le permite presentar depende de la prioridad de E/S del proceso dado. Peticiones
asíncronas para todos los procesos se procesan por lotes juntos en un menor número de
colas, una para cada ámbito prioritario.
NOOP (noop): Es el planificador de Entrada/Salida más simple que existe para el núcleo de
Linux. Funciona insertando todas las peticiones de Entrada/Salida, dentro de una cola de
procesamiento tipo FIFO (first in, first out, que se traduce como primero en entrar, primero
en salir), e implementando fusión de peticiones y reduciendo el tiempo de petición, y la
variabilidad del tiempo de servicio de Entrada/Salida.
pág. 70
# cat /sys/block/sda/queue/scheduler
para realizar la modificación de este se debe editar el archivo menú.lst que se encuentra en la
ruta
vi /boot/grub/menú.lst
pág. 71
Aqui cambiaremos el IDE secundario maestro y pondermos la imagen
pág. 72
Una vez seleccionado se aceptan los cambios y se inicia la instalación
En esta hay que mover el cursor con las flechas para detener el contador automatico que corre
con un total de 60 segundos, antes de que se realize la seleccion de manera automatica.
pág. 73
Ahora seleccionaremos la opcion numero 3, que indica Rescue installed System, con lo cual
accesaremos a las opciones de rescate de sistema.
Una vez que se realice la deteccion de la media realizara una carga y nos pedira el idioma con el
cual trabajaremos, seleccionaremos español
pág. 74
A continuacion elegiremos el idioma del teclado, el cual es importante para manipulacion de la
consola con la que trabajaremos.
A continuación nos pide que elijamos si vamos a necesitar la configuracion de la tarjeta de red.
pág. 75
Automaticamente nos detectara la tarjeta o tarjetas de red conectadas al servidor.
De ser necesarias se realizan las configuracion con las direcciones necesarias para lograr las
conexiones y poder realizar los respaldos.
pág. 76
Una vez realizada la configuracion nos desplegara las siguientes opciones que nos indican lo
siguiente.
pág. 77
Y seleccionaremos continuar:
Una vez realizada esta tarea nos enviara a una nueva interfaz con 3 opciones distintas:
pág. 78
SHELL START SHELL >> Iniciará el intérprete de mandatos, desde el cual podrá trabajar de
modo similar al nivel de ejecución 1 (mono usuario) y tendrá acceso a un conjunto básico de
herramientas de diagnóstico y reparación.
FAKD RUN DIAGNOSTIC >> Ejecutará FirstAidKit, una herramienta que realiza verificación y
reparación, automática de algunos problemas comúnes.
pág. 79
Seleccionaremos la opcion de Start Shell
Esto nos dejara en la consola de administracion con permisos de Root
Una vez realizadas last areas realizaremos el apagado de la maquina y reconfiguraremos el disco
pág. 80
Nivel de Ejecución 1 o monousuario
Un sistema operativo monousuario (de mono: 'uno'; y usuario) es un sistema operativo que sólo
puede ser ocupado por un único usuario en un determinado tiempo. Ejemplo de sistemas
monousuario son las versiones domésticas de Windows. Administra recursos de memoria
procesos y dispositivos de las PC'S.
Es un sistema en el cual el tipo de usuario no está definido y, por lo tanto, los datos que tiene el
sistema son accesibles para cualquiera que pueda conectarse.
En algunos sistemas operativos se accede al sistema reproductor de un usuario único que tiene
permiso para realizar cualquier operación. Este es el caso de los sistemas operativos más
antiguos como MS-DOS y algunos más recientes como la serie Windows 95/98/Me de Microsoft
o MacOS (antes de Mac OS X) de Macintosh. En estos sistemas no existe una diferenciación clara
entre las tareas que realiza un administrador del sistema y las tareas que realizan los usuarios
habituales, no disponiendo del concepto de multiusuario, un usuario común tiene acceso a
todas las capacidades del sistema, pudiendo borrar, incluso, información vital para su
funcionamiento. Un usuario malicioso (remoto o no) que obtenga acceso al sistema podrá
realizar todo lo que desee por no existir dichas limitaciones.
Nivel de ejecucion 1 o s (single), es el nivel de ejecucion de monousuario, sin acceso a servicios
pág. 81
de red, este nivel es regularmente utilizado en tareas de mantenimiento del sistema y el usuario
que ejecuta es root, permite reparar problemas en el sistema.
Cuando se inicia el sistema lo primero que carga es el grub, donde se encuentran las tablas de
booteo, en caso de tener mas sistemas seria la parte donde se elegiria el sistema a iniciar, en
nuestro caso que solo tenemos un sistemas iniciara un contador de 3 segundo, para lo cual
detendremos este conteo presionando cualquier tecla menos enter, porque esto accesaria al
sistema de manera inmediata:
En este punto seleccionaremos la letra “p” para poder introducer el password del grub que se
ingreso en la instalacion inicial:
pág. 82
Se pone el password:
A continuacion presionaremos la tecla “e” para realizar la edicion del commando de booteo:
pág. 83
Seleccionamos la linea que del kernel de inicio:
Recuerde estas tres funciones del booteo o arranque
Lo primero es que el kernel o nucleo busca y monta el initrd
Linuxrc carga los modulos para montar el file system
El gestor de arranque carga el kernel e inintrd en la memoria.
Editamos esta de igual forma y al final de la linea ponemos un espacio y un numero “1”,
presionamos enter y nos regresara a la lista de configuraciones nuevamente, estando en esta
presionamos b como indica el menu para realizar el booteo:
pág. 84
Y esto nos dara acceso al sistema en nivel monousuario, para realizar las tareas que impliquen
tener este tipo de nivel.
Gestion de memoria Swap
La memoria es uno de los recursos más valiosos que gestiona el sistema operativo. Uno de
los elementos principales que caracterizan un proceso es la memoria que utiliza. Ésta está
lógicamente separada de la de cualquier otro proceso del sistema (excepto los threads de un
mismo proceso que comparten normalmente la mayor parte de la memoria que tienen
asignada). Un proceso no puede acceder, al espacio de memoria asignado a otro proceso, lo
cual es imprescindible para la seguridad y estabilidad del sistema. El direccionamiento es una
parte importante de la gestión de memoria, puesto que influye mucho en la visión del mismo
por parte de un proceso, como en el aprovechamiento del hardware y el rendimiento del
sistema. En Linux, además, un proceso tiene dos espacios de memoria: el espacio de
memoria del usuario, único para ese proceso, y el espacio de memoria del kernel, idéntico en
todos los procesos.
pág. 85
La unidad de manejo de memoria (MMU) es parte del procesador. Sus funciones son:
a) Convertir las direcciones lógicas emitidas por los procesos en direcciones físicas.
b) Comprobar que la conversión se puede realizar. La dirección lógica podría no tener
una dirección física asociada. Por ejemplo, la página correspondiente a una
dirección se puede haber intercambiada a una zona de almacenamiento secundario
temporalmente.
c) Comprobar que el proceso que intenta acceder a una cierta dirección de memoria
tiene permisos para ello.
En caso de fallo se lanzará una excepción que deberá ser resuelta por el kernel del sistema
operativo. El kernel del sistema operativo está siempre en memoria principal, puesto que si se
intercambia a una zona de almacenamiento secundario, ¿quién sería el encargado de llevarlo a
pág. 86
b. Si se tienen mas de 1Gb de memoria ram, se asigna la cantidad de memoria ram mas 2.
pág. 87
Ventajas
Aunque su velocidad y escalabilidad es menor que sus competidores, como JFS, ReiserFS o XFS,
tiene la ventaja de permitir actualizar de ext2 a ext3 sin perder los datos almacenados ni tener
que formatear el disco. Tiene un menor consumo de CPU y está considerado más seguro que
otros sistemas de ficheros en Linux dada su relativa sencillez y su mayor tiempo de prueba.
El sistema de archivo ext3 agrega a ext2 lo siguiente:
Registro por diario.
Índices en árbol para directorios que ocupan múltiples bloques.
pág. 88
Límites de tamaño
Ext3 tiene dos límites de tamaño distintos. Uno para archivos y otro para el tamaño del sistema
de archivos entero. El límite del tamaño del sistema de archivos es de 232 bloques
Niveles del journaling
Hay tres niveles posibles de journaling (registro por diario)
Diario (riesgo bajo)
Los metadatos y los ficheros de contenido son copiados al diario antes de ser llevados al sistema
de archivos principal. Como el diario está en el disco continuamente puede mejorar el
rendimiento en ciertas ocasiones. En otras ocasiones el rendimiento es peor porque los datos
deben ser escritos dos veces, una al diario y otra a la parte principal del sistema de archivos.
pág. 89
Reescritura (riesgo alto)
Solo los metadatos son registrados en el diario, el contenido de los archivos no. Los contenidos
pueden estar escritos antes o después de que el diario se actualice. Como resultado, los archivos
modificados correctamente antes de una ruptura pueden volverse corruptos. Por ejemplo, un
archivo pendiente de ser marcado en el diario como mayor de lo que actualmente es,
convirtiendo en basura al final de la comprobación. Las versiones antiguas de los archivos
pueden aparecer inesperadamente después de una recuperación de diario. La carencia de
sincronización entre los datos y el diario es rápidamente subsanada en muchos casos. JFS usa
este nivel de journaling, pero se asegura de que cualquier basura es borrada al reiniciar
Desventajas
Como ext3 está hecho para ser compatible con ext2, la mayoría de las estructuras del
archivación son similares a las del ext2. Por ello, ext3 carece de muchas características de los
diseños más recientes como las extensiones, la localización dinámica de los inodos, y la
sublocalización de los bloques. Hay un límite de 31998 subdirectorios por cada directorio, que se
derivan de su límite de 32000 links por inodo. Ext3, como la mayoría de los sistemas de archivos
actuales de Linux, no puede ser chequeado por el fsck mientras el sistema de archivos está
montado para la escritura. Si se intenta chequear un sistema de ficheros que está montado
puede detectar falsos errores donde los datos no han sido volcados al disco todavía, y
corromper el sistema de archivos al intentar arreglar esos errores.
Ext4 (fourth extended filesystem o «cuarto sistema de archivos extendido») es un sistema de
archivos transaccional (en inglésjournaling), anunciado el 10 de octubre de 2006 por Andrew
Morton, como una mejora compatible de ext3. El 25 de diciembre de2008 se publicó el kernel
Linux 2.6.28, que elimina ya la etiqueta de "experimental" de código de ext4.
Las principales mejoras son:
Soporte de volúmenes de hasta 1024 PiB.
Soporte añadido de extent.
Menor uso del CPU.
Mejoras en la velocidad de lectura y escritura.
pág. 90
Mejoras
pág. 91
Asignación retrasada de espacio en el disco
Ext4 hace uso de una técnica de mejora de rendimiento llamada Allocate-on-flush, también
conocida como reserva de memoria retrasada. Consiste en retrasar la reserva de bloques de
memoria hasta que la información esté a punto de ser escrita en el disco, a diferencia de otros
sistemas de archivos, los cuales reservan los bloques necesarios antes de ese paso. Esto mejora
el rendimiento y reduce la fragmentación al mejorar las decisiones de reserva de memoria
basada en el tamaño real del fichero.
Límite de 32000 subdirectorios superado
En ext3 el nivel de profundidad en subdirectorios permitido estaba limitado a 32000. Este límite
ha sido aumentado a 64000 en ext4, permitiendo incluso ir más allá de este límite (haciendo uso
de "dir_nlink"). Para permitir un rendimiento continuo, dada la posibilidad de directorios mucho
más grandes, htree está activado por defecto en ext4. Esta función está implementada desde la
versión 2.6.23. htree está también disponible en ext3 cuando la función dir_index está activada.
Chequeo del sistema de ficheros más rápido
En ext4, los grupos de bloques no asignados y secciones de la tabla de inodos están marcados
como tales. Esto permite a e2fsck saltárselos completamente en los chequeos y en gran medida
reduce el tiempo requerido para chequear un sistema de archivos del tamaño para el que ext4
está preparado. Esta función está implementada desde la versión 2.6.24 del kernel Linux.
Uso de e2fsck
pág. 92
De igual manera puede ver las particiones dando df y especificar la parición a demontar y
realizar el ejercicio:
Ejemplo
e2fsck -pc /dev/sda1 comprueba el sistema de ficheros /dev/sda1 revisando los sectores
defectuosos (-c esta opción usa la herramienta badblocks, en caso de usar dos veces esta opción
el escaneo de sectores dañados se hará usando un test no destructivo de lectura/escritura.)
permitiendo que la lista de sectores dañados pueda actualizarse y se repararán
automáticamente todos los problemas que sea seguro arreglar (-p).
e2fsck -E fragcheck /dev/sda3 se imprimirá en pantalla un reporte de aquellos archivos que
presenten bloques discontinuos en el sistema de archivos /dev/sda3
e2fsck –f –D /dev/sda1 la D realiza la optimizacion de los directories, y la –f realiza la tarea de
manera forzada para la verificacion de las particiones.
badblocks
Este programa lo único que hace es comprobar los sectores y mostrar los que son defectuosos,
por lo que es preferible que se emplee integrado con un programa encargado de comprobar la
coherencia del sistema de ficheros si lo que se quiere es "repararlo". Si lo único que se buscas es
ver el estado de la superficie del disco, sin importarte la información que contenga, por ejemplo
para saber si debes o no tirar el disco se puede ejecutar:
badblocks -ns /dev/sda comprueba los sectores del dispositivo /dev/sda en modo solo lectura
(-n)
Hoy vamos a ver una configuración muy simple de aplicar, y que hace que el sistema vaya
muuucho más flúido. Y estoy hablando del parámetro "noatime".
pág. 93
Qué es esto de "noatime"? Pues "noatime " es un parámetro especial en el montaje de los
dispositivos como discos duros o memórias extraibles. Se acostumbra a modificar en el fichero
/etc/fstab.
[Explicación]
Resulta que nuestro sistema de ficheros guarda, para cada uno de nuestros ficheros, un
parámetro que se llama "atime", o "access time". Total, que cada vez que accedemos
(leemos) un fichero, el valor "atime" se actualiza. Así podemos saber cuál fué la última vez que
accedimos/leimos un determinado fichero.
Pero claro, esto tiene un comportamiento no deseado: Resulta que por cada lectura que
hacemos a disco, necesitamos escribir algo a disco!! (Actualizar el valor "access time"). Esto
parece absurdo! Para leer tenemos que escribir.
Habrá alguien que pensará: exagerado! No es para tanto. Total, tiene que escribir a disco tan
solo unos pocos bytes, esto no es nhà.
Pues bueno, resulta que escribir estos pocos bytes si jode, y mucho. Me explico. Linux tiene un
sistema fantástico de caches, completamente transparente para el usuario. Te permite hacer lo
siguiente:
# cat ./bashrc
# cat ./bashrc
La primera vez que haces el "cat" de cualquier fichero ( en nuestro caso, .bashrc ), se va al disco
duro, y lo lee. Pero también lo pone en la memoria RAM. La segunda vez que ejecutas el
comando "cat", sabe que lo tiene cacheado y lo lee directamente de memória RAM. No hace
falta tocar disco duro. Esto hace que el sistema vaya muuuucho más rápido, ya que todo los
ficheros que hayas leido una vez ( y no se hayan modificado ) ya están cacheados, y no se
precisa leer a disco. Pero que pasa si no tenemos desactivado el "atime", pues que con
cada lectura, aunque la tuvieses cacheada, tienes que hacer una escritura a disco para
actualizar el tiempo de acceso. Nos ha jodido.
Esto, en portátiles tiene un impacto muy grande ya que al cabo de X segundos de no utilizar
el disco duro, éste se para. Un tema de ahorro de energía. Qué pasa si queremos hacer una
pág. 94
lectura o escritura? Pues que el disco se tiene que volver a poner a girar con el consiguiente
consumo energético/tiempo perdido. Pero si intentamos leer un fichero CACHEADO por el
sistema, el disco duro ni se entera. Sigue parado. Por lo que es genial.
Como hacerlo:
Cómo activar la opción "noatime"?
Con tu editor preferido (gedit, nano, emacs) el fichero, en mi caso "vim":
# sudo vim /etc/fstab
Busca tu disco duro principal. Lo mas seguro es que sea una entrada como esta:
UUID=3e9532f9-226c-4f17-ae64-dad42519a1fc / ext4 errors=remount-ro 0 1
y añade simplemente "noatime" en las opciones para que quede tal que así:
UUID=3e9532f9-226c-4f17-ae64-dad42519a1fc / ext4 noatime,errors=remount-ro 0 1
pág. 95
Swapinees
De modo predeterminado, el núcleo de Linux utiliza un valor de 60 para vm.swapiness y tiene la
finalidad de permitir hacer pruebas a los desarrolladores del núcleo de Linux.
Este valor corresponde a la frecuencia con la que las aplicaciones utilizan memoria virtual.
Pueden establecerse valores entre 0 y 100, donde el valor más bajo establece que se utilice
menos la memoria de intercambio, lo cual significa que se reclamará en su lugar el caché de la
memoria.
Para la mayoría de los casos, conviene cambiar este valor por uno más bajo a fin de que el
sistema utilice menos la memoria de intercambio y utilice más la memoria cache. Ésta es una
clase de memoria RAM estática de acceso aleatorio (SRAM o
Static Random Access Memory). Se sitúa entre la Unidad Central de Procesamiento (CPU) y la
memoria RAM y se presenta de forma temporal y automática para el usuario proporcionado
acceso rápido a los datos de uso más frecuente.
Lo más recomendable es cambiar el valor de vm.swappiness a 10, que resulta un valor más
apropiado para un sistema de escritorio o una portátil. Para tal fin, se edita el archivo
/etc/sysctl.conf y se añade al final de éste:
vm.swappiness = 10
Con lo anterior, la siguiente vez que se inicie el sistema aplicará el cambio y se utilizará con
menos frecuencia la memoria virtual. Para que el cambio surta efecto de inmediato, se ejecuta
lo siguiente:
sysctl -w vm.swappiness=10
Si se asigna 0 (cero) como valor para vm.swappiness, se estará desactivando el uso de memoria
virtual, lo cual es poco recomendado, salvo que se disponga de una buena cantidad de memoria
física. Por lo general, el valor 0 para esta opción se utiliza solo en portátiles con unidades SSD,
donde, de hecho, se busca realizar cuanto menos escritura como sea posible sobre las unidades
de almacenamiento.
Commit
Esta opción controla el tiempo que se utilizará entra cada operación sincronización (sync) de
datos y metadatos en una partición. El tiempo predeterminado es de 5 segundos y puede
incrementarse para mejorar el desempeño, tomando en consideración que si se específica
pág. 96
demasiado tiempo y ocurre una interrupción de energía antes de hacer una operación de
sincronización (sync), se perderán los datos más recientes con los que se haya trabajado. Sólo
usarla se recomienda si se dispone de un sistema de respaldo de energía confiable.
fsck (file system check o bien file system consistency check) es una utilidad de los
sistemas Unix y similares, como Linux, AIX y MAC OS X que se utiliza ante alguna inconsistencia
del sistema de archivos para corregir los posibles errores en el sistema.
fsck se ejecuta automáticamente al inicio del sistema ante alguna anomalía, pero también
puede ser utilizada manualmente por el administrador del sistema para forzar una verificación.
Para verificar un sistema de archivos es muy aconsejable hacerlo mientras éste
está desmontado.
Para detectar, verificar y corregir los errores del sistema de archivos. Es recomendable utilizarlo
solo con sistemas desmontados.
Su sintaxis es de la forma:
fsck [-sAVRTMNP] [-C[fd]] [-t fstype] [filesys..] [fs-specific-options]
Donde:
-C Muestra el progreso en tiempo real de un modo visual.
-A Chequea todos los dispositivos definidos en el fichero /etc/fstab
-M No chequea sistemas montados.
-t Especifica el tipo o tipos de sistema de ficheros a chequear. Si lo acompañamos de la
opción -A, solo chequearemos los sistemas que coincidan con fstype(una lista
separada por comas).
Filesys
pág. 97
Opciones:
--a repara de manera automática, no pide confirmación.
--n reporta los problemas sin repararlos.
--c busca bloques dañados y los agrega a la lista de bloques dañados.
--f forzar la revisión.
--v verbose, genera más información.
--r modo interactivo. Espera nuestra respuesta.
--y si a todo.
Ejercicio:
Siempre que se incluye la opción “–y” se asume que se responderá que si a todas las preguntas
de confirmación que mande la ejecución de los comandos y con la opción “–C” muestra una
barra de progreso.
# fsck -fyC /dev/sda1
Si añadimos la opción –c realizara la verificación de solo lectura para realizarla sobre bloques
que pudieran estar dañados, y con la opción –k preservara la lista donde añadirán los nuevos
bloques dañados.
# fsck -fykc /dev/sda1
Realizando la tarera con la opción –cc realizara la verificación de lectura y escritura pero de
manera no destructiva.
# fsck -fykcc /dev/sda1
Con la opción –p realizara la verificación y reparación de manera automática.
# fsck -fpC /dev/sda1
Comando que realiza la misma tarea, pero combinando todas la opciones mencionadas
pág. 98
anteriormente.
# fsck -fpkcc /dev/sda1
Con la opción “–D” realizara la verificación optimizando al mismo tiempo la estrutura de los
directorios.
# fsck -fpD /dev/sda1
La optimización de directorios se realiza volviendo a crear un índice de éstos sí el sistema de
archivos incluye soporte para índices (como es el caso de Ext4) o bien re-ordenando y
comprimiendo directorios en los casos de directorios pequeños o bien sistemas de archivos que
utilicen directorios lineales tradicionales.
Con el comando en este formato este se añade al inodo (nodo índice) de bloques dañados.
# fsck -fpDkcc /dev/sda1
Montaremos /boot una vez terminado el ejercicio.
# mount /boot
Con el siguiente comando forzaremos a realizar una verificación de sistema de archivos:
# shutdown -F -r now
Uso de dd
Sintaxis Básica:
La sintaxis más básica para el uso del comando dd, seria esta:
Donde if significa “input file=archivo de entrada“, es decir, lo que se quiere copiar y of significa
pág. 99
“output file=archivo de salida“, o sea, el archivo destino (donde se van a copiar los datos);
origen y destino pueden ser dispositivos (lectora de CD o DVD, disco duro, diskettera, pendrive,
partición, etc.), archivo de copia de seguridad o imagen de disco, etc, pero no carpetas o
subcarpetas.
Para el uso sin problemas de este comando, lo primero siempre es tener claro como se llaman
las particiones/discos duros en Linux (/dev/sda1 por ejemplo; /dev deriva de device=
dispositivo, en inglés). Para saber el disco/partición de origen y el de destino, algo que
averiguamos fácilmente con el comando sudo fdisk -l o con algún programa gráfico de
particiones como gparted. Toda la información sobre el comando dd, se puede consultar con el
comando man dd e info dd ,
Se debe utilizar este comando con precaución, y comprobando siempre el orden y nombre de
los discos/particiones, porque lo mismo que se clona un disco, lo borra en un visto y no visto.
Sintaxis con el comando pv: Usar el comando dd con la sintaxis anterior tiene un pequeño
inconveniente, ya que es un comando muy reservado – no da información – , pues al ejecutarlo,
el prompt de la terminal queda inmóvil, por lo que no sabemos que es lo que esta pasando y
cuanto tiempo falta para que termine de ejecutarse. Este pequeño inconveniente se puede
solucionar añadiendo el comando pv, ( *) – el cual actúa como una tubería de terminal que mide
los datos que pasan a través de ella- a la sintaxis del comando dd , de forma que ahora la
sintaxis seria:
( alf ) – ( ~ )
pág. 100
( alf ) - ( ~ )
└──┤ dd if=/devmmcblk0p1 |pv|dd of=/dev/mmcblk0p2
10530816+0 registros leídos <=>
10530816+0 registros escritos
5391777792 bytes (5.4 GB) copiados, 3873,48 s, 1,4 MB/s
5,02GB 1:04:33 [1,33MB/s] [ <=>
10530816+0 registros leídos <=>
10530816+0 registros escritos
5391777792 bytes (5.4 GB) copiados, 3873,48 s, 1,4 MB/s
( alf ) - ( ~ )
└──┤
(*) Comprobar antes de ejecutar cualquier linea de comandos con esta segunda sintaxis, que
tenemos instalado en el sistema el paquete pv, o instalarlo si no lo tuviéramos.
Vamos a ver algunos ejemplos prácticos y opciones de este comando ( en su versión con el truco
explicado anteriormente con el comando pv ) :
pág. 101
Hay que tener en cuenta que de esta forma se graba el disco “tal cual”, MBR, tabla de
particiones, espacio vacío, etc…, por lo que solo podrás grabar en un disco del mismo o mayor
tamaño.
= Grabar solo la primera partición (hda1) del disco de origen en el disco (hdb) de destino:
pág. 102
B) Sobre un CD/DVD
pág. 103
Los primeros 512 bytes del disco duro o unidad de almacenamiento utilizado para el sistema
operativo, corresponde al sector de arranque maestro, donde:
Los siguientes 64 bytes corresponden a la tabla de particiones. 16 bytes para cada partición
primaria y/o extendida que existan.
Los últimos 2 bytes corresponden a la firma de unidad con capacidad de inicio. También se
les conoce como los 2 bytes mágicos.
= Copiar/Restaurar el Master Boot Record (MBR):
Para copiar el MBR:
# dd if=/dev/sda of=mbr.bin bs=512 count=1
Para restaurar el MBR:
# dd if=mbr.bin of=/dev/sda bs=512 count=1
= Limpiar nuestro MBR y la tabla de particiones:
$ sudo dd if=/dev/zero |pv|dd of=/dev/had bs=512 count=1
= Limpia el MBR pero no toca la tabla de particiones, ( muy útil para borrar el GRUB sin perder
datos en las particiones):
$ sudo dd if=/dev/zero |pv|dd of=/dev/had bs=446 count=1
= Copiar/Restaurar el Volume Boot Sector (VBS):
pág. 104
Para restaurar el VBS:
$ sudo dd if=/home/sector_arranque_hda |pv|dd of=/dev/had
D) Otros:
= Grabar una imagen del disco en nuestro directorio /home saltándonos los errores del disco
(muy útil para discos que se están muriendo):
Si es necesario dar un formato de bajo nivel a fin de eliminar toda la información del disco duro,
puede ejecutar lo siguiente, considerando en el ejemplo que se intenta dar formato de bajo
nivel al disco duro /dev/sda, para escribir 0 (ceros) en cada sector de la unidad de
almacenamiento.
# dd if=/dev/zero of=/dev/sda
pág. 105
Ejecute lo siguiente para dar formato de bajo nivel escribiendo números aleatorios en todos los
sectores de una unidad de almacenamiento que corresponde a /dev/sda:
# dd if=/dev/urandom of=/dev/sda
pág. 106
pág. 107
En este manual nos ocuparemos de los dos primeros subgrupos de opciones de comandos.
Usted encontrará información sobre el tercer subgrupo en las páginas de los manuales para
RPM.
Deberíamos tener en cuenta también que rpm es el nombre de comando para el comando
principal utilizado con RPM, mientras que .rpm es la extensión utilizada en los archivos RPM. Por
lo tanto "un rpm" o "el xxx rpm" se referirá generalmente a un archivo RPM, mientras
que rpm por lo general se referirá al comando.
Si en algún momento la base de datos que contiene la información de los rpm’s se corrompe por
cualquier tipo de daño, sea software o hardware con el siguiente comando puede reconfigurarla
a su estado original:
# rpm –rebuilddb
Si lo que necesita es revisar si tiene instalado algún paquete dentro de su sistema, ejecutando el
siguiente comando puede realizar esta consulta, agregando la opción –q la cual realizara un
query como el bases de datos, es decir una consulta, para el siguiente ejemplo tomaremos como
ejemplo el paquete coreutils, el cual debe estar instalado, dándonos una salida con la
información del paquete:
# rpm -q coreutils
pág. 108
Al substituir la i por la opción “–l” (ele) podríamos listar todos los componentes que son
afectados por dicho paquete:
Si nos interesa saber a que paquete pertenece alguna aplicación ejecutaríamos al comando
como sigue
# rpm -qf /bin/kill
Ejecutando el siguiente comando nos mostrara la lista de paquetes instalados.
# rpm -qa |more
Si buscamos un paquete en específico utilizaremos el siguiente.
# rpm -qa |grep utils
Si queremos ver los paquetes en orden de instalación, es decir los que se instalaron primero
hasta los últimos, teclearemos el siguiente:
# rpm -Va
pág. 109
Instalación de paquetes.
Lo primero es descargar el rpm que vamos a utilizar lo cual lo haremos en la siguiente liga:
http://get.adobe.com/es/flashplayer/
Una vez descargado el paquete de flash podríamos realizar una revisión detallada de lo que
incluye el paquete ejecutando el siguiente comando:
Para ver los componentes que esta instalando el paquete ejecutamos el siguiente comando:
Nombre del paquete instalado: (sha1) dsa sha1 MD5 GPG NOT OK
Si tuviera alguna complicación y el paquete no se instalara agregara al comando la opción --
force:
# rpm -ivh --force Nombre del paquete a instalar
Si le interesa saber en algún momento las dependencias del paquete podría ejecutar el siguiente
pág. 110
comando:
# rpm -qp --requires Nombre del paquete a instalar
Si se desea desinstalar cualquier paquete sin importar que otros dependan de este, se puede
utilizar con la opción --nodeps. Esto es contraindicado y sólo debe ser utilizado en situaciones
muy particulares. Evite siempre desinstalar paquetes que sean dependencia de otros en el
sistema a menos que vaya a reinstalar inmediatamente un paquete que cubra las dependencias
que se hayan visto afectadas.
Para instalar:
# rpm -i paquete.rpm
Para desinstalar:
# rpm -e paquete.rpm
Para instalar y ver el progreso:
# rpm -q paquete.rpm
Para forzar la desinstalacion (opción no recomendada):
pág. 111
Uso de YUM.
Yellow dog Updater, Modified (YUM) es una herramienta libre de gestión de paquetes para
sistemas Linux basados en RPM. Fue desarrollado por Seth Vidal y un grupo de programadores
voluntarios, y actualmente se mantiene como parte del proyectoLinux@DUKE de la Universidad
de Duke. A pesar de que yum es una utilidad para línea de comandos, otras herramientas
proveen a yum de una interfaz gráfica de usuario, como pup, pirut y yumex. Desde que Seth
Vidal trabaja en Red Hat, programadores de dicha compañía están implicados en el desarrollo
de yum.
Yum es una utilidad totalmente reescrita a partir de su herramienta predecesora, Yellowdog
Updater (YUP), y fue desarrollada principalmente para actualizar y controlar los sistemas Red
Hat utilizados en el departamento de física de la Universidad de Duke. Desde entonces, ha sido
adoptada por Fedora, CentOS, y otras distribuciones de GNU/Linux basadas en RPM, incluyendo
el mismo Yellow Dog, donde reemplazó a la utilidad original YUP. El manejador de paquetes
de Red Hat, up2date, también puede hacer uso de los repositorio de software de yum cuando
realiza actualizaciones de software. Red Hat Enterprise 5 reemplazó up2date por yum y pirut.
Con los paquetes "yum-updatesd" o "yum-updateonboot" se puede hacer una actualización de
software automática.
El sistema de repositorios yum está convirtiéndose rápidamente en un estándar para los
repositorios basados en RPM. En SUSE Linux 10.1 se añade soporte para repositorios YUM
en YaST, y los repositorios de openSUSE están basados exclusivamente en Yum.
Yellow dog Updater, Modified está disponible bajo licencia GNU GPL versión 2 o superiores.
pág. 112
Ejercicio:
# yum list available | more > Lista todo los paquetes disponibles
# yum list updates | less > Lista los paquetes que pueden ser actualizados
# yum list all | less > Lista todos los paquetes existentes
# yum search nombre-paquete > Realiza la búsqueda de un paquete(cups)
pág. 113
# yum -y groupinstall "Nombre del Grupo" > Instala con respuesta positiva a
los modulos que instala(servidor web)
# yum -y groupupdate "Nombre del Grupo" > Actualiza grupo con resolución
de preguntas de instalación(Base de datos MySQL).
pág. 114
Una tarea importante como administrador de sistemas es tener el sistema actualizado, para eso:
Instalamos el aquete PackageKit-cron con el siguiente comando:
Editamos el archivo /etc/sysconfig/packagekit-background:
Active el servicio cambiando el valor de ENABLED a yes y habilite MAILTO=root para enviar a
root un reporte de las actualizaciones aplicadas:
Despues:
Instalamos el paquete yum-updatesd con el siguiente comando:
pág. 115
Edite el archivo /etc/yum/yum-updatesd.conf:
# vi /etc/yum/yum-updatesd.conf
Cambiamos los valores de do_update, do_download y do_download_deps a yes.
Iniciamos el servicio “yum-updatesd”:
Y por ultimo reiniciamos el servicio crond:
pág. 116
El sistema operativo GNU/Linux puede aprovechar los niveles de ejecución a través de los
programas del proyecto sysvinit. Después de que el núcleo Linux ha arrancado, el
programa init lee el archivo /etc/inittab para determinar el comportamiento para cada nivel de
ejecución. A no ser que el usuario especifique otro valor como un parámetro
de autoarranque del núcleo, el sistema intentará entrar (iniciar) al nivel de ejecución por
defecto.
La mayor parte de usuarios de sistemas puede comprobar el nivel de ejecución actual con
cualquiera de los comandos siguientes:
# runlevel # como usuario root
$ who –r # como cualquier usuario
Una vez que el sistema inicia y root a montado el file system, se ejecuta el /sbin/init y el ID que
se asigna al proceso es el 1 o monousuario.
En los sistemas GNU/Linux se especifican hasta 7 niveles de ejecución (también conocidos como
runlevels o niveles de corrida). En las distribuciones Red Hat, así como en la gran mayoría de
distribuciones, la especificación de los niveles de ejecución son como sigue:
Nivel de ejecución 0#
Halt. Este nivel de ejecución se encarga de detener todos los procesos activos en el sistema,
enviando a la placa madre una interrupción para el completo apagado del equipo.
pág. 117
Nivel de ejecución 1#
Single. Nivel de ejecución monousuario, sin acceso a servicios de red. Este nivel es regularmente
utilizado en tareas de mantenimiento del sistema, y el usuario que ejecuta es root.
Nivel de ejecución 2#
Al igual que el nivel de ejecución monousuario, pero con funciones de red y compartición de
datos mediante nfs.
Nivel de ejecución 3#
Sistema multiusuario, con capacidades plenas de red, sin entorno gráfico. Este nivel de
ejecución es el recomendado para sistemas de servidor, ya que evita la carga innecesaria de
aplicaciones consumidoras de recursos.
Nivel de ejecución 4#
Nivel especificado como nivel de experimentacion, pero no se utiliza.
Nivel de ejecución 5#
Al igual que el nivel de ejecución 3, pero con capacidades gráficas. Ideal para entornos de
escritorio.
Nivel de ejecución 6#
Reboot. Este nivel de ejecución se encarga de detener todos los procesos activos en el sistema,
enviando a la placa madre una interrupción para el reinicio del equipo.
Con el siguiente comando verificaríamos en que nivel se esta trabajando
# cat /etc/inittab |grep initdefault |grep id
5 es el nivel predeterminado de inicio del sistema. Para cambiar el valor del nivel de ejecución
predeterminado, se edita como root el archivo /etc/inittab:
# vim /etc/inittab
Con el siguiente comando podríamos ver el nivel actual de el sistema
# runlevel
Cuando nos muestra una N antes del nivel quiere decir que el nivel inicial es el actual
pág. 118
# N 5
Cuando se muestran 2 valores distintos quiere decir que se conmuto el nivel inicial
# 3 5
Con el siguiete comando podríamos ver de forma mas detallada la información del nivel de
ejecución:
“ who -r
Con el comando init podremos hacer la conmutación o cambio de nivel de ejecución:
# init 1
Con el siguiente comando cambiaremos al nivel de ejecución 3:
# init 3
Con el siguiente cambiaremos al nivel 6 lo cual probocaria que el sistema reiniciara de manera
inmediata:
# init 6
Con el siguiente el sistema se apagara, pues cambiaria al nivel 0 o apagado:
# init 0
Secuencia de arranque
1.- CentOS arranca ejecutando el programa init. El archivo de configuración de init es
/etc/inittab.
pág. 119
4.- Los primeros scripts que se ejecutan a continuación (indicado en la linea del fichero
/etc/inittab: si::sysinit:/etc/init.d/rcS) son los que se encuentra en el directorio /etc/rcS. Estos
scripts son los encargados de realizar algunas tareas como:
Monta el file system root y /proc.
Elimina temporales y archivos de bloqueo.
Establece el reloj
Inicia scripts de red y activa la partición swap.
Activa el teclado y fuentes.
Carga módulos.
Establece valores a muchas variables del entorno:PATH, HOSTNAME,...
Arranca la swap
Arranca fsck automático, si hace falta.
Activa quotas.
Chequea los argumentos pasados al kernel.
Chequea los filesystems
Inicializa los puertos serie.
Puertos USB.
5.- Lista los ficheros que se encuentran en el directorio /etc/rc.d
6.- Comprueba que son enlaces simbólicos a los scripts que se encuentran en el directorio
/etc/init.d
7.- A continuación se ejecutan los scripts de inicialización de los servicios del nivel de ejecución
por defecto. Estos scripts se encuentran en los directorios /etc/rcn donde n es el nivel de
ejecución.
Ejemplo:
Nivel Script Directorio
0 rc 0 /etc/rc0.d/
1 rc 1 /etc/rc1.d/
2 rc 2 /etc/rc2.d/
3 rc 3 /etc/rc3.d/
pág. 120
Es el script /etc/init.d/rc el que procesa todos los archivos K y S de los directorios /etc/rcn.d
Para ( con el argumento stop ) aquellos procesos que comienzan por K ( kill )
Lanza ( con el argumento start ) los que comienzan por S ( start ).
Después de la letra S o K hay dos dígitos numéricos que indican el orden de ejecución. El
orden es ASCII.
Todos los ficheros K o S son enlaces simbólicos a los scrips de cada servicio que están en el
directorio /etc/init.d
1) Visualiza los ficheros de los distintos directorios /etc/rcn.d.
2) Comprueba los ficheros de ejecución del nivel de ejecución que se ejecuta por defecto en
Debian.
3) Con la instrucción telinit podemos ejecutar otrps niveles de ejecución. Entra en el nivel
monousuario. Entra en el nivel de reinicio. Entra en el nivel de parada del sistema.
pág. 121
Un servicio que tenga un enlace simbólico denominado S80XXX, significa que el servicio iniciará
después de todos los demás servicios que tengan un número menor.
Es decir, S80XXX iniciará después de S70YYY.
Un servicio que tenga un enlace simbólico denominado K30XXX, significa que el servicio
terminará antes que todos los demás servicios que tengan un número mayor.
Es decir, K30XXX terminará primero que K40YYY.
1) Vamos a eliminar el servicio ssh (encargado de iniciar el servidor gráfico) del nivel de
ejecución 2, para ello elimina el fichero que inicia ese servicio.
2) Reinica el sistema y comprueba que el servidor gráfico no se ha iniciado.
3) Para restablecer el enlace simbólico para que podamos iniciar el servicio usamos la
instrucción update-rc.d (busca la página del manual para aprender más sobre esta
instrucción. Ejecuta:
pág. 122
update-rc.d gdm defaults para crear los enlaces simbólicos que ejecutan el script de gdm
4) Vuelve a reiniciar el sistema y comprueba que el servidor gráfico se vuelve a ejecutar.
5) Pregunta: ¿Para qué podríamos utilizar la configuración de distintos niveles de
ejecución?
Un enlace simbolico puede apuntar a un archivo aunque este en un file system distinto
# ps -A
En cualquier momento podemos parar o reiniciar cualquier servicio ejecutando los scripts
del directorio /etc/init.d con las siguientes opciones: start, stop, restart, force-reload,...
1) Comprueba que el servicio ssh se está ejecutando.
2) Para el servicio, y comprueba con la instrucción ps que el proceso no se está ejecutando.
3) Vuelve a reiniciar el servicio.
pág. 123
killall nombredelproceso
Del mismo modo puedes ver el nombre del proceso mirando la lista de procesos con ps.
1) Imagínate que el servidor gráfico se queda "colgado". Entra en un terminal de texto con
CTRL+ALT+F1, y tras iniciar sesión como root mata el proceso gdm (Gestor de arranque del
servidor gráfico).
2) Para comprobar que el servidor gráfico no funciona puedes hacer varias cosas: lista los
procesos y comprueba que no existe el proceso gdm ni el Xorg. También puedes intentar
entrar en la consola gráfica con CTRL+ALT+F7.
3) Vuelve a ejecutar el gestor de arranque gráfico gdm.
4) Del mismo modo puedes matar el demonio del servicio ssh, y volver a reiniciarlo
posteriormente.
Servicios.
La gestión de servicios se hace a través de dos herramientas: chkconfig y service. Ambas utilizan
como argumentos los nombres de los archivos de inicio de los servicios, los cuales se localizan
dentro del directorio/etc/init.d
Chkconfig
Chkconfig permite configurar que servicios arrancan/detienen en cada nivel de ejecucción.
Aclaración: chkconfig no inicia ni detiene servicios al momento (excepto aquellos bajo xinetd),
tan solo crea o elimina precisamente los enlaces de los que se habló en el punto anterior de una
pág. 124
manera mas amigable. Si lo que se quiere es iniciar o detener el servicio en tiempo real o
manualmente hay que usar service o directamente el script con su argumento conveniente tal
como se explicó anteriormente.
Veamos ejemplos que muestran como trabajar con chkconfig.
Con la opción --list nos da una lista completa de todos los servicios instalados y para cada nivel si
arrancará (on) al entrar a ese nivel o se detendrá (off) o simplemente no se iniciara. Nótese que
al final de la lista vienen los servicios que dependen del superservidor xinetd.
# chkconfig –list
Con el siguiente comando eliminaremos el servicio del sistema, es decir se eliminara el link del
/etc/init.d
# chkconfig --del sshd
Con el siguiente comando agregaremos el servicio al inicio del sistema, es decir arrancara al
inicio del sistema, añadiéndolo al directorio /etc/init.d
Al ejecutar chkconfig con el nombre del servicio y on como argumentos para activar un servicio
que ha sido previamente añadido al sistema.
# chkconfig crond on
pág. 125
Si ejecutamos el comando con la opción reset los valores que se asignan son los
predeterminados.
pág. 126
Con esta podemos administrar los servicios principales, pudiendo interactuar con ella para la
utilización de los servicios.
Service.
Un daemon (demonio) (nomenclatura usada en sistemas UNIX y UNIX
like), service(servicio) (nomenclatura usada en Windows) o programa residente (nomenclatura
usada en MS-DOS) es un tipo especial de proceso informático no interactivo, es decir, que se
ejecuta en segundo plano en vez de ser controlado directamente por el usuario. Este tipo de
programas continua en el sistema, es decir, que puede ser ejecutado en forma persistente o
reiniciado si se intenta matar el proceso dependiendo de configuración del demonio y políticas
del sistema. La palabra daemon viene de las siglas en inglés D.A.E.MON (Disk And Execution
Monitor).
Iniciar un servicio
Para un servicio
pág. 127
# service network stop ó /etc/init.d/network stop
Estado de un servicio
Al ejecutar el siguiente comando, verificaremos el estado del servicio en cuestio:
pág. 128
Tipos de usuarios
Los usuarios en Unix/Linux se identifican por un número único de usuario, User ID, UID. Y
pertenecen a un grupo principal de usuario, identificado también por un número único de
grupo, Group ID, GID. El usuario puede pertenecer a más grupos además del principal.
Aunque sujeto a cierta polémica, es posible identificar tres tipos de usuarios en Linux:
Usuario root
También llamado superusuario o administrador.
Su UID (User ID) es 0 (cero).
Es la única cuenta de usuario con privilegios sobre todo el sistema.
Acceso total a todos los archivos y directorios con independencia de propietarios y
permisos.
Controla la administración de cuentas de usuarios.
Ejecuta tareas de mantenimiento del sistema.
Puede detener el sistema.
Instala software en el sistema.
Puede modificar o reconfigurar el kernel, controladores, etc.
Usuarios especiales
Ejemplos: bin, adm, lp, sync, shutdown, mail, operator, squid, apache, etc.
Se les llama también cuentas del sistema.
No tiene todos los privilegios del usuario root, pero dependiendo de la cuenta asumen
distintos privilegios de root.
Lo anterior para proteger al sistema de posibles formas de vulnerar la seguridad.
pág. 129
No tienen contraseñas pues son cuentas que no están diseñadas para iniciar sesiones con
ellas.
También se les conoce como cuentas de "no inicio de sesión" (nologin).
Se crean (generalmente) automáticamente al momento de la instalación de Linux o de la
aplicación.
Generalmente se les asigna un UID entre 1 y 100 (definifo en /etc/login.defs)
Usuarios normales
Se usan para usuarios individuales.
Cada usuario dispone de un directorio de trabajo, ubicado generalmente en /home.
Cada usuario puede personalizar su entorno de trabajo.
Tienen solo privilegios completos en su directorio de trabajo o HOME.
Por seguridad, es siempre mejor trabajar como un usuario normal en vez del usuario root,
y cuando se requiera hacer uso de comandos solo de root, utilizar el comando su.
En las distros actuales de Linux se les asigna generalmente un UID superior a 500.
etc/passwd
Cualquiera que sea el tipo de usuario, todas las cuentas se encuentran definidas en el archivo de
configuración 'passwd', ubicado dentro del directorio /etc. Este archivo es de texto tipo ASCII, se
crea al momento de la instalación con el usuario root y las cuentas especiales, más las cuentas
de usuarios normales que se hayan indicado al momento de la instalación.
El nombre que es asignado al grupo que se almacena en /etc/passwd es Primary group
El archivo /etc/passwd contiene una línea para cada usuario, similar a las siguientes:
root:x:0:0:root:/root:/bin/bash
sergio:x:501:500:Sergio González:/home/sergio:/bin/bash
pág. 130
La información de cada usuario está dividida en 7 campos delimitados cada uno por ':' dos
puntos.
/etc/passwd
Campo 1 Es el nombre del usuario, identificador de inicio de sesión (login). Tiene que ser
único.
Campo 2 La 'x' indica la contraseña encriptada del usuario, además también indica que se
está haciendo uso del archivo /etc/shadow, si no se hace uso de este archivo,
este campo se vería algo así como: 'ghy675gjuXCc12r5gt78uuu6R'.
Campo 3 Número de identificación del usuario (UID). Tiene que ser único. 0 para root,
generalmente las cuentas o usuarios especiales se numeran del 1 al 100 y las de
usuario normal del 101 en delante, en las distribuciones mas recientes esta
numeración comienza a partir del 500.
Campo 4 Numeración de identificación del grupo (GID). El que aparece es el número de
grupo principal del usuario, pero puede pertenecer a otros, esto se configura
en/etc/groups.
Campo 5 Comentarios o el nombre completo del usuario.
Campo 6 Directorio de trabajo (Home) donde se sitúa al usuario después del inicio de
sesión.
Campo 7 Shell que va a utilizar el usuario de forma predeterminada.
Nota: Recuerde usted puede ver las características de pasword ejecutando el comando
passwd con la opción –S y el nombre del usuario.
/etc/shadow
pág. 131
root:ghy675gjuXCc12r5gt78uuu6R:10568:0:99999:7:7:-1::
sergio:rfgf886DG778sDFFDRRu78asd:10568:0:-1:9:-1:-1::
La información de cada usuario está dividida en 9 campos delimitados cada uno por ':' dos
puntos.
/etc/shadow
Campo 1 Nombre de la cuenta del usuario.
Campo 2 Contraseña cifrada o encriptada, un '*' indica cuenta de 'nologin'.
Campo 3 Días transcurridos desde el 1/ene/1970 hasta la fecha en que la contraseña fue
cambiada por última vez.
Campo 4 Número de días que deben transcurrir hasta que la contraseña se pueda volver a
cambiar.
Campo 5 Número de días tras los cuales hay que cambiar la contraseña. (-1 significa
nunca). A partir de este dato se obtiene la fecha de expiración de la contraseña.
Campo 6 Número de días antes de la expiración de la contraseña en que se le avisará al
usuario al inicio de la sesión.
Campo 7 Días después de la expiración en que la contraseña se inhabilitara, si es que no se
cambio.
Campo 8 Fecha de caducidad de la cuenta. Se expresa en días transcurridos desde el
1/Enero/1970 (epoch).
Campo 9 Reservado.
/etc/group
Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del sistema,
contiene una línea para cada usuario con tres o cuatro campos por usuario:
root:x:0:root
ana:x:501:
sergio:x:502:ventas,supervisores,produccion
cristina:x:503:ventas,sergio
pág. 132
'sergio' también se crea el /etc/group el grupo 'sergio'. Aun asi, existen comandos de
administración de grupos que se explicarán más adelante.
/etc/login.defs
En el archivo de configuración /etc/login.defs están definidas las variables que controlan los
aspectos de la creación de usuarios y de los campos de shadow usada por defecto. Algunos de
los aspectos que controlan estas variables son:
Número máximo de días que una contraseña es válida PASS_MAX_DAYS
El número mínimo de caracteres en la contraseña PASS_MIN_LEN
Valor mínimo para usuarios normales cuando se usa useradd UID_MIN
El valor umask por defecto UMASK
Si el comando useradd debe crear el directorio home por defecto CREATE_HOME
Basta con leer este archivo para conocer el resto de las variables que son autodescriptivas
y ajustarlas al gusto. Recúerdese que se usaran principalmente al momento de crear o
modificar usuarios con los comandos useradd y usermod que en breve se explicaran.
pág. 133
useradd o adduser es el comando que permite añadir nuevos usuarios al sistema desde la línea
de comandos. Sus opciones más comunes o importantes son las siguientes:
-c añade un comentario al momento de crear al usuario, campo 5 de /etc/passwd
-d directorio de trabajo o home del usuario, campo 6 de /etc/passwd
-e fecha de expiración de la cuenta, formato AAAA-MM-DD, campo 8 de /etc/shadow
-g número de grupo principal del usuario (GID), campo 4 de /etc/passwd
-G otros grupos a los que puede pertenecer el usuario, separados por comas.
-r crea una cuenta del sistema o especial, su UID será menor al definido
en/etc/login.defs en la variable UID_MIN, además no se crea el directorio de inicio.
-s shell por defecto del usuario cuando ingrese al sistema. Si no se especifica, bash, es el
que queda establecido.
-u UID del usuario, si no se indica esta opción, automáticamente se establece el siguiente
número disponible a partir del último usuario creado.
Ahora bien, realmente no hay prácticamente necesidad de indicar ninguna opción ya que si
hacemos lo siguiente:
#> useradd juan
Siempre el nombre del usuario es el último parámetro del comando. Asi por ejemplo, si
queremos salirnos del default, podemos establecer algo como lo siguiente:
#> useradd -d /usr/juan -s /bin/csh -u 800 -c "Juan Perez Hernandez" juan
pág. 134
Con lo anterior estamos cambiando su directorio de inicio, su shell por defautl sera csh y su UID
será el 800 en vez de que el sistema tome el siguiente número disponible.
En algunas distribuciones es posible con el siguiente comando:
Casi seguro también cambiará el nombre del directorio de inicio o HOME en /home, pero si no
fuera así, entonces:
pág. 135
Lo anterior modifica el comentario de la cuenta, su shell por defecto que ahora sera Korn shell y
su grupo principal de usuario quedó establecido al GID 505 y todo esto se aplicó al usuario 'sego'
que como se observa debe ser el último argumento del comando.
El usuario 'sego' salió de vacaciones y nos aseguramos de que nadie use su cuenta:
#> usermod -L sego
Eliminar usuarios con userdel
Como su nombre lo indica, userdel elimina una cuenta del sistema, userdel puede ser invocado
de tres maneras:
Al igual que lo anterior elimina la cuenta totalmente, pero con la opción -r además elimina su
directorio de trabajo y archivos y directorios contenidos en el mismo, asi como su buzón de
correo, si es que estuvieran configuradas las opciones de correo. La cuenta no se podrá eliminar
si el usuario esta logueado o en el sistema al momento de ejecutar el comando.
La opción -f es igual que la opción -r, elimina todo lo del usuario, cuenta, directorios y archivos
del usuario, pero además lo hace sin importar si el usuario esta actualmente en el sistema
trabajando. Es una opción muy radical, además de que podría causar inestabilidad en el sistema,
asi que hay que usarla solo en casos muy extremos.
pág. 136
Crear al usuario con useradd es el primer paso, el segundo es asignarle una contraseña a ese
usuario. Esto se logra con el comando passwd que permitirá ingresar la contraseña y su
verificación:
#> passwd sergio
Changing password for user prueba.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
#>
El usuario root es el único que puede indicar el cambio o asignación de contraseñas de cualquier
usuario. Usuarios normales pueden cambiar su contraeña en cualquier momento con tan solo
invocar passwd sin argumentos, y podrá de esta manera cambiar la contraseña cuantas veces lo
requiera.
Password tiene integrado validación de contraseñas comunes, cortas, de diccionario, etc. asi
que si por ejemplo intento como usuario normal cambiar mi contraseña a 'qwerty' el sistema me
mostrará lo siguiente:
$> passwd
Changing password for user prueba.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
$>
Nótese que al ingresar 'qwerty' como contraseña se detectó que es una secuencia ya conocida
como contraseña y me manda la advertencia: "BAD PASSWORD: it is based on a dictionary
word", sin embargo me permite continuar, al ingresar la verificación. Es decir, passwd avisa de
malas o débiles contraseñas pero permite establecerlas si realmente se desea.
pág. 137
Resumiendo entonces, se podría decir que todo este tutorial se reduce a dos líneas de
comandos para crear y dejar listo para trabajar a un usuario en Linux:
Se crea el usuario 'ana', useradd hace todo el trabajo de establecer el shell, directorio de inicio,
copiar archivos iniciales de configuración de la cuenta, etc. y después passwdestablece la
contraseña. Asi de simple.
passwd tiene varias opciones que permiten bloquear la cuenta '-l', desbloquearla '-u', y varias
opciones más que controlan la vigencia de la contraseña, es decir, es otro modo de establecer
los valores de la cuenta en /etc/shadow. Para más información consulta las páginas del manual:
$> man passwd
Archivos de configuración
Los usuarios normales y root en sus directorios de inicio tienen varios archivos que comienzan
con "." es decir están ocultos. Varían mucho dependiendo de la distribución de Linux que se
tenga, pero seguramente se encontrarán los siguientes o similares:
#> ls -la
drwx------ 2 ana ana 4096 jul 9 09:54 .
drwxr-xr-x 7 root root 4096 jul 9 09:54 ..
-rw-r--r-- 1 ana ana 24 jul 9 09:54 .bash_logout
-rw-r--r-- 1 ana ana 191 jul 9 09:54 .bash_profile
-rw-r--r-- 1 ana ana 124 jul 9 09:54 .bashrc
.bash_profile aquí podremos indicar alias, variables, configuración del entorno, etc. que
deseamos iniciar al principio de la sesión.
.bash_logout aquí podremos indicar acciones, programas, scripts, etc., que deseemos ejecutar al
salirnos de la sesión.
.bashrc es igual que .bash_profile, se ejecuta al principio de la sesión, tradicionalmente en este
archivo se indican los programas o scripts a ejecutar, a diferencia de .bash_profile que configura
el entorno.
pág. 138
Además Linux permite que el usuario decida que tipo de entorno Xwindow a utilizar, ya sea
algún entorno de escritorio como KDE o Gnome o algún manejador de ventanas como Xfce o
Twm. Dentro del Home del usuario, se creará un directorio o archivo escondido "." , por ejemplo
'.gnome' o '.kde' donde vendrá la configuración personalizada del usuario para ese entorno.
Dentro de este directorio suele haber varios directorios y archivos de configuración. Estos son
sumamente variados dependiendo de la distribución y del entorno. No es recomendable
modificar manualmente (aunque es perfectamente posible) estos archivos, es mucho mas
sencillo modificar vía las interfases gráficas que permiten cambiar el fondo, protector de
pantalla, estilos de ventanas, tamaños de letras, etc.
Resumen de comandos y archivos de administración de usuarios
Existen varios comandos más que se usan muy poco en la administración de usuarios, que sin
embargo permiten administrar aun más a detalle a tus usuarios de Linux. Algunos de estos
comandos permiten hacer lo mismo que los comandos previamente vistos, solo que de otra
manera, y otros como 'chpasswd' y 'newusers' resultan muy útiles y prácticos cuando de dar de
alta a múltiples usuarios se trata.
pág. 139
A continuación te presento un resumen de los comandos y archivos vistos en este tutorial más
otros que un poco de investigación.
Comandos de administración y control de usuarios
adduser Ver useradd
chage Permite cambiar o establecer parámetros de las fechas de control de la
contraseña.
chpasswd Actualiza o establece contraseñas en modo batch, múltiples usuarios a
la vez. (se usa junto con newusers)
id Muestra la identidad del usuario (UID) y los grupos a los que pertence.
gpasswd Administra las contraseñas de grupos (/etc/group y /etc/gshadow).
groupadd Añade grupos al sistema (/etc/group).
groupdel Elimina grupos del sistema.
groupmod Modifica grupos del sistema.
groups Muestra los grupos a los que pertence el usuario.
newusers Actualiza o crea usuarios en modo batch, múltiples usuarios a la vez. (se
usa junto chpasswd)
pwconv Establece la protección shadow (/etc/shadow) al archivo /etc/passwd.
pwunconv Elimina la protección shadow (/etc/shadow) al archivo /etc/passwd.
useradd Añade usuarios al sistema (/etc/passwd).
userdel Elimina usuarios del sistema.
usermod Modifica usuarios.
pág. 140
Modificación de grupos
El comando groupmod permite modificar el nombre de un grupo o el gid del mismo. La sintaxis
es: sudo groupmod [-g nuevo-gid] [-n nuevo-nombre] nombre-grupo, ejemplo:
// Cambiar el gid del grupo profesores
$ sudo groupmod -g 2000 profesores
Eliminación de grupos
Se realiza con el comando groupdel seguido del nombre del grupo, ejemplo:
// Eliminación de un grupo
$ sudo groupdel profesores
Eliminaría el grupo profesores. Si algún usuario tuviera dicho grupo como grupo primario, el
comando groupdel no eliminará el grupo.
Añadir usuarios a un grupo
Se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al que
queremos añadirle, ejemplo:
// Añadir a 'juan' al grupo 'profesores'
$ sudo adduser juan profesores
pág. 141
SUDO
El programa sudo (del inglés substitute user do) es una utilidad de los sistemas
operativos tipo Unix, como Linux, BSD, o Mac OS X, que permite a los usuarios ejecutar
programas con los privilegios de seguridad de otro usuario (normalmente el usuario root) de
manera segura. Se instala por defecto en /usr/bin
Sudo fue escrito originalmente por Bob Coggeshall y Cliff Spencer en 1980, en el departamento
de ciencias de la computación de la Universidad estatal de Nueva York. La versión actual la
mantiene el desarrollador de OpenBSD Todd C. Miller y se distribuye bajo una licencia BSD.
En 1985 se publicó en el grupo de noticias net.sources una versión mejorada acreditada a Phil
Betchel, Cliff Spencer, Gretchen Phillips, John LoVerso y Don Gworek. Garth Snyder publicó otra
versión mejorada en el verano de 1986 y durante los siguientes cinco años fue mantenido con la
colaboración de muchas personas, incluyendo Bob Coggeshall, Bob Manchek, y Trent Hein.
En 1991 Dave Hieb y Jeff Nieusma escribieron una nueva versión con un formato mejorado para
el fichero /etc/sudoers bajo contrato con la firma consultora The Root Group, versión que
posteriormente fue publicada bajo los términos de la Licencia Pública General
de GNU (GNU/GPL).
Desde 1996 el proyecto es mantenido por Todd Miller con la colaboración de Chris Jepeway y
Aaron Spangler.
Seguro que todo el mundo ha utilizado o como mínimo ha oído hablar de sudo, el comando que
permite ejecutar sentencias con los privilegios de cualquier usuario -incluidos los privilegios de
superusuario- y que es una medida muy interesante para evitar tener que entrar directamente
como estos usuarios con el más tradicional su.
pág. 142
Ilustración 8 La famosa tira cómica de XKCD deja claro qué es lo que permite hacer sudo
En Linux.com han publicado una fantástica introducción a sudo, que significa “substitute user
do” o “super user do” (según como lo usemos), y que como indican en ese artículo realiza una
tarea importante y crucial en muchas distribuciones Linux. Hay cierta polémica en si el uso de
sudo es bueno o malo para la seguridad, pero sea como fuere, seguro que hay un buen montón
de ocasiones en las que os vendrá bien usar el sudo.
En el artículo nos cuentan la historia de sudo, que comenzó a utilizarse en 1.980 y que poco a
poco se fue popularizando hasta llegar a las distribuciones gracias al trabajo de Todd Miller, que
sigue siendo su desarrollador principal.
Las diferencias entre sudo y su son claras, ya que su permite loguearnos como cualquier otro
usuario o como superusuario, mientras que sudo sólo permite ejecutar comandos con los
privilegios de otros usuarios -incluido el superusuario, como ya hemos comentado-. Los riesgos
para la seguridad son menores -aunque podemos seguir cagándola con sudo, por supuesto- y
por eso es bueno que sepáis cómo configurar y utilizar sudo.
pág. 143
Visudo
Permite la edición del archivo de configuración de sudo sudoers. Invoca al editor que se tenga
por defecto que generalemente es 'vi'. visudo cuando es usado, bloquea el archivo /etc/sudoers
de tal manera que nadie más lo puede utilizar, esto por razones obvias de seguridad que
evitarán que dos o más usuarios administradores modifiquen accidentalmente los cambios que
el otro realizó.
Otra característica importande de visudo es que al cerrar el archivo, verifica que el archivo este
bien configurado, es decir, detectará si hay errores de sintaxis principalmente en sus múltiples
opciones o reglas de acceso que se tengan. Por esta razón no debe editarse /etc/sudoers
directamente (perfectamente posible ya que es un archivo de texto como cualquier otro) sino
siempre usar visudo.
Si al cerrar visudo detecta un error nos mostrará la línea donde se encuentra, y la pregunta
"What now?":
pág. 144
Por defecto el archivo de configuración es /etc/sudoers pero se pueden editar otros archivos
que no sean ese y que se aplique la sintaxis de sudo, y esto se logra con la opción -f(visudo -f
/otro/archivo).
Si tan solo se desea comprobar que /etc/sudoers esta bien configurado se usa la opción -c, toma
por el archivo de configuración por defecto o si no se indica algún otro.
#> visudo -c
/etc/sudoers file parsed OK
La opción -s activa el modo 'estricto' del uso de visudo, es decir no solo se comprobará lo
sintáctico sino también el orden correcto de las reglas, por ejemplo si se define el alias para un
grupo de comandos y este se usa antes de su definición, con esta opción se detectará este tipo
de errores.
Sudoers
Archivo de configuración de sudo, generalmente ubicado bajo /etc y se modifica a través del uso
de visudo. En este archivo se establece quien (usuarios) puede ejecutar que (comandos) y de
que modo (opciones), generando efectivamente una lista de control de acceso que puede ser
tan detallada como se desee.
Es más fácil entender sudo si dividimos en tres partes su posible configuración, estás son:
Alias
Opciones (Defaults)
Reglas de acceso
Por extraño que parezca ninguna de las secciones es obligatoria, o tienen que estar en algún
orden específico, pero la que al menos debe de existir es la tercera, que es la definción de los
controles o reglas de acceso. Se detallará cada uno de estos en un momento. Para los que les
gusta saber más la cuestión técnica es interesante saber que la construcción de un
archivo sudoers esta basado en la forma BNF (Backus-Naur Form), concretamente en versión
extendida (EBNF), si estudiaste algún curso de informática universitario seguramente sabes de
lo que hablo. EBNF describe de una forma precisa y exacta la gramática de un lenguaje, esta se
va creando a través de reglas de producción que a la vez son la base para ser referenciadas por
otras reglas. Afortunadamente no necesitas saber nada de esto, solo entender como se aplican
estas reglas.
pág. 145
Alias
Un alias se refiere a un usuario, un comando o a un equipo. El alias engloba bajo un solo nombre
(nombre del alias) una serie de elementos que después en la parte de definición de reglas serán
refiridos aplicados bajos cierto criterio. Es decir, regresando a EBNF estamos creando las reglas
de producción inicial. La forma para crear un alias es la siguiente:
El tipo_alias define los elementos, es decir, dependiendo del tipo de alias serán sus elementos.
Los tipo de alias son cuatro y son los siguientes:
Cmnd_Alias - define alias de comandos.
User_Alias - define alias de usuarios normales.
Runas_Alias - define alias de usuarios administradores o con privilegios.
Host_Alias - define alias de hosts o equipos.
El NOMBRE_DEL_ALIAS puede llevar letras, números o guión bajo ( _ ) y DEBE de comenzar con
una letra mayúscula, se acostumbra a usarlos siempre en mayúsculas.
Los elementos del alias varian dependiendo del tipo de alias, asi que veámoslos por partes asi
como varios ejemplos para que comience a quedar claro todo esto.
Cmnd_Alias
Definen uno o más comandos y otros alias de comandos que podrán ser utilizados después en
alias de usuarios. Ejemplos:
pág. 146
User_Alias
Definen a uno o más usuarios, grupos del sistema (indicados con %), grupos de red (netgroups
indicados con +) u otros alias de usuarios. Ejemplos:
User_Alias MYSQL_USERS = andy, marce, juan, %mysql
Indica que al alias MYSQL_USERS pertenecen los usuarios indicados individualmente más los
usuarios que formen parte del grupo 'mysql'.
pág. 147
Runas_Alias
Funciona exactamente igual que User_Alias, la única diferencia es que es posible usar el ID del
usario UID con el caracter '#'.
Host_Alias
Definen uno o más equipos u otros alias de host. Los equipos pueden indicarse por su nombre
(si se encuentra en /etc/hosts) por nombre de dominio, si existe un resolvedor de dominios, por
dirección IP, por dirección IP con máscara de red.
Ejemplos:
Host_Alias LANS = 192.168.0.0/24, 192.168.0.1/255.255.255.0
El alias LANS define todos los equipos de las redes locales.
Opciones (defaults)
Las opciones o defaults permiten definir ciertas características de comportamiento para los alias
previamente creados, para usuarios, usuarios privilegiados, para equipos o de manera global
para todos. No es necesario definir opciones o defaults, sudo ya tiene establecidas el valor de
cada uno, y es posible conocerlas a través de sudo -V (ver en la sección sudo de este tutorial).
Sin embargo, la potencia de sudo está en su alta granularidad de configuración, asi que es
importante conocer como establecer opciones espécificas.
pág. 148
Se usa la palabra reservada 'Defaults' para establecer las opciones y dependiendo del nivel que
deseamos afectar su sintaxis es la siguiente:
La lista de opciones es algo extensa, pueden consultarse en las páginas del manual (man
sudoers) o en el excelente manual sobre sudo del sitio web de www.rpublica.net,
http://www.rpublica.net/sudo/indice.html#defaults, está en español y define muy claramente
lo que significa cada opción. En este tutorial de LinuxTotal.com.mx me concretaré a ejemplificar
varios ejemplos del uso de establecer opciones.
Los defaults los divide el manual (man sudoers) en cuatro: flags o booleanos, enteros, cadenas y
listas. Veamos entonces algunos ejemplos de uso para cada uno de ellos:
Listas
Permite establecer/eliminar variables de entorno propias de sudo. Los 'Defaults' para variables
es de los menos usados en las configuraciones de sudo y ciertamente de los más confusos. Para
entender como se aplican es más fácil si primero ejecutas como 'root' el comando sudo -V, y al
final del listado encontrarás en mayúsculas las posibles variables de entorno que se pueden
establecer o quitar y que vienen del shell.
Solo existen tres opciones de listas: env_check, env_delete y env_keep, las listas pueden ser
remplazadas con '=', añadidas con '+=', eliminadas con '-=' o deshabilitadas con '!'. Con un par de
ejemplos quedará más claro.
Defaults env_delete -= HOSTNAME
Elimina la variable de entorno 'HOSTNAME', (pero preserva todas las demás que hubiera) y
comandos que se ejecuten bajo sudo y que requieran de esta variable no la tendrían disponible.
Defaults env_reset
Defaults env_check += DISPLAY, PS1
La primera opción 'env_reset' reinicializa las variables de entorno que sudo utilizará o tendrá
disponibles, y solo quedan disponibles LOGNAME, SHELL, USER y USERNAME. La siguiente línea
indica que agregue (+=) a lo anterior, también la variable de entorno DISPLAY a su valor
establecido antes del reset.
pág. 149
Reglas de acceso
Aunque no es obligatorio declarar alias, ni opciones (defaults), y de hecho tampoco reglas de
acceso, pues el archivo /etc/sudoers no tendría ninguna razón de ser si no se crean reglas de
acceso. De hecho podríamos concretarnos a crear solamente reglas de acceso, sin opciones ni
alias y podría funcionar todo muy bien.
Las reglas de acceso definen que usuarios ejecutan que comandos bajo que usuario y en que
equipos. La mejor y (según yo, única manera) de entender y aprender a configurar sudoers es
con ejemplos, asi que directo al grano:
pág. 150
No es necesario indicar (root) ya que es el usuario bajo el cual se ejecutan los comandos por
defecto. También es válido usar (ALL) para indicar bajo cualquier usuario. El ejemplo siguiente
da permisos absolutos.
sergio ALL = (ALL) ALL
Se establece permiso para el usuario 'sergio' en cualquier host, ejecutar cualquier comando de
cualquier usuario, por supuesto incluyendo los de root.
En este último ejemplo se aprecia lo últil que pueden ser los alias, ya que una vez definida la
regla, solo debemos agregar o eliminar elementos de las listas de alias definidos previamente. Es
decir, se agrega un equipo más a la red, se añade al alias 'PRODUCCION', un usuario renuncia a
la empresa, alteramos el alias 'SUPERVISORES' eliminándolo de la lista, etc.
Cuando se indica el comando sin argumentos: /sbin/iptables sudo lo interpreta como 'puede
usar iptables con cualquiera de sus argumentos'.
mariajose ALL = "/sbin/lsmod"
Al estar entre comillas dobles un comando, entonces sudo lo interpreta como 'puede hacer uso
del comando lsmod pero sin argumentos'. En este caso el usuario 'mariajose' podrá ver la lista
de módulos del kernel, pero solo eso.
pág. 151
Cuando se definen reglas, en la lista de comandos, estos pueden tener cero (como en los
ejemplos anteriores) o más tags. Existen 6 de estas etiquetas o tags,
NOPASSWD Y PASSWD
Por defecto sudo requiere que cualquier usuario se identifique o auténtifique con su
contraseña. Aprendimos en la sección de 'Opciones' o 'Defaults' que es posible indicar que un
usuario o alias de usuario no requiera de autentificación. Pero el control granular propio
desudo, permite ir aun más lejos al indicar a nivel de comandos, cuáles requieren contraseña
para su uso y cuáles no.
NOEXEC Y EXEC
Este es un tag muy importante a considerar cuando sobre se otorgan permisos sobre programas
que permiten escapes a shell (shell escape), como en el editor 'vi' que mediante el uso de '!' es
posible ejecutar un comando en el shell sin salir de 'vi'. Con el tag NOEXEC se logra que esto no
suceda, aunque no hay que tomarlo como un hecho, ya que siempre existe la posibilidad de
vulnerabilidades no conocidas en los múltiples programas que utilizan escapes a shell. Al igual
que los tags anteriores, el tag se hereda y se deshabilita con su tag contrario (EXEC), en caso de
que en la lista de comandos hubiera varios comandos.
pág. 152
# sergio.gonzalez.duran@gmail.com
# ***********************
# ***********************
# DEFINCION DE ALIAS
# ***********************
# webmasters -
User_Alias WEBMAS = cristina, juan
# servidores web
Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101
# servidores de aplicaciones
Host_Alias APLICACIONES = WEBSERVERS, 10.0.1.102, 10.0.1.103, mailserver
# comandos de apache
Cmnd_Alias APACHECMDS = /usr/sbin/apachectl, /sbin/service httpd *
# ***********************
# DEFINCION DE OPCIONES
# ***********************
# Para todos los usuarios, tienen hasta dos intentos para ingresar su contraseña y 3 minuto para
pág. 153
# Máscara de directorios y archivos por default, para los que ejecuten sudo en los servidores
web
Defaults@WEBSERVERS umask = 022
# ***********************
# DEFINCION DE REGLAS
# ***********************
# administradores todo se les permite en cualquier equipo (¡¡¡¡¡cuidado con esto en la vida
real!!!!!
ADMINS ALL = (ALL) ALL
# webmasters, en los servidores web con los comandos indicados en apachecmds y además sin
necesidad
# de contraseña acceder a las bítacoras de apache y reiniciar los servidores.
WEBMAS WEBSERVERS = APACHECMDS, NOPASSWD: /var/log/apache/, /sbin/reboot
# supervisores, pueden ejecutar los comandos indicados en los equipos indicados en el alias
# aplicaciones y además son ejecutados bajo el usuario apps.
SUPPRO APLICACIONES = NOEXEC: (apps) /usr/local/facturacion.exe, /usr/local/ventas.exe,
/usr/local/nomina.exe
# no definidos por alias previos, sino directamente
pág. 154
# El equipo firewall de la red puede ser reiniciado (no apagado) por fernanda que es asistente
de redes
fernanda firewall = /sbin/shutdown -r now
Sudo
sudo (SUperuser DO) lo ejecuta un usuario normal, al que se supone tiene permisos para
ejecutar cierto comando. Entonces, sudo requiere que los usuarios se autentifiquen a si mismos
a través de su contraseña para permitirles la ejecución del comando. Veamos un ejemplo:
$ sudo /sbin/ifconfig
Password:
eth0 Link encap:Ethernet HWaddr 4C:00:10:60:5F:21
inet addr:200.13.110.62 Bcast:200.13.110.255 Mask:255.255.255.0
inet6 addr: fe80::4e00:10ff:fe60:5f21/64 Scope:Link
...
Como se podrá observar se usa el comando sudo seguido del comando (con toda su ruta si es
que este no esta en el PATH del usuario) al que se tiene permiso. sudo pregunta por la
contraseña del usuario que ejecuta el comando y listo.
Por defecto, después de hacer lo anterior tendrás 5 minutos para volver a usar el mismo
comando u otros a los que tuvieras derecho, sin necesidad de ingresar la contraseña de nuevo.
Si se quiere extender el tiempo por otros 5 minutos usa la opción sudo -v (validate). Por el
contario, si ya terminaste lo que tenías que hacer, puedes usar sudo -k (kill) para terminar con el
tiempo de gracia de validación.
Ahora bien, ¿Qué comandos son los que puedo utilizar?, pues la opción -l es la indicada para
eso:
$ sudo -l
User sergio may run the following commands on this host:
(root) /sbin/ifconfig
(root) /sbin/lspci
En el caso anterior se ejecutó un comando de root, pero no tiene que ser asi, también es posible
pág. 155
$> sudo -L
Available options in a sudoers ``Defaults'' line:
syslog: Syslog facility if syslog is being used for logging
syslog_goodpri: Syslog priority to use when user authenticates successfully
syslog_badpri: Syslog priority to use when user authenticates unsuccessfully
long_otp_prompt: Put OTP prompt on its own line
ignore_dot: Ignore '.' in $PATH
mail_always: Always send mail when sudo is run
mail_badpass: Send mail if user authentication fails
mail_no_user: Send mail if the user is not in sudoers
mail_no_host: Send mail if the user is not in sudoers for this host
mail_no_perms: Send mail if the user is not allowed to run a command
tty_tickets: Use a separate timestamp for each user/tty combo
lecture: Lecture user the first time they run sudo
lecture_file: File containing the sudo lecture
authenticate: Require users to authenticate by default
root_sudo: Root may run sudo
...
varias opciones más
pág. 156
Bastante útil, ya que nos muestra las opciones y una pequeña descripción, estás opciones se
establecen en el archivo de configuración 'sudoers'.
Una de las opciones más importantes de consulta es -V, que permite listar las opciones
(defaults) establecidas por defecto para sudo todos los usuarios, comandos, equipos, etc. Más
adelante en este tutorial, aprenderemos como establecer opciones específicas para ciertos
usuarios, comandos o equipos.
Nota: tienes que ser 'root' para usar esta opción.
# sudo -V
Sudo version 1.6.9p5
pág. 157
Nota: Es importante tener en cuenta que los métodos de autenticación que permite Linux,
tienden a variar dependiendo de la distribución y el para que se utilize, pero la versión de
suse, soporte los más comunes:NIS, LDAP, Windows Domain y Locales.
Usar los bash aliases acelera tareas usando la terminal.. ya que cómo todos sabemos, la
usamos bastante seguido para ahorrarnos tiempo...bueno con lo siguiente vamos a poder
ahorrar aún mas tiempo escribiendo
pág. 158
Ubicamos un archivo de texto común y corriente llamado . bashrc, tiene que estar en
nuestro home (ej: /home/usuario/)
Luego lo abrimos con cualquier editor de texto y empezamos a crear nuestros alias.........
Los alias pueden ser creados simplemente asignando un valor o nombre a otra orden, por
ejemplo:
alias instalar="sudo apt-get install"
alias remover="sudo apt-get remove"
alias actualizar="sudo apt-get update && sudo apt-get upgrade"
Guardamos los cambios, salimos del sistema, nos logueamos nuevamente y listo.
pág. 159
pág. 160
g. Enlaces rígidos (hard links): Realmente es un único fichero que puede ser
visto con distintos nombres dentro de un mismo sistema
de ficheros. Es decir se pueden observar como si fueran ficheros
idénticos con el mismo inodo. La información reside en un mismo lugar y lo que
ocurra aparentemente en un sitio ocurrirá instantáneamente en el otro lugar.
Los enlaces de este tipo no pueden ocurrir entre sistemas de ficheros distintos.
No todos los visto sistemas de ficheros soportan hard links ya que es un concepto
muy ligado a los SO tipo Unix
pág. 161
Existe una salvedad importante. Los directorios en este sentido son totalmente
especiales y un intento de escribir en un directorio dará siempre un error
siempre aunque sea realizado por 'root'. No tiene sentido permitirlo. Los directorios
se crean, borran, y modifican con comandos específicos para ellos.
Atributos de fecha en ficheros
En Unix y Linux los ficheros en sentido amplio tienen asociadas siempre tres fechas. En
realidad estas fechas están almacenadas internamente como
el número de segundos transcurridos desde el '1 de Enero de 1970'.
Una de ellas indica el tiempo del último acceso realizado sobre ese
fichero. La otra indica la fecha de creación (en realidad es la fecha del ultimo cambio
de estado) de ese fichero y la última y quizás más
importante (es la que vemos al consultar con 'ls -l') indica la fecha de la ultima
modificación.
En realidad si cambiamos el estado de un fichero por ejemplo cambiando permisos
O el propietario se modificará las fechas de creación y del último acceso.
Por eso la fecha que hemos denominado de creación puede ser posterior a la
a la fecha de modificación del fichero.
Cuando se crea un fichero las tres fechas tendrán el mismo valor. Cuando se
lee un fichero se modifica la fecha de acceso del mismo pero acceder al nombre
de un fichero o consultar el estado de un fichero no modifica ninguna fecha.
Su fecha de acceso tampoco ya que en realidad lo que se hace es leer la información del
directorio que lo contiene el cual si que vera modificada su fecha de acceso.
Las fechas de modificación asociadas a los directorios cambian con las altas o bajas de los
elementos dentro del directorio. Esto es debido a que dichas operaciones se consideran
como si fueran escrituras en el ficheroespecial de tipo directorio. Un directorio es al fin y alcabo
una simple tabla. Esto lo recordaremos cuando hablemos de permisos asociados a directorios.
Para modificar las fechas de modificación y de acceso de un fichero se puede usar el
comando touch.
pág. 162
Permisos de ficheros
Los permisos de los ficheros son almacenados en formato binario y se puede referenciar
numéricamente. Vimos que a cada permiso individual le
asociábamos un número de tres dígitos formado por dos ceros y un tercer número que podía
ser únicamente 1, 2, o 4. Por ejemplo el permiso de
escritura para un usuario cualquiera era 002. Con estos números se puede codificar los
permisos de la forma que indicamos en el siguiente ejemplo:
r w x - - w x - r - x Esto equivaldría a un permiso 735
4 2 1 - 0 2 1 - 4 0 1 ( 4+2+1 , 0+2+1 , 4+0+1 = 7,3,5)
pág. 163
pág. 164
Valor octal Valor simbólico Descripción
0 rwx Lectura, escritura y acceso a directorios
1 rw- Lectura y escritura
2 r-x Lectura y acceso a directorios
3 r-- Sólo lectura
4 -wx Escritura y acceso a directorios
5 -w- Sólo escritura
6 --x Sólo acceso a directorios
7 --- Nada
Para un script que genere ficheros que solo deban ser accesibles para el usuario que los ha
generado usaríamos. 'umask = 077'
pág. 165
Comando chmod
Este comando sirve para alterar una serie de atributos del fichero.
Existen dos formas de usarlo. Una indicando el tipo de acceso y a quien lo
queremos conceder o eliminar. Existen una serie de atributos que se
pueden modificar usando este comando.
04000 Set uid on execute.
02000 Set gid on execute.
01000 Save text on image after execution.
00400 r Permiso de lectura para el propietario (owner)
00200 w Permiso de escritura para el propietario
00100 x Permiso de ejecución para el propietario
00040 r Permiso de lectura para el grupo (group)
00020 w Permiso de escritura para el grupo
00010 x Permiso de ejecucion para el grupo
00004 r Permiso de lectura para cualquiera (others)
00002 w Permiso de escritura para cualquiera
00001 x Permiso de ejecucion para cualquiera
Consulte las páginas del manual relativas a este comando. Como de costumbre
el manual resulta imprescindible a la hora de recordar la utilización de un
comando pero no a la hora de comprender conceptos nuevos.
No se preocupe con los ejercicios que le proponemos a continuación comprenderá
perfectamente:
$ cd /tmp
$ touch chmod.txt
$ ##################################
pág. 166
$ chmod +x chmod.txt
$ ls -l chmod.txt
-r-xr-xr-x .... .... ......
$ ##################################
$ chmod -r chmod.txt
$ ls -l chmod.txt
---x--x--x .... .... ......
$ ##################################
pág. 167
$ chmod u+r chmod.txt
$ ls -l chmod.txt
-r-x--x--x .... .... ......
$ ##################################
$ chmod a-x chmod.txt
$ ls -l chmod.txt
-r-------- .... .... ......
$ ##################################
$ chmod g+x chmod.txt
$ ls -l chmod.txt
-r----x--- .... .... ......
$ ##################################
$ chmod o+x chmod.txt
$ ls -l chmod.txt
-r----x--x .... .... ......
$ ##################################
$ chmod a+rwx chmod.txt
$ ls -l chmod.txt
-rwxrwxrwx .... .... ......
rm chmod.txt
pág. 168
Opciones de chmod.
-R
Cambia permisos de forma descendente en un directorio dado. Es la única opción de los
estándares POSIX.
-c
Muestra cuáles archivos han cambiado recientemente en una ubicación dada
-f
Omite mostrar errores de archivos o directorios que haya sido imposible cambiar
-v
Descripción detallada de los mensajes generados por el proceso
Para obtener una descripción completa del uso de chmod, ejecute:
man 1 chmod
Comando chown
El comando 'chown' sirve para cambiar el UID y el GID de un fichero. Esto solo se puede
hacer si tenemos los permisos para ello.
Normalmente su uso está reservado a 'root' y por ello no diremos nada más. Es muy
posible que si usted usa Linux en un ordenador personal necesite algunos de estos
conocimientos pero se sale de los propósitos de este curso. Le basta con saber que existe
y para que sirve.
Concesión de acceso por parte del kernel
Explicaremos el funcionamiento de los permisos de la forma más precisa que nos sea posible.
Para ello usaremos unas abreviaturas que ya conocemos.
EUID es el Identificador de usuario efectivo de un proceso
EGID es el Identificador de grupo efectivo de un proceso
UID en un fichero es un atributo que identifica al propietario.
GID en un fichero es un atributo que identifica al grupo del propietario.
pág. 169
2. Si el EUID del proceso es igual al UID del owner (propietario del fichero) se concede el
acceso si los permisos de usuario rwx son los adecuados.
3. Si el EUID del proceso es distinto al UID del owner, y si el EGID del proceso es igual al
GID del owner, se concede el acceso si los permisos de grupo rwx son los adecuados.
NOTA : el comando rm permite borrar cualquier fichero sea cual sean los permisos cuando el
proceso tiene un EUID coincidente con el propietario el fichero. Únicamente ocurre que si el
fichero esta protegido contra escritura suele pedir (dependiendo de la configuración)
confirmación antes de borrarlo. El permiso para borrar un fichero no se guarda como atributo
del fichero. Esto se hace a nivel de directorio y pasamos a explicarlo
inmediatamente.
Significado de los permisos en directorios
pág. 170
$ ls -ld otromas
$ ls otromas
$ ls -l otromas
Esto nos podría mandar un mensaje como este “ls: otromas: Permiso denegado”
pág. 171
$ cd otromas
$pwd
/tmp/ otromas
$ echo > k3
Esto imposibilita todas las operaciones que utilicen ese directorio como parte del camino.
$ chmod -x otromas
$ ls -ld otromas
pág. 172
$ rm kk/k2
$ chmod +x otromas
$ ls -ld kk
$ rm kk/k2
$ ls otromas
k1
pág. 173
Vamos a limpiar
pág. 174
1. Los usuarios del grupo de sistemas de información, que deben tener acceso
completo a todos los directorios y ficheros, para su mantenimiento. Llamaremos a
este grupo sistemas.
2. Los usuarios del grupo de desarrollo (llamaremos a este grupo desarrollo), que
deben tener acceso de lectura y escritura (y ejecución en su caso) en el primer
subdirectorio y todos sus ficheros y subdirectorios. En este directorio es donde se
desarrollan las nuevas versiones del software que usa el tercer grupo.
3. Los usuarios de explotación. Este grupo debe tener acceso en modo lectura (y
eventualmente ejecucion) sobre los ficheros de la aplicacion. Llamaremos a este
grupo explotacion.
4. El resto de usuarios del sistema no deben tener ningún tipo de acceso a ninguno de
los ficheros o subdirectorios.
Con las condiciones anteriores es imposible usar el modelo de permisos tradicional UGO, puesto
que tenemos tres grupos de usuarios diferentes, sin contar el resto de usuarios del sistema. Eso
significa que con un sólo grupo de usuarios con permisos asignados por directorio o fichero no
es posible acomodar los permisos para los tres grupos.
Utilizando ACLs es fácil resolver el problema, puesto que podemos asignar un juego de permisos
diferente para cada grupo de usuarios. Para ello debemos crear las ACLs necesarias para cada
grupo de usuarios y directorio o fichero.
pág. 175
1.- Tenemos que dar permisos completos al grupo de sistemas sobre todos los ficheros y
directorios implicados. Para ello usamos setfacl de la siguiente forma:
setfacl -b -k -R dir_raiz
setfacl -R -m g:sistemas:rw
Todas las ACEs tienen tres componentes separadas por ':' (en el caso de las operaciones de
borrado de ACEs el tercer componente es opcional). El primero de los componentes indica si
se trata de un ACE de usuario (valor u) o de grupo (valor g). Incluso es posible asignar ACEs al
grupo de usuarios resto (other), pero esto no suele ser habitual, así que omitiremos la sintaxis
(se pueden encontrar más detalles en la página del manual de setfacl(1)).
pág. 176
setfacl -R -m g:desarrollo:rw dir_raiz/subdir_1
setfacl -R -m g:desarrollo:rw dir_raiz/subdir_2
1.- Por último tenemos que dar permisos al grupo de explotación en el directorio subdir_2 y
todo su contenido:
setfacl -R -m g:explotacion:rx dir_raiz/subdir_2
Lo normal en este punto es comprobar cuales son los permisos reales que tienen cada uno de
los ficheros y directorios existentes, para ver si efectivamente se ajustan a los requisitos
planteados.
Para ello podemos usar getfacl para ver cuales son las ACL de cada uno de los directorios o
ficheros implicados. La sintaxis es sencilla:
getfacl fichero ...
pág. 177
# group: root
user::rwx
group::r-x
group:sistemas:rw-
mask::rwx
other::r-x
El listado de permisos que obtenemos al ejecutar getfacl se compone de entradas de tipo user y
group, además de las entradas para mask y other. En el caso de las entradas user y group,
tendremos siempre una entrada para el propietario del fichero y el grupo del fichero (son las
líneas que no indican un usuario o grupo concreto) y tantas líneas adicionales como ACEs de ese
tipo hayamos asginado al fichero o directorio. La entrada other es la entrada del permiso
tradicional other del modelo UGO.
La entrada mask es especial. Esa entrada, que se puede manipular con setfacl permite
especificar el máximo de permisos que se pueden asignar en dicho fichero con las ACEs de
usuario y grupo.
pág. 178
pág. 179
pág. 180
Todo lo anterior está muy bien, pero tiene un problema: los ficheros y directorios nuevos que se
creen no van a tener todas esas ACLs con los valores adecuados, y por tanto tendremos que
estar cada dos por tres ajustando los valores de las ACLs con las órdenes anteriores.
Evidentemente eso no es operativo en absoluto. En nuestra ayuda llegan las ACLs por defecto
(en realidad habría que hablar de ACEs por defecto, pero la documentación habla de ACLs por
defecto, así que mantendremos la misma terminología para no crear más confusión).
Las ACLs por defecto nos permiten indicar cuál es el juego de ACEs que queremos que se
apliquen automáticamente a los nuevos ficheros y directorios que se creen dentro de un
directorio dado. Se dice en estos casos que los permisos se heredan desde el directorio padre.
La sintaxis es idéntica a la de una ACE normal, con la diferencia de que debemos usar además la
opción -d:
setfacl -d -m g:sistemas:rw dir_raiz
setfacl -d -m g:desarrollo:rw dir_raiz/dir_1
setfacl -d -m g:desarrollo:rw dir_raiz/dir_2
setfacl -d -m g:explotacion:rw dir_raiz/dir_2
Si usamos getfacl para ver la ACL del directorio raíz por ejemplo, tenemos lo siguiente:
# getfacl dir_raiz
# file: dir_raiz
# owner: root
# group: root
user::rwx
group::r-x
group:sistemas:rw-
mask::rwx
other::r-x
pág. 181
default:user::rwx
default:group:sistemas:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Es decir, se añaden una serie de ACEs especiales, de tipo default que contienen la
información a utilizar para los nuevos ficheros y directorios que se creen dentro de éste.
Nota: Recuerde que es posible montar acl’s de manera manual en algún file system, esto lo
lograríamos conel comando:
# mount -oacl /dev/hda5 /data
Ejercicio:
Para poder realizar el ejercicio y poder ver el tema funcionando es necesario realizar la
instalación de las acl, para lo cual es necesario ejecutar lo siguiente:
Getfacl: Definido para determinar los permisos establecidos en las listas de control de acceso de
un archivo o directorio dado.
Setfacl: Definido para cambiar los permisos en las listas de control de acceso de un archivo o
directorio dado.
Siempre se podrá realizar la consulta de ayuda y opciones ejecutando cualquiera de los dos con
man.
Para obtener una descripción completa del formato de las listas de control de acceso se puede
realizar la misma consulta pero con el comando acl.
Para realizar el ejercicio daremos de alta un usuario nuevo;
# useradd userget
Y le asignaremos un password
pág. 182
# passwd userget
Para obtener los atributos de las “acl” de un archivo o directorio particular, se ejecuta “getfacl”
de la siguiente forma:
getfacl /home/userget
Lo anterior devolvería una salida similar la siguiente:
getfacl: Eliminando '/' inicial en nombres de ruta absolutos
# file: home/userget
# owner: userget
# group: userget
user::rwx
group::---
other::---
Lo anterior muestra que sólo el propietario del directorio tiene permisos de lectura, escritura y
acceso.
Para poder demostrar el uso de las acl, daremos de alta otro usuario mas para dar el acceso de
uno a otro creando las listas de acceso, para tal caso crearemos un usuario nuevo;
# useradd userset
Y le asignaremos un password
# passwd userset
Para asignar el permiso de acceso a la carpeta del usuario ejecuta “setfacl”, con la opción “-m”
para modificar la lista de control de acceso, [u,g,o]:[usuario,grupo]:[r,w,x] y la ruta del directorio
como argumentos.
Ejemplo:
# setfacl -m u:userset:rX /home/userget
En el ejemplo anterior se utilizó X mayúscula para indicar que sólo se aplicará el bit de acceso de
a directorios evitando aplicar el bit de ejecución a los archivos.
Lo anterior establece que se añaden permisos de lectura y acceso al directorio /home/userget
para el usuario userset.
Para verificar, ejecute de nuevo “getfacl” con la ruta del directorio modificado como argumento:
pág. 183
# getfacl /home/userget
Para demostrar como se pueden hacer crecer o mejorar estas listas asignaremos permisos a
otro usuario, el cual primero crearemos
# useradd usergetset
Y le asignaremos un password
# passwd usergetset
De igual forma es posible asignarse permisos diferentes para otros usuarios. Ejemplo:
# setfacl -m u:usergetset:rwX /home/userget
Lo anterior establece que se añaden permisos de lectura, escritura y acceso al directorio
/home/userget para el usuario usergetset.
Y validamos nuevamente el cambio:
# getfacl /home/userget
Con la opción “-x” eliminaremos los permisos asignados;
# setfacl -x perengano /home/userget
Con la opción “–k” eliminara los permisos predeterminados en la lista de control de acceso,
también deberemos poner la ruta del directorio como argumento;
# setfacl -k /home/userget
Usando la opción “-b” eliminara todos los permisos de la acl, dejando todo como en el punto
inicial :
# setfacl -b /home/userget
Con el siguiente comando podríamos realizar una copia la acl a aplicarla a otro usuario y la
manera de aserlo es la siguiente;
# getfacl respaldo1 | setfacl --set-file=- respaldo2
Lsattr y chattr: control de atributos de ficheros Linux
El primer comando, lsattr permite listar los atributos asignados a los ficheros de un sistema de
ficheros Linux, mientras que chattr permite modificar dichos atributos, los cuales que utilizamos
como complemento al sistema de ACLs (chmod, chown,setfacl…) permitiendo un control más
férreo sobre los archivos del filesystem.
pág. 184
lsattr
El uso de lsattr no tiene demasiado misterio ya que únicamente nos servirá para listar atributos
de ficheros y directorios, ejemplo:
$ lsattr -a
------------- ./..
------------- ./.bash_history (archive que guarda los commandos tecleados en la consola)
------------- ./.
------------- ./prueba.txt
------------- ./.bashrc
------------- ./.bash_profile
------------- ./.ssh
------------- ./.bash_logout
Algunos parámetros del comando que conviene conocer son, por ejemplo, “-a” utilizado en el
ejemplo anterior que muestra todos los archivos del directorio, incluidos los ocultos. Si
queremos visualizar los atributos de forma recursiva utilizamos -R:
pág. 185
-----------------e- ./.cisco_mds9000
./.cisco_mds9000:
-----------------e- ./.cisco_mds9000/.
-----------------e- ./.cisco_mds9000/install.log
-----------------e- ./.cisco_mds9000/..
chattr
Hoy toca hablar de chattr, una utilidad para nuestra terminal que sirve para asignar
diferentes atributos a nuestros archivos en Linux. Uno de los objetivos principales de esta
herramienta es el de proteger nuestros archivos de cambios involuntarios o borrados
accidentales y lo mejor de todo, te protegerá incluso aunque ejecutes comandos de
borrado o modificación siendo superusuario (root).
Los atributos de los que vamos a hablar hoy son soportados por los sistemas de archivos de
Linux nativos como ext2, ext3, ext4, btrfs, etc... Uno no podrá eliminar ni modificar los
archivos con los atributos que usemos, aunque tenga todos los permisos para hacerlo.
Cuando es necesario proteger algunos archivos y/o carpetas para que no puedan ser borrados.
Puede ser el caso de pcs compartidas o de sistemas donde se necesite mejorar un poco la
seguridad en caso de posibles penetraciones.
El comando que nos ayudara con la tarea sera chattr (change attribute). Este se utiliza para
cambiar varios atributos de archivos y puede usarse en carpetas de manera recursiva.
El comando es parte del paquete que viene instalado de base en todas las distros de linux.
Se usa asi:
chattr [opciones][operadores][atributos]
En opciones tenemos por ejemplo:
-R: Que es para cambios recursivos. Se usa con carpetas
En los operadores tenemos por ejemplo:
+: Para añadir atributos
-: Para quitar atributos
pág. 186
pág. 187
S Cuando el archivo tiene este atributo, sus cambios son escritos de forma sincrónica en el
disco duro. Es decir, los datos se escriben inmediatamente en lugar de esperar la operación
correspondiente del sistema operativo.
u Cuando un archivo con este atributo es eliminado, sus contenidos son guardados
permitiendo recuperar el archivo con herramientas para tal fin.
Pruebas;
Creamos un archivo para realizar las siguientes pruebas;
# touch prueba.txt
Deshabilitar la modificación de la fecha de acceso al fichero (atime)
Con la asignación del atributo ‘A’ conseguimos que cuando se acceda al fichero no se modifique
el registro atime. De este modo no quedarán registrada la fecha del último acceso al fichero:
# chattr +A prueba.txt
# lsattr prueba.txt
-------A----- prueba.txt
Comprimir automáticamente el fichero en el disco
Si asignamos el atributo ‘c’ activamos que el fichero se comprima automáticamente en el disco
por el kernel. Cuando se lea el fichero se servirá descomprimido:
# chattr +c prueba.txt
# lsattr prueba.txt
--------c---- prueba.txt
Bloquear la modificación o borrado de un archivo
Como veíamos en la entrada que citaba al principio del post sobre evitar que un archivo pueda
ser modificado o borrado (incluso por root). Al asignamos el atributo ‘i’ activamos la flag para
que el fichero no pueda ser modificado, borrado o renombrado:
# chattr +i prueba.txt
# lsattr prueba.txt
----i-------- prueba.txt
pág. 188
# chattr +u prueba.txt
# lsattr prueba.txt
-u----------- prueba.txt
Al eliminar un archivo, sobreescribir con 0 todos sus bloques
Al contrario que con el atributo “u”, el atributo “s” implica que cuando un archivo sea borrado,
automáticamente los bloques utilizados por el mismo sean sobreescritos con ceros (zeroed):
# chattr +e prueba.txt
# lsattr prueba.txt
-----------------e- prueba.txt
Escribir de forma síncrona a disco cambios en los ficheros
El parámetro “S” implica que cuando un fichero es modificado, los cambios se aplican a disco de
forma síncrona y directa. Es lo mismo que tener la flag “sync” en el punto de montaje del
filesystem.
# chattr +S prueba.txt
# lsattr prueba.txt
--S---------------- prueba.txt
Y así podríamos seguir con una gran cantidad de distintos atributos. Como siempre, podéis
revisarlos en la página man de chattr. Por supuesto, los atributos se pueden asignar a la vez:
pág. 189
# touch prueba2.txt
# chattr +i prueba2.txt
# rm prueba2.txt
Creamos un directorio
# mkdir MiDirectorio
# lsattr –a
# chattr -i prueba2.txt
Y después un rm.
pág. 190
El commando makewhatis sirve para generar un índice de las páginas de manual presentes en
el sistema.
# Makewhatis
Una vez ejecutado el comando esperaremos unos segundos o minutos dependiendo del Hw
disponible para la generación de los manuales.
Generaremos un usuario común para poder realizar el siguiente ejercicio:
# useradd usuarioconsola
# passwd usuarioconsola
Le asignaremos un password
# Exit
pág. 191
Ejercicio;
Nos loguearemos con nuestro usuario “usuarioconsola” en una terminal para la realización del
ejercicio;
Cambiar de usuario a super-usuario.
Ejecute el mandato “su” sin argumentos e ingrese la clave de acceso de “root” cuando se le
solicite:
$ su
Observe que aunque se tienen privilegios de “root”, se carece de las variables de entorno de
éste, por lo cual algunos mandatos sólo se podrán ejecutar si se específica la ruta exacta de
éstos (ejemplos: /sbin/service, /sbin/chkconfig, /sbin/fsck y /sbin/fdisk).
Ahora nos sadremos de la consola con el siguiente comando.
# Exit
Observe que además de los privilegios de “root”, se tienen también de las variables de entorno
de éste, pues en realidad se ha realizado un ingreso (login) como “root”.
Nos volvemos a salir con el siguiente comando para regresar como usuario regular
“usuarioconsola”
Exit
pág. 192
Lo anterior nos mostrará el nombre del núcleo, nombre de anfitrión, número de lanzamiento
del núcleo, versión del núcleo de Linux, tipo de microprocesador, plataforma del sistema y
nombre del sistema operativo, algo parecido a lo siguiente:
Ejecutando el siguiente comando nos mostrara el nombre de usuario que está usted está
utilizando:
$ whoami
Con el siguiente comando nos mostrara los usuarios que están conectados en el sistema y
dónde lo están haciendo:
$ who
Con el siguiente nos mostrara cuáles usuarios están conectados en el sistema, en qué tipo de
terminal lo están haciendo y qué están haciendo o ejecutando:
$ w
Con el siguiente nos mostrara el grupo al que pertenece en caso de pertenecer a alguno:
$ id
Con el siguiente comando podrá visualizar cuáles usuarios están conectados en el sistema, en
qué tipo de terminal lo están haciendo y mostrar la información de usuario definida en el
archivo /etc/passwd:
$ finger
Ejecutando el siguiente podrá ver bitácora de acceso de los más recientes ingresos a sistema de
todos los usuarios existentes en el sistema;
$ lastlog
Con el siguiente podremos visualizar la bitácora, con los ultimos accesos hacia el sistema;
$ last
Con el siguiente podremos ver los privilegios de root de la bitácora de intentos fallidos de
acceso al sistema;
pág. 193
$ su -l root -c "lastb"
$ file /etc/hosts
Si utilizamos el comando cd sin argumentos, nos devolverá al hogar el usuario que estemos
usando:
$ cd
Ejecutando el comando siguiente listara los archivos directos del directorio donde estemos
ubicados, en este caso no debe mostrar ninguno pues nos encontramos en el home de nuestro
usuario:
$ ls
$ ls –a
pág. 194
Ejecutando el siguiente nos mostrara los mismos archivos per de manera ordenada por nombre,
los atributos y permisos:
$ ls –la
Ejecutando el siguiente nos los mostrara por nombre, en orden inverso y el tamaño de los
archivos:
$ ls -hlar
Ejecutando el siguiente, mostrara los permisos, los atributos además de que los ordenara por
tamaño:
$ ls -Sla
Ejecutando el siguiente mostrara lo mismo que el comando anterior pero en orden inverso:
$ ls –Slar
Ejecutando el siguiente, mostrara los permisos y atributos, pero el orden lo realizara por fecha
de modificacion:
$ ls –tla
Ejecutando el siguiente mostrara la información del inodo que corresponde a cada archivo:
$ ls -ia
pág. 195
El comando touch crea archivos, pero se pueden generar también en cadenas, es decir generar
varios archivos con un comando, ejecuaremos el siguiente para generar archivos vacios:
Ejecutando el siguiente, nos mostrara como, común el valor 1 y tomando como universo el *, de
esta manera los archivos que mostrara serán todos lo que contenga 1 entre “algo y algo”
$ ls texto*1*
Ejecutando el siguiente comando, nos listara todos los archivos que inicien con la cadena texto1,
pero solo los que carecen de 1 en cualquier parte después de la cadena descrita:
$ ls texto[!*1]*
Ejecutando el siguiente comando nos listara todos los archivos que inician con la cadena texto,
pero solo los que tienen 3 caracteres consecutivamente:
$ ls texto???
Ejecutando el siguiente, nos mostrara todos lo que inician con la cadena texto, pero solo 2
caracteres consecutivos:
$ ls texto??
Ejecutando el siguiente solo listara los archivos que inicien con la cadena texto, pero solo
aquellos que incluyan números después de la cadena antes descrita:
$ ls texto[[:digit:]]*
Ejecutando el siguiente listara solo los archivos que inician con la cadena texto, pero solo
aquellos que terminan con letras minusculas:
$ ls texto[[:lower:]]*
Ejecutando la siguiente nos listara solo los archivos que inicien con la cadena texto y que
terminan con letras mayusculas:
$ ls texto[[:upper:]]*
Ejecutando el siguiente nos mostrara los archivos que contengan la cadena texto y solo los que
terminan con caracteres distintos de numeros:
pág. 196
$ ls texto*[![:digit:]]
Ejecutando lo siguiente nos listara los archivos que inician con la cadena texto, pero solo
aquellos que terminan con la letra c minúscula o C mayuscula:
$ ls texto*[cC]
Ejecutando el siguiente nos listara todos los archivos que contengan la cadena texto, pero solo
aquellos que cualquier carácter distindo de c minúscula o C mayuscula:
$ ls texto*[!cC]
Ejecutando el siguiente comando, listar todos lo archivos con la cadena texto pero solo los
archivos qe incluyan la letra a, A o el número 1 despues de dicha cadena:
$ ls texto[!aA1]*
$ cd ejercicios1
$ mkdir UNO
Nos salimos de la carpeta para realizar este proceso pero desde el directorio original es decir
crear un directorio fuera del directorio con el siguiente comando:
$ mkdir ejercicios1/DOS
Ahora ejecutamos lo siguiente para intentar generar otro directorio denominado “UNO”, pero
dentro del directorio «ejercicios2» (el cual es inexistente).
$ mkdir ejercicios2/UNO/
pág. 197
A fin de poder crear el directorio “UNO”, dentro del directorio «ejercicios2», es necesario crear
primero «ejercicios2». Sin embargo puede indicarle a mkdir que genere toda la ruta añadiendo
la opción -p (path):
$ mkdir -p ejercicios2/uno
$ ls ejercicios2
El comando cp sirve para copiar archivos, con el siguiente comando copiaremos un archivo
dentro del directorio ejercicios2
$ cp /etc/fstab ~/ejercicios1/
Con estos dos procedimientos, se habrán copiado dos distintos archivos (/etc/fstab y
/etc/passwd) dentro del directorio ejericicios1
Intente copiar el directorio ~/ejemplos1/ como el nuevo directorio ~/copia1, ejecutando lo
siguiente:
$ cp ~/ejercicios1/ ~/copia1
Para poder llevar acabo la tarea de la copia de un directorio con su contenido hay que utilizar la
opción “-r” por la recuisividad. Ejecute la tarea de la siguiente forma:
$ cp -r ~/ejercicios1/ ~/copia1/
pág. 198
Podremos ver el contenido de ambos directorios utilizando el mandato “ls” con la opción “-l”:
$ ls -l ejercicios1/ copia1/
Se puede lograr una copia de un directorio, conservando todos los atributos y permisos del
contenido del directorio original, utilizando el mandato “cp# con la opción “-a”:
$ cp -a ~/ejercicios1/ ~/copia1/
Podremos realizar una copia de un directorio, conservando todos los atributos y permisos del
contenido del directorio original, pero sólo copiando los archivos que cambiaron respecto de el
directorio de origen y viendo una salida descriptiva, utilice el mandato cp con las opciones -auv:
$ cp -auv ~/ejercicios1/ ~/copia1/
Visualice de nuevo el contenido de ambos directorios utilizando el mandato ls con la opción -l:
$ ls -l ~/ejercicios1/ ~/copia1/
Utilice el mandato “touch” para cambiar la fecha de modificación del archivo ~/ejericios1/fstab:
$ touch ~/ejercicios1/fstab
Con el comando “cp” y la opción “-a” se realiza una copia exacta del directorio de origen con
todo y sus contenidos, “-u” para realizar solo la copia de los contenidos nuevos y “–v” para
visualizar la salida de una manera mas detallada:
$ cp -auv ~/ejercicios1/* ~/copia1/
pág. 199
Con el comando “mv” moveremos los archivos de lugar, mostrando su funcionamiento con el
siguiente coamando:
$ mv fstab nuevo/
Eliminamos el archivo “passwd” utilizando el comando “rm” de la siguiente forma;
$ rm passwd
Hacemos lo mismo con el archivo “fstab” que esta dentro de directorio “nuevo”;
$ rm nuevo/fstab
Ejecutamos lo siguiente:
$ mkdir Nuevo Directorio
pág. 200
$ ls -1
Lo anterior creó dos nuevos directorios, uno con el nombre “Nuevo” y otro con el nombre
“Directorio”, por lo que mostrara los siguientes archivos o carpetas:
$ Directorio Nuevo
Ejecutando el comando de la siguiente forma, solo que en esta ocasión utilizará una diagonal
inversa antes del espacio:
$ mkdir Nuevo\ Directorio
Listamos de nueva cuenta el contenido del directorio de trabajo actual mostrando una sola
columna:
$ ls -1
Lo anterior creó un nuevo directorio denominado “Nuevo Directorio”, lo que nos mostrara un
listado como la siguiente:
$ Directorio
Nuevo
Nuevo Directorio
La diagonal inversa funciona como carácter de escape para indicar que espacio entre “Nuevo” y
“Directorio” es parte del nombre el directorio que vamos crear.
Una vez que hemor realizado esta tarea borraremos el directorio con todo su contenido desde
el home con un comando, pero regresando al home
$ cd
Y dando un “ls” podremos ver el directorio o dirctorio principales
$ ls
Y para borrar la carpeta le daremos el siguiente comando;
$ rm –r ejercicios1
pág. 201
pág. 202
Ficheros gz
Para comprimir ficheros en formato .gz, se utiliza el siguiente comando:
gzip -9 fichero
-9 : le indica a gz que utilice el mayor factor de compresión posible.
Para descomprimir ficheros .gz, se utilizara el siguiente comando:
gzip -d fichero.gz
-d : indica descompresión
Ficheros bz2
Para comprimir ficheros en formato bz2, se utiliza el siguiente comando:
bzip fichero
Para descomprimir ficheros .bz2, se usa el comando siguiente:
bzip2 -d fichero.bz2
-d : indica descompresión.
Nota: Tanto el compresor gzip como bzip2, solo comprimen ficheros, no directorios, para
comprimir directorios (carpetas), se debe de usar en combinación con tar.
Ficheros tar.gz
Para comprimir ficheros en formato tar.gz, se utiliza el siguiente comando:
tar -czfv archivo.tar.gz ficheros
-c : indica a tar que cree un archivo.
-z : indica que use el compresor gzip
-f : indica a tar que el siguiente argumento es el nombre del fichero.tar
-v : indica a tar que muestre lo que va empaquetando
Para descomprimir ficheros con extensión tar.gz, se usa el siguiente comando:
tar -xzvf archivo.tar.gz
-x : le dice a tar que extraiga el contenido del fichero tar.gz
-z : le indica a tar que esta comprimido con gzip
-v : va mostrando el contenido del fichero
-f : le dice a tar que el siguiente argumento es el fichero a descomprimir.
Para poder ver el contenido de un fichero comprimido en tar.gz, se usa el siguiente comando:
tar -tzf archivo.tar.gz
pág. 203
Ficheros tar.bz2
Para comprimir en tar.bz2, se hace uso del parámetro pipeline ( | ), que consiste en que
“filtra” la salida de un comando a la entrada de otro, como es en este ejemplo: tar
empaqueta los distintos ficheros o directorios y su salida lo pasa al comando bzip2 para que
este lo comprima y el resultado de este, lo redirecciona ( > ) al fichero final tar.bz2
Ficheros zip
Para poder comprimir en formato zip, se usara el comando siguiente:
zip archivo.zip ficheros a comprimir
Para poder descomprimir los ficheros zip, se usa el siguiente comando:
unzip archivo.zip
Para ver el contenido de un fichero zip, se pone el siguiente comando:
unzip -v archivo.zip
Ficheros rar
Para comprimir en formato rar, se usara el siguiente comando:
rar -a archivo.rar ficheros
Para descomprimir ficheros en formato rar, se utiliza el siguiente comando:
unrar -x archivo.rar
Para ver el contenido de un fichero rar, se usa el siguiente comando:
unrar -v archivo.rar
unrar -l archivo.rar
Tengo que decir que todos estos comandos, es para hacerlo desde terminal una terminal, como
ejemplo os vendría de maravilla si os quedarais sin entorno gráfico y tuvieseis que descomprimir
algún archivo.
Pero para los que no quieran usar la terminal, pueden estar tranquilos, que existen muy buenas
interfaces gráficas. Como lo es File Roller.
pág. 204
Ejercicio;
Lo primero que haremos para llevar acabo esta práctica, será verificar o realizar la instalación de
los paquetes necesarios para llevar acabo la practica, como la instalación que se hizo fue
minima, lo primero que haremos será instalar dichos paquetes que en este caso son los
compresores:
Iniciamos la secion como root, para poder ejecutar el siguiente comando el cual realizara la
instalación
Una vez que estén instalados los paquete nos salimos para realizar las tareas con un
usuario ordinario, podemos utilizar cualquiera de los usuarios que ya hemos creado o podremos
crear uno nuevo con el siguiente comando;
# useradd compresor
Y le asignamos un password
# passwd compresor
Seguido nos logueamos con este;
Para poder llevar a cabo el ejercicio necesitamos realizar la compresión de alguna carpeta o
algún archivo, para esto realizaremos la copia de una carpeta del mismo sistema, para fines
ilustrativos utilizaremos la carpeta llamada pixmaps, que se encuentra en la ubicación
/usr/shae/pixmaps, para lo cual la copiaremos integra al home del usuario que estemos usando
con el siguiente comando;
$ cp –a /usr/share/pixmaps .
pág. 205
ZIP
Ahora procederemos a realizar la comprension y descompresion utilizando el format zip, que es
el analogo de winzip en windows.
Realizamos la compresión del archivo de la siguiente manera
pág. 206
TAR
Compresion y desconpresion de archivos con formato tar.
Para comprimir un archivo o carpeta ejecutaríamos lo siguiente:
$ tar cf comprimido.tar pixmaps/
Para mostrar el contenido el archivo comprimido en formato tar, ejecutaríamos lo siguiente:
$ tar tvf comprimido.tar
Para extraer el contenido del comprimido, necesitaríamos ejecutar el siguiente comando;
$ tar xvf comprimido.tar -C ~/archivostar/
Para extraer una selección de archivos, del archivo comprimido hay que ejecutarlo de la manera
siguiente;
$ tar xvf comprimido.tar -C ~/archivostar/ --wildcards '*.png'
Para consultar la sintaxis o las opciones de tar, puede realizar la siguiente ejecución;
$ man 1 tar
TAR GZIP
Para realizar una compresión de tipo gzip ejecutaríamos el comando de la forma que sigue;
$ tar zcf comprimido.tar.gz pixmaps/
Para poder ver el contenido del archivo comprimido ejecutaremos el comando de la siguiente
forma:
$ tar ztvf comprimido.tar.gz
Para extraer el contenido del archivo, ejecutariamos lo siguiente:
$ tar zxvf comprimido.tar.gz -C ~/archivosgz/
Para realizar una extracción de los archivos de manera selectiva, ejecutaríamos lo siguiente:
$ tar zxvf foo.tar.gz -C ~/ejemplos1/ --wildcards '*.png'
BZ2
Para realizar una compresión en formato BZ2, ejecutaremos lo siguiente:
$ tar jcf comprimido.tar.bz2 pixmaps/
Para poder ver los archivos que están contenidos dentro del archivo, será necesario ejecutar lo
siguiente:
$ tar jtvf comprimido.tar.bz2
pág. 207
Completos:
pág. 208
Diferenciales:
Incrementales:
Se considera respaldo diferencial cuando hay un solo respaldo completo antes de éste, de nivel
2 cuando hay un respaldo completo y un respaldo incremental antes de éste, de nivel 3 cuando
hay un respaldo completo y dos incrementales antes de éste y así sucesivamente. Son
similares al respaldo diferencial, pero éstos pueden hacerse a partir de un respaldo completo
y/o un diferencial y/o otros incrementales, restaurando los datos en secuencia, por lo cual
permiten ahorrar el espacio disponible en el sistema de archivos. Es decir, para restaurar los
datos, se requiere el último respaldo completo y uno o más respaldos incrementales.
Un respaldo completo se puede realizar con “tar”, con las opciones cpf, el nombre del archivo
*.tar a crear, la opción “-g” (definir crear un archivo incremental en el nuevo formato de GNU)
y el nombre del archivo con extensión “*.snar”. Éste último es utilizado por el compresor
“tar” para almacenar la información respecto de qué fue lo que se respaldó. La opción “p” es
importante para crear y restaurar los respaldos, pues permite preservar los permisos y
atributos originales de los datos. Si se omite esta opción, todo el contenido almacenado y
restaurado sería propiedad del usuario root.
Recuerde que puede lograr sincornizaciones de archivos también incluyendo archivos ocultos
con el comando rsync, ejemplo:
pág. 209
pág. 210
Si se dispone de poco espacio estos pueden hacerse también de volúmenes distintos, y asi
distribuir el espacio que ocupan los respaldos o moviendo a otros volúmenes las fracciones del
respaldo si el espacio asi nos lo permite.
Para realizar un respaldo de esta forma tendríamos que usar la opción “-M” lo cual configura el
respaldo para ubicarlo en distintos volúmenes y la opción “-L” para indicar el tamaño que le
asignaremos al la fracción a generar, este se define en bytes.
El ejemplo generara el respaldo de la misma carpeta usada hasta este momento,
/usr/share/pixmaps en una unidad de almacenamiento externa que podría ser una usb o un
disco duro, en cuatro partes de 4 GiB cada una, asumiendo que /usr/share/pixmaps ocupa
menos de 16 GiB de espacio en el sistema de archivos y que la unidad de almacenamiento
externo está montada en el directorio /media/DISCO/:
# tar cpf /media/DISCO/respaldo01.tar -g /media/DISCO/registro.snar -M -L
4194304 /usr/share/pixmaps
# tar cpf /media/DISCO/respaldo02.tar -g /media/DISCO/registro.snar -M -L
4194304 /usr/share/pixmaps
# tar cpf /media/DISCO/respaldo03.tar -g /media/DISCO/registro.snar -M -L
4194304 /usr/share/pixmaps
# tar cpf /media/DISCO/respaldo04.tar -g /media/DISCO/registro.snar -M -L
4194304 /usr/share/pixmaps
Para llevar acabo la restauración de dicho respaldo se utilizara la opción “-M” para indicar que
se trata de un respaldo de varios volúmenes, y que debe restaurarse en una unidad como un
solo archivo;
# tar xpf /media/DISCO/respaldo01.tar -g /media/DISCO/registro.snar -M -C /
# tar xpf /media/DISCO/respaldo02.tar -g /media/DISCO/registro.snar -M -C /
pág. 211
pág. 212
Ps
El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el
sistema de archivos /proc, es decir, lee directamente la información de los archivos que se
encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones
varían dependiendo del estilo en que se use el comando. Estas variaciones sobre el uso
de ps son las siguientes:
Estilo UNIX, donde las opciones van precedidas por un guión -
Estilo BSD, donde las opciones no llevan guión
Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guión
--
Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, varias columnas se
mostrarán en el listado de procesos que resulte, estas columnas pueden ser entre muchas otras,
las siguientes (y principales):
Las opciones completas de ps las encuentras en las páginas del manual (man ps), o escribiendo
en la terminal ps L, y para ver un resumen de sus opciones más comunes usaps --help:
#> ps --help
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
pág. 213
# ps –e
El comando siguiente muestra opciones completas
#ps –ef
El siguiente comando ,muestra en formato BSD sin guion, usuarios y otras características;
# ps aux
El siguiente muestra un output personalizado, se indican los campos separados por coma
# ps –eo user,pid,tty
El siguiente comando muestra el árbol de procesos;
#ps –eH
El siguiente muestra lo mismo con otro formato
# ps axf
El siguiente se ejecuta cin la ruta, colo con el nombre real
pág. 214
# ps –ec
El siguiente no muestra procesos, lista todos los códigos de formatos
# ps L
Pstree
Muestra los procesos en forma de árbol, pstree --help te da las opciones más comunes.
Recomiendo uses lo uses con la opción -A y -G para que te un árbol con líneas con líneas estilo
ASCII y de terminal VT100 respectivamente, puedes añadir también -u para mostrar entre
paréntesis al usuario propietario del proceso:
# pstree
Kill
El comando kill, que literalmente quiere decir matar, sirve no solo para matar o terminar
procesos sino principalmente para enviar señales (signals) a los procesos. La señal por default
(cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es kill PID, siendo PID
el número de ID del proceso. Asi por ejemplo, es posible enviar una señal de STOP al proceso y
se detendrá su ejecución, después cuando se quiera mandar una señal de CONTinuar y el
proceso continuara desde donde se quedo.
El siguiente comando muestra todas las posibles señales que puedan enviarse a un proceso;
# kill –l
pág. 215
Killall
El comando killall, que funciona de manera similar a kill, pero con la diferencia de en vez de
indicar un PID se indica el nombre del programa, lo que afectará a todos los procesos que
tengan ese nombre. Asi por ejemplo si se tienen varias instancias ejecutándose del proxy server
squid, con killall squid eliminará todos los procesos que se esten ejecutando con el nombre
'squid'
#> killall -HUP httpd (manda una señal de "colgar", detenerse releer sus archivos de
configuración y reiniciar)
#> killall -KILL -i squid (manda señal de matar a todos los procesos squid pero pide confirmación
en cada uno)
Nice
Permite cambiar la prioridad de un proceso. Por defecto, todos los procesos tienen una
prioridad igual ante el CPU que es de 0. Con nice es posible iniciar un programa (proceso) con la
prioridad modificada, más alta o más baja según se requiera. Las prioridades van de -20 (la más
alta) a 19 la más baja. Solo root o el superusuario puede establecer prioridades negativas que
son más altas. Con la opción -l de ps es posible observar la columna NI que muestra este valor.
#> nice (sin argumentos, devuelve la prioridad por defecto)
renice
Asi como nice establece la prioridad de un proceso cuando se incia su ejecución, renicepermite
alterarla en tiempo real, sin necesidad de detener el proceso.
#> nice -n -5 yes (se ejecuta el programa 'yes' con prioridad -5)
(dejar ejecutando 'yes' y en otra terminal se analiza con 'ps')
#> ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
pág. 216
Sin embargo lo anterior produce que el padre del proceso PPID que se invocó sea el proceso de
la terminal en si, por lo que si cerramos la terminal o salimos de la sesión también se terminaran
los procesos hijos que dependan de la terminal, no muy conveniente si se desea que el proceso
continué en ejecución.
Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que '&'
mandar el proceso y background y que este quede inmune a los hangups (de ahí su nombre
nohup) que es cuando se cuelga o termina la terminal o consola de la cual se ejecutó el proceso.
pág. 217
Jobs
Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar varios
comandos que se ejecutarán por largo tiempo, se pueden entonces como ya se vió previamente
con nohup y el operador '&' mandarlos a segundo plano o background con el objeto de liberar la
terminal y continuar trabajando.
Pero si solo se está en una terminal esto puede ser difícil de controlar, y para eos tenemos el
comando jobs que lista los procesos actuales en ejecución:
#> jobs
[1]- Stopped yes >/dev/null &
[2]+ Stopped ls --color=tty -laR / >archivos.txt &
#> fg %1
#> jobs
[1]+ Running yes >/dev/null &
[2]- Stopped ls --color=tty -laR / >archivos.txt &
Obsérvese como al traer en primer plano al 'job' o proceso 1, este adquirió el símbolo [+] que
indica que esta al frente. Lo mismo sería con bg que volvería a reinicar el proceso pero en
pág. 218
segundo plano. Y también es posible matar los procesos con kill indicando el número que
devuelve jobs: kill %1, terminaría con el proceso en jobs número 1.
Top
Una utilería muy usada y muy útil para el monitoreo en tiempo real del estado de los procesos y
de otras variantes del sistema es el programa llamado top, se ejecuta desde la línea de
comandos, es interactivo y por defecto se actualiza cada 3 segundos.
$> top
top - 13:07:30 up 8 days, 6:44, 4 users, load average: 0.11, 0.08, 0.08
Tasks: 133 total, 1 running, 131 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 497356k total, 472352k used, 25004k free, 21500k buffers
Swap: 1156640k total, 257088k used, 899552k free, 60420k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26156 sergon 15 0 2160 1016 784 R 1 0.2 0:00.93 top
1 root 15 0 2012 616 584 S 0 0.1 0:00.98 init
2 root RT 0 0 0 0 S 0 0.0 0:00.29 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
5 root RT 0 0 0 0 S 0 0.0 0:00.38 migration/1
...
Estando adentro de la apliación, presionando 'h' muestra una ayuda de los posibles comandos
que permiten configurar top, por ejemplo, al presionar 's' pregunta por el tiempo en segundos
de actualización, etc.
Estas son algunas de las herramientas, las más importantes y usadas, para adminsitrar procesos,
hay varios programas en ambientes gráficos que en una sola pantalla permiten todo lo anterior
y más, y en línea de comandos te recomiendo htop, que es como un toppero en esteroides.
pág. 219
Ejercicio;
Para desarrollar el ejercicio, primero hay que realizar un par de instalaciones de algunos
paquetes que van a ser necesarios para lo cual nos loguearemos como root y realizarlas con el
siguiente comando:
# yum -y install procps top util-linux-ng
Una vez realizadala instalación, nos salimos de la secion o nos logueamos en otra terminal, con
cualquiera de los usuarios antes creados para poder llevar acabo el ejercicio.
Ejecutamos un proceso sleep con un tiempo estimado de 700 segundos, esto lo lograremos con
el siguiente comando;
$ sleep 700
Ejecute nuevamente sleep con el valor 900 y un signo “&” al final, para generar otro proceso
mas:
$ sleep 900 &
Ejecutando el comando “fg” con 1 como argumento podremos enviar al primer plano el primer
trabajo:
$ fg 1
Realizando esto, hará que el proceso o trabajo sleep 700 regrese a primer plano.
Para terminar este último trabajo, pulse CTRL+C.
pág. 220
Acontinuacion ejecutaremos el comando ps aux, que en la parte de ps, dice que mostrara todas
las terminales, incluyendo los procesos, pero a diferencia del otro agregaremos una pipa, y un
atributo llamado less el cual nos mostrara toda la información de manera pausada según se
requiera;
$ ps aux |less
Si realizamos la conbinacion de la pipa junto con grep, nos realizara una búsqueda selectiva de
los procesos que incluyan el nombre de “sleep”;
$ ps aux |grep sleep
En este caso deberemos de ver aun uno de los procesos sleep que declaramos anteriormente.
Ahora de lo que estamos viendo el proceso sleep debe de mostrar un numero de proceso, si
ejecutamos el comando kill seguido del proceso se terminara con esta tarea;
$ kill No.de proceso
Si ejecutamos de nuevo el comando sleep, pero ahora con un tiempo de 300, como argumento,
con un signo “&” al final, se generar otro trabajo en segundo plano;
$ sleep 300 &
Como sabemos que el trabajo es el único y esta en proceso 1, podríamos terminarlo con el
siguiente comando:
$ kill %1
Generaremos otro proceso pero ahora con un tiempo de 500 segundo pasándolo a segundo
plano también;
$ sleep 500 &
Si ejecutamos el ps con la pipa y el argumento sleep podremos ver el proceso que acabamos de
generar.
$ ps aux |grep sleep
Para poder ver mejor el funcionamiendo de “jobs” agregaremos dos tareas al mismo tiempo de
la siguiente forma:
pág. 221
Correremos de nuevo el comando para poder visualizar los trabajos que están corriendo:
$ jobs
Si ejecutamos nuevamente “ps”, pero con la opción “-j”, podremos visualizar los números de
proceso o de ID de estos:
$ ps -j
Ejecutaremos el comando “killall” con la cadena “sleep” como argumento, a fin de terminar de
manera normal de todos los procesos denominados sleep.
$ killall sleep
Repetimos el proceso de dar de alta dos tareas al mismo tiempo, las visualizamos con ps, pero
ahora los terminaremos con un comando killall, agregando la opción –s y el valos 9, con la
misma cadena como argumento y veremos que termina todos los procesos
$ killall -s 9 sleep
Realizaremos la compresión de los archivos que están en la carpeta /lib/modules, en español los
modulos de las libreras en un archivo tar llamado comprimidonice
# tar jcf comprimidonice.tar.bz2 /lib/modules
Al terminar utilice time para cuantificar la ejecución del compresor con las opciones “jxf”, para
descomprimir el archivo comprimidonice.tar.bz2. Esto con la finalidad de cuantificar la
descompresión con la prioridad de planificación 0 (valor predeterminado del sistema), la cual
permite utilizar los recursos que regularmente permite utilizar el sistema al usuario.
# time tar jxf comprimidonice.tar.bz2
pág. 222
Los resultados deberán ser ligeramente mayores, en cuanto a tiempo de ejecución pues la
prioridad fue aumentada.
El usuario ordinario solo puede definir valores de prioridad de planificación del 0 al 19,
prioridad de planificación predeterminada a prioridad de planificación menos favorable. Los
valores negativos, del -1 al -20, que son los más favorables, sólo los pude utilizar “root”.
Para verificar lo descrito anteriormente podríamos ejecutar “su” con la opción “-c”, con la cual
se indicará entre comillas cualquier cosa para ser ejecutada como “root”, de la siguiente forma.
$ su -c "time nice -n -20 tar jxf cmprimidonice.tar.bz2"
Los resultados deberán ser sensiblemente inferiores que la ejecución con el valor
predeterminado de prioridad de planificación (0).
La ejecución del comando anterior, creara un directorio denominado lib dentro del directorio de
inicio del usuario, pero éste le pertenece de root, por lo cual el usuario regular será incapaz de
borrarlo. Borrelo para evitar tener que realizar nuevamente el procedimiento, para esto es
recoemndable tener 2 terminales abiertas y poder realizar las tareas de manera mas fluida.
$ su -c "rm -fr /home/fulano/lib"
Con el siguiente cambiaremos la prioridad de planificación a -10 a todos los procesos del usuario
con el que estemos trabajando:
$ su -c "renice -n -10 -u user"
El siguiente ejemplo cambia la prioridad de planificación a -10 a todos los procesos del grupo
desarrollo:
$ su -c "renice -n -10 -g desarrollo"
pág. 223
Top.
Top es una herramienta que proporciona una visualización continua y en tiempo real de los
procesos activos en un sistema, como una lista que de modo predeterminado lo hace de
acuerdo al uso del CPU. Puede ordenar la lista por uso de memoria y tiempo de ejecución.
Para ordenar la lista de procesos por orden de uso de memoria, pulse SHIFT+M. Para ordena la
lista de procesos por orden de tiempo de ejecución, pulse SHIFT+T. Para invertir el orden de la
lista, pulse SHIFT+R. Para activar o bien desactivar, la visualización por hilos, pulse SHIFT+H. Para
ordenar de nuevo la lista de procesos por orden de uso de CPU, pulse SHIFT+P.
Para mostrar los procesos de un usuario en específico, pulse la tecla u y defina a continuación el
nombre del usuario.
Para terminar o aniquilar cualquier proceso, pulse la tecla k y defina a continuación el número
de identidad de proceso que corresponda y luego la señal a utilizar (9 o 15).
Para cambiar la prioridad de planificación de cualquier proceso, pulse la tecla r y a continuación
defina el número de identidad de proceso que corresponda y luego el valor de prioridad de
planificación deseado.
$ top
lsof.
Lsof significa «listar archivos abiertos» (list open files). Es utilizado ampliamente en sistemas
operativos tipo POSIX para hacer reportes de archivos y los procesos que están utilizando a
éstos. Se puede utilizar para revisar que procesos están haciendo uso de directorios, archivos
ordinarios, tuberías (pipes), zócalos de red (sockets) y dispositivos. Uno de los principales usos
de determinar que procesos están haciendo uso de archivos en una partición cuando esta no se
puede desmontar. Lsof fue desarrollado por Vic Abell, quien alguna vez fue director del Centro
de Cómputo de la Universidad de Purdue.
Lo primero que tenemos que hacer s instalar el paquete, para instalar lsof, ejecute lo siguiente:
yum -y install lsof
pág. 224
Ejercicio;
Utilizando lsof podremos ver todos los procesos que utilizan el sistema de archivos en general,
ejecute lsof:
# lsof
Si lo ejecutamos de la siguiente manera podremos visualizar más cómodamente esta salida:
# lsof | more
Usted podría especificar que se muestren todos los procesos desde un directorio en particular,
de la siguiente manera podríamos solicitar, que se muestren los procesos que están
conpartiendo o haciendo uso de /var.
# lsof /var
Si se necesita mostrar solamente el archivo utilizado por un proceso en particular, podría usar
con la opción -p seguida del número del proceso en el cual tuviéramos interes:
# lsof -p PID
Con la opción -i podrá mostrar todos los archivos de red utilizados por procesos de red. Si
deseara mostrar los archivos de red en uso por algún proceso de red en particular, se utilizan las
opciones -i seguido de la opcion grep y el nombre de algún servicio. En el siguiente ejemplo se
pide a lsof mostrar solamente los archivos de red utilizados por los procesos de red derivados de
named:
pág. 225
Introducción a sed.
Sed: es un editor de flujos basado en ed. Puede editar archivos sin intervención del
usuario. Los comandos de edición pueden ser pasados como argumentos de linea de
comandos. Los argumentos de linea de comandos son aquellos que se proporcionan
junto con un comando, antes de que el comando sea ejecutado. Estos argumentos van
como entradas sobre las cuales el programa puede trabajar para producir cierta salida.
Sed se utiliza extensivamente en los sistemas Linux.
Proporciona mecanismos poderosos para editar flujos de datos pasados a el como entrada
Ejercicio;
Utilizando el editor vi crearemos el archivo pruebased.txt:
# vi pruebased.txt
Ingrese lo siguiente:
Hector Rodriguez
Calle Aldama 1234
Colonia Centro Aldama
Ciudad de Mexico, C.P. 123456
pág. 226
Lo anterior mostrará que el contenido de pruebased3.txt con un triple espacio entre líneas.
Ejecutando lo siguiente podremos convertir un archivo a doble espacio, pero sin que exista más
de una línea vacía entre cada línea con datos:
# sed '/^$/d;G' pruebased3.txt
Ejecutando el comando de la siguiente forma podremos eliminar el doble espacio del archivo
pruebased2.txt:
# sed 'n;d' pruebased2.txt
Ejecutando el comando de la siguiente forma agregaremos una línea en blanco arriba de toda
línea que contenga la expresión regular ama:
# sed '/dama/{x;p;x;}' pruebased.txt
Ejecutando lo siguiente podremos agregar una línea en blanco debajo de toda línea que
contenga la expresión regular 3:
# sed '/3/G' pruebased.txt
Ejecutando el comando de la siguiente forma podremos agregar una línea en blanco arriba y
debajo de toda línea que contenga la expresión regular 1:
# sed '/1/{x;p;x;G;}' pruebased.txt
De la siguiente forma se reemplazaran los espacios por tabuladores a todo lo largo de todos los
renglones:
# sed 's/\ /\t/g' pruebased.txt
En la siguiente ejecucion se reemplazará sólo el primer espacio de cada línea por un tabulador:
# sed 's/\ /\t/' pruebased.txt
pág. 227
Ejecutando el comando de la siguiente mostrara en pantalla sólo la primera línea del archivo:
# sed q pruebased.txt
Ejecutando lo siguiente mostrara en pantalla sólo las primeras tres líneas del archivo:
# sed 3q pruebased.txt
Ejecutando el comando de la siguiente forma, mostrara en pantalla sólo las últimas tres líneas
del archivo:
# sed -e :a -e '$q;N;4,$D;ba' pruebased.txt
Ejecutando el comando de la siguiente forma, mostrara la línea que está inmediatamente antes
de la expresión Calle, pero excluyendo la línea que incluye esta misma;
# sed -n '/Calle/{g;1!p;};h' pruebased.txt
Esto nos mostrara otra expression, de esta forma se concluye el ejercicio de sed.
Introducción a GnuPG.
GnuPG es una compleja herramienta que no está exenta de polémica técnica, social y legal. En el
plano técnico, ha sido diseñada para su uso en situaciones con diversos requerimientos de
seguridad. Esto complica la gestión de claves. En el plano social, el uso de GnuPG no es
estricatamente una decisión de tipo personal. Para que su uso tenga efectividad, GnuPG
requiere que todas las partes en una comunicación sean usuarios del programa. En el plano
legal, desde 1.999, las leyes que contemplan el uso de productos informáticos criptológicos, y en
particular si el uso de GnuPG es legal, son diferentes según los países y están siendo
actualmente debatidas por muchos gobiernos.
pág. 228
Este capítulo tratará sobre estos temas. Se intentará dar consejos prácticos sobre el uso de
GnuPG de cara a los requerimientos de seguridad del usuario. También se sugerirán vías para
promocionar el uso de GnuPG con vistas a la comunicación segura entre el usuario y las
personas con las que éste se comunique, aun cuando éstos no sean usuarios de GnuPG.
Finalmente, se resaltará el estado legal de GnuPG conforme con el estado actual de las leyes
sobre criptología y cifrado en el mundo.
pág. 229
Por otra parte, las claves ElGamal pueden ser de cualquier tamaño. Ya que GnuPG es un sistema
de clave pública híbrido, la clave pública se usa para cifrar una clave de sesión de 128 bits, y la
clave privada se usa para descifrarla. Sin embargo el tamaño de la clave afecta a la velocidad del
cifrado y descifrado, ya que el valor de estos algoritmos lleva como exponente el tamaño de la
clave. Una clave de mayor tamaño también tarda más en ser generada, y ocupa más espacio.
Además, cuanto mayor tamaño tenga una clave, la seguridad extra que nos ofrece, aumenta
pero con una marcha decreciente. También hay que tener en cuenta que un «escucha» que se
encuentre con una clave lo suficientemente grande como para resistir un ataque de fuerza
bruta, se limitará a cambiar de método para poder obtener los datos no cifrados. Por lo tanto,
1024 bits es el tamaño de clave recomendado. Si nuestros requerimientos de seguridad fueran
tan grandes como para necesitar claves de gran tamaño, entonces deberíamos consultar a un
experto en seguridad de datos.
pág. 230
Esconder nuestra clave privada en un sitio seguro es importante, pero todo tiene un precio. Lo
ideal sería que guardáramos la clave en un disco que fuera portátil y que tuviera protección
contra la escritura, como un disquete, y que sólo lo usáramos en una máquina con un solo
usuario que no estuviera conectada a una red. Esto puede que no sea convenient o posible para
nosotros. Por ejemplo, es posible que no tengamos nuestra propia máquina, y que debamos
usar la de la universidad o la de la oficina, o puede significar que para ello tengamos que
desconectar el modem cada vez que queramos usar GnuPG.
Esto no quiere decir que no podamos o no debamos usar GnuPG. Tan sólo significa que
debemos decidir si los datos que estamos protegiendo son lo suficientemente importantes para
cifrarlos, pero no tan importantes como para tomar medidas extra de seguridad. La elección es
nuestra.
Una buena contraseña es absolutamente crítica para el uso de GnuPG.
Cualquier atacante que logre acceder a nuestra clave privada, deberá sobrepasar el cifrado de
nuestra clave privada. En lugar de usar un ataque de fuerza bruta, es casi seguro que un
atacante intentará adivinar la contraseña.
El motivo por el que intentaría adivinarla, es que la mayoría de personas escogen contraseñas
que son más fáciles de adivinar que de sobrepasar una clave aleatoria de 128 bits. Si la
contraseña es una palabra ("password"), es mucho más fácil probar con todas las palabras
existentes en los diccionarios de todas las lenguas del mundo. Aun cuando la palabra sea
permutada, v.g. k3wldood, será más fácil probar palabras de diccionario con un catálogo de
permutaciones. Lo mismo ocurre con las citas. Aunque sea una contraseña formada por frases
("passphrase"), si ésta tiene como base un lenguaje natural, será una contraseña débil, ya que
existirá poca aleatoriedad y muchas redundancias. Si es posible, debemos evitar contraseñas
basadas en lenguajes naturales.
Una buena contraseña es aquélla que podemos recordar, pero que es difícli que otro pueda
adivinar. Debería incluir todos los carácteres imprimibles de nuestro teclado posibles. Esto
incluye carácteres alfabéticos en mayúsculas y minúsculas, números, y carácteres especiales
como } o ¦. Debemos ser creativos y perder un poco de tiempo inventando una contraseña; una
buena elección es importante para asegurar nuestra privacidad.
pág. 231
pág. 232
cualquier número de claves caducadas en un anillo de claves, para que los datos que hubieran
sido cifrados en el pasado puedan todavía ser descifrados, pero sólo es necesario activar una
sola subclave en un momento dado.
pág. 233
Pero si no estamos tan preocupados por los posibles ataques sobre la privacidad, y simplemente
queremos una fiabilidad razonable sobre la validez, escogeremos los valores 1 y 1. Por regla
general, los números más altos para estas opciones suponen que sería necesario que hubiera
más gente conspirando contra nosotros para poder validar una clave que no pertenezca a la
persona que nosotros creemos.
Ejercicio;
Para empezar iniciaremos instalando el paquete necesario para poder realizar el ejercicio,
ejecutando el comando de la siguiente forma;
# yum -y install gnupg
pág. 234
pág. 235
Tipos de cuota
Por Bloques (blocks): Un bloque corresponde a 1 kb y una cuota por bloques correspondería al
total de bloques que un usuario puede utilizar en el sistema. Recuerda que los archivos se
guardan en bloques de disco. Asi un archivo de 100 bytes, ocupará un un bloque de 1kb en el
disco duro.
Por Inodos (inodes): Un inodo o inode en inglés (Index Node) es un número que actua como
apuntador para el sistema de archivos de Linux y le indica en que bloques específicos del disco
duro se encuentran los datos de un archivo. También el inodo en su referencia guarda
información sobre permisos, propietario, atributos, etc. Se podría ver en una analogía simple
que un inodo es como un número de serie único para cada archivo del sistema y a través de este
número el sistema recupera sus datos (bloques) y sus atributos (permisos, propietario, fechas,
etc.).
En el caso de las cutoas, una cuota por inodos indicaría el total de indos a los que el usuario
tiene derecho, casi representaría el total de archivos que el usuario puede crear y digo "casi"
porque los usuarios podemos crear enlaces simbólicos (ln -s) sobre archivos ya existentes que
no aumentan las cantidad de inodos. Pero por simplicidad puedes verlo como un 1 inodo = 1
archivo.
Límites
Tanto las cuotas por bloques o por inodos, tienen límites de uso y son de dos tipos:
HARD: (Duro) Cuando se establece (para bloques o inodos), es el límite absoluto. El usuario no
podrá exceder este límite.
SOFT: (Suave) Este límite (para bloques o inodos) que es siempre menor al HARD, puede ser
excedido por el usuario, pero será constantemente advertido que el límite de uso para bloques
o inodos ya ha sido excedido. Podría verse como un límite de advertencia que le estará
indicando al usuario que su límite ya se excedió y tome medidas.
Cuando se usa el límite SOFT, dos situaciones pueden ocurrir. La primera es que NO se tenga
establecido un tiempo de gracia, y entonces el usuario podrá seguir usando bloques o inodos
hasta llegar al límite HARD que será su límite absoluto de uso.
La segunda situación es que SI se tenga establecido el tiempo de gracia, que puede ser en días,
horas, minutos o segundos. En este caso, el usuario podrá seguir usando bloques o inodos hasta
que termine el tiempo de gracía o llegue al límite HARD, cualquiera que ocurra primero.
El tiempo de gracias se puede establecer por usuario o globalmente y más adelante veremos
como establecerlo.
pág. 236
¿Donde se implementan?
Las cuotas se establecen por filesystem o sistema de archivos, es decir, debes de decidir en
donde es más conveniente instalar un sistema de cuotas, pero no hay ningún problema si se
instala en todos. Las cuotas pueden establecerse por usuario, por grupos o ambos.
En el siguiente ejemplo:
#> mount
/dev/sda1 on /boot type ext3 (rw,noatime)
/dev/sda2 on / type ext3 (rw,noatime)
/dev/sda3 on /home type ext3 (rw,noatime)
none on /proc type proc (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
Lo anterior es un ejemplo típico de un equipo Linux con varios sistemas de archivos (/boot, / y
/home). Como se sabe en /home es donde los usuarios tienen sus directorios de trabajo
(HOME), asi que solo en este sistema de archivos crearemos cuotas, en los otros dos no tiene
caso.
Configuración
Todo debe hacerse como root, y lo primero que haremos es editar el archivo "/etc/fstab" y
añadiremos "usrquota" o "grpquota", dependiendo si se desea cuotas por usuario o grupos, o
incluso ambas.
#> vi /etc/fstab
/dev/sda2 / ext3 noatime 1 1
/dev/sda1 /boot ext3 noatime 1 2
/dev/sda3 /home ext3 noatime 1 2
....
(Añadimos en la cuarta columna el tipo de cuotas que deseamos)
/dev/sda2 / ext3 noatime 1 1
/dev/sda1 /boot ext3 noatime 1 2
/dev/sda3 /home ext3 noatime,usrquota,grpquota 1 2
...
Algo similar a lo anterior deberá tener tu archivo de configuración, y como ya se indicó solo
pág. 237
agregamos el soporte para cuotas en el sistema de archivos que nos interese. Lo anterior por si
solo, es obvio que no hace nada, habría que reiniciar el sistema para que se apliquen los
cambios pero realmente no es necesario, lo siguiente re-monta el sistema de archivos "/home":
#> mount -o remount /home
#> mount
/dev/sda1 on /boot type ext3 (rw,noatime)
/dev/sda2 on / type ext3 (rw,noatime)
/dev/sda3 on /home type ext3 (rw,noatime,usrquota,grpquota)
none on /proc type proc (rw)
El sistema de archivos "/home" esta listo ahora para soportar cuotas de disco. El siguiente paso
es verificar con el comando quotacheck por sistemas de archivos que soporten cuotas. Este
comando crea, verifica o repara el control de cuotas en los sistemas que lo soporten, en este
caso creara el soporte:
#> quotacheck -augmv
quotacheck: Scanning /dev/sda3 [/home] done
quotacheck: Cannot stat old user quota file: No existe el fichero o el directorio
quotacheck: Cannot stat old group quota file: No existe el fichero o el directorio
quotacheck: Cannot stat old user quota file: No existe el fichero o el directorio
quotacheck: Cannot stat old group quota file: No existe el fichero o el directorio
quotacheck: Checked 2539 directories and 35556 files
quotacheck: Old file not found.
quotacheck: Old file not found.
Los errores que envía es precisamente porque no existía un sistema de cuotas previo, es normal
que los envíe. Cuando las cuotas esten en pleno uso, es conveniente
ejecutarquotacheck periódicamente para que verifique inconsistencias y se corrijan a tiempo.
En cuanto a las opciones estas indican lo siguiente:
a - all, es decir verifica todos los sistemas de archivos por cuotas.
u - user, verifica por soporte de cuotas para usuarios.
g - group, verifica por soporte de cuotas para grupos.
m - no-remount, evita que el sistema se remonte como de solo lectura.
v - verboso, reporta lo que hace conforme progresa, son los mensajes que salen a la
terminal.
pág. 238
Como ves, la opción -a en este caso no era necesario puesto que solo tenemos "/home"
con cuotas, asi que el comando anterior también pudiera ser invocado de esta manera:
#> quotacheck -ugmv /home
Pues el sistema esta listo para manipular cuotas de usuario, esto lo podemos comprobar porque
en la raíz del sistema de archivos soportado con cuotas deben existir los archivos "aquota.user"
y "aquota.group" que son binarios, no trates de modificarlos o manipularlos:
#> cd /home
#> ls -l
total 72
-rw------- 1 root root 8192 2008-05-17 21:38 aquota.group
-rw------- 1 root root 8192 2008-05-17 21:38 aquota.user
drwx--x--x 4 user1 user1 4096 2008-05-12 16:13 user1/
drwx--x--x 4 user2 user2 4096 2008-05-12 16:13 user2/
drwx--x--x 3 user3 user3 4096 2008-05-05 12:01 user3/
drwx--x--x 3 user4 user4 4096 2008-05-05 12:01 user4/
(obsérvese los dos archivos de control de cuotas, para usuarios y grupos)
Si se tuvieran más sistemas de archivos con soporte para cuotas en la raíz de cada uno estarían
estos archivos, o solo uno dependiendo lo que se pidió, usuarios, grupos o ambos. Por cierto, en
sistemas con kernel 2.2 o anterior se usaba la versión 1 de cuotas y sus archivos de control se
nombraban "quota.user" y "quota.group", del kernel 2.4 y posteriores con la versión 2 y 3, se
utiliza los mostrados anteriormente.
Ahora bien, lo anterior deja listo el sistema para el soporte de cuotas pero estás siguen sin ser
activadas se requiere activar el soporte de cuotas, para lo cual invocamos el comandoquotaon:
#> quotaon -ugv /home
/dev/sda3 [/home]: group quotas turned on
/dev/sda3 [/home]: user quotas turned on
Activamos para "/home" cuotas de usuario y grupos. Cuando por alguna razón sea necesario
desactivar las cuotas, entonces utiliza la contraparte, que es el comando quotaoff:
pág. 239
pág. 240
En el ejemplo previo se modifica la cuota del usuario "user1" en el sistema de archivos "/home"
que es el que se ha usado de ejemplo en este artículo de LinuxTotal.com.mx, el comportamiento
por default es modificar cuotas para ese usuario en todos los sistemas de archivos que tengan
activo el control de cuotas (quotaon). Si se desea control de cuotas para un filesystem en
específico entonces se agrega la opción -f:
#> edquota -u user1 -f /home
(solo aplica la cuota en el sistema de archivos indicado)
Verificando el uso de las cuotas
Como usuario administrador 'root' puedes ver el uso de cuotas de cualquier usuario, ya sea
individualmente o por medio de un reporte global.
Por usuario o individualmente se usa el comando quota, estando como "root":
#> quota -u user1
Disk quotas for user user1 (uid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 56 70 100 14 0 0
Con usuarios que manejan cantidades muy grandes de cuota, es un poco dificil calcular en
términos de megas o gigas el espacio usuado y los límites de cuotas:
#> quota -u sergio
Disk quotas for user sergio (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 42578888 0 50000000 34895 0 0
Usando la opción -s se mejora el informe:
#> quota -s -u sergon
Disk quotas for user sergon (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/sda3 41582M 0 48829M 34905 0 0
Como usuario individual del sistema, puedes observar tus cuotas con el mismo comandoquota,
sin argumentos.
Ahora bien, si se desea un reporte global de las cuotas de todos los usuarios o por grupos,
pág. 241
Obsérvese en la segunda línea del reporte el tiempo de gracia (grace time), que es de 7 días
tanto para cuotas por bloque como para cuotas por archivos o inodos. Esto aplica para todos los
usuarios en global, como se aprecia en el listado que ninguno tiene establecido un tiempo de
gracia diferente al global.
pág. 242
#> edquota -u user1 -T
Times to enforce softlimit for user user1 (uid 502):
Time units may be: days, hours, minutes, or seconds
Filesystem block grace inode grace
/dev/sda3 unset unset
Lo único que hay que considerar es que los tiempos de gracias por usuario deben ser menores al
global. Y que este empieza a correr una vez que se ha llegado al límite soft. Cuando esto suceda,
si entras a editar de nuevo el tiempo de gracia del usuario (edquota -u user -T) se reflejara en
segundos el tiempo que le queda, pudiéndolo aumentar de nuevo si eres "root". O dejarlo en
cero y entonces el global será el que se utilice.
Realmente no existe una manera "oficial" de establecer cuotas masivamente, sin embargo, no
hay problema, usaremos un pequeño script que te permitira realizarlo.
pág. 243
#> edquota -p user1 `gawk -F: '$3 > 499 {print $1}' /etc/passwd`
(importante: nota el uso de acento grave que abarca al comando gawk, esto para que el
shell lo ejecute primero y el resultado serán los argumentos, uno o cientos de usuarios
cuyo UID es mayor a 499)
pág. 244
# useradd usuarioquota
Le asignamos un password;
# passwd usuarioquota
Ahora a este usuario le asignaremos una cuota de gracias de 50Mb(51200) y una cuota definitiva
de 100Mb(102400).
Una vez en el perfil copiaremos los archivos que están en la carpeta /usr/lib a un directorio en el
home del usuarioquota
$ cp -r /usr/lib ~/prueba-cuotas
Notará que llegará un momento en el que el sistema indicará que ya es imposible continuar
copiando contenido dentro de ~/prueba-cuotas debido a que se agotó el espacio disponible
para el usuario en el sistema de archivos.
pág. 245
Ejecute de nuevo quota y observe con detenimiento la salida. En ésta aparecerá un asterisco
junto a la cantidad mostrada en las columnas de bloques o bien inodos en los casos donde se
hayan excedido las cuotas.
Verificamos con el comando quota
$ quota
Para solucionar el problema, borramos la carpeta y después verificamos de nuevo.
Configuración de red.
Primero nos tenemos que identificar como root para ejecutar los comandos. Para esto
colocamos en la línea de comandos:
# su -
Para ver cuales son las interfaces de red que tienes disponibles ejecutamos:
# ifconfig | less
La opción de less te permite ver pagina por página las interfaces (en caso de que tengas muchas
o una ventana de comandos pequeña), este comando sólo te muestra las interfaces que están
arriba (up). Te debe aparecer algo como eth0, eth1 y lo (esta interfaz es la de loopback y es la
del propio servidor).
Si queremos mostrar todas las interfaces esten arriba (o levantadas) ejecutamos el siguiente
comando:
# ifconfig –a
pág. 246
Con broadcast
pág. 247
Cambiando eth0 por el nombre de la interfaz que necesitamos. Si queremos deshabilitar una
interfaz ejecutamos:
/etc/sysconfig/network/routes
Además hay un programa interactivo de consola que nos deja configurar la red mucho más fácil,
incluyendo dhcp, direcciones estáticas puerta de enlace (gateway) ejecutamos el siguiente
comando:
Red Hat:
# redhat-config-network
CentOS y Fedora:
#system-config-network
Te aparecerá un diálogo donde tendras que escoger la interfaz de red que quieres configurar y
luego de seleccionarla verás las distintas opciones.
Una vez que cambies los parámetros de tu interfaz de red siempre es bueno reiniciar el
servicio de red para que se reflejen los cambios:
Archivos de configuración
Si quieres manualmente cambiar los archivos de configuración de tus interfaces de red debes
editar los archivos dentro de /etc/sysconfig/network-scripts/ por ejemplo para la interfaz eth0
sería:
pág. 248
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
Nota: No olvides hacer un backup del archivo en caso de falla antes de hacer cualquier cambio
con:
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /root/ifcfg-eth0.backup
Puedes utilizar el editor que quieras (nano, emac, etc) Debes ver una configuración como la
siguiente:
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:0C:29:97:XX:XX
IPADDR=192.168.1.100
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
TYPE=Ethernet
Una vez realizados los cambios reiniciamos los servicios de red:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
HWADDR=00:0c:29:97:24:e3
TYPE=Ethernet
Configurando DNS
Para hacer que tu computadora u ordenador busque en un servidor DNS específico tienes que
modificar el archivo /etc/resolv.conf ejecuntado
pág. 249
# vim /etc/resolv.conf
Ahí puedes agregar los servidores que quieras por ejemplo con:
nameserver 10.50.50.130
nameserver 10.50.50.131
Si ejecuta un servidor de nombres en su máquina local, tendrá que configurarlo por separado,
como se explicará después. Si se encuentra en una red local y puede usar un servidor de
nombres existente, mejor. Si estamos conectados a Internet por módem, lo habitual es
especificar en resolv.conf el servidor de nombres que nos diga nuestro proveedor de servicios.
La opción más importante del fichero resolv.conf es nameserver, que tiene la dirección IP del
servidor de nombres a usar. Si especifican varios servidores poniendo varias líneas nameserver,
se intentarán usar en el orden dado; por lo que debería poner en primer lugar el servidor de
nombres más rápido o cercano. Actualmente, puede ponerse un máximo de tres servidores
distintos. Si no se pone ninguno, intentará buscar un servidor de nombres en la máquina local.
Otras dos opciones, domain y search, nos permiten usar nombres cortos (sin dominio) para
máquinas que estén en nuestro dominio. Normalmente, para conectarnos a una máquina de la
misma red, no queremos poner el dominio completo, sino su nombre. Por ejemplo, gauss en
lugar de gauss.mathematics.groucho.edu.
Para esto sirve la palabra domain. Nos permite especificar un dominio predeterminado que se
añade a las peticiones cuando su búsqueda inicial falla. Por ejemplo, al buscar gauss y fallar el
servidor de nombres buscándolo en Internet, le añade automáticamente su dominio
predeterminado y ya sí puede resolverlo.
Esto está bien, pensaremos, pero tan pronto como nos refiramos a una máquina que esté fuera
del Departamento de Matemáticas, tendremos que volver a teclear el dominio completo. A lo
mejor queremos teclear solo quark.physics para referirnos a una máquina del Departamento de
Físicas.
Para esto podemos usar la lista de búsqueda, que puede especificarse con la opción search. En
pág. 250
esta lista se especifica una lista de dominios donde resolver nombres cortos. Los elementos de
la lista deben especificarse separándolos por espacios o tabuladores.
Las opciones search y domain son mutuamente excluyentes y no pueden aparecer más de una
vez. Si ninguna de las dos se pone, el sistema intentará asignar a los nombres cortos el dominio
de la máquina local, que averiguará usando la llamada al sistema getdomainname (2). Si el nodo
local no tiene dominio, se asumirá que el dominio predeterminado es la raíz.
Si decidimos poner una opción search en el fichero resolv.conf, habrá que ser cuidadosos con los
dominios que añadimos a la lista. Las bibliotecas de resolución anteriores a BIND 4.9 solían
construir una lista de búsqueda predeterminada para el dominio cuando no se proporciona otra
lista. Esta lista predeterminada se hacía con el dominio del nodo, más todos los dominios padre
hasta llegar a la raíz. Esto daba lugar a búsquedas innecesarias a los servidores de nombres
externos.
Asumamos que estamos en la Cervecera Virtual y queremos conectarnos al
sistema foot.groucho.edu. Por un error tecleamos el nombre foo, que no existe. El servidor de la
universidad nos responderá que no existe el nodo. Con la búsqueda antigua, intentará buscar
ese nombre en los dominios vbrew.com y com. Este último es problemático porque causa una
búsqueda innecesaria y además podría existir. Al final nos habremos intentado conectar a una
máquina totalmente ajena.
En algunos casos, esto es un potencial problema de seguridad. De hecho las listas de búsqueda
deben limitarse a dominios de la organización local o algo similar. La lista en el Departamento de
Matemáticas debe limitarse a los dominios maths.groucho.edu y groucho.edu.
Como lo anterior puede resultar confuso, sea el siguiente ejemplo de fichero resolv.conf para la
Cervecera Virtual:
# /etc/resolv.conf
# Nuestro dominio
domain vbrew.com
#
# Nuestro servidor principal va a ser vlager:
name server 172.16.1.1
Cuando se trate de traducir el nombre vale, el sistema empezará por buscar directamente vale y
si falla, probará con vale.vbrew.com.
pág. 251
Esta es una introducción a cron, cubre lo básico de lo que cron puede hacer y la manera de
usarse.
¿Qué es cron?
Cron es el nombre del programa que permite a usuarios Linux/Unix ejecutar automáticamente
comandos o scripts (grupos de comandos) a una hora o fecha específica. Es usado normalmente
para comandos de tareas administrativas, como respaldos, pero puede ser usado para ejecutar
cualquier cosa. Como se define en las páginas del manual de cron (#> man cron) es un demonio
que ejecuta programas agendados.
Recuerde que si no tiene lo que busca dentro del manual de cron, podría encontrar mas
información utilizando los comandos:
# whatis crontab
# man –kcrontab
Dependiendo de la distribución que este utilizando.
En prácticamente todas las distribuciones de Linux se usa la versión Vixie Cron, por la persona
que la desarrolló, que es Paul Vixie, uno de los grandes gurús de Unix, también creador, entre
otros sistemas, de BIND que es uno de los servidores DNS más populares del mundo.
Iniciar cron
Cron es un demonio (servicio), lo que significa que solo requiere ser iniciado una vez,
generalmente con el mismo arranque del sistema. El servicio de cron se llama crond. En la
mayoría de las distribuciones el servicio se instala automáticamente y queda iniciado desde el
arranque del sistema, se puede comprobar de varias maneras:
#> /etc/rc.d/init.d/crond status
#> /etc/init.d/crond status Usa cualquiera de los dos dependiendo de tu distro
crond (pid 507) is running...
pág. 252
Si el servicio no estuviera configurado para arrancar desde un principio, bastaría con agregarlo
con el comando chkconfig:
Con esto lo estarías agregando al nivel de ejecución 3 y 5, para que inicie al momento del
arranque del sistema.
Usando cron
Hay al menos dos maneras distintas de usar cron:
La primera es en el directorio etc, donde muy seguramente encontrarás los siguientes
directorios:
cron.hourly
cron.daily
cron.weekly
cron.monthly
pág. 253
Nótese que la primera línea empieza con #!, que indica que se trata de un script shell de bash,
las demás líneas son los comandos que deseamos ejecute el script. Este script podría nombrarse
por ejemplo respaldo.sh y también debemos cambiarle los permisos correspondientes para que
pueda ser ejecutado, por ejemplo:
#> chmod 700 respaldo.sh
#> ls -l respaldo.sh
-rwx------ 1 root root 0 Jul 20 09:30 respaldo.sh
La "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado.
Si este script lo dejamos en cron.hourly, entonces se ejecutará cada hora con un minuto de
todos los días, en un momento se entenderá el porque.
Como segundo modo de ejecutar o usar cron es a través de manipular directamente el
archivo /etc/crontab. En la instalación por defecto de varias distribuciones Linux, este archivo se
verá a algo como lo siguiente:
#> cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Las primeras cuatro líneas son variables que indican lo siguiente:
SHELL es el 'shell' bajo el cual se ejecuta el cron. Si no se especifica, se tomará por defecto el
indicado en la línea /etc/passwd correspondiente al usuario que este ejecutando cron.
PATH contiene o indica la ruta a los directorios en los cuales cron buscará el comando a
pág. 254
ejecutar. Este path es distinto al path global del sistema o del usuario.
MAIL TO es a quien se le envía la salida del comando (si es que este tiene alguna salida). Cron
enviará un correo a quien se especifique en este variable, es decir, debe ser un usuario válido
del sistema o de algún otro sistema. Si no se especifica, entonces cron enviará el correo al
usuario propietario del comando que se ejecuta.
HOME es el directorio raíz o principal del comando cron, si no se indica entonces, la raíz será la
que se indique en el archivo /etc/passwd correspondiente al usuario que ejecuta cron.
Los comentarios se indican con # al inicio de la línea.
Después de lo anterior vienen las líneas que ejecutan las tareas programadas propiamente. No
hay límites de cuantas tareas pueda haber, una por renglón. Los campos (son 7) que forman
estas líneas están formados de la siguiente manera:
Minuto Hora DiaDelMes Mes DiaDeLaSemana Usuario Comando
Campo Descripción
Día del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría
Día del Mes
20, para ejecutar el comando el día 20 del mes.
pág. 255
Un asterisco * como valor en los primeros cinco campos, indicará inicio-fin del campo, es decir
todo. Un * en el campo de minuto indicará todos los minutos.
Para entender bien esto de los primeros 5 campos y el asterisco usaré mejor varios ejemplos:
Ejemplo Descripción
00 12 16 *
Al mediodía de los días 16 de cada mes y que sea Miércoles
Wen
30 9 20 7 * A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana
Ejecutando Cron con múltiples usuarios, comando crontab
Linux es un sistema multiusuario y cron es de las aplicaciones que soporta el trabajo con varios
usuarios a la vez. Cada usuario puede tener su propio archivo crontab, de hecho
el/etc/crontab se asume que es el archivo crontab del usuario root, aunque no hay problema
que se incluyan otros usuarios, y de ahí el sexto campo que indica precisamente quien es el
usuario que ejecuta la tarea y es obligatorio en /etc/crontab.
pág. 256
Pero cuando los usuarios normales (e incluso root) desean generar su propio archivo de
crontab, entonces utilizaremos el comando crontab.
$> crontab -e
Con lo cual se abrira el editor por default (generalemente vi) con el archivo llamado crontab
vacio y donde el usuario ingresará su tabla de tareas y que se guardará automáticamente como
/var/spool/cron/usuario.
El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas y
como ejemplo lo nombre 'mi_cron', después el comando $> crontab mi_cron se encargará de
establecerlo como su archivo cron del usuario en /var/spool/cron/usuario:
$> vi mi_cron
# borra archivos de carpeta compartida
0 20 * * * rm -f /home/sergio/compartidos/*
# ejecuta un script que realiza un respaldo de la carpeta documentos el primer día de cada mes
0 22 1 * * /home/sergio/respaldomensual.sh
# cada 5 horas de lun a vie, se asegura que los permisos sean los correctos en mi home
1 *5 * * * 1-5 chmod -R 640 /home/sergio/*
:wq (se guarda el archivo)
$> ls
mi_cron
$>
mi_cron
(se establece en /var/spool/cron/usuario)
Resumiendo lo anterior y considerando otras opciones de crontab:
$> crontab archivo.cron (establecerá el archivo.cron como el crontab del usuario)
$> crontab -e (abrirá el editor preestablecido donde se podrá crear o editar el archivo
crontab)
$> crontab -l (lista el crontab actual del usuario, sus tareas de cron)
pág. 257
Para entender mejor como iniciar/detener/reiniciar servicios, en este artículo encontrarás más
información.
crontab archivo
pág. 258
pág. 259
El archivo /etc/crontab permite además definir a cuál usuario enviar un mensaje de correo
electrónico con los resultados de las salidas de los programas que las generen y el intérprete de
mandatos a utilizar.
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=alguien@gmail.com
El archivo utiliza un formato de 7 campos, donde se define, respectivamente, minuto, hora, día
del mes, mes, día de la semana, usuario a utilizar y el programa a ejecutar.
pág. 260
pág. 261
Filtrado de paquetes
El kernel de Linux tiene incorporado la característica interna de filtrar paquetes, permitiendo
aceptar algunos de ellos en el sistema mientras que intercepta y para a otros. El netfilter del
kernel tiene tres tablas o listas de reglas incorporadas. Son las siguientes:
filter — La tabla por defecto para el manejo de paquetes de red.
nat — Usada para alterar paquetes que crean una nueva conexión y utilizada para
la Traducción de direcciones de red (Network Address Translation, NAT).
mangle — Usada por tipos específicos de alteración de paquetes.
Cada una de estas tablas tiene un grupo de cadenas incorporadas que corresponden a las
acciones llevadas a cabo por el filtro de la red.
Las cadenas internas para la tabla filtro son las siguientes:
INPUT — Aplica a los paquetes recibidos a través de una interfaz de red.
pág. 262
OUTPUT — Esta cadena sirve para paquetes enviados por medio de la misma interfaz de
red que recibió los paquetes.
FORWARD — Esta cadena sirve para paquetes recibidos en una interfaz de red y enviados
en otra.
Las cadenas internas para la tabla nat son las siguientes:
PREROUTING — Altera los paquetes de red cuando estos llegan.
POSTROUTING — Esta cadena altera paquetes antes de que sean enviados por medio de
una interfaz de red.
POSTROUTING — Altera los paquetes de red cuando estos son enviados.
PREROUTING — Esta cadena altera paquetes recibidos por medio de una interfaz de red cuando
llegan.
OUTPUT — Esta cadena altera paquetes generados localmente antes de que sean dirigidos
por medio de una interfaz de red.
POSTROUTING — Esta cadena altera paquetes antes de que sean enviados por medio de
una interfaz de red.
Las cadenas internas para la tabla mangle son las siguientes:
PREROUTING — Esta cadena altera paquetes recibidos por medio de una interfaz de red
antes de que sean dirigidos.
POSTROUTING — Altera los paquetes de red cuando estos son enviados.
Cada paquete de red recibido o enviado desde un sistema Linux está sujeto a al menos una
tabla. Sin embargo, un paquete puede estar sometido a múltiples reglas dentro de cada tabla
antes de emerger al final de la cadena. La estructura y propósito de estas reglas puede variar,
pero normalmente buscan identificar un paquete que viene de o se dirige hacia una dirección IP
en particular, o un conjunto de direcciones, cuando utiliza un determinado protocolo y servicio
de red.
Independientemente de su destino, cuando un paquete cumple una regla en particular en una
de las tablas, se les aplica un objetivo (target) o acción a ellos. Si la regla especifica un
objetivo ACCEPT para un paquete que coincida, el paquete se salta el resto de las verificaciones
de la regla y se permite que continúe hacia su destino. Si una regla especifica un objetivo DROP,
a ese paquete se le niega el acceso al sistema y no se envía nada de vuelta al servidor que envió
el paquete. Si una regla especifica un objetivo QUEUE, el paquete se pasa al espacio del usuario.
Si una regla especifica el objetivo opcional REJECT, el paquete es descartado, pero se envía un
paquete de error al que envió el paquete.
pág. 263
Cada cadena tiene una política por defecto de ACCEPT, DROP, REJECT, o QUEUE. Si ninguna de
estas reglas en la cadena se aplica al paquete, entonces el paquete es tratado de acuerdo a la
política por defecto.
El comando iptables configura estas tablas, así como también configura nuevas tablas si es
necesario.
pág. 264
pág. 265
Opciones de comandos
Las opciones de comandos le dicen a iptables que realice una acción específica. Solamente una
opción de comando se permite por comando iptables. Excepto el comando de ayuda, todos los
comandos se escriben en mayúsculas.
Los comandos de iptables son los siguientes:
-A — Añade la regla iptables al final de la cadena especificada. Este es el comando utilizado
para simplemente añadir una regla cuando el orden de las reglas en la cadena no importa.
-C — Verifica una regla en particular antes de añadirla en la cadena especificada por el
usuario. Este comando puede ser de ayuda para construir reglas iptables complejas
pidiéndole que introduzca parámetros y opciones adicionales.
-D — Borra una regla de una cadena en particular por número (como el 5 para la quinta
regla de una cadena). Puede también teclear la regla entera e iptables borrará la regla en
la cadena que corresponda.
-E — Renombra una cadena definida por el usuario. Esto no afecta la estructura de la tabla.
-F — Libera la cadena seleccionada, que borra cada regla de la cadena. Si no se especifica
ninguna cadena, este comando libera cada regla de cada cadena.
-h — Proporciona una lista de estructuras de comandos, así como también un resumen
rápido de parámetros de comandos y opciones.
-I — Inserta una regla en una cadena en un punto especificado por un valor entero
definido por el usuario. Si no se especifica ningún número, iptables colocará el comando en
el tope de la cadena.
-L — Lista todas las reglas de la cadena especificada tras el comando. Para ver una lista de
todas las reglas en todas las cadenas en la tabla por defecto filter, no especifique ninguna
cadena o tabla. De lo contrario, la sintaxis siguiente deberá utilizarse para listar las reglas
en una cadena específica en una tabla en particular:
pág. 266
-X — Borra una cadena especificada por el usuario. No se permite borrar ninguna de las
cadenas predefinidas para cualquier tabla.
-Z — Pone ceros en los contadores de byte y de paquete en todas las cadenas de una tabla
en particular.
Opciones de parámetros de iptables
Una vez que se especifiquen ciertos comandos iptables, incluyendo aquellos para añadir,
anexar, eliminar, insertar o reemplazar reglas dentro de una cadena, se requieren parámetros
para construir una regla de filtrado de paquetes.
-c — Resetea los contadores de una regla en particular. Este parámetro acepta las
opciones PKTS y BYTES para especificar qué contador hay que resetear.
-d — Configura el nombre de la máquina destino, dirección IP o red de un paquete que
coincide con la regla. Cuando se coincida una red, se soportan los siguientes formatos de
direcciones IP o máscaras de red:
N.N.N.N/M.M.M.M — Donde N.N.N.N es el rango de direcciones IP y M.M.M.M es la
máscara de la red.
N.N.N.N/M — Donde N.N.N.N es el rango de direcciones IP y M es la máscara de bit.
-f — Aplica esta regla sólo a los paquetes fragmentados.
Usando la opción ! después de este parámetro, únicamente se harán coincidir los paquetes
no fragmentados.
-i — Configura la interfaz de red entrante, tal como eth0 o ppp0. Con iptables, este
parámetro opcional puede ser usado solamente con las cadenas INPUT y FORWARD
cuando es usado con la tabla filter y la cadena PREROUTING con las tablas nat y mangle.
Este parámetro también soporta las siguientes opciones especiales:
El carácter de exclamación ! — Invierte la directriz, es decir, se excluye de esta regla
cualquier interfaz especificada.
El caráter de suma + — Un caracter tipo comodín utilizado para coincidir todas las
interfaces con una cadena de caracteres especificada. Por ejemplo, el parámetro -i
eth+aplicará esta regla a cualquier interfaz Ethernet pero excluirá cualquier otra interfaz,
tal como, ppp0.
Si el parámetro -i se utiliza sin especificar ninguna interfaz, todas las interfaces estarán
afectadas por la regla.
-j — Salta a un objetivo particular cuando un paquete coincide con una regla particular. Los
objetivos válidos a usar después de la opción -j incluyen las opciones estándar
(ACCEPT, DROP, QUEUE y RETURN) así como también las opciones extendidas que están
disponibles a través de los módulos cargados por defecto con el paquete RPM de Red Hat
pág. 267
Enterprise Linux iptables, como LOG, MARK y REJECT, entre otros. Consulte la página del
manual de iptables para más información sobre esto y otros objetivos.
Puede también dirigir un paquete coincidiendo esta regla a una cadena definida por el
usuario fuera de la cadena actual, para aplicar otras reglas al paquete.
Si no especifica ningún objetivo, el paquete pasa la regla sin llevar a cabo ninguna acción.
A pesar de todo, el contador para esta regla se sigue incrementando en uno.
-o — Configura la interfaz de red de salida para una regla y puede ser usada solamente con
las cadenas OUTPUT y FORWARD en la tabla de filtro y la cadena POSTROUTING en las
tablas nat y mangle. Estos parámetros de opciones son los mismos que aquellos de la
interfaz de entrada (-i).
-p — Configura el protocolo IP para la regla, el cual puede ser icmp, tcp, udp, o all, para
coincidir todos los protocolos soportados. Además, se puede usar cualquier protocolo
listado en /etc/protocols. Si esta opción es omitida cuando se esté creando una regla, la
opción all es la opción por defecto.
-s — Configura la fuente para un paquete particular usando la misma sintaxis que el
parámetro (-d).
Opciones de coincidencia para iptables
Diferentes protocolos de red proporcionan opciones especializadas las cuales se pueden
configurar para coincidir un paquete particular usando ese protocolo. Sin embargo, primero se
debe especificar el protocolo en el comando iptables. Por ejemplo, -p tcp <protocol-
name> (donde <protocol-name> es el protocolo objetivo), hace disponibles las opciones para
ese protocolo especificado.
Protocolo TCP
Estas opciones de identificación están disponibles en el protocolo TCP (opción -p tcp):
--dport — Configura el puerto de destino para el paquete. Use bien sea un nombre de
servicio (tal como www o smtp), número de puerto, o el rango de números de puertos
para configurar esta opción. Para hojear los nombres y alias de los servicios de red y los
números que ellos usan, visualice el archivo /etc/services. La opción --destination-portes
sinónimo con --dport.
Para especificar un rango de números de puertos, separe los dos números con dos
puntos (:), tal como -p tcp --dport 3000:3200. El rango más grande aceptable es0:65535.
Use un caracter de exclamación (!) después de la opción --dport para coincidir todos los
paquetes que no utilizan el servicio de red o puerto.
pág. 268
--sport — Configura el puerto fuente del paquete usando las mismas opciones que --dport.
La opción --source-port es sinónimo con --sport.
--syn — Provoca que todos los paquetes designados de TCP, comúnmente
llamados paquetes SYN, cumplan esta regla. Cualquier paquete que esté llevando un
payload de datos no será tocado. Si se sitúa un punto de exclamación (!) como bandera
tras la opción --syn se provoca que todos los paquetes no-SYN sean seleccionados.
--tcp-flags — Permite a los paquetes TCP con bits específicos o banderas, ser coincididos
con una regla. La opción --tcp-flags acepta dos parámetros. El primer parámetro es la
máscara, la cual configura banderas a ser examinadas en el paquete. El segundo parámetro
se refiere a la bandera que se debe configurar para poder coincidir.
Las banderas posibles son:
ACK
FIN
PSH
RST
SYN
URG
ALL
NONE
Por ejemplo, una regla iptables que contenga -p tcp --tcp-flags ACK,FIN,SYN SYN tan sólo
seleccionará los paquetes TCP que tengan la bandera SYN activo y las banderas ACK y FIN sin
activar.
Usando el caracter de exclamación (!) después de --tcp-flags reversa el efecto de la opción de
coincidencia.
--tcp-option — Intenta seleccionar con opciones específicas de TCP que pueden estar
activas en un paquete en particular. Esta opción se puede revertir con el punto de
exclamación (!).
pág. 269
Protocolo UDP
Estas opciones de selección están disponibles para el protocolo UDP (-p udp):
--dport — Especifica el puerto destino del paquete UDP, usando el nombre del servicio,
número de puerto, o rango de números de puertos. La opción de coincidencia --
destination-port es sinónimo con --dport.
--sport — Configura el puerto fuente del paquete UDP, usando el nombre de puerto,
número de puerto o rango de números de puertos. La opción --source-port es sinónimo
con --sport.
Protocolo ICMP
Las siguientes opciones de coincidencia están disponibles para el Protocolo de mensajes de
Internet (ICMP) (-p icmp):
--icmp-type — Selecciona el nombre o el número del tipo ICMP que concuerde con la regla.
Se puede obtener una lista de nombres válidos ICMP tecleando el comandoiptables -p
icmp -h.
Módulos con opciones de coincidencias adicionales
Opciones adicionales de coincidencia están disponibles a través de los módulos por el
comando iptables. Para usar un módulo de opciones de coincidencia, cargue el módulo por
nombre usando la opción -m, tal como -m <module-name> (reemplazando <module-name> con
el nombre del módulo).
Un gran número de módulos están disponibles por defecto. Hasta es posible crear sus módulos
para proporcionar funcionalidades de opciones de coincidencia adicionales.
Lo siguiente, es una lista parcial de los módulos usados más comúnmente:
limit module — Permite colocar un límite en cuántos paquetes son coincididos a una regla
particular. Esto es especialmente beneficioso cuando se usa en conjunto con el
objetivo LOG, pues puede prevenir que una inundación de paquetes coincidentes
sobrecarguen el registro del sistema con mensajes repetitivos o usen los recursos del
sistema.
El módulo limit habilita las opciones siguientes:
--limit — Configura el número de coincidencias en un intervalo de tiempo, especificado con
un número y un modificador de tiempo ordenados en el formato<número>/<tiempo>. Por
ejemplo, si usamos --limit 5/hour sólo dejaremos que una regla sea efectiva cinco veces a
la hora.
Si no se utiliza ningún número ni modificador de tiempo, se asume el siguiente valor por
defecto: 3/hour.
pág. 270
pág. 271
ACCEPT — Permite que el paquete se mueva hacia su destino (o hacia otra cadena, si no ha
sido configurado ningún destino para seguir a esta cadena).
DROP — Deja caer el paquete sin responder al solicitante. El sistema que envia el paquete
no es notificado de esta falla.
QUEUE — El paquete se pone en una cola para ser manejado por una aplicación en el
espacio de usuario.
RETURN — Para la verificación del paquete contra las reglas de la cadena actual. Si el paquete
con un destino RETURN cumple una regla de una cadena llamada desde otra cadena, el paquete
es devuelto a la primera cadena para retomar la verificación de la regla allí donde se dejó. Si la
regla RETURN se utiliza en una cadena predefinida, y el paquete no puede moverse hacia la
cadena anterior, el objetivo por defecto de la cadena actual decide qué acción llevar a cabo.
Además de estos objetivos standard, se pueden usar otros más con extensiones
llamadas módulos de objetivos (target modules).
Existen varios módulos extendidos de objetivos, la mayoría de los cuales tan sólo se aplican a
tablas o situaciones específicas. Un par de estos módulos, de los más populares e incluidos por
defecto en Linux son:
LOG — Registra todos los paquetes que coinciden esta regla. Puesto que los paquetes son
registrados por el kernel, el archivo /etc/syslog.conf determina dónde estas entradas de
registro serán escritas. Por defecto, son colocadas en el archivo /var/log/messages.
Se pueden usar varias opciones adicionales tras el objetivo LOG para especificar la manera
en la que tendrá lugar el registro:
--log-level — Configura el nivel de prioridad del registro de eventos. Una lista de los niveles
de prioridad se puede encontrar en la página del manual de syslog.conf.
--log-ip-options Cualquier opción en la cabecera de un paquete IP se guarda en el registro.
--log-prefix — Coloca una cadena de hasta 29 caracteres antes de la línea de registro
cuando es escrita. Esto es muy útil para la escritura de filtros de syslog para usarlos en
conjunto con el registro de paquetes.
--log-tcp-options — Cualquier opción colocada en la cabecera de un paquete TCP es
registrada.
--log-tcp-sequence Escribe el número de secuencia TCP del paquete en el registro del
sistema.
Recuerde que la administración de Logs es vital en este tipo de administración, por esta razón se
encuentra el archivo logrotate, que sirve para hacer una rotación de logs, el arhivo de
configuración se encuentra en /etc/logrotate.conf, pero….
pág. 272
Que es Logrotate?
Los logs o ficheros de registro están pensados para guardar la información de las actividades del
sistema. Estos ficheros pueden crecer hasta llenar la partición donde se encuentran y bloquear
el sistema, pero tienen muchísimos usos y son algo imprescindible, ya que con la experiencia
nos aportan una inmensa cantidad de información.
Hoy vamos a ver una herramienta llamada logrotate, encargada de rotar estos ficheros y más
características interesantes para poderlos gestionar con facilidad y tener un control casi
completo sobre ellos. Es importante conservar durante un tiempo bastante largo esta
información, de ahí que “rotemos” los logs, ya que cada cierto tiempo o condiciones, se creará
un fichero sobre el que se escribirá y el que teníamos pasará a ser un histórico.
Sus datos nos proporcionan desde estadísticas, para a poder afinar el sistema, hasta información
de seguridad, como accesos no permitidos o lo que se ha hecho cuando se ha accedido ya que
mucha gente puede saber como acceder a un sistema leyendo un par de manuales en internet,
pero lo verdaderamente difícil es burlar estas pruebas para que no dejar huella, pues un buen
administrador de sistemas hace siempre un buen uso de estos ficheros y los suele monitorizar
para buscar fallos en sus sistema de cualquier tipo, tanto de configuración, como de accesos,
rendimiento y una larga lista más…
La ruta por defecto donde están los logs es /var/log que en muchos sistemas se suele montar en
un partición separada para que al llenarse, aunque no se puedan registrar mas logs el sistema
siga funcionando. En esa misma ruta los ficheros rotados tendrán una nomenclatura como :
secure
secure.1
secure.2
En donde el primero que no tiene número es sobre el que estamos escribiendo actualmente, el
siguiente secure.1 es el anterior, y el secure.2 es el anterior a secure.1 con lo que lo leemos del
más reciente al más viejo. Es importante saber que nunca se deben editar con editores de texto
como vi, nano, gedit y demás, podemos cometer algún fallo y borrar información, siempre con
herramientas para visualizarlo sin escritura, los más comunes son tail y less.
cat /etc/logrotate.conf
pág. 273
De las entradas que nos salen tenemos estas:
weekly -> Por defecto se rotará cada semana, otras opciones son daily y monthly.
rotate 4 -> Cuanto tiempo se conservan los antiguos, por defecto son cuatro semanas, algunos
ficheros pueden ser muy importantes y que los conservemos todos.
create -> Para que se cree un fichero al rotar, en donde se guardará la información otra vez.
La configuración de este fichero es una principal, y luego como vemos tiene un include al
fichero /etc/logrotate.d
root@localhost# ls /etc/logrotate.d/
acpid mgetty samba tux conman named sa-update vsftpd.log cups ppp snmpd wpa_supplicant
httpd psacct squid yum kdm rpm syslog
En donde se encuentran más configuraciones específicas de servicios, es decir si por ejemplo
para cups pone monthly y en el logrotate.conf es weekly, siempre se tomará en cuenta lo
específico del servicio, de esa forma al ser modular tiene una configuración sencilla pero muy
buena. Es importante saber que en esta ruta se ejecuta todo con lo que hay que tener cuidado
de lo que dejamos aqui.
pág. 274
De momento esto es todo, espero que os haya gustado esta magnífica herramienta
imprescindible para un administrador Linux.
REJECT — Envia un paquete de error de vuelta al sistema remoto y deja caer el paquete.
El objetivo REJECT acepta --reject-with <tipo> (donde <tipo> es el tipo de rechazo) el cual
permite devolver información más detallada con el paquete de error. El mensajeport-
unreachable es el <tipo> de error por defecto dado si no se usa otra opción. Para una lista
completa de los <tipo>s de opciones que se pueden usar, consulte la página del manual
de iptables.
Otras extensiones de objetivos, incluyendo muchas que son útiles para el enmascaramiento de
IP usando la tabla nat o con alteración de paquetes usando la tabla mangle, se puede encontrar
en la página del manual de iptables.
Opciones de listado
El comando predeterminado para listar, iptables -L, proporciona una vista muy básica de los
filtros por defecto de las cadenas actuales de la tabla. Las opciones adicionales proporcionan
más información:
-v — Muestra la salida por pantalla con detalles, como el número de paquetes y bytes que
cada cadena ha visto, el número de paquetes y bytes que cada regla ha encontrado y qué
interfaces se aplican a una regla en particular.
-x Expande los números en sus valores exactos. En un sistema ocupado, el número de
paquetes y bytes vistos por una cadena en concreto o por una regla puede estar abreviado
usando K (miles), M (millones), y G (billones) detrás del número. Esta opción fuerza a que
se muestre el número completo.
pág. 275
Esto ejecuta el script de inicio iptables, el cual ejecuta el programa /sbin/iptables-save y escribe
la configuración actual de iptables a /etc/sysconfig/iptables. El
archivo /etc/sysconfig/iptables existente es guardado como /etc/sysconfig/iptables.save.
La próxima vez que se inicie el sistema, el script de inicio de iptables volverá a aplicar las reglas
guardadas en /etc/sysconfig/iptables usando el comando /sbin/iptables-restore.
Aun cuando siempre es una buena idea probar una regla de iptables antes de confirmar los
cambios al archivo /etc/sysconfig/iptables, es posible copiar reglas iptables en este archivo
desde otra versión del sistema de este archivo. Esto proporciona una forma rápida de distribuir
conjuntos de reglas iptables a muchas máquinas.
pág. 276
stop — Si el cortafuegos está en ejecución, se descartan las reglas del cortafuegos que se
encuentran en memoria y todos los módulos iptables y ayudantes son descargados.
Si se cambia la directiva IPTABLES_SAVE_ON_STOP dentro del archivo de
configuración /etc/sysconfig/iptables-config de su valor por defecto a yes, se guardan las
reglas actuales a /etc/sysconfig/iptables y cualquier regla existente se moverá al
archivo /etc/sysconfig/iptables.save.
restart — Si el cortafuegos está en ejecución, las reglas del mismo que se encuentran en
memoria se descartan y se vuelva a iniciar el cortafuegos si está configurado
en/etc/sysconfig/iptables. La directriz restart sólo funcionará si no está cargado el módulo
del kernel ipchains.
Si la directiva IPTABLES_SAVE_ON_RESTART dentro del archivo de
configuración /etc/sysconfig/iptables-config se cambia de su valor por defecto a yes, las
reglas actuales son guardadas a /etc/sysconfig/iptables y cualquier regla existente se
moverán al archivo /etc/sysconfig/iptables.save.
status — Imprime el estado del cortafuegos una lista de todas las reglas activas al indicador
de comandos. Si no se cargan o configuran reglas del cortafuegos, también indica este
hecho.
Una lista de las reglas activas, conteniendo direcciones IP dentro de listas de reglas a
menos que el valor por defecto para IPTABLES_STATUS_NUMERIC sea cambiado
ano dentro del archivo de configuración /etc/sysconfig/iptables-config.
panic — Descarta todas las reglas del cortafuegos. La política de todas las tablas
configuradas está establecida a DROP.
save — Guarda las reglas del cortafuegos a /etc/sysconfig/iptables usando iptables-save.
Archivo de configuración de scripts de control de iptables
El comportamiento de los scripts de inicio de iptables es controlado por el archivo de
configuración /etc/sysconfig/iptables-config. A continuación se presenta una lista de las
directivas contenidas dentro de este archivo:
IPTABLES_MODULES — Especifica una lista separada por espacios de
módulos iptables adicionales a cargar cuando se activa un cortafuegos. Esto puede incluir
seguimiento de conexiones y ayudantes NAT.
IPTABLES_MODULES_UNLOAD — Limpia los módulos al iniciar o detenerse. Esta directiva
acepta los valores siguientes:
pág. 277
yes — El valor por defecto. Esta regla se debe configurar para que alcance un estado
correcto para el inicio o parada del cortafuegos.
no — Esta opción solamente debería ser configurada si hay problemas para limpiar los
módulos de filtrado de paquetes de red.
IPTABLES_SAVE_ON_STOP — Guarda las reglas del cortafuegos actuales
a /etc/sysconfig/iptables cuando se detiene el cortafuegos. Esta directiva acepta los
valores siguientes:
yes — Guarda las reglas existentes a /etc/sysconfig/iptables cuande se detiene el
cortafuegos, moviendo la versión anterior al archivo/etc/sysconfig/iptables.save.
no — El valor por defecto. No guarda las reglas existentes cuando se detiene el
cortafuegos.
IPTABLES_SAVE_ON_RESTART — Guarda las reglas actuales del cortafuegos cuando este se
reinicia. Esta directiva acepta los valores siguientes:
yes — Guarda las reglas existentes a /etc/sysconfig/iptables cuando se reinicia el
cortafuegos, moviendo la versión anterior al archivo/etc/sysconfig/iptables.save.
no — El valor por defecto. No guarda las reglas existentes cuando se reinicia el
cortafuegos.
IPTABLES_SAVE_COUNTER — Guarda y restaura todos los paquetes y contadores de bytes
en todas las cadenas y reglas. Esta directiva acepta los valores siguientes:
yes — Guarda los valores del contador.
no — El valor por defecto. No guarda los valores del contador.
IPTABLES_STATUS_NUMERIC — Muestra direcciones IP en una salida de estado en vez de
dominios y nombres de host. Esta directiva acepta los valores siguientes:
yes — El valor por defecto. Solamente devuelve direcciones IP dentro de una salida de
estado.
no — Devuelve dominios o nombres de host en la salida de estado.
SELinux
Security-Enhanced Linux o SELinux, es una arquitectura de seguridad integrada en el kernel
2.6.x usando los módulos de seguridad linux (o linux security modules, LSM). Este es un proyecto
de la Agencia de Seguridad Nacional (NSA) de los Estados Unidos y de la comunidad SELinux. La
integración de SELinux en Red Hat Enterprise Linux fue un esfuerzo conjunto entre al NSA y Red
Hat.
pág. 278
Introducción a SELinux
SELinux proporciona un sistema flexible de control de acceso obligatorio (mandatory access
control, MAC) incorporado en el kernel. Bajo el Linux estándar se utiliza el control de acceso a
discreción (discretionary access control, DAC), en el que un proceso o aplicación ejecutándose
como un usuario (UID o SUID) tiene los permisos y de ese usuario en los objetos, archivos,
zócalos y otros procesos. Al ejecutar un kernel SELinux MAC se protege al sistema de
aplicaciones maliciosas o dañadas que pueden perjudicar o destruir el sistema. SELinux define el
acceso y los derechos de transición de cada usuario, aplicación, proceso y archivo en el sistema.
SELinux gobierna la interacción de estos sujetos y objetos usando una política de seguridad que
especifica cuán estricta o indulgente una instalación de Red Hat Enterprise Linux dada debería
de ser.
En su mayor parte, SELinux es casi invisible para la mayoría de los usuarios. Solamente los
administradores de sistemas se deben de preocupar sobre lo estricto que debe ser una política a
implementar en su entorno de servidores. La política puede ser tan estricta o tan indulgente
como se requiera, y es bastante detallada. Este detalle le da al kernel SELinux un control total y
granular sobre el sistema completo.
Cuando un sujeto, tal como una aplicación, intenta acceder a un objeto tal como a un archivo, el
servidor de aplicación de políticas verifica un caché de vector de acceso (AVC), donde se
registran los permisos de objeto y del sujeto. Si no se puede tomar una decisión basado en los
datos en el AVAC, la petición continua al servidor de seguridad, el cual busca el contexto de
seguridad de la aplicación y del archivo en una matriz. Los permisos son entonces otorgados o
negados, con un mensaje deavc: denied detallado en /var/log/messages. Los sujetos y objetos
reciben su contexto de seguridad a partir de la política instalada, que también proporciona
información para llenar la matriz de seguridad del servidor.
Además de ejecutarse en un modo impositivo, SELinux puede ejecutarse en un modo permisivo,
donde el AVC es verificado y se registran los rechazos, pero SELinux no hace cumplir esta
política.
pág. 279
Por ejemplo, al ejecutar el comando cat en el archivo enforce revela un 1, para el modo
impositivo, o un 0, para el modo permisivo.
pág. 280
pág. 281
Los dos subdirectorios, strict/ y targeted/, son los directorios específicos donde se contienen los
archivos de políticas del mismo nombre (por ejemplo, strict y targeted).
Para más información sobre las políticas de SELinux y su configuración, consulte el Guía para
escribir políticas SELinux de Red Hat.
pág. 282
SSH
SSH™ (o Secure SHell) es un protocolo que facilita las comunicaciones seguras entre dos
sistemas usando una arquitectura cliente/servidor y que permite a los usuarios conectarse a un
host remotamente. A diferencia de otros protocolos de comunicación remota tales como FTP o
Telnet, SSH encripta la sesión de conexión, haciendo imposible que alguien pueda obtener
contraseñas no encriptadas.
SSH está diseñado para reemplazar los métodos más viejos y menos seguros para registrarse
remotamente en otro sistema a través de la shell de comando, tales como telnet o rsh. Un
programa relacionado, el scp, reemplaza otros programas diseñados para copiar archivos entre
hosts como rcp. Ya que estas aplicaciones antiguas no encriptan contraseñas entre el cliente y el
servidor, evite usarlas mientras le sea posible. El uso de métodos seguros para registrarse
remotamente a otros sistemas reduce los riesgos de seguridad tanto para el sistema cliente
como para el sistema remoto.
Seguridad
SSH trabaja de forma similar a como se hace con telnet. La diferencia principal es que SSH usa
técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya
de manera no legible, evitando que terceras personas puedan descubrir el usuario y contraseña
de la conexión ni lo que se escribe durante toda la sesión; aunque es posible atacar este tipo de
sistemas por medio de ataques de REPLAY y manipular así la información entre destinos.
Historia
Al principio sólo existían los r-commands, que eran los basados en el programa rlogin, el cual
funciona de una forma similar a telnet.
La primera versión del protocolo y el programa eran libres y los creó un finlandés llamado Tatu
Ylönen, pero su licencia fue cambiando y terminó apareciendo la compañía SSH
Communications Security, que lo ofrecía gratuitamente para uso doméstico y académico, pero
exigía el pago a otras empresas. En el año 1997 (dos años después de que se creara la primera
versión) se propuso como borrador en la IETF.
A principios de 1999 se empezó a escribir una versión que se convertiría en la implementación
libre por excelencia, la de OpenBSD, llamada OpenSSH.
Versiones
Existen 2 versiones de SSH, la versión 1 de SSH hace uso de muchos algoritmos de cifrado
patentados (sin embargo, algunas de estas patentes han expirado) y es vulnerable a un agujero
de seguridad que potencialmente permite a un intruso insertar datos en la corriente de
comunicación. La suite OpenSSH bajo Red Hat Enterprise Linux utiliza por defecto la versión 2 de
pág. 283
Red Hat Enterprise Linux contiene el paquete general de OpenSSH (openssh) así como también
los paquetes del servidor OpenSSH (openssh-server) y del cliente (openssh-clients). Observe que
los paquetes OpenSSH requieren el paquete OpenSSL (openssl). OpenSSL instala varias
bibliotecas criptográficas importantes, permitiendo que OpenSSH pueda proporcionar
comunicaciones encriptadas.
¿Por qué usar SSH?
Los usuario nefarios tienen a su disposición una variedad de herramientas que les permiten
interceptar y redirigir el tráfico de la red para ganar acceso al sistema. En términos generales,
estas amenazas se pueden catalogar del siguiente modo:
Intercepción de la comunicación entre dos sistemas — En este escenario, existe un tercero
en algún lugar de la red entre entidades en comunicación que hace una copia de la
información que pasa entre ellas. La parte interceptora puede interceptar y conservar la
información, o puede modificar la información y luego enviarla al recipiente al cual estaba
destinada.
pág. 284
Este ataque se puede montar a través del uso de un paquete sniffer — una utilidad de red
muy común.
Personificación de un determinado host — Con esta estrategia, un sistema interceptor
finge ser el recipiente a quien está destinado un mensaje. Si funciona la estrategia, el
sistema del usuario no se da cuenta del engaño y continúa la comunicación con el host
incorrecto.
Esto se produce con técnicas como el envenenamiento del DNS o spoofing de IP (engaño
de direcciones IP).
Ambas técnicas interceptan información potencialmente confidencial y si esta intercepción se
realiza con propósitos hostiles, el resultado puede ser catastrófico.
Si se utiliza SSH para inicios de sesión de shell remota y para copiar archivos, se pueden
disminuir estas amenazas a la seguridad notablemente. Esto es porque el cliente SSH y el
servidor usan firmas digitales para verificar su identidad. Adicionalmente, toda la comunicación
entre los sistemas cliente y servidor es encriptada. No servirán de nada los intentos de falsificar
la identidad de cualquiera de los dos lados de la comunicación ya que cada paquete está cifrado
por medio de una llave conocida sólo por el sistema local y el remoto.
pág. 285
los casos en que sea necesario realizar conexiones cada poco período de tiempo, debido a que
hay que ingresar la contraseña cada vez.
De igual manera, cuando se desean utilizar discos remotos, puede ser beneficioso (sobre todo
para los usuarios) que dichos discos sean montados automáticamente al momento de login, y
que puedan ser utilizados transparentemente por los usuarios. Con este fin fue creado el ssh-
agent.
Capa de transporte
El papel principal de la capa de transporte es facilitar una comunicación segura entre los dos
hosts durante la autenticación yla subsecuente comunicación. La capa de transporte lleva esto a
cabo manejando la encriptación y decodificación de datos y proporcionando protección de
integridad de los paquetes de datos mientras son enviados y recibidos. Además, la capa de
transporte proporciona compresión de datos, lo que acelera la transmisión de información.
Al contactar un cliente a un servidor por medio del protocolo SSH, se negocian varios puntos
importantes para que ambos sistemas puedan construir la capa de transporte correctamente.
Durante el intercambio se producen los siguientes pasos:
Intercambio de claves
Se determina el algoritmo de encriptación de la clave pública
Se determina el algoritmo de la encriptación simétrica
Se determina el algoritmo autenticación de mensajes
Se determina el algoritmo de hash que hay que usar
Durante la primera fase, el cliente y el servidor negocian qué algoritmos criptográficos se van a
usar. Las implementaciones actuales proporcionan las siguientes opciones:
Para criptografía de clave pública: RSA, Diffie-Hellman, DSA (Digital Signature Algorithm)
o Fortezza.
Para cifrado simétrico: RC2, RC4, IDEA (International Data Encryption Algorithm), DES (Data
Encryption Standard), Triple DES y AES (Advanced Encryption Standard).
Para este cifrado se utiliza la misma llave para encriptar y para desencriptar.
Con funciones hash: MD5 o de la familia SHA.
pág. 286
El servidor se identifica ante el cliente con una llave de host única durante el intercambio de
llaves. Obviamente si este cliente nunca se había comunicado antes con este determinado
servidor, la llave del servidor le resultará desconocida al cliente y no lo conectará. OpenSSH
evita este problema permitiendo que el cliente acepte la llave del host del servidor después que
el usuario es notificado y verifica la aceptación de la nueva llave del host. Para las conexiones
posteriores, la llave del host del servidor se puede verificar con la versión guardada en el cliente,
proporcionando la confianza de que el cliente se está realmente comunicando con el servidor
deseado. Si en el futuro, la llave del host ya no coincide, el usuario debe eliminar la versión
guardada antes de que una conexión pueda ocurrir.
SSH fue ideado para funcionar con casi cualquier tipo de algoritmo de clave pública o formato
de codificación. Después del intercambio de claves inicial se crea un valor hash usado para el
intercambio y un valor compartido secreto, los dos sistemas empiezan inmediatamente a
calcular claves y algoritmos nuevos para proteger la autenticación y los datos que se enviarán a
través de la conexión en el futuro.
Después que una cierta cantidad de datos haya sido transmitida con un determinado algoritmo
y clave (la cantidad exacta depende de la implementación de SSH), ocurre otro intercambio de
claves, el cual genera otro conjunto de valores de hash y un nuevo valor secreto compartido. De
esta manera aunque un agresor lograse determinar los valores de hash y de secreto compartido,
esta información sólo será válida por un período de tiempo limitado.
Autenticación
Cuando la capa de transporte haya construido un túnel seguro para transmitir información entre
los dos sistemas, el servidor le dirá al cliente de los diferentes métodos de autenticación
soportados, tales como el uso de firmas privadas codificadas con claves o la inserción de una
contraseña. El cliente entonces intentará autenticarse ante el servidor mediante el uso de
cualquiera de los métodos soportados.
Los servidores y clientes SSH se pueden configurar para que permitan varios tipos de
autenticación, lo cual le concede a cada lado la cantidad óptima de control. Luego el servidor
podrá decidir qué métodos de encriptación soportará basado en su pauta de seguridad, y el
cliente puede elegir el orden en que intentará utilizar los métodos de autenticación entre las
opciones a disposición. Gracias a la naturaleza segura de la capa de transporte de SSH, hasta
métodos de autenticación que parecen inseguros, como la autenticación basada en contraseñas,
son en realidad seguros para usar.
Cuando se conecta a un servidor ssh con su cliente ssh , se compara la clave pública del servidor
pág. 287
a las claves almacenadas en un archivo en el equipo cliente , esta conexión se logra mediante el
archivo known_hosts.
Canales
Luego de una autenticación exitosa sobre la capa de transporte SSH, se abren
múltiples canales a través de la técnica llamada multiplexar. Cada uno de estos canales manejan
la conexión para diferentes sesiones de terminal y para sesiones de reenvió X11.
Ambos clientes y servidores pueden crear un canal nuevo. Luego se le asigna un número
diferente a cada canal en cada punta de la conexión. Cuando el cliente intenta abrir un nuevo
canal, los clientes envían el número del canal junto con la petición. Esta información es
almacenada por el servidor y usada para dirigir la comunicación a ese canal. Esto es hecho para
que diferentes tipos de sesión no afecten una a la otra y así cuando una sesión termine, su canal
pueda ser cerrado sin interrumpir la conexión SSH primaria.
Los canales también soportan el control de flujo, el cual les permite enviar y recibir datos
ordenadamente. De esta manera, los datos no se envían a través del canal sino hasta que el host
haya recibido un mensaje avisando que el canal está abierto y puede recibirlos.
El cliente y el servidor negocian las características de cada canal automáticamente, dependiendo
del tipo de servicio que el cliente solicita y la forma en que el usuario está conectado a la red.
Esto otorga una gran flexibilidad en el manejo de diferentes tipos de conexiones remotas sin
tener que cambiar la infraestructura básica del protocolo.
Instalacion y Configuracion:
Lo primero es instalar el servicio de ssh, esto lo realizaremos con el siguiente comando:
# yum –y install openssh-server openssh-client
Terminara una vez que nos mande la pantalla con el mensaje de instalación complete
pág. 288
Una vez realizado esto realizaremos una conexión de prueba, para esto necesitaremos
descargar un cliente de ssh de Windows, para lo cual nos dirigiremos a google y descargaremos
la aplicación llamada putty
Una vez descargado lo ejecutaremos:
pág. 289
Pondremos la ip de nuestro servidor:
Le daremos en open y cuando la conexión sea por primera vez nos mandara una alerta de
seguridad, y le daremos que “Si”
pág. 290
Una vez realizado esto, estaremos en la consola como si estuviéramos en la terminal física,
pudiendo realizar cualquier tarea desde el cliente.
Con exit podremos cerrar la sesión cuando ya no sea necesaria.
pág. 291
FTP
El Protocolo de transferencia de archivos (FTP) es uno de los protocolos más viejos y populares
que se encuentran en la Internet hoy día. Su objetivo es el de transmitir archivos exitosamente
entre máquinas en una red sin que el usuario tenga que iniciar una sesión en el host remoto o
que requiera tener conocimientos sobre cómo utilizar el sistema remoto. FTP permite a los
usuarios acceder a archivos en sistemas remotos usando un conjunto de comandos estándar
muy simples.
Este capítulo describe los elementos básicos de este protocolo, así como también las opciones
de configuración para el servidor FTP primario que se entrega con Red Hat Enterprise
Linux, vsftpd.
pág. 292
pág. 293
Servidores FTP
Red Hat Enterprise Linux se entrega con dos servidores FTP diferentes:
Acelerador de Contenidos Red Hat — Un servidor Web basado en el kernel que ofrece un
servidor web y servicios FTP de alto rendimiento. Puesto que la velocidad es su objetivo
principal de diseño, su funcionalidad es limitada y solamente se ejecuta como FTP
anónimo.
vsftpd — un demonio FTP rápido y seguro, preferido para Red Hat Enterprise Linux. El
resto de este capítulo se enfoca en vsftpd.
Vsftpd
El demonio FTP vsftpd (o Very Secure FTP Daemon) está diseñado desde la base para ser rápido,
estable y lo más importante, seguro. Su habilidad para manejar grandes números de conexiones
de forma eficiente y segura es lo que hace que vsftpd sea el único FTP independiente distribuido
con Red Hat Enterprise Linux.
El modelo de seguridad utilizado por vsftpd tiene tres aspectos principales:
Clara separación de procesos privilegiados y sin privilegios — Procesos separados manejan
tareas diferentes y cada uno de estos procesos se ejecuta con los privilegios mínimos
requeridos para la tarea.
Las tareas que requieren altos privilegios son manejadas por procesos con los mínimos
privilegios necesarios — Influenciando las compatibilidades encontradas en la biblioteca
libcap, las tareas que usualmente requieren privilegios de súper usuario se pueden
ejecutar de forma más segura desde un proceso menos privilegiado.
La mayoría de los procesos se ejecutan enjaulados en un ambiente chroot — Siempre que
sea posible, se cambia la raíz de los procesos al directorio compartido; este directorio se
considera luego como la jaula chroot. Por ejemplo, si el directorio /var/ftp/ es el directorio
compartido principal, vsftpd reasigna /var/ftp/ al nuevo directorio raíz, conocido como /.
Esto previene actividades maliciosas de cualquier hacker potencial en algún directorio que
no estén por debajo del nuevo directorio root.
El uso de estas prácticas de seguridad tiene el efecto siguiente en cómo vsftpd trata con las
peticiones:
El proceso padre se ejecuta con el mínimo de privilegios requerido — El proceso padre
calcula dinámicamente el nivel de privilegios requerido para minimizar el nivel de riesgos.
Los procesos hijo manejan la interacción directa con los clientes FTP y se ejecutan casi sin
ningún privilegio.
Todas las operaciones que requieren altos privilegios son manejadas por un pequeño
proceso padre — Similar a Servidor Apache HTTP, vsftpd lanza procesos hijos sin privilegios
pág. 294
para manejar las conexiones entrantes. Esto permite al proceso padre privilegiado, ser tan
pequeño como sea posible y manejar relativamente pocas tareas.
El proceso padre no confía en ninguna de las peticiones desde procesos hijos sin
privilegios — Las comunicaciones con procesos hijos se reciben sobre un socket y la validez
de cualquier información desde un proceso hijo es verificada antes de proceder.
La mayor parte de la interacción con clientes FTP la manejan procesos hijo sin privilegios
en una jaula chroot. — Debido a que estos procesos hijo no tienen privilegios y solamente
tienen acceso al directorio que está siendo compartido, cualquier proceso fallido
solamente permitirá al atacante acceder a los archivos compartidos.
Archivos instalados con vsftpd
El RPM vsftpd instala el demonio (/usr/sbin/vsftpd), su archivo de configuración y otros archivos
relacionados, así como también directorios FTP en el sistema. La siguiente es una lista de los
archivos y directorios considerados más a menudo cuando se configura vsftpd:
/etc/rc.d/init.d/vsftpd — El script de inicialización (initscript) utilizado por el
comando /sbin/service para iniciar, detener o volver a cargar vsftpd.
/etc/pam.d/vsftpd — El archivo de configuración de los Pluggable Authentication Modules
(PAM) para vsftpd. Este archivo define los requerimientos que debe cumplir un usuario
para conectarse a un servidor FTP.
/etc/vsftpd/vsftpd.conf — El archivo de configuración para vsftpd.
/etc/vsftpd.ftpusers — Una lista de los usuarios que no tienen permitido conectarse
a vsftpd. Por defecto esta lista incluye a los usuarios root, bin y daemon, entre otros.
/etc/vsftpd.user_list — Este archivo se puede configurar para negar o permitir el acceso a
los usuarios listados, dependiendo de si la directriz userlist_deny está configurada
a YES (por defecto) o a NO en /etc/vsftpd/vsftpd.conf. Si se
utiliza /etc/vsftpd.user_list para permitir acceso a los usuarios, los nombres de usuarios
listados no deben aparecer en /etc/vsftpd.ftpusers.
El directorio /var/ftp/ — El directorio que contiene los archivos servidos por vsftpd.
También contiene el directorio /var/ftp/pub/ para los usuarios anónimos. Ambos
directorios están disponibles para la lectura de todos, pero sólo el superusuario o root
puede escribir en el.
pág. 295
La opción restart es un atajo para detener y volver a iniciar vsftpd. Esta es la forma más efectiva
para que los cambios de configuración tomen efecto luego de modificar el archivo de
configuración para vsftpd.
Para reiniciar el servidor, escriba como root:
Por defecto, el servicio vsftpd no se inicia automáticamente al momento del arranque. Para
configurar el servicio vsftpd para que se inicie al momento del arranque, utilice una utilidad
initscript, tal como /sbin/chkconfig, /sbin/ntsysv o el programa Herramienta de configuración de
servicios.
pág. 296
Posterior a esto, nos dirigimos al archivo de configuración de ftp que está en la ruta
# vi /etc/vsftpd/vsftpd.conf
Verificaremos en el archivo que este activa la regla de permitir usuarios anónimos
anonymous_enable=YES
Para activarlo solo le quitamos el símbolo “#” para activarlo
Y la regla de enjaulamiento de usuarios locales:
chroot_local_user=YES
De igual manera lo activamos de ser necesario
Después, la regla de habilitar usuarios locales:
Local_enable=YES
Y por último la regla de escritura en server usando FTP:
write_enable=YES
Y guardamos los cambios.
pág. 297
Reiniciamos el servicio de FTP
# service vsftpd restart
pág. 298
Una vez realizado esto modificaremos el archivo de host para indicar la dirección de nuestro
servidor ftp
# vi /etc/hosts
Ejecutaremos el siguiente comando para iniciar el servicio en todos los niveles
# chkconfig vsftpd on
Una vez realizado esto agregaremos la ip a las tablas para establecer los puertos de conexión
con los siguientes comandos:
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 30300:30309 -j ACCEPT
Guadamos los cambios en las tablas:
# service iptables save
Reiniciamos el servicio:
#service iptables restart
Otro paso importante es verificar que la carpeta local no está lista para ser validad por ftp:
Esto lo revisaremos con el siguiente comando
# getsebool –a | grep ftp
Esto nos desplegara una lista en la cual podremos ver que la opción ftp_home_dir estará en off,
pág. 299
esto quiere decir que cualquier usuario anónimo o asignado no podrá navegar en la carpeta
para ftp, por tal la activaremos con el siguiente comando:
# setsebool –P ftp_home_dir on
Esto podrá tardar algunos minutos, una vez realizado esto podremos verificar con el comando
anterior y nos deberá mostrar algo parecido a esto:
Ahora realizamos una prueba de conexión por FTP:
Este lo realizaremos utilizando un usuario anónimo por ejemplo:
USR: ftp
Passwd: ftp
Esto lo realizaremos desde el mismo servidor con el comando siguiente:
# ftp dirección del server
Nos deberá pedir el usuario y el password y colocaremos los antes mencionados:
pág. 300
pág. 301
Otra manera de verificar que hemos conseguido el acceso es hacerlo desde el navegador de
nuestro equipo de la siguiente forma:
Abriremos el navegador de internet de nuestro equipo y pondremos en la url la dirección de la
siguiente forma:
ftp://direccion del server
Y al presionar enter podremos ver el contenido antes mencionado
pág. 302
Ahora que ya hemos logrado la conexión con un usuario anónimos, realizaremos la
configuración para realizar una conexión más segura con un usuario asignado y que pida
autenticación, para esto procedemos a realizar lo siguiente:
Nos cambiamos a la carpeta de configuración de ftp y ahí crearemos un usuario
# cd /etc/vsftpd
# adduser adminftp
# passwd adminftp
Después podremos realizar una prueba con autenticación de la misma manera que el el caso
anterior por línea de comando
pág. 303
Ponemos el password asignado
Y si listamos veremos que está vacía a diferencia de la prueba anterior
pág. 304
Para verificar la conexión por ftp con autenticación podremos realizarlo de manera gráfica
también de la siguiente forma:
En la Url ahora podremos validarnos pero de la siguiente manera
Validaremos con los datos que tenemos
pág. 305
Lo cual nos dará acceso y veremos que esta vacío pues en esta no tenemos archivo alguno.
De esta manera ya podríamos utilizar clientes ftp para poder subir o descargar archivos al
servidor, como FileZilla y muchos otros que están en el mercado.
Para subir o descargar archivos del servidor podríamos realizar una conexión desde el
explorador de Windows:
pág. 306
pág. 307
Y de esta forma esta implementado un servidor FTP.
Samba
Samba es una implementación de código abierto del protocolo Server Message Block (SMB).
Permite la interconexión de redes Microsoft Windows®, Linux, UNIX y otros sistemas operativos
juntos, permitiendo el acceso a archivos basados en Windows y compartir impresoras. El uso de
Samba de SMB lo hace parecer como un servidor Windows a clientes Windows.
Introducción a Samba
El tercer lanzamiento principal de Samba, versión 3.0.0, introduce varias mejoras con respecto a
las versiones previas, incluyendo:
La habilidad para unirse a un dominio Active Directory a través de LDAP y Kerberos
Soporte incorporado de Unicode para la internacionalización
Soporte para las conexiones de clientes Microsoft Windows XP Professional a servidores Samba
sin la necesidad de hacer hacking del registro local
Dos documentos desarrollados por el equipo de desarrollo Samba.org el cual incluye un manual
de referencia de más de 400 páginas y un manual de implementación e integración de más de
300 páginas.
pág. 308
Características de Samba
Samba es una aplicación de servidor poderosa y versátil. Hasta los administradores bien
empapados deben conocer sus habilidades y limitaciones antes de intentar una instalación y
configuración.
Lo que Samba puede hacer:
Sirve árboles de directorios e impresoras a clientes Linux, UNIX y Windows
Asiste en la navegación de la red (con o sin NetBIOS)
Autentifica las conexiones a dominios Windows
Proporciona resolución de nombres de Windows Internet Name Service (WINS)
Actúa como un Controlador de Dominio Primario (Primary Domain Controller, PDC) estilo
Windows NT®
Actúa como un Backup Domain Controller (BDC) para un PDC basado en Samba
Actúa como un miembro servidor de dominio de Active Directory
Une un Windows NT/2000/2003 PDC
Lo que Samba no puede hacer:
Actúa como un BDC para un Windows PDC (y viceversa)
Actúa como un controlador de dominio de Active Directory
Demonios Samba y Servicios relacionados
Lo siguientes es una breve introducción a los demonios individuales y servicios de Samba, así
como también detalles sobre cómo arrancarlos y detenerlos.
Descripción general de los demonios
Samba está compuesto por tres demonios (smbd, nmbd y winbindd). Dos servicios
(smb y windbind) controlan los demonios son detenidos arrancados y otras funcionalidades
relacionadas a servicios. Cada demonio se lista en detalle, así como también qué servicio
específico tiene control sobre él.
El demonio smbd
El demonio de servidor smbd suministra servicios para compartir archivos e impresión a clientes
Windows. Además, es responsable por la autenticación de usuarios, el bloqueo de recursos y
compartir datos a través del protocolo SMB. Los puertos predeterminados en los cuales el
servidor escucha por tráfico SMB, son los puertos TCP 139 y 445.
El demonio smbd es controlado por el servicio smb.
pág. 309
El demonio nmbd
El demonio del servidor nmbd entiende y responde a las peticiones de servicio de nombres
NetBIOS tales como aquellas producidas por SMB/CIFS en sistemas basados en Windows. Estos
sistemas incluyen clientes 95/98/ME, Windows NT, Windows 2000, Windows XP y LanManager.
También participa en los protocolos de navegación que forman la vista Entorno de red de
Windows. El puerto predeterminado en el que el servidor escucha por tráfico NMB es el puerto
UDP 137.
El demonio nmbd es controlado por el servicio smb.
Para detener el servidor, escriba el comando siguiente en un intérprete de comandos mientras
está conectado como root:
La opción restart es una forma fácil de detener y luego arrancar Samba. Esta es la forma más
confiable de hacer que los cambios tomen lugar después de editar el archivo de configuración
Samba. Observe que la opción de reinicio arranca el demonio aún si no estaba ejecutándose
originalmente.
Para reiniciar el servidor, escriba el comando siguiente en un intérprete de comandos mientras
está conectado como usuario root:
La opción condrestart (reinicio condicional) solamente arranca smb con la condición de que se
esté ejecutando actualmente. Esta opción es útil para los scripts, debido a que no arranca el
demonio si este no se está ejecutando.
Para reiniciar condicionalmente el servidor, desde el indicador de comandos, escriba el
comando siguiente como root:
pág. 310
Una recarga manual del archivo smb.conf puede ser útil en caso de que una recarga automática
del servicio smb falle. Para asegurarse de que el archivo de configuración del servidor Samba es
recargado sin reiniciar el servicio, escriba el comando siguiente como usuario root:
Por defecto, el servicio smb no se inicia automáticamente al momento del arranque. Para
configurar Samba para que inicie al momento del arranque, utilice una utilidad de initscript tal
como /sbin/chkconfig, /sbin/ntsysv o el programa Herramienta de configuración de servicios.
Servidor independiente
Un servidor independiente puede ser un servidor de un grupo de trabajo o un miembro de
entorno de grupo de trabajo. Un servidor independiente no es un controlador de dominio y no
participa en un dominio de ninguna manera. Los ejemplos siguientes incluyen varias
configuraciones de seguridad a nivel de recursos compartidos anónimas y una configuración de
seguridad a nivel de usuario.
pág. 311
security = share
[data]
comment = Documentation Samba Server
path = /export
read only = Yes
guest only = Yes
Anónimo Lectura/Escritura
El siguiente archivo smb.conf muestra una configuración de muestra necesaria para
implementar compartir recursos de archivos de lectura/escritura de forma anónima. Para
activar compartir archivos de lectura/escritura anónimos, configure la directriz read only a no.
Las directrices force user y force group también se añaden para reforzar la propiedad de
cualquier archivo nuevo especificado en el recurso compartido.
[global]
workgroup = DOCS
netbios name = DOCS_SRV
security = share
[data]
comment = Data
path = /export
force user = docsbot
force group = users
read only = No
guest ok = Yes
Servidor de impresión anónimo
El siguiente archivo smb.conf muestra una configuración de muestra necesaria para
implementar un servidor de impresión anónimo. Configurando browseable a no como se
muestra, no lista la impresora en el Entorno de red. Aunque está oculto para propósitos de
navegación, se puede configurar la impresora explícitamente. Al conectar DOCS_SRV usando
NetBIOS, el cliente puede tener acceso a la impresora si el cliente también es parte del grupo de
trabajo DOCS. También se asume que el cliente tiene el controlador de impresora correcto, pues
la directriz de use client driver está configurada a Yes. En este caso, el servidor Samba no tiene
responsabilidad de compartir los controladores de impresora con el cliente
pág. 312
[global]
workgroup = DOCS
netbios name = DOCS_SRV
security = share
printcap name = cups
disable spools= Yes
show add printer wizard = No
printing = cups
[printers]
comment = All Printers
path = /var/spool/samba
guest ok = Yes
printable = Yes
use client driver = Yes
browseable = Yes
Archivo seguro de lectura/escritura y servidor de impresión.
El archivo siguiente smb.conf muestra una configuración de ejemplo necesaria para
implementar un servidor de impresión seguro de lectura/escritura. Configurando la
directriz security a user obliga a Samba a autenticar las conexiones de clientes. Observe que el
recurso compartido [homes] no tiene una directriz force user o force group como si lo tiene el
recurso [public]. El recurso compartido [homes] utiliza los detalles del usuario autenticado para
cualquier archivo al contrario deforce user y force group en [public].
[global]
workgroup = DOCS
netbios name = DOCS_SRV
security = user
printcap name = cups
disable spools = Yes
show add printer wizard = No
printing = cups
[homes]
comment = Home Directories
pág. 313
valid users = %S
read only = No
browseable = No
[public]
comment = Data
path = /export
force user = docsbot
force group = users
guest ok = Yes
[printers]
comment = All Printers
path = /var/spool/samba
printer admin = john, ed, @admins
create mask = 0600
guest ok = Yes
printable = Yes
use client driver = Yes
browseable = Yes
Nota: Recuerde que los comando vitales para controlar impresoras desde línea de comando
son:
# lp –d impresora documento (para mandar a imprimir)
/etc/cups/printers.conf
Y cuando se hacen cambios en las propiedades de las impresoras se guardan los cambios el el
archivo .lpoptions que se encuentra en el home de cada usuario.
pág. 314
pág. 315
Directory. Para crear un tíquet administrativo Kerberos, escriba el comando siguiente como root
en el servidor miembro:
root# kinit administrator@EXAMPLE.COM
El comando kinit es un script de inicialización que hace referencia a la cuenta administrativa del
Active Directory y el reino Kerberos. Puesto que Active Directory requiere de los tíquets
Kerberos, kinit obtiene y coloca en caché los tíquets de Kerberos para la autenticación
cliente/servidor.
Para unir un servidor Active Directory (windows1.example.com), escriba el comando siguiente
como root en el servidor miembro:
root# net ads join -S windows1.example.com -U administrator%password
Puesto que la máquina windows1 se encontró automáticamente en el reino Kerberos
correspondiente (el comando kinit fue exitoso), el comando net se conecta al servidor Active
Directory usando su cuenta administrativa y contraseña requerida. Esto crea la cuenta de la
máquina en el Active Directory y otorga los permisos para que el servidor miembro Samba se
una al dominio.
[homes]
comment = Home Directories
valid users = %S
read only = No
browseable = No
[public]
pág. 316
comment = Data
path = /export
force user = docsbot
force group = users
guest ok = Yes
Tener un servidor miembro Samba puede ser útil en muchas situaciones. Hay veces en donde el
servidor Samba puede tener otros usos además de compartir archivos e impresoras. Puede ser
útil hacer Samba un servidor miembro de dominio en casos en los que se requiere utilizar
aplicaciones puramente Linux en el entorno del dominio. A los administradores les gusta llevar
un seguimiento de todas las máquinas en el dominio, aún si no están basadas en Windows. En el
caso de que el hardware del servidor basado Windows esté descontinuado, es fácil modificar el
archivo smb.conf para convertir el servidor a un PDC basado en Samba. Si los servidores basados
en Windows NT son actualizados a Windows 2000/2003, es fácil modificar el
archivo smb.conf para incorporar el cambio de infraestructura a un Active Directory si se
necesita.
Observe que la opción -S, que especifica el nombre de host para el servidor de dominio, no
necesita especificarse en el comando net rpc join. Samba utiliza el nombre de host especificado
por la directriz en el archivo smb.conf en vez de este especificarlo explícitamente.
Domain Controller
Un controlador de dominio en Windows NT es similar funcionalmente a un servidor NIS, Servicio
de Información de Red (Network Information Service), en un entorno Linux. Los controladores
de dominio y los servidores NIS ambos hospedan bases de datos de información sobre
usuarios/grupos así como también servicios relacionados. Los controladores de dominio son
utilizados principalmente por seguridad, incluyendo la autenticación de usuarios accediendo a
recursos del dominio. El servicio que mantiene la integridad de la base de datos de
usuarios/grupos se llama Administrador de Cuentas de Seguridad (Security Account Manager,
SAM). La base de datos SAM es almacenada de forma diferente entre sistemas Windows y
sistemas Linux basados en Samba, por lo tanto la replicación SAM no se puede lograr y las
plataformas no se pueden mezclar en un entorno PDC/BDC.
En un ambiente Samba, solamente pueden existir un PDC y cero o más BDCs.
pág. 317
En smb.conf, la directiva security = user que configura la seguridad a nivel del usuarios es:
[GLOBAL]
...
security = user
...
pág. 318
[GLOBAL]
...
security = share
...
Modo de seguridad de dominio (seguridad a nivel del usuario)
En un modo de seguridad de dominio, el servidor Samba tiene una cuenta de máquina (cuenta
confiable de seguridad del dominio) y hace que todas las solicitudes de autenticación se pasen a
través de los controladores de dominio. El servidor Samba se convierte en un servidor miembro
de dominio usando las directrices siguientes en smb.conf:
[GLOBAL]
...
security = domain
workgroup = MARKETING
...
pág. 319
[GLOBAL]
...
security = ADS
realm = EXAMPLE.COM
password server = kerberos.example.com
...
pág. 320
Texto plano
Los motores de texto plano son simplemente motores del tipo /etc/passwd. Con un motor de
texto plano, todos los nombres de usuarios y contraseñas son enviados sin encriptar entre el
cliente y el servidor Samba. Este método es muy inseguro y no se recomienda su uso de ninguna
manera. Es posible que diferentes clientes Windows conectándose al servidor Samba con
contraseñas en texto plano no puedan soportar este método de autenticación.
smbpasswd
Un motor popular utilizado en los paquetes previos de Samba, el motor smbpasswd, utiliza un
formato de texto ASCII que incluye el MS Windows LanMan y la cuenta NT e información
encriptada de contraseñas. Al motor smbpasswd le falta el almacenamiento de los controles
extendidos NT/2000/2003 SAM. No se recomienda el motor smbpasswd porque no escala bien
ni guarda información de Windows, tal como RIDs para grupos basados en NT. El
motor tdbsam resuelve estos problemas para el uso en una base de datos más pequeña (250
usuarios), pero no es una solución de clase empresarial.
ldapsam_compat
El motor ldapsam_compat permite el soporte continuo de OpenLDAP para ser utilizado con las
versiones actualizadas de Samba. Esta opción es ideal para la migración, pero no se requiere.
Eventualmente se descontinuará esta herramienta.
Nuevos motores
tdbsam
El motor tdbsam proporciona un motor de base de datos ideal para los servidores locales, para
servidores que no necesitan una replicación de bases de datos incorporada y para servidores
que no requieren la escalabilidad o complejidad de LDAP. El motor tdbsam incluye toda la
información de bases de datos de smbpasswd así como también la información SAM
anteriormente excluida. La inclusión de los datos extendidos SAM permite a Samba
implementar la misma cuenta y controles de acceso a sistema como se ve en los sistemas
basados en Windows NT/2000/2003.
Se recomienda el motor tdbsam para no más de 250 usuarios. Las organizaciones más grandes
deberían optar por la integración de Active Directory o LDAP debido a la estabilidad y a posibles
consideraciones relacionadas a la infraestructura.
pág. 321
ldapsam
El motor ldapsam proporciona un método óptimo de instalación de cuentas distribuídas para
Samba. LDAP es óptimo por su habilidad de replicar su base de datos a cualquier número de
servidores usando el demonio de OpenLDAP slurpd. Las bases de datos LDAP son ligeras y
escalables, perfectas para la mayoría de las organizaciones, especialmente grandes
corporaciones. LDAP es definitivamente "la tendencia futurística" con respecto a Samba.
Constantemente se añaden mejoras de LDAP en Samba tales como para facilitar la instalación o
para resolver problemas de configuración.
mysqlsam
mysqlsam utiliza un motor de base de datos basado en MySQL. Esto es muy útil para los sitios
que ya tienen implementado MySQL.
xmlsam
El motor xmlsam utiliza una cuenta y contraseña de datos almacenadas en un archivo de
formato XML. Este método puede ser útil para la migración de diferentes motores de bases de
datos o respaldos.
Navegación de red con Samba
El explorar la red es un concepto que permite a los servidores Windows y Samba aparecer en
el Entorno de red de Windows. Dentro del Entorno de red, los iconos son representados como
servidores y si se abren, se mostrarán los recursos compartidos disponibles.
Las capacidades de explorar la red requieren NetBIOS sobre TCP/IP. La interconexión basada en
NetBIOS utiliza difusión de mensajes (UDP) para lograr la administración de exploración de
listas. Sin NetBIOS y WINS como los métodos principales para la resolución TCP/IP de nombres
de host, se deben utilizar otros métodos tales como archivos estáticos (/etc/hosts) o DNS.
Un explorador maestro de dominios compagina las listas de exploración desde los navegadores
maestros locales en todas las subredes para que se pueda realizar la navegación entre grupos de
trabajo y subredes. Preferiblemente, el explorador maestro de dominios debería ser el
explorador maestro local para su propia subred.
pág. 322
Solamente puede existir un explorador maestro de dominios por nombre de grupo de trabajo.
He aquí un ejemplo del archivosmb.conf en el cual el servidor Samba es un explorador maestro
de dominios:
[global]
domain master = Yes
local master = Yes
preferred master = Yes
os level = 35
Luego, se muestra un ejemplo del archivo smb.conf en el cual el servidor Samba es un
explorador maestro local:
[global]
domain master = no
local master = Yes
preferred master = Yes
os level = 35
La directriz os level opera como un sistema de prioridades para exploradores maestros en una
subred. Configurando diferentes valores se asegura de que los exploradores maestros no entren
en conflicto por la autoridad.
Hay ocasiones en que una máquina Windows NT en la subred puede ser el explorador maestro
local. Lo siguiente es una configuración de ejemplo smb.conf en la cual el servidor Samba no
está sirviendo ninguna capacidad como explorador.
[global]
domain master = no
local master = no
preferred master = no
os level = 0
Navegaciòn de Dominios
Por defecto, un PDC de Windows NT para un dominio es también el explorador maestro de
dominio para ese dominio. Se debe configurar un servidor Samba como un servidor maestro de
dominio en este tipo de situación. La exploración de redes puede fallar si el servidor Samba está
ejecutando WINS junto con otros controladores de dominio en operación.
pág. 323
Para las subredes que no incluyen el PDC de Windows NT, se puede implementar un servidor
Samba como un explorador maestro local. Configurando smb.conf para un explorador maestro
local (o ningún tipo de navegación) en un entorno de controlador de dominio es lo mismo que la
configuración de grupos de trabajo.
[global]
wins support = Yes
Instalación y configuración:
Lo primero que hay que hacer es instalar los paquetes necesarios para hacer funcionar samba
esto lo conseguimos ejecutando el siguiente comando:
pág. 324
Una vez que está instalado hay que habilitar las tablas para abrir los puertos con las siguientes
instrucciones:
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 135:139 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m udp -p udp --dport 135:139 -j ACCEPT
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
Después procedemos a salvar los cambios de las tablas con el siguiente comando:
# service iptables save
Y reiniciamos el servicio:
# servce iptables restart
# cd /etc/samba/smb.conf
pág. 325
Una vez hecho esto, entramos al archivo y borramos todo el contenido que tiene y anexamos las
siguientes líneas:
[global]
workgroup = WORKGROUP (define un grupo de trabajo)
secure = share (define la seguridad global)
map to guest = bad user (define el alojamiento de los usuarios)
[Publico]
path = /home/Publico (Directorio donde se alojara la carpeta)
browseable = yes (se define que va a ser buscable)
writable = yes (se define que va a ser modificable)
guest ok = yes (define que permite cualquier usuario)
read only = no (se define que es de solo lectura)
pág. 326
Después creamos la carpeta que acabamos de configurar:
# mkdir /home/Publico
Después le damos todos los permisos a la carpeta
Tenga cuidado de poner las diagonales invertidas:
pág. 327
Acceso a la carpeta y debe estar vacía, pero si creo un documento se debe de ver reflejado en
Linux de manera inmediata.
De esta manera ya tenemos una carpeta compartida de manera pública, lo siguiente será
configurar una privada, es decir que nos pida autenticación:
Para esto agregaremos las configuraciones correspondientes en el archivo de configuración de
samba.
pág. 328
# vi /etc/samba/smb.conf
Agregaremos los parámetros siguientes para la conexión de manera privada:
[Privado]
path = /home/Privado
browseable = yes
writable = yes
guest ok = no
read only = no
valid users = @GrupoSamba (Usuarios que serán validos, solo los que estén
dentro del grupo Samba)
Este debe quedar de la siguiente manera:
Ahora procedemos a realizar el alta de los usuarios validos:
# useradd UsuarioSAMBA
Creamos el grupo para samba
# groupadd GrupoSamba
Agregamos al usuario al grupo
pág. 329
# smbpasswd –a UsuarioSAMBA
Una vez realizado esto, procedemos a crear la carpeta privada que definimos en la configuración
de samba
# mkdir /home/Privado
Le damos permisos de usuario propietario y de grupo propietario
Reiniciamos el servicio:
pág. 330
Pulsamos en el botón aceptar
Y podremos ver la carpeta compartida, pero si damos click en esta:
pág. 331
Nos pedirá una validación, la cual la vamos a realizar con el usuario que dimos de alta:
Y de esta manera podremos ingresar al recurso
pág. 332
Creamos un archivo
Y lo verificamos en el server con Linux:
De esta manera tendremos un recurso privado funcionando, con samba.
pág. 333
CONCLUSIONES
Hoy en día los sistemas operativo sean hecho parte importante en nuestra vida como también
hay una gran diversidad de sistemas operativos hoy en día como Windows, Apple, y Linux es un
sistema operativo muy popular es propiamente el núcleo de un sistema operativo es decir el
conjunto de programas que controla los aspectos más básicos del funcionamiento pero Linux
tiene una amplia distribución de sistemas operativos como centOS, Fedora, Debian, Mandriva
entre otros más, pero sin el sistema operativo de la computadora solo sería un más que un
montón de metal pero con el sistema operativo él tiene una responsabilidad se asegura de que
los programas y usuarios que estén funcionando al mismo tiempo no interfieran entre ellos
tambien conocimos su historia como fue que surgió quien es mejor sistema operativo Linux y
sus distribuciones como es la estructura de Linux con ella permitir al software conocer la
ubicación de directorios y archivos instalados pero con lo comandos la terminal es la interfaz
gráfica que permite que el usuario se comunique con el kernel de Linux se pude entrar de modo
gráfico hay se puede ver los directorios crear cambiar archivos siendo el superusuario (root ) o
un usuario normal o tambien crear nuevos usuarios o instalar software que es necesario utiliza
repositorios tambien para intalar se puede utilizar el comando yum
pág. 334
CIBERGRAFIA
http://www.authorstream.com/Presentation/alandramirez-1854509-centos/
http://www.centosni.net/comandos-basicos-en-gnulinux-centos/
http://www.fing.edu.uy/inco/cursos/sistoper/recursosLaboratorio/tutorial0.pdf
http://www.debian.org/
http://asorufps.wikispaces.com/CENTOS
http://www.debian.org/doc/manuals/project-history/ch-intro.es.html
http://www.debian.org/doc/manuals/project-history/ch-detailed.es.html
pág. 335