RH033-4 Browsing the filesystem

Linux File Hierarchy

El sistema operativo, así como los datos de usuario, configuraciones del sistema y demás datos se almacenan siguiendo una clasificación denominada Linux File Hierarchy. En este documento se describe cuales son los directorios que debe tener el sistema y qué contenido tiene cada uno. De esta forma todos los desarroladores pueden seguir un mismo método para ubicar el contenido de us software.

Hay que tener en cuenta los siguientes puntos:

  • Ficheros y directorios están organizados en un arbol invertido, cuyo punto de partida es la raiz ( root / )
  • Los directorios se separan con la barra invertida ( forward slash ). Ej: /var/lib/
  • Los nombres son case-sensitive
  • Cada shell o proceso tienen un directorio donde se ejecutan
  • Directorios: con un punto se refiere al directorio actual ( cd . ) y con dos puntos al directorio padre ( cd .. )
  • Los ficheros o  directorios que tengan un punto delante del nombre, son ficheros ocultos
  • Nombres de fichero hasta 255 caracteres
  • Todos los caracteres son válidos excepto la barra invertida ( / )
  • Referencias a nombres de fichero con espacios o caracteres reservados por la shell se pueden hacer usando comillas o escapando los caracteres con la barra ( \ ). Ej: cat El\ Fichero\ Con\ Espacios o cat “El Fichero Con Espacios”.

Algunos directorios importantes :

  • /root : directorio del usuario root, separado del resto
  • /home/username : Directorios desde /home para la ubicación de los directorios de  usuario. El simbolo ‘~‘ es lo mismo que /home/username.
  • /bin , /usr/bin , /usr/local/bin : binarios de usuarios
  • /sbin, /usr/sbin, /usr/local/sbin : binarios de root
  • /media, /mnt : montaje de dispositivos. /media montaje automático, /mnt montaje manual
  • /etc : configuraciones de aplicaciones
  • /tmp: ficheros temporales
  • /boot : ficheros de arranque del sistema : kernel, initrd, config y grub files
  • /var, /srv : datos a servir ( /srv ) y datos almacenados /var
  • /proc , /sys : informacion de procesos y del sistema
  • /lib, /usr/lib, /usr/local/lib : liberias compartida

La diferencia entre /usr, /usr/bin y /usr/local/bin ( aplicable a sbin ) es que en /bin y /sbin se incluyen los binarios indispensables o esenciales. En /usr/bin y /usr/sbin los binarios no esenciales y en /usr/local/bin y /usr/local/sbin los binarios generados de compilar el codigo fuente en la propia máquina. Normalmente los binarios vienen epaquetados y se instalan el sistema desde estos paquetes. En ocasiones no existe paquete o necesitamos compilar nuestra propia versión. Pues este binario generado deberá ubicarse en /usr/local/bin o /usr/local/sbin.

Navegando usando Nautilus

Nautilus es la herramienta gráfica que se usa bajo GNOME para navegar por estructura de directorios. Es intuitivo y tiene varios modos de representar la información. Tambien se puede navegar a través de la red local. Combinaciones de teclas interesantes:

  • Cerrar todas las ventanas padre: ctrl + shift + w
  • Location path: ctrl + l
  • Nuevo directorio: ctrl + shift + n
  • cerrar todas las ventanas: ctrl + q
  • cortar : ctrl + x
  • pegar: ctrl + v
  • copiar : ctrl + c
  • seleccionar todo: ctrl + a
  • borrar: ctrl + t  ( thrash )
  • Select patter: ctrl + s
  • Drag and Drop : ctrl ( copia ) , alt ( pregunta por la accion a tomar )
  • Boton derecho: menu contextual

Se pueden incluir nuestros propios scripts si los almacenamos en ~/.gnome2/nautilus-scripts/. Hay que cerrar sesión y volver a entrar para que se carguen los scripts.

Navengando por consola

