Gentoo Logo

Renuncia de responsabilidad: La versión original de este artículo fue publicada por IBM developerWorks y es propiedad de Westtech Information Services. Este documento es una versión actualizada del artículo original y contiene mejoras introducidas por el Equipo de Documentación de Gentoo.
Este documento carece de soporte activo.


Preparación para el examen de certificación 101 del LPI (segundo lanzamiento), Parte 3

Contenido:

1.  Antes de comenzar

Acerca de este tutorial

Bienvenido a "Administración intermedia", el tercero de cuatro tutoriales diseñado para prepararlo para el examen 101 del Instituto Profesional de Linux (LPI por sus siglas en inglés). Este tutorial (parte 3) es ideal para quienes quieren mejorar su conocimiento de los fundamentos de administración Linux. Cubriremos una variedad de tópicos, incluyendo documentación del sistema y de Internet, el modelo de permisos Linux, manejo de cuentas de usuario y el ajuste de su entorno de inicio.

Si es nuevo en Linux, le recomendamos que inicie con la Parte 1 y la Parte 2. Para algunos, este material será nuevo, pero los usuarios Linux más experimentados encontrarán en este tutorial una buena manera de complementar sus conocimientos básicos de administración Linux.

Al final de esta serie de tutoriales (ocho en total, cubriendo los exámenes 101 y 102), tendrá el conocimiento necesario para ser un administrador de sistemas Linux y estará listo para obtener una certificación LPIC nivel 1 del Instituto de Profesionales Linux si usted lo desea.

Para aquellos que han tomado la release 1 version de este tutorial por razones diferentes a la preparación para el examen LPI, probablemente no sea necesario tomar esta versión. Sin embargo, si planea presentarse a los exámenes, debe considerar seriamente leer este tutorial.

Acerca de los autores

Para preguntas técnicas acerca del contenido de este tutorial, puede contactar con los autores:

Con residencia en Albuquerque, Nuevo Mexico, Daniel Robbins es el arquitecto en jefe de Gentoo Linux, una metadistribución Linux avanzada basada en puertos (ports). Además escribe artículos, tutoriales y sugerencias para IBM developerWorks zona Linux y servicios de desarrollo Intel. También ha contribuido como autor de muchos libros, incluyendo Samba y SuSE Unleashead. Daniel disfruta pasar tiempo con su esposa Mary y su hija Hadassha. Puede contactar con Daniel en Daniel Robbins.

Chris Houser, conocido por sus amigos como "Chouser," ha sido un partidario de UNIX desde 1994 cuando se unió al equipo de administración de la red de informática en la Universidad Taylor en Indiana, donde obtuvo su licenciatura en Ciencias de la Computación y Matemáticas. Desde entonces ha trabajado en programación de aplicaciones web, diseño de interfaz de usuario, soporte para programas de vídeo profesional y ahora programando el controlador del dispositivo Tru4 UNIX en Compaq. Además ha contribuido en varios proyectos de programas libres (recientemente en Gentoo Linux). Vive con su esposa y dos gatos en New Shapire. Puede contactar con él en Chris Houser.

Aron Griffis, graduado de la Universidad Taylor con título en Ciencias de la Computación y premiado con el título "Futuro fundador de una comunidad UNIX utópica". Trabajando para conseguir ese objetivo Aron es empleado de Compaq, escribe controladores de red para Tru64 UNIX y utiliza su tiempo libre tocando melodías en el piano o desarrollando Gentoo Linux. Vive con su esposa Amy (también ingeniera UNIX) en Nashua, New Hampshire.

2.  Documentación de red y del sistema

Tipos de documentación del sistema Linux

Existen esencialmente tres fuentes de documentación en un sistema Linux: páginas del manual, páginas de información y documentación incluida en las aplicaciones en /usr/share/doc. En esta sección, exploraremos cada una de esas fuentes antes de buscar más información "fuera de la caja".

Páginas de manual

Las página de manual, o "man pages" (en inglés), son la forma clásica de la documentación de referencia de UNIX y Linux. Idealmente, puede consultar en las páginas de manual cualquier orden, archivo de configuración o rutina de librería. En la práctica Linux es software libre y algunas páginas aún no han sido escritas o demuestran su edad. Sin embargo, las páginas de manual son el primer lugar en donde buscar cuando necesite ayuda.

Para acceder a las páginas de manual, simplemente teclee man seguido por el tema de su investigación. Un localizador comenzará, por lo que necesita presionar q cuando termine de leer. Por ejemplo, para buscar información acerca de la orden ls, puede teclear:

Listado de Código 2.1: Buscando en páginas del manual

$ man ls

Conocer la estructura de una página de manual puede ser útil para acceder rápidamente a la información que necesita. En general encontrará las siguientes secciones dentro de una página man:

NAME Nombre y descripción de la orden en una línea
SYNOPSIS Cómo utilizar la orden
DESCRIPTION Discusión a fondo sobre la funcionalidad de la orden
EXAMPLES Sugerencias de cómo utilizar la orden
SEE ALSO Tópicos relacionados (normalmente páginas de manual)

Secciones de las páginas de manual

Los archivos que componen las páginas de manual se almacenan en /usr/share/man (o en /usr/man en algunos sistemas antiguos). Dentro de ese directorio, puede encontrar que las páginas de manual están organizadas en las siguientes secciones:

man1 Programas de usuario
man2 Llamadas al sistema
man3 Funciones de librerías
man4 Archivos especiales
man5 Formatos de archivo
man6 Juegos
man7 Misceláneos

Páginas de manual múltiples

Algunos temas existen en más de una sección. Para mostrar esto, vamos a usar la orden whatis, que muestra todas las páginas de manual para un tema:

Listado de Código 2.2: Uso de la orden whatis

$ whatis printf
printf               (1)  - format and print data
printf               (3)  - formatted output conversion

