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
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:
Retype new UNIX password:
|
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:
|