Para movermos usando consola tenemos los siguientes comandos:

  • cd : Change directory. Cambiar de usuario con ‘cd nombredirectorio’. Ej: cd /etc. con ‘cd -‘ volvemos al directorio donde hubieramos estados ubicados antes del siguiente comando cd. Subir directorio con ‘cd ..’. Directorio $HOME con ‘cd ~’
  • pwd: Indica el directorio actual
  • Rutas absolutas para indicar una ruta desde la raiz. Ej: /var/logs/apache/acces_log
  • Rutas relativas que se basan en el directorio actual. Ej: cd ../../tmp
  • Para crear un directorio se usa : mkdir
  • Para eliminar un directorio: rmdir ( el directorio debe estar vacio, de lo contrario rm -fr  )

Listar ficheros e identificar el contenido

  • El comando ls se usa para listar el contenido de los directorios
  • Las formas más tipicas de usar ls es con -a ( lista todo incluyendo ficheros ocultos ) , -l ( formato largo, mucha informacion ) , -R ( recursivo ) , -ld ( enlaces simbólicos )
  • Se acepta como parámetro una ruta o una expresión
  • Para identificar qué es cada fichero, no se utiliza la extensión como en otros sitemas. Aunque es identificativo, se usa la herramienta file. Esta herramienta analiza el ‘magic number” del fichero que son los primeros bytes del fichero. Una vez leida esta cabecera intenta encontrar una correspondencia con su base de datos ( /usr/share/magic )  para indicarnos de qué tipo de fichero se trata. Ej: file /etc/passwd

Crear, copiar, mover y eliminar ficheros

  • crear ficheros vacíos o cambiarles la fecha de acceso y/o modificación con la utilidad touch. Ej: touch mifichero.
  • Para copiar usaremos: cp origen destino. Se pueden poner multiples orígenes, el último será el destino. ej: cp file1 file2 file3 file4 directorio_destino
  • Parámetros útiles: -i ( interactivo), -r ( recursivo ), -p ( conservar propietario y permisos ) , -a ( -r + -p ), -v ( verbose )
  • Si el destino no existe, se renombrará la copia al nombre de destino
  • Renombrar o mover ficheros y directorios con mv. Ej: mv origen1 origen2 origen3 dir_destino
  • borrar ficheros y dirctorios con rm. Ej: rm mi_directorio mi_fichero
  • Siempre hay que prestar especial atención a la hora de borrar, usad siempre -i ( interactivo ) si es posible y -rf ( -r recursivo y -f force ) con especial especial cuidado.

RH033-3 Running Commands and Getting Help

Running Commands

Los comandos disponibles en el sistema se pueden visualizar haciendo un doble tab ( tab tab ) desde la consola. Esto mostará unos miles de comandos. Son todos los ficheros que se hayan con permisos de ejecución en las rutas indicadas en la variable $PATH. Los comandos que están en el path se ejecutan escribiendo directamente su nombre. Si no están en el path hay que ejecutarlos con ” ./nombrefichero “.

Normalmente los comandos se ejecutan con parámetros, opciones, modificadores, etc… Para indicar los parámetros se usa la forma corta o abreviada con ‘-c’ con una sola letra o la opción avanzada ‘–command’ con doble guión y nombre completo del comando.

Se puede marcar el fin de los parámetros con doble guíon sólo ‘–‘. Esto es muy útil cuando hemos tenido un gambazo y hemos llamado a un fichero por ejemplo ‘-fichero’ con un guíon. Pues para borrarlo haríamos lo siguiente:
[shell]rm — -file
[/shell]
Se pueden concatenar comandos usando el punto y coma, de forma que cuando acabe uno se ejecute otro.  De esta forma podemos indicar en una sola línea varios comandos. Ej: ls ; cd /etc; ls;

Se puede cortar la ejecución de un comando con la combinación de teclas ctrl + c

Algunos comandos simples

  • date: Muestra y modifica fecha y hora. Permite formatear la salida con date + “formato”. Ej: date +”%Y%m%d %H:%m”
  • cal : muestra un calendario con la fecha indicada. Por defecto muestra el mes actual. Se puede indicar el mes y año.

Getting Help: Documentación y Ayuda

Recordar todos los comandos y todos los parámetros es imposible, para ello disponemos de ayuda preinstalada en el sistema. Disponemos de los siguientes recursos en el sistema para documentarnos :

  • whatis : Busca en descripición del comando y la muestra
  • apropos:  Busca en la descripción y dentro de las documentación y lo muestra
  • man: Página del manual
  • info: Otro sistema de informacion que soporta navegación
  • /usr/share/doc: ubicación de documentación de cada paquete de software
  • Red Hat Documentation: Sitio web de documentación de RedHat  http://docs.redhat.com/docs/
  • commando –help: Normalmente todos los comandos -h o –help para dar información e su uso.