En este caso, man printf de manera predeterminada mostrará la página en la sección 1 ("programas de usuario"). Si escribiésemos un programa en C, puede que nos interese más la página de la sección 3 ("funciones de librerías). Puede llamar la página de manual de una determinada sección especificándolo en la línea de comandos, por lo que para ver printf(3), escribiríamos:

Listado de Código 2.3: Especificando la sección en la orden man

$ man 3 printf

Encontrar la página correcta del manual

Algunas veces es difícil encontrar la página correcta del manual para un tema determinado. En ese caso, puede intentar man -k para buscar la sección NAME de las páginas de manual. Tome en cuenta que se trata de una búsqueda de subcadena, por lo que ejecutar algo como man -k ls ¡le dará una gran cantidad de datos de salida! Aquí hay un ejemplo con una consulta más específica:

Listado de Código 2.4: Buscando páginas de manual utilizando la orden man -k

$ man -k whatis
apropos              (1)  - search the whatis database for strings
makewhatis           (8)  - Create the whatis database
whatis               (1)  - search the whatis database for complete words

Todo acerca de apropos

El ejemplo del panel anterior nos lleva a unos cuantos puntos más. Primero, la orden apropos es exactamente equivalente a man -k. (De hecho, voy a contarle un pequeño secreto. Cuando ejecuta man -k, en realidad se ejecuta apropos detrás del escenario.) El segundo punto es la orden makewhatis, la cual explora todas las páginas de manual de su sistema Linux y construye una base de datos para whatis y apropos. Por lo general se ejecuta periódicamente por root para mantener la base de datos actualizada:

Listado de Código 2.5: Construyendo la base de datos de whatis y apropos

# makewhatis

Para más información sobre "man" y sus amigos, debe comenzar con la siguiente página del manual:

Listado de Código 2.6: Iniciando la página de manual para man

$ man man

La MANPATH

De manera predeterminada, el programa man buscará en las páginas de manual en /usr/share/man, /usr/local/man, /usr/X11R6/man, y posiblemente en /opt/man. Algunas veces, podrá necesitar agregar un elemento adicional a esta ruta de búsqueda. En ese caso, simplemente edite /etc/man.conf en un editor de textos y agregue una línea como la siguiente:

Listado de Código 2.7: /etc/man.conf

MANPATH /opt/man

De este punto en adelante, cualquier página de manual en los directorios /opt/man/man* será encontrada. Recuerde que necesitará ejecutar nuevamente makewhatis para agregar estas nuevas páginas de manual a la base de datos de whatis.

Información GNU

Una deficiencia de las páginas de manual es que no son compatibles con hipertexto, por lo que no puede pasar fácilmente de una a otra. La gente de GNU reconoció este defecto, por lo que inventaron otro formato de documentación: páginas "info". Muchos de los programas GNU vienen con una amplia documentación en el formato de páginas de información. Puede comenzar a leer las páginas de información con la orden info:

Listado de Código 2.8: Uso de la orden info

$ info

Llamando a info de esta manera, se abrirá un índice de las páginas disponibles en el sistema. Puede moverse con las flechas de teclado, seguir los enlaces (señalados con una estrella) utilizando la tecla Intro y salir presionando q. Las teclas están basadas en Emacs, por lo que podrá navegar fácilmente si está familiarizado con ese editor. Para una introducción al editor Emacs, eche un vistazo al tutorial de developerWorks Living in Emacs.

También puede especificar una página de información en la línea de comandos:

Listado de Código 2.9: Especificar la orden en info

$ info diff

Para más información acerca del uso del lector info, pruebe leyendo su página de información. Debe poder navegar utilizando las pocas teclas que ya he mencionado:

Listado de Código 2.10: Leyendo la página de información info

$ info info

/usr/share/doc

Hay una última fuente de ayuda dentro de su sistema Linux. Muchos programas son entregados con documentación adicional en otros formatos: text, PDF, PostScript, HTML, por nombrar algunos. Eche un vistazo en usr/share/doc (o usr/doc para sistemas más antiguos). Encontrará una larga lista de directorios, cada uno de ellos proviene de una aplicación del sistema determinada. Buscar dentro de esta documentación puede revelar algunas joyas que no están disponibles en las páginas de manual o de información, como tutoriales o documentación técnica adicional. Una revisión rápida revela que existe una gran cantidad de material de lectura disponible:

Listado de Código 2.11: /usr/share/doc/

$ cd /usr/share/doc
$ find . -type f | wc -l
7582

¡Menos mal! Su tarea de esta tarde es leer solo la mitad (3791) de esos documentos. Espere un examen mañana. ;-)

El proyecto de documentación Linux (LDP)

Además de la documentación del sistema, hay una serie de excelentes recursos en Internet. El Linux Documentation Project es un grupo de voluntarios que trabajan para agrupar el conjunto completo de la documentación libre de Linux. Este proyecto existe para concentrar varias piezas de la documentación Linux en una ubicación que sea fácil de buscar y usar.

Una vista general del LDP

El LDP está formado por las siguientes áreas:

  • Guías - libros más largos, más en profundidad, como The Linux Programmer's Guide
  • COMOs - ayuda sobre temas específicos, tal como DSL HOWTO
  • FAQs - Preguntas hechas frecuentemente con respuestas, tal como Brief Linux FAQ
  • Páginas de manual - ayuda sobre órdenes individuales (estas son las mismas páginas que obtiene del sistema Linux cuando utiliza la orden man).

Si no está seguro de qué sección debe leer, puede aprovechar la caja de búsqueda, la cual le permite encontrar la información por tema.

El LDP ofrece adicionalmente una lista de enlaces y recursos como Linux Gazette (ver enlaces en Bibliografía) y LinuxFocus, además de enlaces a listas de correos y archivos de noticias.

Listas de correo

Las listas de correo ofrecen probablemente el punto de colaboración más importante para desarrolladores Linux. A menudo los proyectos son desarrollados por contribuyentes que viven lejos, posiblemente incluso en lados opuestos del globo. Las listas de correo proporcionan un método para que cada desarrollador de un proyecto pueda contactar a los demás, y mantener discusiones grupales vía correo electrónico. Una de las listas de correo de desarrollo más famosas es Linux Kernel Mailing List.

Más acerca de listas de correo

Además del desarrollo, las listas de correo pueden proporcionar un método para hacer preguntas y recibir respuestas de desarrolladores expertos, o incluso otros usuarios. Por ejemplo, las distribuciones individuales usualmente proveen listas de correo para los recién llegados. Puede revisar el sitio web de su distribución para obtener información acerca de las listas de correo que ofrece.

Si se tomó el tiempo para leer el FAQ LKML en el enlace del panel anterior, puede haber notado que los subscriptores de la lista de correo a menudo no toman amablemente las preguntas que se hacen repetidamente. Siempre es prudente buscar en los archivos de las listas de correo antes de escribir su pregunta. ¡Lo más probable es que también le ahorre tiempo!

Grupos de noticias

Los grupos de noticias de Internet son similares a las listas de correo, pero están basadas en un protocolo llamado NNTP (Protocolo de Transferencia de Noticias de la Red, por sus siglas en inglés) en lugar de correos electrónicos. Para participar, debe de usar un cliente NNTP como slrn o pan. La ventaja principal es que solo toma parte en la discusión cuando así lo desea, en lugar de que continuamente lleguen a su bandeja de entrada. :-)

Los grupos de noticias de interés primordial comienzan con comp.os.linux. Puede leer la lista en el sitio LDP.

Tal como las listas de correos, las discusiones de grupos de noticias son archivadas. Un sitio popular de archivos de grupos de noticias es Deja News.

Sitios web de proveedores y terceros

Los sitios web de algunas distribuciones Linux a menudo proporcionan documentación actualizada, instrucciones de instalación, declaraciones de compatibilidad/incompatibilidad de hardware, y otros tipos de apoyo como una herramienta de búsqueda de base de datos. Por ejemplo:

Proveedores de hardware y software

