Mostrando entradas con la etiqueta variables. Mostrar todas las entradas
Mostrando entradas con la etiqueta variables. Mostrar todas las entradas

miércoles, 16 de julio de 2014

Archivos de gestión de usuarios y grupos

Resto de entradas con intenciones didácticas en la etiqueta Aprendizaje.

A medida que vayamos adentrándonos en nuestro sistema Linux la gestión de usuarios y grupos se convertirá en un asunto capital. Antes de entrar a analizar los comandos que nos permiten crear y gestionar usuarios y grupos vamos a describir los archivos que intervienen en dichas operaciones.

/etc/skel/
Directorio donde se almacenan los archivos que se cargarán al crear un nuevo usuario.

/etc/default/useradd
Este es el fichero donde se guardan los ajustes de usuario.

/etc/logins.defs
Archivo que controla la vigencia de las contraseñas. Vamos a destacar tres variables de entorno relevantes para este aspecto:
PASS_MAX_DAYS: establece la vigencia de las contraseñas en nº de días.
PASS_MIN_DAYS: establece la vigencia mínima en nº de días de una contraseña. Si su valor es cero podremos cambiarla cuando lo queramos.
PASS:WARN_AGE: establece el nº de días a partir del cual se avisará al usuario de la caducidad de su contraseña.

Recordemos que sobre las variables de entorno hablamos aquí.

/etc/passwd
Archivo editable (como root) con la lista de usuarios del sistema. Debería tener permiso de lectura para todos pero solo de escritura para root. Veamos un ejemplo de línea de este fichero:

daemon:x1:1:daemon:/usr/sbin:/bin/sh

Desglose:

daemon: es el nombre de la cuenta.
x: es la clave encriptada.
1: es el UID (User IDentification, identificador de usuario). El UID de valor 0 pertenece al administrador. Por debajo de 100 es de sistema; por encima, de los usuarios.
1: es el GID (Group IDdentification, identificador de grupo).
daemon: es el GECOS o campo destinado a un comentario descriptivo del usuario o grupo.
/usr/bin: directorio del usuario.
/bin/sh: terminal por defecto.

Si quisiéramos crear un usuario manualmente sin recurrir a los comandos al uso, tendríamos que añadir al fichero /etc/psswd una línea similar a la que sigue:

manuel::523:100:ManuelPerezAdministrativo:/home/manuel:bin/Bash

Así, habríamos creado un usuario cuya cuenta recibe el nombre de manuel, con el UID 523, el GID 100, con ManuelPerezAdministrativo como campo GECOS o de comentarios, siendo /home/manuel su directorio de usuario y /bin/Bash su shell por defecto. No tendría contraseña, la cual había que crear con el comando passwd.

/etc/group
Archivo con la lista de grupos y los miembros de cada uno de ellos. Este sería un ejemplo de contenido:

daemon:x:1:<otro>

Desglose:

daemon: nombre del grupo; no puede repetirse y ha de tener un máximo de ocho caracteres.
x: contraseña que permite acceder a un usuario con el comando newgrp (las contraseñas ocultas se sustituyen por una x y se almacenan en el fichero /etc/gshadows).
1: GID, identificador de grupo, que debe ser único.
<otro>: aquí vendrán los nombres de los usuarios miembros del grupo.

Ejemplo de línea añadida manualmente: Compras::1020:Pablo:Silvia:Pedro:Sergio.

/etc/shadow
Archivo donde se almacenan las contraseñas de los usuarios y que solo es accesible como root. Ejemplo de contenido:

daemon:*:14889:0:99999:7:::

Desglose:

daemon: nombre de usuario.
*: contraseña.
14889: fecha de la última modificación de contraseña.
0: nº de días que tardará la contraseña en expirar.
99999: periodo de aviso en días de expiración de contraseña.
7: nº de días que trascurren desde que expira la contraseña hasta que se desactiva la cuenta.
Fecha de desactivación de la cuenta (en caso de proceder).

El campo que lleve un carácter ¡ o un asterisco * indica cuanta bloqueada. Si lleva los caracteres !! o el asterisco * es una cuenta no asignada.

/etc/gshadow
Es el archivo donde se almacenan las contraseñas para los grupos y solo es accesible para root.

Finalizamos con un par de comandos relacionados con todo lo que hemos visto:

grpconv
Sirve para crear el archivo /etc/gshadow y cambiar las contraseñas del archivo /etc/group por una x.

grpunconv
Revierte el resultado de grpconv.

En otro post hablaremos más en profundidad de la creación y gestión de usuarios y grupos. Mientras, escuchemos a este grupo progresivo noruego, Airbag, interpretando "Redemption".