La notación de parámetros en la ayuda es la siguiente:

  • [] Opcional
  • Cualquier cosa con “…” lista o longitud arbitraria
  • | : Se usa con opciones de las cuales solo puedes elegir una, el separador es el pipe |
  • <> : datos variables, debes sustuir el contenido con el que necesites.
  • -abc: es lo mismo que -a -b -c

Indice de hojas de man:

Man dispone de varias páginas de ayuda dependiendo a qué contexto se refieran:

  1. User Commands
  2. System Calls
  3. Library Calls
  4. Special Files
  5. File Formats
  6. Games
  7. Miscelaneous
  8. Administratrive Commands

Ejemplos:
[shell]man 1 passwd # referido al uso de passwd para usuarios
man 5 passwd # detalla el contenido del fichero /etc/passwd
[/shell]
Se puede navegar por las páginas man de la siguiente forma:

  • /text : busca texto en la página del manual. Búsqueda con expresion regular
  • n/N : Siguiente ocurrencia de la búsqueda u ocurrencia anterior
  • q : Salir
  • PgUP / PgDn: Pagina arriba o abajo
  • Las páginas del manual se visualizan con el comando less en caso de estar instalado.
  • man -k palabraclave: Realiza una búsqueda entre las descripciones y las páginas del manual, como apropos.

La herramienta info permite navegar entre las páginas de ayuda. Cada página se divide en nodos y los enlaces a los nodos van precedidos de un *. Para navegar en las páginas de info se usa:

  • tab: moverse entre links
  • enter: selecciona el link sobre el que está el cursor
  • n ( next ) /p  (previous ) / u ( up-one ) /l ( last-one )
  • s text : busca texto
  • q : salir

Otros sitios donde encontrar información:

  • /usr/share/doc
  • comando yelp -> herramienta de ayuda con las guías de la distribución
  • http://docs.redhat.com/docs/es-ES/index.html

Certificaciones RedHat

El motivo de los artículos que estoy agregando es ir resumiendo los contenidos de los libros oficiales para la certificación. Mi plan de estudios actual es :

  • RH033 Red Hat Linux Essentials
  • RH133 Red Hat Certified Technician
  • RH253 Red Hat Certified Engineer

Esto está basado en la version RHLE 5 que ha cambiado recientemente y ahora con la versión RHLE6 se compone de:

  • RH124: Red Hat System Adminsitrator I
  • RH135: Red Hat System Adminsitrator II
  • RH255: Red Hat System Adminsitrator III

RHCSA: Red Hat Cetified System Administrator, es la certificación que se obtenía con los módulos RH033 / RH133 y que ahora se corresponde con RH124 y RH135

RHCE: Red Hat Certified Engineer se consigue con la certificación RHCSA y el examen correspondiente a RH253 que ahora es RH255

El objetivo del curso que estoy realizando es la preparación para RHCE

Más información en: http://www.es.redhat.com/training/

RH033-2 Linux Usage Basics

( nota: a partir de este punto todo lo que se indique estará orientado a la distribución RedHat )

Esquema X window system
Esquema X window system

Acceso al sistema:

El acceso al sistema requiere autenticacion. El método de acceso más común es por usuario y contraseña ( login y password ) aunque no es el único. Se puede acceder por consola de texto o por interface gráfico. La consola acepta comandos que se gestionan con un software o interface llamado shell. Se llama prompt o símbolo de sistema a los simbolos y caracteres que nos indican la posicón actual y en donde se introducen los comandos. Se identifica por el símbolo $ si somos usuario normal o # si el usuario es root ( usuario con máximos privilegios del sistema ). La contraseña no se muestra cuando se escribe. El interface gráfica usa X Window System como motor gráfico y Gnome como gestor de ventanas y entorno de escritorio.

En el momento de acceder al sistema el usuario se encuentra en su home o directorio personal. Por defecto, en este directorio se almacenan los datos de usuario y configuraciones.