Muchos proveedores de hardware y software han agregado soporte para Linux en sus productos en los últimos años. En sus sitios, puede encontrar información acerca del hardware que soporta Linux, herramientas de desarrollo de software, fuentes que han sido liberadas, descargas de controladores Linux para hardware específico, y otros proyectos Linux especiales. Por ejemplo:

Recursos para desarrolladores

Además, muchos proveedores de hardware y software han desarrollado maravillosos recursos para desarrolladores y administradores Linux. A riesgo de sonar como una autopromoción, uno de los recursos más valiosos de Linux a cargo de un proveedor de hardware/software es la IBM developerWorks Linux zone.

3.  El modelo de permisos Linux

Un usuario, un grupo

En esta sección, echaremos un vistazo al modelo de permisos y propiedad Linux. Como vimos anteriormente cada archivo es propiedad de un usuario y de un grupo. Esta es la esencia del modelo de permisos en Linux. Puede ver el usuario y grupo de un archivo en un listado ls -l:

Listado de Código 3.1: Listado de archivos

$ ls -l /bin/bash
-rwxr-xr-x    1 root     wheel      430540 Dec 23 18:27 /bin/bash

En este ejemplo en particular, el ejecutable /bin/bash es propiedad de root y está en el grupo wheel. El modelo de permisos Linux funciona permitiendo fijar tres niveles independientes de permisos para cada objeto del sistema de archivos, para el propietario del archivo, el grupo del archivo y todos los demás usuarios.

Entendiendo "ls -l"

Veamos nuestra salida de ls -l e inspeccionemos la primera columna del listado:

Listado de Código 3.2: Inspeccionando la orden ls -l

$ ls -l /bin/bash
-rwxr-xr-x    1 root     wheel      430540 Dec 23 18:27 /bin/bash

El primer campo -rwxr-xr- contiene una representación simbólica de los permisos de este archivo en particular. El primer carácter (-) en este campo especifica el tipo de archivo, que en este caso es un archivo normal. Otros posibles primeros caracteres:

Listado de Código 3.3: Primeros caracteres

'd' directorio
'l' enlace simbólico
'c' dispositivo especial de carácter
'b' dispositivo especial de bloques
'p' fifo
's' socket

Tres tripletas

Listado de Código 3.4: ls -l /bin/bash

$ ls -l /bin/bash
-rwxr-xr-x    1 root     wheel      430540 Dec 23 18:27 /bin/bash

El resto del campo se compone de tres tripletas de caracteres. La primera tripleta representa los permisos del propietario del archivo, la segunda representa los permisos para el grupo del archivo, y la tercera representa permisos para todos los usuarios:

Listado de Código 3.5: Tripletas en la orden ls -l

"rwx"
"r-x"
"r-x"

Arriba, la r significa que la lectura (mirar en los datos del archivo) está permitido, la w significa que la escritura (modificar el archivo, así como borrarlo) está permitido, y la x significa que "ejecutar" (ejecutar el programa) está permitido. Juntando toda esta información, vemos que todo el mundo es capaz de leer el contenido y ejecutar este archivo, pero solamente el propietario (root) puede modificar de alguna manera este archivo. Así, mientras los usuarios normales pueden copiar el archivo, solo root puede actualizarlo o borrarlo.

¿Quién soy?

Antes de que veamos cómo cambiar el usuario y grupo propietario de un archivo, echemos un vistazo a la manera de aprender su nombre de usuario y grupo actual. A menos que haya utilizado la orden su recientemente, su nombre de usuario es el mismo que utilizó para iniciar sesión en su sistema. Sin embargo, si usa su con frecuencia, podría olvidar su nombre actual efectivo. Para verlo, teclee whoami:

Listado de Código 3.6: Uso de la orden whoami

# whoami
root
# su drobbins
$ whoami
drobbins

¿A qué grupos pertenezco?

Para ver a qué grupos pertenece, use la orden groups:

Listado de Código 3.7: Uso de la orden groups

$ groups
drobbins wheel audio

En el ejemplo de arriba, soy miembro de los grupos drobbins, wheel y audio. Si quiere ver a qué grupos pertenecen otros usuarios, especifique sus nombres de usuario como argumentos:

Listado de Código 3.8: Especificando nombres de usuario como argumento

$ groups root daemon
root : root bin daemon sys adm disk wheel floppy dialout tape video
daemon : daemon bin adm

Cambiar el usuario y grupo propietario

Para cambiar el usuario o grupo de un archivo u otro objeto del sistema de archivos, use chown o chgrp, respectivamente. Cada una de esas órdenes toma un nombre seguido de uno o más nombres de archivos.

Listado de Código 3.9: Uso de las órdenes chown y chgrp

# chown root /etc/passwd
# chgrp wheel /etc/passwd

Además puede fijar el usuario y grupo simultáneamente con una forma alternativa del comando chown:

Listado de Código 3.10: Definir propietario y grupo simultáneamente

# chown root:wheel /etc/passwd

No puede usar chown a menos que sea superusuario, pero chgrp puede ser usado por cualquiera para cambiar el grupo propietario de un archivo a un grupo al que pertenece.

Cambios de propiedad recursivos

Tanto chown como chgrp tienen una opción -R que se puede usar para indicarles que apliquen los cambios de propiedad y grupo a un directorio entero recursivamente. Por ejemplo:

Listado de Código 3.11: Uso de chown y chgrp con la opción -R

# chown -R drobbins /home/drobbins

Introducción a chmod

Se pueden usar chown y chgrp para cambiar el propietario y el grupo de un objeto del sistema de archivos, sin embargo, para cambiar los permisos rwx que pueden verse en un listado ls -l, se usa otro programa llamado chmod. La orden chmod toma dos o más argumentos: un "modo", que describe cómo deben ser cambiados los permisos, seguido de un archivo o lista de archivos que serán afectados:

Listado de Código 3.12: Agregando el permiso x con chmod

$ chmod +x scriptfile.sh

En el ejemplo de arriba, nuestro "modo" es +x. Como puede imaginar, un modo +x le indica a chmod hacer a este archivo en particular ejecutable, tanto para el usuario como para el grupo, y para nadie más.

Si deseamos quitar todos los permisos de ejecución de un archivo, haremos lo siguiente:

Listado de Código 3.13: Eliminar los permisos x con chmod

$ chmod -x scriptfile.sh

Granularidad usuario/grupo/otros

Hasta ahora, nuestros ejemplos chmod han afectado los permisos para las tres tripletas, el usuario, el grupo, y los demás. A menudo, es útil modificar una o dos de las tripletas a la vez. Para hacer esto, simplemente debe especificar el carácter simbólico para la tripleta en particular que le gustaría modificar antes del signo + o -. Use u para la tripleta "usuario", g para la tripleta "grupo", y o para la tripleta "otros/todos":

Listado de Código 3.14: Usando tripletas

$ chmod go-w scriptfile.sh

Acabamos de eliminar los permisos de escritura para el grupo y todos los demás usuarios, pero dejamos los permisos de "propietario" sin tocar.