domingo, 16 de junio de 2013

Variables de entorno

Resto de entradas con intenciones didácticas en la etiqueta Aprendizaje.

Las variables de entorno son una serie de valores que determinan el comportamiento de los procesos de nuestro sistema operativo. Estos valores pueden cambiarse en algunos casos y en otros son fijos y su valor tan solo puede ser consultado pero no modificado. En GNU/Linux podemos listarlas utilizando el comando env:

paco@debian:~$ env
ORBIT_SOCKETDIR=/tmp/orbit-pacoSSH_AGENT_PID=2162
TERM=xterm
SHELL=/bin/bash
XDG_SESSION_COOKIE=9658894403e9de24aa01f7b000000007-1371379692.769482-1626187763
GTK_RC_FILES=/etc/gtk/gtkrc:/home/paco/.gtkrc-1.2-gnome2
WINDOWID=41943043
GNOME_KEYRING_CONTROL=/tmp/keyring-qZFHIX
...
(el resultado del comando es más extenso pero no veo necesario transcribirlo entero ya que solo vamos a ver unas pocas variables)
paco@debian:~

Las variables tienen un nombre y un valor. Si queremos visualizar el valor de una variable basta con ejecutar el comando echo anteponiendo el símbolo del dólar $ al nombre de la variable:

paco@debian:~$ echo $HOME
/home/paco

paco@debian:~$

Esto significa que la variable HOME tiene el valor /home/paco, esto es, que almacena como valor nuestro directorio home, que en mi caso se llama paco.

Estas son las variables más relevantes y su valor:

  • CDPATH: nombre de alias de directorios a los que se accede mediante el comando cd.
paco@debian:~$ echo $CDPATH
paco@debian:~$

En este caso no nos devuelve valor alguno porque este no ha sido establecido.

  • EDITOR: editor de texto predeterminado que utilizan los diferentes programas.
paco@debian:~$ echo $EDITOR
paco@debian:~$

Tampoco nos devuelve valor alguno porque no ha sido establecido. Le podemos estipular un valor de una manera simple:

paco@debian:~$ EDITOR=nano
paco@debian:~$

De esta forma hemos establecido el editor de textos nano como valor para la variable EDITOR. Al ser nano un comando, si tecleamos $EDITOR directamente interpretará dicho comando como valor de la variable EDITOR y automáticamente abrirá nano. Este cambio solo es válido mientras dure la sesión actual.

  • ENV: ruta donde se buscan los archivos de configuración. Tampoco la tengo establecida.
  • HOME: directorio personal de cada usuario).
paco@debian:~$ echo $HOME
paco@debian:~$ /home/paco

  • HOSTNAME: nombre de la máquina (en mi caso es debian, tal y como figura el el prompt de comandos).
paco@debian:~$ echo $HOSTNAME
paco@debian:~$ debian
  • MAIL: nombre del archivo que contiene el buzón de correo del sistema.
  • PATH:  directorios en los que la shell busca programas o comandos. Estos directorios aparecen separados por el carácter dos puntos (ver aquí un ejemplo de gestión de esta variable):
paco@debian:~$ echo $PATH
paco@debian:~$ /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
  • PWD: contiene la dirección del directorio de trabajo actual.
paco@debian:~$ echo $PWD
paco@debian:~$ /home/paco
paco@debian:~$ cd ..
paco@debian:/home$ echo $PWD
/home

paco@debian:/home$

La variable PWD establece el directorio actual, sea el que sea. Estábamos en /home/paco y ese era el valor de PWD hasta que subimos un nivel en el árbol de directorios con cd .. y nos posicionamos en /home. A partir de ahí el valor de PWD pasó a ser /home.
  • SHELL: nombre de la shell actual del sistema, que en mi caso es Bash (la cual se muestra con su ruta completa).
paco@debian:~$ echo $SHELL
paco@debian:~$ /bin/bash
  • TERM: tipo de terminal de consola que utiliza el usuario. En el caso de Debian es xterm.
paco@debian:~$ echo $TERM
paco@debian:~$ xterm
  • USER: nombre del usuario actual.
paco@debian:~$ echo $USER
paco@debian:~$ paco

Hemos visto al principio el comando env para visualizar las variables de entorno, pero no es el único. también podemos utilizar los comandos export, set y printenv. Si el resultado es demasiado largo podemos paginarlo de la siguiente forma:

paco@debian:~$ set | more

De esta forma, el larguísimo resultado del comando set aparece por páginas, pulsando la barra espaciadora para pasar a la siguiente.