Consideraciones a tener en cuenta de las terminales:

  • La configuración de sistema típica se compone de 6 terminales de texto  y una gráfica.
  • Las terminales también se llaman consolas. Se pueden usar múltiples consolas  y acceder al sistema multiples veces y de forma concurrente.  Consola de texto ( /dev/ttyX ) y consolas virtuales arrancadas desde el entorno gráfico ( /dev/pts/X )
  • Se puede levantar el entorno gráfico con startx.
  • Se puede cambiar al terminal n  con: chvt n
  • Las consolas de texto se accede con  ctrl-alt-F[1-6].  Para ir a la consola 13 -> altgr + f1. El AltGR suma 12 .
  • La consola gráfica se accede con ctrl-alt-F7
  • Limpiar ventana: Ctrl + L
  • Cerrar sesión: Ctrl + D
  • Subir/Bajar  página en consola : Shift + RePag o Shif+AvPag. Si se cambia de consola se pierde el buffer y no se puede subir y bajar página.
  • Se pueden bloquear las consolas con la utilidad vlock. vlock -a bloquea todas las terminales. Bloquear la pantalla en GNOME con ctrl + alt + L.

NOTA: La tecla ‘tab’ o tabulador autocompleta los nombres de ficheros o nombres de comanos que se encuentren en las rutas de la variable $PATH. En caso de necesitar representar un caracter especial en la consola se hace de forma: ctrl + v + caracter. Por ejemplo para mostrar un Tabulador : ctrl + v + tab.

Gnome-terminal es la aplicación que se usa para consolas virtuales:

  • Soporta pestañas o tabs. Nuevo ‘tab‘ con ctrl + t . Cerrar ‘tab’ ctrl + f4
  • Cambiar entre tab: ctrl + pgup / ctrl + pgdn
  • Copiar: ctrl + shift + c
  • Pegar: ctrl + shif + v
  • Scoll : shift + pgup /shift +pgdn
  • Aumentar o disminuir el tamaño de la letra: ctrl + + o ctrl + –

Cambiar contraseña de usuario:

Se puede cambiar la contraseña de usuario con el comando passwd. El usuario deberá introducir su password, a continuación el nuevo password y repetirlo. El usuario root, sólo deberá poner el nuevo password y repetirlo.

Consideraciones a tener en cuenta al elegir un password:

  • Las passwords son case-sensitive: Se distingue entre mayúsculas y minúsculas.
  • Mínimo 8 caracteres, mejor si son más.
  • No uses una password basada en diccionario ( palabras comunes )
  • Mezclar mayúsculas, minúsculas, numeros, símbolos.
  • Evita usar tu nombre, el nombre de login, el nombre de tu perro, tu cumpleaños, etc…
  • Evita tambien un password excesivamente complicado, puede llevar a teclearlo lentamente y que alguien visualice la secuencia de caracteres.

Cambiar entre identidades de usuario:

La práctica correcta a la hora de trabajar con un sistema operativo es usar siempre un usuario sin privilegios especiales para las tareas cotidianas y usar únicamente el superususario ( root ) en momentos puntuales. Esto puede evitar situaciones embarazosas o fallos de seguridad. Se disponen de varias herramientas para realizar tareas con distintos privilegios:

  • sudo: Ejecuta comandos como root. Ej: sudo passwd root
  • su : Cambia a otra identidad de usuario. Si ejecutamos ‘su –‘ se cargan los ficheros de perfil el nuevo usuario con su home, path, etc…, si no , se omiten. Ej: su – ( solicitaría password para hacernos root) . su – joe
  • id: Nos informa sobre nuestro usuario, grupo principal, grupos secundarios, entorno selinux y los identificadores numéricos de cada uno.

Historial de comandos:

El entorno shell que se usa por defecto es GNU bash ( en /etc/shells tenemos todas las shells disponibles en el sistema ). Bash provee de una utilidad que se llama history. Esta utilidad se encarga de almacenar los comandos tecleados para volver a usarlos de manera más rápida. Dado que en este tipo de sistemas se realiza un uso intensivo de la consola, history es una funcionalidad indispensable para ahorrar tiempo tecleando y aumentar nuestra productividad.

