martes, 19 de mayo de 2009

Variables de entorno

En ocasiones es necesario cambiar los parámetros del sistema, ya sea para adecuarlos a nuestro lenguaje, a nuestras necesidades, para acceder a nuevo software, localizar librerías, etc.

Que variables tengo definidas?

Con el comando:

$ env

Veremos un listado de todas las variables que usa el sistema.

Donde se definen?

Esto ya no es tan sencillo, hemos de plantearnos si queremos hacer cambios permanentes o temporales, para un usuario o para todos. Los cambios temporales podemos hacerlos directamente en la linea de comandos, los permanentes los haremos en algún archivo de inicio, en uno global si es para todos (por ejemplo en /etc/bashrc) o dentro del directorio del usuario para el que queremos definirla (por en ~/.bashrc)
NOTA: los cambios en archivos de inicio no se reflejan hasta que se haga un nuevo login o con la orden:

$ source archivo_de_inicio

Como se definen?

Tanto si lo ponemos en algún guión de inicio, como desde la linea de comandos la sintaxis es la siguiente:

$ export VARIABLE="valor"

Modificando el PATH

Si queremos añadir una entrada al PATH no nos basta con la orden: (Peligro! no realizar)

$ export PATH="/home/dani/bin"

Pues esto elimina del PATH todas las demás entradas como /bin, /usr/bin La orden correcta seria:

$ export PATH="$PATH:/home/dani/bin"

Que indica al sistema que mantenga el PATH y añada la nueva entrada.

Grupos, usuarios y Permisos

Todo sistema linux permite el uso del mismo ordenador por diferentes usuarios. Para mantener una cierta seguridad de los datos de cada uno se asignan una serie de permisos y grupos.

Que usuarios necesito?

Como mínimo 2, root y otro mas, root ya existe y lo usaremos SOLAMENTE! para las tareas de mantenimiento del sistema, nunca para leer documentación, jugar, navegar por internet, experimentar comandos, para todo esto se usan los demás usuarios.

Creando usuarios

Hay varios comandos, el mas sencillo es

$ useradd nombre_de_usuario ; passwd nombre_de_usuario

Que crea un nuevo usuario con una serie de opciones predefinidas, estas opciones pueden cambiarse manualmente editando el archivo /etc/passwd (ATENCIÓN! un mal uso de este archivo puede llevar a la imposibilidad total de hacer un login en el sistema).

Comandos relacionados

$ users

Lista los nombres de los usuarios conectados al sistema,

$ w

y

$ who

Lista los usuarios e informa sobre la consola en la que están, el tiempo que llevan conectados y mas.

$ userdel nombre_de_usuario

Elimina un usuario

$ su

Salta de modo usuario a modo root.

Usuarios de sistema

Ademas de root y los usuarios que hayamos creado, el sistema tiene un grupo de usuarios que son necesarios y no debemos eliminar, son por ejemplo: bin, mail, news, operator, games,etc.

Grupos

Los grupos son una forma de dar los mismos permisos a un conjunto de usuarios, de manera que puedan trabajar en grupo.
Por defecto se crea un grupo por cada usuario, y esa política es la mejor en la mayoría de los casos, ademas existen grupos de sistema como: lp, mem, ftp, etc.

Permisos

Los permisos son necesarios para saber que usuarios pueden hacer ciertas cosas y cuales no. Por ejemplo, no es normal que dejemos entrar alguien por telnet y que nos modifique el /etc/passwd,
por ejemplo. El permiso de ejecución para un directorio significa que se puede acceder al contenido de ese directorio.

Los permisos de un link son los del archivo al que apunta.

Viendo y reconociendo permisos

Los permisos de un archivo se ven con la orden

$ ls -l

El formato de salida se parece a esto:

drwx------ 5 dani dani 1024 Jan 5 00:54 Desktop
drwx------ 2 dani dani 1024 Jan 2 19:48 Mail
drwxr-xr-x 2 dani dani 1024 Dec 27 16:27 docs