Redefinir permisos

Además de voltear los bits encendido y apagado de permiso, también podemos definirlos por completo. Usando el operador =, podemos decirle a chmod que queremos los permisos especificados y no otros:

Listado de Código 3.15: Volteando bits de permisos

$ chmod =rx scriptfile.sh

Arriba, hemos fijado todos los bits "lectura" y "ejecución", y removido los bits "escritura". Si queremos definir de nuevo una tripleta en particular, podemos especificar el nombre simbólico para la tripleta antes de = como se puede ver a continuación:

Listado de Código 3.16: Redefinir una tripleta

$ chmod u=rx scriptfile.sh

Modos numéricos

Hasta ahora, hemos usado lo que se llama modo simbólico para especificar los cambios de permiso a chmod. Sin embargo, existe otra manera común de especificar permisos: usando un número de 4 dígitos octales. Usando esta sintaxis, llamada sintaxis de permisos numérica, cada dígito representa los permisos de una tripleta. Por ejemplo en 1777, el 777 establece las banderas "propietario", "grupo", y "otros" que hemos discutido en esta sección. El 1 se usa para establecer los bits de permisos especiales, los cuales cubriremos adelante (vea " The elusive first digit" al final de esta sección). Este cuadro muestra cómo son interpretados los siguientes cuatro dígitos (777):

Modo Dígito
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0

Sintaxis numérica de permisos

La sintaxis numérica de permisos es especialmente útil cuando necesita especificar todos los permisos para un archivo, como se muestra en el siguiente ejemplo:

Listado de Código 3.17: Agregando permisos numéricos

$ chmod 0755 scriptfile.sh
$ ls -l scriptfile.sh
-rwxr-xr-x    1 drobbins drobbins        0 Jan  9 17:44 scriptfile.sh

En este ejemplo, usamos el modo 0755, el cual se expande a la configuración completa de permisos -rwxr-xr-x.

La umask

Cuando un proceso crea un nuevo archivo, este especifica los permisos que debería tener el nuevo archivo. Generalmente, el modo requerido es 0666 (puede ser leído y escrito por cualquiera), el cual genera más permisos de lo que nos gustaría. Afortunadamente, Linux consulta algo llamado "umask" cada vez que un nuevo archivo es creado. El sistema utiliza el valor de umask para reducir los permisos especificados originalmente a algo más razonable y seguro. Puede ver su umask actual escribiendo umask en la línea de comandos:

Listado de Código 3.18: Viendo la umask actual

$ umask
0022

En los sistemas Linux, la umask por omisión habitualmente es 0022, la cual le permite a otros leer sus nuevos archivos (si es que pueden llegar a ellos) pero no modificarlos.

Para generar archivos nuevos más seguros de manera predeterminada, puede cambiar la configuración de la umask:

Listado de Código 3.19: Cambiando la configuración de umask

$ umask 0077

Esta umask se asegurará de que el grupo y otros no tengan absolutamente ningún permiso para los archivos recién creados. Así que, ¿cómo funciona umask? A diferencia de los permisos "regulares" en archivos, la umask especifica qué permisos deben ser apagados. Vamos a consultar nuestra tabla de mapeo "modo a dígito" para que podamos entender lo que significa la umask 0077:

Modo Dígito
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0

Usando nuestra tabla, los últimos tres dígitos de 0077 son expandidos a ---rwxrwx. Ahora, recuerde que la umask le indica al sistema qué permisos debe deshabilitar. Poniendo juntos dos y dos, podemos observar que todos los permisos de "grupo" y "otros" son apagados, mientras que los permisos de "usuario" permanecen intactos.

Introducción a suid y sgid

Cuando inicia sesión por primera vez, un nuevo proceso de interfaz de comandos se inicia. Ya lo sabe, pero lo que probablemente desconoce es que este nuevo proceso de interfaz de comandos (normalmente bash) se ejecuta utilizando su identificador de usuario. Como tal, el programa bash puede acceder a todos los archivos y directorios que le pertenecen. De hecho, nosotros como usuarios somos totalmente dependientes de otros programas para realizar operaciones en nuestro nombre. Debido a que los programas inician heredando su identificador de usuario, no pueden acceder a cualquier objeto del sistema de archivos para el cual no posea acceso.

Por ejemplo, el archivo passwd no puede ser cambiado por un usuario normal directamente, debido a que la bandera "escribir" está apagada para cualquier usuario excepto root:

Listado de Código 3.20: ls -l /etc/passwd

$ ls -l /etc/passwd
-rw-r--r--    1 root     wheel        1355 Nov  1 21:16 /etc/passwd

Sin embargo, los usuarios normales necesitan modificar /etc/passwd (al menos indirectamente) cada vez que necesiten cambiar su contraseña. Pero, si el usuario no tiene la capacidad de modificar este archivo, ¿cómo funciona esto exactamente?

suid

Afortunadamente, el modelo de permisos Linux tiene dos bits especiales llamados suid y sgid. Cuando un programa ejecutable tiene activado el bit suid, se ejecutará por medio del propietario del ejecutable, y no en nombre de la persona que inició el programa.

Ahora, de regreso al problema de /etc/passwd. Si echamos un vistazo al ejecutable passwd, podemos ver que no es propiedad de root:

Listado de Código 3.21: Revisar el propietario del archivo /usr/bin/passwd

$ ls -l /usr/bin/passwd
-rwsr-xr-x    1 root     wheel       17588 Sep 24 00:53 /usr/bin/passwd

Debe notar también, que en lugar de una x en la tripleta de permisos del usuario, hay una s. Eso indica que, para este programa en particular, el bit suid y el ejecutable han sido establecidos. Debido a esto, cuando passwd es ejecutado, se ejecutará en nombre del usuario root (con total acceso de superusuario) en lugar del usuario que lo ejecutó. Y ya que passwd se ejecuta con acceso de root, es capaz de modificar el archivo /etc/passwd sin ningún problema.

Advertencias sobre suid/sgid

Hemos visto cómo funciona suid. sgid funciona de un modo similar. Le permite a los programas heredar el grupo propietario en lugar del usuario actual.

Importante: Aquí hay alguna información diversa importante acerca de suid y sgid. En primer lugar, los bits suid y sgid ocupan el mismo espacio que los bits x en un listado ls -l. Si se ha activado también el bit x, los bits respectivos se mostrarán como una s (en minúsculas). Sin embargo, si el bit x no ha sido definido, se mostrará como una S (en mayúsculas).

Importante: Otra nota importante: suid y sgid son útiles en muchas circunstancias, pero el uso indebido de estos bits puede permitir que la seguridad de un sistema sea violada. Lo mejor es tener la menor cantidad posible de programas suid. La orden passwd es una de las pocas que deben ser suid.

Cambiando suid y sgid

Activar y desactivar los bits suid y sgid es bastante sencillo. Aquí, activamos el bit suid:

Listado de Código 3.22: Activando el bit suid

# chmod u+s /usr/bin/miaplicacion