A tener en cuenta en relación a history:

  • Visualizamos el historial de comandos con: history
  • Se pueden configurar variables de entorno como  HISTFILE que indica la ruta del fichero donde se almacena el historial y con HISTCONTROL define entre otras si se almacenan duplicados, lineas en blanco… usualmente se usa ignoreboth = ingnoredups + ignorespaces. Se pueden añadir estas configuraciones en ~/.bashrc
  • Nos movemos por el historial con la flecha arriba y abajo
  • Podemos buscar en el historial de forma interactiva con ctrl+r y escribimos el texto a buscar, se mostrará la coincidencia más reciente ( reverse-i-search)
  • El último comando escrito: Esc + .  ,  último parametro escrito: Alt + .  ( Se pueden repetir multiples veces para ir retrocediendo en la historia )
  • Ejecutamos el último comando con !$ o !!
  • El último comando que empiece por una letra con ! + letra
  • El comando número n en la historia: !n
  • El comando ejecutado n veces antes. Por ejemplo el comando ejectuado 2 comandos antes: !-2
  • Ejectua el último comando que contenga texto con !?texto
  • Reemplazar con ^old^new. Ej:
  • $ cp backup /var/backup
    $ ^backup^data
    # comando resultante:$ cp data /var/data

  • Borrar una linea del historial : history -d n
  • Borrar todo el historial: history -c

Editores de texto

Existen decenas de editores de texto para distribuciones GNU/Linux, pero basta con conocer que los más importantes son:

  • vi / vim /gvim
  • emacs
  • nano
  • gedit ( editor de GNOME )

Normalmente están disponibles en todas las distribuciones por defecto, a excepción de emacs que no suele incluirse en la instalación básica o mínima. El editor gedit sólo está disponible si se instala GNOME.

El editor por defecto se indica en la shell mediante la variable de entorno $EDITOR

RH033-1 Linux Ideas and History

Linux, incorrectamente llamado Linux, es un sistema operativo badado en Software Libre. El término es incorrecto ya que el sistema operativo en realidad es GNU/Linux. GNU/Linux es un sistema operativo compuesto de un kernel ( Linux ) y herramientas o utilidades GNU. Existen varios tipos de Kernels aunque los más conocidos son Linux, HURD ( kernel de GNU, no maduro aún) , KFreeBSD ( kernel de FreeBSD ).

GNU/Linux nace de los esfuerzos de desarrolladores como Richard Stallman ( Free Software Fundation 1984 )  y Linus Torlvads ( Linux Kernel 1991 ),  los cuales desarrollaron el compilador de C libre: GCC y herramientas libres agrupadas como GNU y un Kernel capaz de funcionar en un pc con arquitectura Intel llamado Linux que estaba basado en Minix. Los dos proyectos se complementaban lo que dio fruto a un sistema operativo que era capaz de funcionar y de ser usado ya que ya existían las herramientas GNU.

Hay que diferenciar entre dos movimientos, o dos ideologías referidas a las libertades del código fuente y sobre las que se basa este movimiento:  OpenSource y FreeSoftware.

El Software Libre o FreeSoftware ( FSF:  Free Software Foundation)  se basa en cuatro principios, aúnque luego han sido ampliados y modificados, estos son los pilares básicos:

  • La libertad de usar el programa, con cualquier propósito (libertad 0).
  • La libertad de estudiar cómo funciona el programa, y adaptarlo a tus necesidades (libertad 1). El acceso al código fuente es una condición previa para esto.
  • La libertad de distribuir copias, con lo que puedes ayudar a tu vecino (libertad 2).
  • La libertad de mejorar el programa y hacer públicas las mejoras a los demás, de modo que toda la comunidad se beneficie. (libertad 3). El acceso al código fuente es un requisito previo para esto.

Algunos principios  OpenSource:

  • El software y el código debe poder ser distribuido libremente
  • Las modificaciones del código deben comunicarse al autor
  • El código derivado de un proyecto existente debe heredar la licencia original y nombrar el origen
  • Es obligatorio suministrar el código fuente
  • No se puede discriminar a nadie para limitar su uso