Lo mas importante son esas primeras letras ilegibles de cada linea. La primera letra indica el tipo de archivo (- archivo normal, d directorio, l link, b dispositivo). Las demás letras se leen de tres en tres, des esta manera:


d/rwx/r-x/r-x
El primer trío se refiere al propietario del archivo, el segundo a los demás miembros del grupo del propietario y el tercero al resto. Las letras son: r (permiso de lectura), w (permiso de escritura), x (permiso de ejecución).
Después los dos nombres se refieren al nombre del propietario y nombre del grupo al que pertenece el archivo, de esta manera nuestro archivo docs del ejemplo quedaría así:

drwxr-xr-x 2 dani dani 1024 Dec 27 16:27 docs

Que significa:

d: se trata de un directorio
rwx: permiso de lectura/escritura/ejecucion para el propietario
r-x: permiso de lectura/ejecución para el grupo
r-x: permiso de lectura/ejecución para el resto
Numero de inodos
dani: nombre del propietario
dani: nombre del grupo
1024: bytes (tamaño)
Dec 27 16:27: fecha de creación o de ultima modificación
docs: nombre

Cambiando permisos

El comando es

$ chmod permisos fichero

La forma de indicar los permisos es sencilla, se usa una letra para designar a quien se le quieren cambiar los permisos ("a" todos, "u" propietario, "g" grupo, "o" otros) después se pone un símbolo + (para dar el permiso) o - (para quitarlo) y finalmente se pone el permiso o los permisos que queremos cambiar ("r" lectura, "w" escritura, "x" ejecución).
Un ejemplo sencillo seria dar permiso de ejecución para todos a un fichero, la orden seria:

$ chmod a+x archivo

Cambiando grupo y propietario

Las ordenes son

$ chown usuario archivo

Para cambiar el propietario y

$ chgrp grupo archivo

Para cambiar el grupo.

Permisos especiales

A parte de los permisos básicos existen otros dos permisos, el sticky bit (completamente desfasado) y el SUID o SETUID. El SUID es un permiso que da permisos de root a un proceso aunque haya sido lanzado por un usuario, esto es necesario, por ejemplo para que usuarios normales puedan arrancar el entorno gráfico o puedan conectarse a internet. Este permiso se simboliza con la letra "s" y se aplica así:

$ chmod a+s archivo

Empaquetadores y Compresores

Linux entiende todos los formatos de compresión mas extendidos, como son ZIP, RAR, TAR; y tiene herramientas para su gestión, pero aquí voy a centrarme en los mas usados: tar, gzip y bzip2.

Tar

Es el empaquetador estándar de linux, empaquetador significa que no comprime, si no que junta un grupo de archivos en un solo archivo con extensión .tar, que es mas fácil de transportar o intercambiar entre sistemas o por la red. Es la herramienta ideal para las copias de seguridad. Tiene multitud de modificadores aunque los usos mas frecuentes son:

$ tar cvf archivo.tar archivos_a_comprimir

Para crear (empaquetar) archivos tar

$ tar xvf archivo.tar

para desempaquetar un tar.

Generalmente se usa junto a gzip con la orden:

$ tar xvfz archivo.tar.gz

Donde la z indica a tar que use compresión zip.

También se puede usar junto a bzip2 con la orden:

$ bzip2 -d * archivo.tar.bz2 | tar xfv -

Gzip

Es el compresor estándar de linux, en general se usa junto a tar, para comprimir un grupo de archivos empaquetados. La extensión de los archivos comprimidos con gzip es .gz, y la de los empaquetados y comprimidos es .tar.gz o .tgz. Gzip solo puede comprimir los archivos de uno en uno por lo que no es adecuado para compactar grupos de archivos. La orden es:

$ gzip -c archivo

Para comprimirlo, y

$ gzip -d archivo.gz

Para descomprimirlo.

Bzip2

Es el nuevo compresor sucesor del gzip, con ratios de compresión que lo superan en un 10% aproximadamente. La extensión es .bz2, y los comandos equivalentes al gzip:

$ bzip2 -c archivo

y

$ bzip -d archivo.bz2