Y aquí, eliminamos el bit sgid de un directorio. Veremos como el bit sgid afecta a los directorios en unos cuantos paneles más:

Listado de Código 3.23: Eliminando el bit sgid

# chmod g-s /home/drobbins

Permisos y directorios

Hasta ahora, hemos buscado en los permisos desde la perspectiva de los archivos normales. Cuando se trata de directorios, las cosas son un poco diferentes. Los directorios usan las mismas banderas, pero son interpretadas de un modo ligeramente diferente.

En el caso de un directorio, si la bandera "leer" es activada, puede listar el contenido del directorio; "escribir" significa que puede crear archivos dentro del directorio; y "ejecutar" significa que puede entrar al directorio y acceder a cualquier subdirectorio interno. Sin la bandera "ejecutar", los objetos del sistema de archivos dentro de un directorio no son visibles, pero los objetos dentro del directorio aún pueden accederse mientras alguien conozca la ruta completa al objeto en el disco.

Directorios y sgid

Y, si un directorio tiene la bandera "sgid" activada, cualquier objeto del sistema de archivos creado dentro de él heredarán el grupo del directorio. Esta característica en particular le será útil cuando necesite crear un árbol de directorio para ser usado por un conjunto de personas que pertenecen al mismo grupo. Simplemente haga lo siguiente:

Listado de Código 3.24: Crear un directorio para un grupo de personas

# mkdir /home/espaciogrupal
# chgrp migrupo /home/espaciogrupal
# chmod g+s /home/espaciogrupal

Ahora, cualquier usuario en el grupo migrupo puede crear archivos y directorios dentro de /home/espaciogrupal, y además les será asignada automáticamente la propiedad del grupo migrupo. Dependiendo de la configuración de umask de los usuarios, los nuevos objetos del sistema de archivos podrán ser o no ser leídos, escritos, o ejecutados por otros miembros del grupo migrupo.

Directorios y borrado

De manera predeterminada, los directorios de Linux se comportan de una manera que puede no ser ideal para todas las situaciones. Habitualmente, cualquiera puede renombrar o eliminar un archivo dentro de un directorio, siempre y cuando tenga acceso de escritura a ese directorio. Para directorios utilizados por usuarios individuales, este comportamiento por lo general es correcto.