Si lo que nos interesa es crear variables de entorno nuevas, entonces export es nuestro comando:

paco@debian:~$ export FRUTAS=platanos
paco@debian:~$ echo $FRUTAS
platanos

paco@debian:~$

Como ven, hemos creado la variable FRUTAS y le hemos dado el valor plátanos (un ejemplo tonto como otro cualquiera). No obstante, esta variable recién creada solo sirve para la sesión actual. Si queremos ver como convertir los cambios en permanentes, así como otras utilidades del comando export, por favor, visiten esta entrada.

Hay más cosas que contar sobre las variables, pero como estamos en un estadio muy primario de aprendizaje más vale que lo dejemos por hoy. Y como hemos hablado de la variable EDITOR aquí les dejo con un tema del segundo álbum de los británicos Editors llamado "The Racing rats".

sábado, 1 de junio de 2013

Añadir un directorio a la variable PATH

Las variables son un importante aspecto dentro de los sistemas GNU/Linux que aún no he abordado, pero que tengo pendiente hacer pronto. Resumiendo mucho diré que son un conjunto de datos concretos que condicionan nuestro trabajo en la terminal y que podemos almacenar y modificar. Por si prefieren la definición de Wikipedia aquí la tienen.

Una de las variables más importantes de Linux es PATH, la cual determina los directorios donde la shell busca los ficheros binarios (los ejecutables en terminología Windows) de los comandos para no tener que teclearlos con su ruta completa. Al hilo del anterior post, resulta que en Debian Wheezy no figura el directorio /sbin en la variable PATH, por lo que todos los comandos contenidos ahí, entre los que están los relativos a los módulos del kernel como modinfo, modprobe o rmmod, no se ejecutan automáticamente cuando los tecleamos en la terminal y pulsamos enter. Para que esto sea así tenemos que añadir el susodicho directorio /sbin a la variable PATH. Procedamos.

Primero veamos los directorios que ya están incluidos en la variable PATH. Lo hacemos anteponiendo el símbolo del dólar ( $ ) a PATH:

paco@paco-pc:~$PATH
bash: /usr/local/bin:usr/bin:/bin:/usr/local/games:usr/games: No existe el fichero o el directorio
paco@paco-pc:~$

También podemos verlo usando el comando echo:

paco@paco-pc:~$ echo $PATH
bash: /usr/local/bin:usr/bin:/bin:/usr/local/games:usr/games
paco@paco-pc:~$

Bien, estos son los directorios que la variable PATH trae por defecto, separados por dos puntos:

/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games

Ahora añadiremos el directorio /sbin a la variable PATH usando el comando export:

paco@paco-pc:~sudo export PATH=$PATH:/sbin
paco@paco-pc:~$

Ya está añadido. Lo podemos ver si volvemos a listar la variable PATH:

paco@paco-pc:~$ echo $PATH
bash: /usr/local/bin:usr/bin:/bin:/usr/local/games:usr/games:/sbin
paco@paco-pc:~$

Ocurre que este cambio es temporal y dejará de tener efecto en cuanto cerremos la sesión. Si queremos que el cambio sea permanente tenemos varias opciones. Podemos editar el archivo ~/.bashrc (recordemos que el carácter ~ equivale a /home/usuario, que el punto en primer lugar significa archivo oculto y que estamos hablando de la shell bash), el archivo ~/bash_profile, o el ~.profile en caso de que el anterior no exista y añadirle la siguiente línea:

PATH="$PATH:/sbin"

Si lo queremos hacer directamente desde el terminal sin abrir ningún editor de textos, usaremos el comando echo para definir la línea que queremos trasladar al archivo ~/.bashrc:

paco@paco-pc:~$ echo "export PATH=$PATH:/sbin" >> ~/.bashrc
paco@paco-pc:~$

Empleando los caracteres redireccionadores >> hemos añadido la línea entrecomillada al final del archivo ~/.bashrc (mucho ojito, que si solo ponemos un redireccionador sobreescribiremos el archivo). Terminamos aplicando el comando source para recargar el archivo ~/.bashrc:

paco@paco-pc:~$ source ~/.bashrc
paco@paco-pc:~$

Otra manera de hacerlo es estableciendo la variable y luego incorporándola con el comando export, todo en la misma línea:

paco@paco-pc:~$ PATH=/sbin:$PATH ; export PATH
paco@paco-pc:~$

Y aquí se acabó lo que se daba.

Y para "Path" el tema del mismo nombre que interpretan en directos los finlandeses Apocalyptica.