Sin embargo el movimiento OpenSource, no acepta totalmente estos principios. Digamos que OpenSource tiene un punto de vista más orientado a los beneficios prácticos de compartir el código que a las cuestiones morales y/o filosóficas. Podemos hablar de que el Software Libre es más radical y estricto ya que se basa en principios morales que buscan la libertad, mientras que el OpenSource, aprovecha la riqueza de compartir y distribuir el código como algo beneficioso, pero no se mueve estrictamente o éticamente  por principios morales. Realmente es complicado y aunque han pasado muchos años aún se sigue debatiendo sobre estos temas ( vease también FOSS )

GNU/Linux TimeLine
GNU/linux TimeLine - Cronlogía de las distribuciones GNU/Linux

Al poder decidir libremente, se han estado generando miles de proyectos; unos continúan, otros mueren, otros se bifurcan… es como un organismo vivo. De la variedad de ideas y tendencias se generaron lo que llamamos distribuciones de GNU/Linux, que son ediciones de software con unas características técnicas y filosóficas propias. Cada grupo de desarrolladores prefería tener su entorno con unas condiciones y unas configuraciones que consideraban las ideoneas para ciertos escenarios ( pc de trabajo, servidores, firewalls … ) . Principalmente nacieron tres grandes distribuciones:

  • Slackware
  • Debian
  • RedHat

Hay que destacar varios puntos:

  • Slackware sigue viva aunque tiene un movimiento muy débil.  Suse deriva de Slackware. Fué comprada por Novell pero reciente ha sido comprada por Attachmate. Esta compra es delicada ya que se traspasan muchas de las patentes de software relacionadas con GNU/Linux y Unix. Puede provocar situaciones incómodas según las decisiones que se tomen por parte de los nuevos dueños.
  • Debian se basa en que todo el software que distribuyen es totalmente libre. Ubuntu nació de Debian y está gestionada por una empresa: Canonical y creada por Mark Shuttleworth. Ubuntu ofrece version de escritorio y de servidor, además de soporte y certificacion
  • RedHat es la empresa que más beneficio genera entorno al software libre, así mismo es la que más apoya al software libre y más dinero invierte. Tiene presencia mundial y su negocio se basa en los servicios. RedHat tiene la versión Servidor y estación de trabajo. RedHat tiene su distribución Fedora que es un campo de pruebas de nuevas tecnologías y se libera una versión nueva cada 6 meses. Fedora NO tiene soporte por parte de RedHat.

Principios básicos de GNU/Linux:

  • Todo es un fichero ( incluido el hardware)
  • Programas pequeños e  independientes para un único propósito
  • Habilidad de usar conjuntamente varios programas para realizar tareas complejas
  • Evitar interfaces de usuario, todos deben poder usarse de forma no interactiva. Que sea posible scriptear todo
  • Configuraciones en ficheros de texto plano. Que se pueda editar la configuración con cualquier editor de texto.

[plesk] Parallels Plesk Panel 10: Fallo de seguridad permite cambiar el pass de Admin

Nueva nota de Parallels que nos informa de la liberación de micro-updates para corregir fallos de seguridad. En este caso parece estar relacionado con le cambio de password del usuario admin. Según indican el fallo permitiría cambiar el password del usuario admin usando un usuario de autorizado de Plesk ( un usuario del sistema ).

Dear Parallels Plesk Panel Customer,

Parallels has issued a security hotfix to Parallels Plesk Panel 10.0.1 through the Micro-Updates system.

It is referenced as MU#2 – Plesk admin password changing.

The Micro-Update delivers bug fix for a vulnerability that could allow authorized Plesk users to change Plesk ‘admin’ password and then compromise Control Panel.

For instructions on implementing Micro-updates, please refer to:

http://kb.parallels.com/en/9294 – Using Micro-Updates in Parallels Plesk Panel 9.x, 10.x and Parallels Small Business Panel.

For instructions on upgrading from the panel, please refer to the Administrator Manual at:

http://download1.parallels.com/Plesk/PP10/10.0.1/Doc/en-US/online/plesk-administrator-guide/index.htm?fileName=59215.htm

This notification is made pursuant to our development policy of notifying users when critical security issues arise and making fixes available as soon as possible. Please ensure that this patch has already been applied as soon as possible.

Parallels Plesk Panel Team