Sin embargo, para directorios que son utilizados por muchos usuarios, especialmente /tmp y /var/tmp, este comportamiento puede ser una mala noticia. Ya que cualquiera puede escribir en esos directorios, cualquiera puede borrar o renombrar cualquier archivo de los demás, ¡incluso si no le pertenece! Obviamente, es difícil usar /tmp para algo importante si otro usuario puede escribir rm -rf /tmp/* en cualquier momento y destruir los archivos de todos.

Afortunadamente, Linux tiene algo llamado el bit pegajoso (sticky). Cuando /tmp tiene el bit pegajoso activado (con un chmod +t), las únicas personas que son capaces de borrar o renombrar archivos en el directorio /tmp son los propietarios del directorio (generalmente root), los propietarios del archivo, o root. Prácticamente todas las distribuciones de Linux habilitan de manera predeterminada el bit pegajoso en /tmp, pero este bit puede ser de utilidad en otras situaciones.

El escurridizo primer dígito

Y para concluir esta sección, finalmente veremos el escurridizo primer dígito de un modo numérico. Como puede ver, el primer dígito es usado para definir los bits pegajoso, suid, y sgid:

suid sgid pegajoso modo de dígitos
encendido encendido encendido 7
encendido encendido apagado 6
encendido apagado encendido 5
encendido apagado apagado 4
apagado encendido encendido 3
apagado encendido apagado 2
apagado apagado encendido 1
apagado apagado apagado 0

He aquí un ejemplo de cómo utilizar un modo numérico de 4 dígitos para definir permisos para un directorio que será usado por un grupo de trabajo:

Listado de Código 3.25: Definir permisos numéricos

# chmod 1775 /home/archivosdelgrupo

Como tarea, averigüe el significado de la configuración de permiso numérico 1755. :)

4.  Gestión de cuentas en Linux

Introducción a /etc/passwd

En esta sección, vamos a ver el mecanismo de gestión de cuentas en Linux, comenzando con el archivo /etc/passwd, el cual define todos los usuarios que existen en el sistema Linux. Puede ver su propio archivo /etc/passwd tecleando less /etc/passwd.

Cada línea en /etc/passwd define una cuenta de usuario. He aquí una línea muestra de mi archivo /etc/passwd:

Listado de Código 4.1: /etc/passwd

drobbins:x:1000:1000:Daniel Robbins:/home/drobbins:/bin/bash

Como puede ver, hay un bastante información en esta línea. De hecho, cada línea de /etc/passwd consiste en múltiples campos, cada uno separado por :.

El primer campo define el nombre de usuario (drobbins), y el segundo campo contiene una x. En los antiguos sistemas Linux, este campo contiene una contraseña cifrada usada para la autenticación, pero prácticamente todos los sistemas Linux ahora almacenan esta información de la contraseña en otro archivo.

El tercer campo (1000) define el identificador numérico de usuario asociado con este usuario en particular, y el cuarto campo (1000) asocia este usuario con un grupo en particular; en unos cuantos paneles más abajo, veremos dónde se define el grupo 1000.

El quinto campo contiene una descripción textual de esta cuenta, en este caso, el nombre del usuario. El sexto campo define el directorio home del usuario, y el séptimo campo especifica la interfaz de comandos predeterminada del usuario, la que se iniciará automáticamente cuando el usuario inicia sesión.

Consejos y trucos sobre /etc/passwd

Probablemente habrá observado que se han definido muchas más cuentas de usuario en /etc/passwd de las que realmente inician sesión en su sistema. Esto es porque varios componentes de Linux utilizan las cuentas de usuario para mejorar la seguridad. Por lo general, estas cuentas del sistema tienen un identificador de usuario ("uid") menor que 100, y muchas de ellas tendrán algo parecido a /bin/false como su interfaz de comandos predeterminada. Debido a que el programa /bin/false no hace nada más que dar la salida de un error de código, previene eficazmente que estas cuentas puedan ser utilizadas como cuentas para inicio de sesión, son solo para uso interno.

/etc/shadow

Por lo tanto, las cuentas de usuario en sí son definidas en /etc/passwd. Los sistemas Linux contienen un archivo que acompaña a /etc/passwd llamado /etc/shadow. Este archivo, a diferencia de /etc/passwd, es legible solamente para root y contiene la información cifrada de las contraseñas. Veamos una línea de ejemplo de /etc/shadow:

Listado de Código 4.2: /etc/shadow

drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0

Cada línea define información de la contraseña para una cuenta en particular, y nuevamente, cada campo está separado por :. El primer campo define la cuenta de un usuario en particular a la cual esta entrada de shadow se asocia. El segundo campo contiene la contraseña cifrada. Los campos restantes son descritos en la siguiente tabla:

campo 3 número de días desde el 1/1/1970 en que la contraseña fue modificada
campo 4 número de días antes de que se permita cambiar la contraseña (0 para "cambiar en cualquier momento")
campo 5 número de días antes de que el sistema obligue al usuario a cambiar su contraseñan por una nueva (-1 para "nunca")
campo 6 número de días antes de que el usuario reciba un aviso sobre el vencimiento de su contraseña (-1 para "sin previo aviso")
campo 7 número de días que deben transcurrir después de caducada la contraseña para que la cuenta sea desactivada (-1 para "nunca desactivar")
campo 8 número de días en que la cuenta será deshabilitada (-1 para "esta cuenta está habilitada")
campo 9 Reservado para un uso futuro

/etc/group

A continuación, echaremos un vistazo al archivo /etc/group, el cual define todos los grupos de un sistema Linux. Aquí hay una línea de muestra:

Listado de Código 4.3: /etc/group

drobbins:x:1000:

El formato de los campos de /etc/group se describe a continuación. El primer campo define el nombre del grupo; el segundo campo es un vestigio del campo de contraseña que ahora simplemente tiene una x, y el tercer campo define el identificador numérico de este grupo en particular. El cuarto campo (vacío en el ejemplo anterior) define los usuarios miembros del grupo.

Recordará que nuestra línea muestra de /etc/passwd hacía referencia a un identificador de grupo de 1000. Esto tiene el efecto de colocar el usuario drobbins en el grupo drobbins, incluso cuando el nombre de usuario drobbins no aparezca en el cuarto campo de /etc/group.

Notas de grupos

Una nota sobre la asociación de usuarios con grupos: en algunos sistemas, encontrará que cada nueva cuenta de inicio de sesión está asociada con un grupo con el mismo nombre (y generalmente la misma numeración). En otros sistemas, todas las cuentas de inicio de sesión pertenecen a un grupo de usuarios. Se puede decidir el enfoque que utilizará el sistema a administrar. Crear grupos que correspondan a cada usuario tiene la ventaja de permitirles a los usuarios controlar con mayor facilidad el acceso a sus propios archivos colocando a sus amigos de confianza en su grupo personal.

Agregar un usuario y un grupo manualmente

Ahora, le mostraré cómo crear su propia cuenta de usuario y grupo. La mejor manera de aprender cómo hacer esto es agregar un nuevo usuario al sistema manualmente. Para comenzar, primero asegúrese que su variable de ambiente EDITOR está ajustada a su editor de texto favorito:

Listado de Código 4.4: Revisar la variable del editor de texto favorito

# echo $EDITOR
vim

Si no es así, puede definir EDITOR escribiendo algo como:

Listado de Código 4.5: Definir la variable EDITOR

# export EDITOR=/usr/bin/emacs
# vipw

Ahora debe encontrarse en su editor de texto favorito con el archivo /etc/passwd cargado en la pantalla. Cuando modifiquemos los archivos del sistema passwd y group, es muy importante usar las órdenes vipw y vigr. Estas órdenes toman precauciones adicionales para asegurar que sus archivos fundamentales passwd y group sean cerrados correctamente y no se corrompan.

Editar /etc/passwd

Ahora que tiene abierto el archivo /etc/passwd, agregue la siguiente línea:

Listado de Código 4.6: /etc/passwd

usuariodeprueba:x:3000:3000:Usuario de prueba del tutorial LPI:/home/usuariodeprueba:/bin/false

Acabamos de agregar un usuario "usuariodeprueba" con un UID de 3000. Lo agregamos al grupo con un GID de 3000, que aún no creamos. Como otra opción, podríamos asignar este usuario a el GID del grupo users si quisiéramos. Este nuevo usuario tiene un comentario que dice Usuario de prueba del tutorial LPI; el directorio home del usuario está establecido con la ruta /home/usuariodeprueba, y la interfaz de comandos asignada está establecida como /bin/false por motivos de seguridad. Si creáramos una cuenta que no sea de prueba, debemos establecer la interfaz de comandos a /bin/bash. Continúe guardando los cambios y saliendo de la aplicación.

Editar /etc/shadow

Ahora, tenemos que agregar una entrada en /etc/shadow para este usuario en particular. Para hacerlo, teclee vipw -s. Le dará la bienvenida su editor favorito, el cual ahora contiene el archivo /etc/shadow. Ahora, siga adelante y copie la línea de una cuenta de usuario existente (una que tiene contraseña y es más larga que las entradas de las cuentas estándar del sistema):

Listado de Código 4.7: /etc/shadow

drobbins:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0

Ahora, cambie el nombre de usuario en la línea copiada por el nombre del nuevo usuario, y asegúrese de que todos los campos (particularmente el de la vigencia de la contraseña) están definidos a su gusto:

Listado de Código 4.8: /etc/shadow modificado

usuariodeprueba:$1$1234567890123456789012345678901:11664:0:-1:-1:-1:-1:0

Ahora, guarde y salga.

Establecer una contraseña

Regresará al prompt. Ahora, es el momento de establecer una contraseña para el nuevo usuario:

Listado de Código 4.9: Establecer una contraseña para un nuevo usuario

# passwd usuariodeprueba
Enter new UNIX password: (introduzca la contraseña para
usuariodeprueba)
Retype new UNIX password: (introduzca de nuevo la contraseña de
usuariodeprueba)

Editar /etc/group

Ahora que /etc/passwd y /etc/shadow están definidos, es el momento de configurar apropiadamente /etc/group. Para ello, escriba:

Listado de Código 4.10: Configurar /etc/group

# vigr

Su archivo /etc/group aparecerá, listo para ser editado. Ahora, si opta por asignar su usuario de prueba en particular a un grupo predeterminado de usuarios, no es necesario añadir ningún grupo a /etc/groups. Sin embargo, si optó por crear un grupo nuevo para este usuario, continúe y agregue la siguiente línea:

Listado de Código 4.11: Agregar un grupo nuevo manualmente

usuariodeprueba:x:3000:

Ahora guarde y salga.

Crear un directorio home

Estamos a punto de terminar. Escriba las siguientes órdenes para crear el directorio home de usuariodeprueba:

Listado de Código 4.12: Crear el directorio home

# cd /home
# mkdir usuariodeprueba
# chown usuariodeprueba.usuariodeprueba usuariodeprueba
# chmod o-rwx usuariodeprueba

Nuestro directorio home del usuario ya está en su lugar, y la cuenta está lista para su uso. Bueno, casi lista. Si desea utilizar esta cuenta, tendrá que utilizar vipw para cambiar el intérprete de comandos por defecto de usuariodeprueba a /bin/bash para que el usuario pueda iniciar sesión.

Utilidades de la administración de cuentas

Ahora que sabe cómo agregar una nueva cuenta y un grupo manualmente, vamos a revisar las diversas utilidades de administración de cuentas disponibles en Linux que permiten ahorrar tiempo. Debido a las limitaciones de espacio, no vamos a cubrir con gran detalle estas órdenes. Recuerde que siempre puede obtener más información sobre una orden, revisando la página del manual. Si está planeando tomar el examen LPIC 101, debe pasar algún tiempo familiarizándose con cada una de estas órdenes.

newgrp

De manera predeterminada, los archivos que un usuario crea son asignados al grupo del usuario especificado en /etc/passwd. Si el usuario pertenece a otros grupos, el o ella pueden escribir newgrp estegrupo para establecer la pertenencia actual de grupo al grupo estegrupo. Entonces, los archivos nuevos creados heredarán la pertenencia a estegrupo.

chage La orden chage se utiliza para ver y cambiar la configuración del tiempo que lleva la contraseña almacenada en /etc/shadow.
gpasswd Una herramienta de administración de grupos de uso general.
groupadd/groupdel/groupmod Utilizadas para agregar/borrar/modificar grupos en /etc/group
useradd/userdel/usermod Utilizadas para agregar/borrar/modificar usuarios en /etc/passwd. Estas órdenes también desempeñan otras funciones prácticas. Vea las páginas del manual para más información.
pwconv/grpconv Se utilizan para convertir los archivos passwd y group al "nuevo estilo" de contraseñas ocultas. Prácticamente todos los sistemas Linux ya utilizan contraseñas ocultas, por lo que probablemente nunca necesite utilizar estas órdenes.

5.  Ajustar el entorno de usuario

Introducción a "fortune"

Su intérprete de comandos tiene muchas opciones útiles que se pueden configurar para adaptarse a sus preferencias personales. Hasta ahora, sin embargo, no hemos hablado de alguna manera para que estas configuraciones se establezcan de forma automática cada vez que inicie sesión, a excepción de escribirlas de nuevo cada vez. En esta sección vamos a ver el ajuste de su entorno de inicio de sesión, modificando los archivos de inicio.

En primer lugar, vamos a añadir un mensaje amistoso para la primera vez que inicie sesión. Para ver un mensaje de ejemplo, ejecute fortune:

Listado de Código 5.1: Ejecutar la orden fortune

$ fortune
No amount of careful planning will ever replace dumb luck.
(Ninguna cantidad de cuidadosa planificación sustituirá jamás la suerte.)

.bash_profile

Ahora, vamos a configurar fortune para que se ejecute cada vez que inicie sesión. Use su editor de texto favorito para editar un archivo llamado .bash_profile en su directorio home. Si el archivo no existe todavía, créelo. Agregue una línea en la parte superior:

Listado de Código 5.2: ~/.bash_profile

fortune

Intente salir y regresar. A menos de que esté ejecutando un gestor de ventanas como xdm, gdm, o kdm, será saludado con alegría cuando inicie sesión:

Listado de Código 5.3: Resultados de la orden fortune en el archivo .bash_profile

mycroft.flatmonk.org login: chouser
Password:
Freedom from incrustations of grime is contiguous to rectitude.
(La ausencia de incrustaciones de suciedad es contigua a la rectitud.)
$

El intérprete de comandos de inicio de sesión

Cuando bash inicia, pasa a través del archivo .bash_profile del directorio home, ejecutando cada línea como si hubiera sido escrita en el prompt bash. A esto se le llama abastecimiento (sourcing) de un archivo.

Bash actúa algo diferente dependiendo de cómo se inicia. Si es iniciado como un intérprete de comandos de inicio, actuará como lo hizo arriba, primero abasteciendo todo el sistema /etc/profile, y luego su ~/.bash_profile personal.

Hay dos maneras de decirle a bash que se ejecute como intérprete de comandos de inicio de sesión. Una manera es en su primer inicio de sesión: bash es inicializado con el nombre de proceso -bash. Puede ver que este es su lista de procesos:

Listado de Código 5.4: Listado de procesos

$ ps u
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
chouser    404  0.0  0.0  2508  156 tty2     S     2001   0:00 -bash

Probablemente verá una lista mucho mas larga, pero debe tener al menos un COMMAND con un guión antes del nombre de su intérprete de comandos, como -bash en el ejemplo anterior. Este guión es utilizado por el intérprete de comandos para determinar si está ejecutándose como un intérprete de comandos de inicio de sesión.

Entendiendo --login

La segunda manera de decirle a bash que se ejecute como un intérprete de comandos de inicio de sesión es con la orden --login. Esto es utilizado algunas veces por los emuladores de terminales (como xterm) para hacer que sus sesiones de bash actúen como una sesión de inicio.

Después de haber iniciado sesión, se ejecutarán más copias de su intérprete de comandos. A menos que se hayan iniciado con --login o tengan un guión en su nombre de proceso, estas sesiones no serán intérpretes de comandos de inicio de sesión. Si le dan un prompt, sin embargo, se llaman intérpretes de comandos interactivos. Si bash se inicia como interactivo, pero no de inicio de sesión, ignorará /etc/profile y ~/.bash_profile y utilizará ~/.bashrc.

interactivo inicio perfil rc
si si fuente ignorar
si no ignorar fuente
no si fuente ignorar
no no ignorar ignorar

Pruebas de interactividad

Algunas veces bash abastece su ~/.bashrc, aunque no es realmente interactivo, como cuando utiliza órdenes como rsh y scp. Esto es importante tenerlo en cuenta porque la impresión de texto, como lo hicimos antes con la orden fortune, puede estropear las sesiones no interactivas de bash. Es una buena idea usar la variable PS1 para detectar si el intérprete de comandos actual es realmente interactivo antes de imprimir texto desde un archivo de inicio:

Listado de Código 5.5: Comprobar la variable PS1

if [ -n "$PS1" ]; then
fortune
fi

/etc/profile y /etc/skel

Como administrador del sistema, está a cargo de /etc/profile. Debido a que es abastecido por todos cuando inician sesión, es importante mantenerlo en orden su funcionamiento. Es también una herramienta poderosa para hacer que las cosas funcionen correctamente para los nuevos usuarios tan pronto como ingresan a su nueva cuenta.

Sin embargo, hay algunas opciones que puede desear que los usuarios nuevos tengan de manera predeterminada, pero también puedan cambiar con facilidad. Aquí es donde el directorio /etc/skel entra en juego. Cuando usa la orden useradd para crear una nueva cuenta de usuario, copia todos los archivos de /etc/skel en el nuevo directorio home del usuario. Esto significa que puede poner archivos útiles .bash_profile y .bashrc en /etc/skel para darles a los nuevos usuarios un buen inicio.

export

Las variables en bash pueden marcarse para ser las mismas en cualquier intérprete de comandos nuevo que inicie; a esto se le llama: marcadas para exportar. Puede tener una lista de todas las variables que actualmente están marcadas para exportar a su sesión del intérprete de comandos:

Listado de Código 5.6: Resultados de la orden export

$ export
declare -x EDITOR="vim"
declare -x HOME="/home/chouser"
declare -x MAIL="/var/spool/mail/chouser"
declare -x PAGER="/usr/bin/less"
declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/chouser/bin"
declare -x PWD="/home/chouser"
declare -x TERM="xterm"
declare -x USER="chouser"

Marcar variables para export

Si una variable no es marcada para exportar, cualquier intérprete de comandos que inicie no tendrá esa variable establecida. Sin embargo, puede marcar una variable para exportar pasándola por la orden incorporada export:

Listado de Código 5.7: Marcar variables para exportar

$ FOO=foo
$ BAR=bar
$ export BAR
$ echo $FOO $BAR
foo bar
$ bash
$ echo $FOO $BAR
bar

En este ejemplo, se han definido las variables FOO y BAR, pero solo BAR fue marcada para exportar. Cuando un nuevo bash inicia, ha perdido el valor de FOO. Si sale de este nuevo bash, verá que el original aún posee los valores tanto para FOO como para BAR:

Listado de Código 5.8: Revisar los ajustes en el bash original

$ exit
$ echo $FOO $BAR
foo bar

Exportar y establecer -x

Debido a este comportamiento, las variables se pueden definir en ~/.bash_profile o en /etc/profile y marcarlas para exportar, y nunca será necesario definirlas de nuevo. Hay algunas opciones que no se pueden exportar, sin embargo, deben ponerse en su ~/.bashrc y en su profile con el fin de definirlas constantemente. Estas opciones son ajustadas con la orden incorporada set:

Listado de Código 5.9: Usar la orden set

$ set -x

La opción -x ocasiona que bash imprima cada orden que va a ejecutar:

Listado de Código 5.10: Comprobar los resultados de la opción -x

$ echo $FOO
$ echo foo
foo

Esto es muy útil para entender un comportamiento inesperado o errores similares. Para deshabilitar la opción -x, utilice set +x. Vea la página de manual bash para todas las opciones de la orden incorporada set.

Definir variables con "set"

La orden incorporada set también se puede usar para definir variables, pero el uso de esta forma es opcional. La orden de bash set FOO=foo significa exactamente lo mismo que FOO=foo. Para dejar una variable sin definir utilice la orden incorporada unset:

Listado de Código 5.11: Dejar una variable sin definir

$ FOO=bar
$ echo $FOO
bar
$ unset FOO
$ echo $FOO

Unset contra FOO=

No es lo mismo que definir una variable a nada, algunas veces es difícil notar la diferencia. Una manera de saberlo es usar la orden incorporada set sin parámetros para listar las variables actuales:

Listado de Código 5.12: Comparación de unset y FOO=

$ FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO

El uso de set sin parámetros como estos es similar a usar la orden incorporada export, excepto que set lista todas las variables en lugar de las marcadas para exportar.

Exportar para cambiar el comportamiento de una orden

También, el comportamiento de las órdenes puede ser alterado fijando variables del entorno. Al igual que en las nuevas sesiones de bash, otros programas que inician desde su prompt de bash solo podrán ver variables que son marcadas para exportar. Por ejemplo, la orden man revisa la variable PAGER para ver qué programa debe usar para pasar a través del texto de una página a la vez.

Listado de Código 5.13: Exportar la variable PAGER

$ PAGER=less
$ export PAGER
$ man man

Con PAGER fijado a less, verá una página a la vez, y presionando la barra espaciadora se moverá a la siguiente página. Si cambia PAGER a cat, el texto será desplegado totalmente de una sola vez, sin detenerse.

Listado de Código 5.14: Fijar la variable PAGER a cat

$ PAGER=cat
$ man man

Uso de "env"

Desafortunadamente, si olvida volver a definir PAGER a less, man (así como otras órdenes) seguirán desplegando su contenido sin detenerse. Si quiere asignar cat a PAGER solo una vez, debe usar la orden env:

Listado de Código 5.15: Usar la orden env para definir una variable

$ PAGER=less
$ env PAGER=cat man man
$ echo $PAGER
less

Esta vez, PAGER fue exportado a man con un valor de cat, pero la variable PAGER permanece sin cambios en la sesión de bash.

6.  Resumen y recursos

Resumen

¡Felicitaciones por terminar la parte 3 de esta serie de tutoriales! En este punto, debe saber cómo localizar información en documentación del sistema y de Internet, y debe tener una buena comprensión del modelo de permisos Linux, manejo de cuentas de usuario y ajuste del entorno de inicio de sesión.

Recursos

Asegúrese de revisar los recursos bibliográficos cubiertos en este tutorial, particularmente el Linux Documentation Project. Encontrará su colección de guías, COMOs, FAQs, y páginas de manual como un recurso invaluable. Revise también Linux Gazette y LinuxFocus.

La guía Linux System Administrators (disponible en la sección "Guías" de www.tldp.org) es un buen complemento a esta serie de tutoriales, ¡dele una leída! También Unix and Internet Fundamentals HOWTO de Eric S. Raymond le será de gran ayuda.

Puede leer el proyecto de documentación GNU en línea para el sistema de información GNU (conocido también como "texinfo") en la página de documentación GNU's texinfo.

Busque Linux newsgroup list en el sitio de LDP, y el archivo de noticias de grupo en Deja News.

En la serie de artículos “Bash con ejemplos” de developerWorks, Daniel le muestra cómo usar los programas constructores de bash para escribir sus propios guiones de bash. Esta serie (particularmente la parte 1 y 2) será una buena preparación para el examen LPIC nivel 1 y refuerza los conceptos cubiertos en la sección "Ajustando el ambiente de usuario" de este tutorial:

Recomendamos ampliamente el Technical FAQ by Linux Users de Mark Chapman, un listado de 50 páginas que muestran la lista de preguntas más frecuentes de Linux con respuestas detalladas. El FAQ es un archivo formato PDF (Acrobat). Si es un usuario Linux principiante o intermedio, definitivamente debe revisar este FAQ. También recomendamos el Linux glossary for Linux users, también de Mark.

Si no está familiarizado con el editor vi, revise Vi intro -- the cheat sheet method tutorial de Daniel. Este tutorial le dará una gentil y rápida introducción a este poderoso editor de texto. Considere este material como un "debe leer" si desconoce cómo utilizar vi.

Para una introducción al editor Emacs, vea el tutorial de developerWorks, Living in Emacs.

Comentarios

Por favor permítanos conocer si este tutorial le fue de ayuda y cómo podríamos mejorarlo. También nos gustaría saber qué otros temas le gustaría que fueran cubiertos por los tutoriales de developerWorks.

Para preguntas sobre el contenido de este tutorial, contacte con los autores:



Imprimir

Página actualizada 20 de junio, 2007

Sumario: En este tutorial le daremos una introducción a la documentación del sistema Linux. Le mostraremos cómo cambiar permisos y cómo manejar las cuentas Linux. Al final aprenderá como ajustar su entorno.

Daniel Robbins
Autor

Chris Houser
Autor

Aron Griffis
Autor

Nilda Gabriela Villanueva Chacón
Traductora

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.