Archivo de la categoría: GNU / Linux

El acrónimo recursivo GNU, GNU’s Not Unix (GNU no es Unix), proviene de las herramientas básicas de sistema operativo creadas por el proyecto GNU, iniciado por Richard Stallman en 1983 y mantenido por la FSF. El nombre Linux viene del núcleo Linux, inicialmente escrito por Linus Torvalds en 1991

El sistema GNU / Linux

El sistema de archivos GNU / Linux

GNU / Linux está basado en el sistema de ficheros de UNIX, el cual tiene estructura de árbol. El punto de origen se llama root (raíz) y se representa con el símbolo /

Un sistema GNU / Linux puede ser instalado en una "única partición" o en múltiples particiones. Existiendo la partición especial para el intercambio con la memoria, la partición swap. Esta partición permite al sistema usar el disco cuando agota la memoria

Debajo de la raíz (/), cuelgan todos los directorios del sistema. Realmente de la raíz cuelga la partición raíz del sistema que contiene los ficheros básicos para el arranque y el manejo del sistema. Las demás particiones que podemos establecer cuelgan de directorios

Es posible tener en diferentes particiones los ficheros de usuario, las aplicaciones de usuario, ficheros de longitud variable, los ficheros temporales. El crear múltiples particiones nos permitirá administrar mejor el sistema

Podremos crear copias de seguridad de las partes que nos interese o limitar el uso de determinadas partes a un usuario concreto. De esta forma evitamos que el disco se llene completamente, ya que el único que tiene permiso de escritura en la partición raíz es el usuario administrador

El tipo de partición más utilizada en los sistemas GNU / Linux es ext2 o ext3. La unidades no fijas, como cd-rom, blu-disk, zip, pendrive, etc, cuelgan de distintos directorios con un nombre descriptivo que hace referencia a ellos, dentro del directorio /mnt

La descripción de las propiedades de cada partición se hace en el fichero /etc/fstab

Nombre de ficheros

Un nombre de fichero válido para el núcleo de Linux puede contener cualquier carácter salvo los caracteres ‘/’ (barra) o ‘\0’ (nulo)

Sin embargo no es prudente usar caracteres especiales usados por la shell (la línea de comandos) tales como ($, ", ‘, &, #, (, ), *, [, ], {, }, …). Tampoco debe empezar por el carácter ‘-‘ que puede ser confundido con una opción

Cuando un usuario es creado, la shell define por defecto que usará el directorio de entrada llamado igual que el nombre de usuario. El valor de este directorio de entrada se puede encontrar en la variable de sistema $HOME

En cada directorio hay al menos dos entradas accesibles, que son ‘.’ (referencia al directorio actual) y ‘..’ (referencia al directorio padre). En la variable $PATH se guarda la referencia al subdirectorio actual. Si queremos ejecutar comandos contenidos en el directorio actual, usaremos el comando

El carácter ‘/’ se utiliza para separar los diferentes niveles de directorios dentro del nombre del fichero

Cuando el nombre del fichero empieza ‘/’ entonces estamos indicando el nombre del camino completo o el nombre del camino absoluto. Si por el contrario empieza por ‘./’ o por ‘../’, entonces estamos indicando un nombre del camino relativo, porque estamos utilizando el subdirectorio actual donde nos encontremos. La última parte del nombre después del último carácter ‘/’ es el nombre nombre base

Los ficheros que empiezan por ‘.’ no son considerados y por tanto se consideran ocultos al sistema, salvo que ciertos comandos se lo indiquen. Por ejemplo, para listar un directorio se utiliza el comando ls, pero al empezar por ‘.’ no los listará a pesar de ser ficheros iguales al resto

El sistema identifica internamente los ficheros con un número, que se denomina número de i-nodo. En el i-nodo se guardan diferentes propiedades del fichero tales como:

  • tipo de archivo
  • identificador del propietario
  • identificador del grupo del propietario
  • número de enlaces
  • su tamaño
  • fecha del último acceso
  • fecha de la última modificación
  • fecha de cambio del número de i-nodo
  • un array con los bloques de datos que ocupa el fichero

Tipos de ficheros

  • Regular: meros almacenes de información. Algunos contienen código ejecutable
  • Directorios: tabla que contiene los números de i-nodos y los nombres de todos los ficheros contenidos en el dentro del directorio
  • Ficheros especiales: pueden ser dispositivo de tipo carácter o dispositivo de bloques. El manejo de estos ficheros depende del dispositivo en particular
  • Enlaces simbólicos (symbolic links): ficheros que contienen un puntero a otro fichero que podría estar almacenado en un sistema de ficheros distinto
  • Enlaces rígidos (hard links): fichero que puede ser visto con distintos nombres dentro del sistema de ficheros (similar a un álias). Es decir, podemos listarlos como si fueran ficheros idénticos pero que comparten el mismo i-nodo. La información reside en un mismo lugar y los cambios realizados en un fichero también ocurren en los otros equivalentes. Los enlaces de este tipo no trabajan con sistemas de fichero distintos, han de ser del mismo tipo. No todos los sistemas de ficheros soportan los enlaces rígidos, ya que es un concepto muy ligado a los sistemas operativos de tipo UNIX

El árbol de directorios

Los directorios y ficheros de los sistemas GNU / Linux se estandarizan en un documento llamado FSSTND. Entre las distintas distribuciones de Linux podemos encontrar algunas diferencias

Vamos a describir los principales directorios definidos por el estándar y qué contiene:

  • /bin: comandos básicos del sistema operativo
  • /boot: ficheros de arranque, incluido el fichero del núcleo que tiene el formato vmlinuz-x.x.x
  • /dev: ficheros de dispositivos
  • /etc: ficheros de configuración del sistema
  • /etc/X11: ficheros de configuración de las X Windows (librerías para la gestión del entorno gráfico, similar a Windows)
  • /home: directorios de los usuarios. Por defecto se llaman igual que el nombre de usuario
  • /initrd: directorio para el proceso de arranque
  • /lib: bibliotecas necesarias para la ejecución de los programas residentes en los directorios /bin y /sbin
  • /mnt: para montar los dispositivos extraíbles (Cd-Rom, Blu-Disk, Zip, Pendrive, …)
  • /proc: alberga ficheros especiales que, o recogen información del núcleo, o se la proporcionan. Los ficheros generan la información al visualizarlos
  • /root: directorio home del superusuario administrador (tiene todos los permisos sobre el sistema)
  • /sbin: contiene ficheros ejecutables que sólo puede ejecutar el superusuario root
  • /tmp: se guardan ficheros temporales
  • /usr: ficheros que se pueden compartir por todo el sistema. Es el lugar en el que se suelen instalar las aplicaciones de usuario. Contiene directorios como /usr/bin, /usr/sbin, /usr/lib, /usr/man, /usr/X11R6, …
  • /usr/local: es de uso exclusivo superusuario root, para la instalación de software particular de la máquina, los controladores de periféricos
  • /var: ficheros de longitud variable. Esto incluye los directorios y ficheros de "spool", datos de administración y registro, así como ficheros transitorios y temporales que no se guarden en el directorio /tmp

Para movernos en la ruta de directorios usaremos el comando cd. Por ejemplo, si queremos acceder al directorio man, escribiremos en la línea de comandos cd /usr/man

Permisos de ficheros

Los ficheros tienen muchos atributos además de su nombre. Para ver los más significativos ejecutaremos el ls -l

Notación numérica para permisos

Los permisos de los ficheros son almacenados en formato binario y se puede referenciar numéricamente. Para ello se da el valor 4 al permiso de lectura, el valor 2 al permiso de escritura y 1 al permiso de ejecución. A continuación se suman los valores por usuario propietario, grupo y usuario cualquiera, obteniendo un número de tres cifras. Veamos un ejemplo:

Otros permisos

Existen también los permisos SUIG y SGID, que permiten identificar cuando un programa es ejecutado por el propietario del fichero o el grupo del fichero en vez del usuario que lo ha lanzado. En general se utiliza cuando el superusuario root quiere dar permiso de ejecución de uno de sus programas a otro usuario

Otro permiso es el de bit pegajoso o adosado (bit sticky), sirve para que el proceso permanezca en memoria RAM mientras se ejecuta. Se usa poco

Los valores numéricos para el SUIG son 4, para el SGID es 2 y para el bit sticky es 1, añadidos delante de los otros 3 valores de permisos. Así, podríamos darle a nuestro programa, el permiso 4751

Comando para los permisos

El comando para modificar permisos es chmod y admite formato numérico o formato de carácter. En el formato de carácter se usa u (usuario), g (grupo), o (otros) y a (todos) para indicar a quién afectan. Los símbolos + (para añadir permisos), – (para quitar permisos), = (para establecer un permiso). Por último, r (lectura), w (escritura), x (ejecución) s y t (bit sticky)

Permisos para los directorios

Para entender cómo funcionan los permisos aplicados a un directorio hay que imaginar que un directorio es un fichero normal que solo contiene una tabla en la que se relacionan los ficheros presentes en ese directorio. En todos los directorios existen siempre un par de entradas que son ‘.’ (para el directorio actual) y ‘..’ para el directorio padre. El permiso de ejecución se entiende como acceso

Si un directorio no tiene permiso de lectura, resultara imposible para cualquier comando, incluido ls, leer su contenido

Si un directorio no tiene permiso de ejecución, no se podrá hacer cd a ese directorio, ni a ninguno de los subdirectorios que cuelgan de él. Esto imposibilita todas las operaciones que utilicen ese directorio como parte del camino

Si no tiene permiso de escritura no se podrán dar altas, bajas o modificaciones en la tabla, es decir, no se pueden borrar ficheros ni crear otros nuevos, ni renombrarlos

Por último, en un directorio, el bit sticky se entiende como que está protegido ante la creación de un mismo fichero por parte de usuarios diferentes, aunque tengan permisos suficientes. Suele aplicarse al directorio /tmp

Otros comandos relacionados

  • umask: establece los permisos por defecto para la creación de ficheros
  • chown: permite cambiar el usuario propietario de un fichero o de varios ficheros
  • chgrp: permite cambiar el grupo propietario de un fichero o de varios ficheros

Cómo funcionan los comandos UNIX

Los comandos UNIX siguen la siguiente estructura:

cuadro_unix

La entrada estándar normalmente es un fichero o el teclado. La salida estándar suele ser la pantalla y la salida de errores estándar es también la pantalla

El formato de los comandos sigue la estructura:

  • orden: el nombre del comando
  • -: el signo menos indica que es una opción
  • opciones: una o más caracteres de opciones
  • argumentos: son literales tomados como parámetros de entrada para el comando

Redireccionamiento y conexiones

Tanto las salidas como la entrada estándar la podemos redirigir a un fichero o dispositivo (recordemos que desde el punto de vista del sistema todo son ficheros)

También podemos pasar la salida estándar de un comando a la entrada estándar de otro, utilizando la conexión

Para estas operaciones se utilizan los siguientes metacaracteres de la shell:

> comando >fichero dirige la salida estándar hacia el fichero
>> comando >>fichero agrega la salida estándar hacia fichero
< comando <fichero extrae de fichero la entrada estándar
<<str sigue la entrada estándar hasta la siguiente str en el renglón
p1¦p2 conecta la salida estándar de p1 a la entrada estándar de p2

Las conexiones dan una gran potencia al sistema, ya que aunque un comando por sí solo haga una tarea trivial, al combinarse con otros se convierten en herramientas generales y útiles. Esto nos permite de forma sencilla crear nuevos comandos y que el crecimiento del sistema solo está limitado por nuestra habilidad de creación

Otros metacaracteres de la shell

* concuerda cualquier cadena de cero o más caracteres en los archivos
? concuerda cualquier carácter individual en los archivos
[ccc] concuerda cualquier carácter individual de ccc en archivos, son válidos los rangos 0-9 o a-z
; p1;p2 cuando termina el comando p1 se ejecuta el comando p2
& como ; pero no espera que termine p1
`…` correr comando en …; la salida sustituye a `…`
(…) correr comando en … en una subshell
$1, $2, … se reemplazan los argumentos en un archivo de la shell
$var valor de la variable var de la shell
${var} valor de la variable de shell var, evita confusión cuando se concatena con un texto
\ \c se toma literalmente el carácter c
‘…’ se toma … literalmente
"…" se toma … literalmente después de interpretar $, ‘…’ y \
var=valor se asigna el valor a la variable var
p1&&p2 p1&&p2 ejecutar p1si se logra, ejecutar p2
p1¦¦p2 p1¦¦p2 ejecutar p1 si no se logra, ejecutar p2

Comandos UNIX

No vamos a exponer aquí una relación de comandos UNIX, explicando su funcionalidad.

En primer lugar porque existen múltiples páginas dedicadas a ello, y en segundo lugar por el propio sistema nos proporciona múltiples ayudas sobre ellos

Con el comando man podemos obtener ayuda de cualquier programa o fichero de configuración, si queremos saber cómo funciona, se puede llamar a sí mismo de la siguiente forma: man man

Cuando no conocemos el nombre de un comando podemos utilizar el comando apropos e indicar algo relacionado con él

Otro comando de ayuda es el comando info. Este comando suele completar la ayuda de man

Muchos comandos dan ayuda entre sus opciones ejecutando el comando

Otra fuente de ayuda son los COMOs (HOWTOs). Son tutoriales sobre cómo realizar ciertas operaciones en el sistema. Están publicados por TLDP (The Linux Documentation Project, El proyecto de documentación de Linux) y disponibles en muchos idiomas. En español, el proyecto se conoce con el nombre de LuCAS

Algunos paquetes incluyen documentación propia en un subdirectorio de /usr/share/doc que tiene el mismo nombre que el paquete. Cabe destacar que, mayormente, esta documentación está en inglés y todavía no está traducida al castellano

Nota: no olvidar que con la tecla de tabulación la shell completa los nombres de fichero, lo cual ayuda a localizar los comandos y los ficheros aunque no nos acordemos de su nombre completo. Además evita muchos errores al teclear

La shell de Linux

La shell de Linux

Un shell o intérprete de comandos es un programa interfaz que permite a un usuario escribir instrucciones para el sistema operativo. En el entorno Linux existen tres grandes familias de shells: sh, csh y ksh. El shell bash (Bourne Again Shell) pertenece a la familia sh

Una de las principales características de un intérprete de comandos es que puede programarse usando ficheros de texto que contienen los comandos que se interpretarán en la ejecución de los mismos

Estos ficheros de texto se denominan ficheros de mandatos o guiones (también scripts, shell scripts o guiones shell). Por tanto, un fichero de mandatos es un fichero de texto ejecutable que contiene órdenes interpretables por el shell

Caracteristicas

La primera línea del fichero indica el tipo de shell con el que se debe interpretar, en nuestro caso bash:

Cada línea del fichero contiene un comando que será ejecutado por el intérprete

Si se quieren ejecutar varios comandos en la misma línea deben ir separados por ‘;’

Para continuar un mandato en la siguiente línea debe terminar por ‘\’

El carácter ‘#’ al comienzo de una línea indica que es un comentario y por tanto el intérprete no lo ejecutará

Para visualizar texto o variables por pantalla, usaremos el comando echo

Variables

Cada shell tiene asociadas unas variables, que el usuario puede utilizar. Hay dos tipos de variables:

  • Variables locales: No son heredadas por los procesos hijos del shell cuando se realiza un fork
  • Variables de entorno: Son heredadas por los procesos hijos cuando se realiza un fork

Todas las variables van precedidas por ‘$’

Uso de las variables

Para definir una nueva variable o dar valor a una variable usamos el operador =

Como hemos mencionado antes, para visualizar por pantalla el valor de la variable usaremos el comando echo

Para convertir una variable local en una variable de entorno usaremos el comando export

Para eliminar una variable y su valor de memoria usaremos el comando unset

Para mostrar por pantalla todas las variables (tanto locales como de entorno), usaremos el comando set

Para mostrar sólo las variables de entorno usaremos el comando env

Podemos usar las siguientes variables de entorno predefinidas dentro de la shell

$HOME Directorio de origen del usuario
$PWD Directorio de trabajo del usuario
$PATH Camino absoluto de los directorios de búsqueda de ejecutables. El directorio de trabajo del usuario no está incluido por defecto
$PS1 Prompt principal del shell
$PS2 Prompt secundario
$IFS Separador Interno de Campo. Utilizado por la orden interna read

Argumentos

Como cualquier programa, un guión puede recibir valores mediante argumentos o parámetros, en la línea de comandos. Los argumentos recibidos se almacenan en una serie de variables que el guión puede utilizar

$1 Primer argumento
$2 Segundo argumento
$3 Tercer argumento
$4 Cuarto argumento
$5 Quinto argumento
$6 Sexto argumento
$7 Séptimo argumento
$8 Octavo argumento
$9 Noveno argumento
$C Nombre del guión
$* Cadena que contiene todos los argumentos
$# Número de argumentos que ha recibido el guión
shift Mover todos los argumentos a la posición izquierda. Es decir, el valor $1 desaparece y es reemplazado por el $2 y así sucesivamente

Comillas

Simples ‘ ‘

Cadena de caracteres que el shell toma literalmente

Inversas ` `

Deben encerrar un comando completo (con su nombre y sus argumentos) Se produce una ejecución en tres fases:

  1. Evaluación de variables
  2. Sustitución del comando por una cadena de caracteres que contiene la salida estándar del comando
  3. Ejecución del resultado

Dobles " "

Permiten la evaluación de variables y la sustitución de comandos

Comandos de control de flujo

Sentencia if

Expresión puede ser una expresión de comparación o un comando. Su valor será el que devuelva la expresión o la ejecución de un comando

Para entrar por la rama que sigue a then, expresión ha debido de devolver un 0 (verdadero) y para entrar en una rama elif o en una rama else, expresión ha debido devolver un valor distinto de 0 (falso)

Expresiones

Si queremos comparar dos valores debemos utilizar el comando test

test evalúa la expresión. Si ésta es verdadera devuelve el código 0 y si esta es falsa un código distinto de 0

Las expresiones más frecuentes son:

-r fichero verdadera si el fichero existe y tiene permiso de lectura
-w fichero verdadera si el fichero existe y tiene permiso de escritura
-x fichero verdadera si el fichero existe y tiene permiso de ejecución
-f fichero verdadera si el fichero existe y es un fichero
-d fichero verdadera si el fichero existe y es un directorio
-s fichero verdadera si el fichero existe y su tamaño es mayor que 0
-z cadena verdadera si el fichero existe y su tamaño es 0
-n cadena verdadera si el fichero existe y su tamaño es distinto de 0
cadena1 == cadena2 verdadera si cadena1 es igual que cadena2
cadena1 != cadena2 verdadera si cadena1 es distinta que cadena2
cadena verdadera si cadena no es la cadena nula
n1 -eq n2 verdadera si n1 es igual que n2
n1 -ne n2 verdadera si n1 es distinto que n2
n1 -gt n2 verdadera si n1 es mayor que n2
n1 -ge n2 verdadera si n1 es mayor o igual que n2
n1 -lt n2 verdadera si n1 es menor que n2
n1 -le n2 verdadera si n1 es menor o igual que n2

Estas expresiones elementales se pueden combinar utilizando paréntesis y los operadores siguientes:

! niega la expresión
-a equivale al operador AND
-o equivale al operador OR

Sentencia case

Compara la cadena con los patrones, ejecutándose la lista_de_comandos correspondiente al primer patrón con el que concuerda, tras lo cual la ejecución de la sentencia case termina. Un patrón puede incluir cualquiera de los metacaracteres del shell

* es el patrón por defecto y se ejecuta cuando no lo ha hecho ninguno de los demás

Sentencia for

La lista de comandos se ejecuta tantas veces como elementos haya en la lista. Antes de cada iteración se asigna a variable el siguiente valor de la lista, empezando la primera iteración por el primer valor

Es muy útil si queremos recorrer todos los argumentos

Sentencia While

lista_ de_comandos se ejecuta tantas veces como sea verdadera expresión

Sentencia until

lista_de_comandos se ejecuta tantas veces como sea falsa expresión

Operador OR

Se ejecuta comando1; si éste devuelve un código de error distinto de 0 entonces se ejecuta el comando2, y el código que éste devuelve es el código devuelto por el comando completo; si el comando1 tiene éxito (código 0) entonces no se ejecuta el comando2 y toda la expresión tiene éxito

En el ejemplo anterior se comprueba si el fichero fich1 existe. Si existe, no se hace nada, en caso contrario se muestra un mensaje por el canal de error estándar

Operador AND

Se ejecuta comando1; si éste devuelve un código de error igual a 0 entonces se ejecuta el comando2

En el ejemplo se comprueba si existe un directorio llamado dir1. Si existe, se muestra el contenido, en caso contrario no se hace nada

Nota: no existe un operador que niege comandos

Comando read

lista_de_variables son variables separadas por un espacio

La ejecución del comando read lee de su entrada estándar una línea de texto que divide en palabras (es decir, cadenas separadas por espacios en blanco o tabuladores)

Asigna la primera palabra a la primera variable, la segunda a la segunda variable, así sucesivamente hasta completar la lista_de_variables

Si no se introducen suficientes palabras, a las variables sobrantes se les asignará la cadena nula

Si en la línea hay más palabras que variables entonces se asigna a la última variable una cadena formada por todas las palabras sobrantes

Ejemplo de recorrido linea a linea de un fichero

Comando exit

Todo comando devuelve un código para notificar al finalizar si su ejecución ha sido correcta o si ha aparecido algún error. Si la ejecución ha sido correcta se devuelve el código de error 0, y si ha habido algún problema se devuelve como código algún número positivo

Los ficheros de comandos devuelven al finalizar un código de error; exactamente el código de error devuelto por el último comando del fichero que se ejecuta. Para modificar esta situación por defecto, debemos utilizar el comando exit

Donde el argumento opcional n será un entero mayor o igual que 0. Si no se indica argumento equivale a exit 0

Cuando se ejecuta el comando exit, termina inmediatamente la ejecución del fichero de comandos y se devuelve como código de error el entero n

Usuario Linux

Usuarios Linux

Cada usuario Linux se identifica ante el sistema con un nombre de usuario ya que es un sistema multiusuario

A este nombre el sistema asocia un número identificativo (UID), una contraseña, su nombre completo, un directorio de arranque (el home de usuario) y una shell de conexión (existen diferentes programas de shell, y se elige entre uno u otro según las características del usuario o el tipo de shell que prefiramos)

Todos estos datos los guarda el sistema en los ficheros /etc/passwd y /etc/shadow. El fichero /etc/shadow contiene la contraseña cifrada y datos sobre la misma (como el tiempo de validez, los días con que hay que avisar antes de que expire, cada cuanto tiempo hay que obligar a su cambio, etc). La creación de este fichero vino por una cuestión de seguridad ya que el fichero passwd debe ser accesible a todos los usuarios

Estructura

La estructura del fichero passwd es la siguiente:

usuario No se admiten números al comienzo de un nombre de usuario
x Una “x” indica que el password está almacenado en /etc/shadow, en el caso de ser una “!” es que el usuario está bloqueado. “!!” indica que no tiene password
uid Cada usuario tiene asignado un número identificador (uid) entre 0 (root) y 65535. Se reservan algunos para usuarios especiales, como root (que siempre es el cero) y para usuarios de servicios del sistema. En sistemas Red hat y derivados entre 1 y 499. En sistemas Debian y derivados entre 1 y 999
gid Cada usuario tiene asignado un número identificador de grupo principal (gid), es decir, siempre pertenece al menos a un grupo, pero puede pertenecer a más de un grupo
nombre completo Esta opción está pensada para que el usuario escriba su nombre completo, aunque también puede usarse para escribir una descripción de qué hace ese usuario o cual es su utilidad, en el caso de ser un servicio del sistema
directorio home Es la carpeta de inicio que el usuario usará por defecto al iniciar su sesión
comando shell Los usuarios asociados a un servicio del sistema o los usuarios con permisos limitados no deben tener un comando de shell, es decir, capacidad de iniciar sesión en modo consola, normalmente este campo se rellena como /usr/bin/nologin o /bin/false

Algunos de los usuarios más comunes pueden encontrarse en la siguiente tabla:

Usuario UID GID Directorio de inicio Terminal
root 0 0 /root /bin/bash
bin 1 1 /bin /sbin/nologin
daemon 2 2 /sbin /sbin/nologin
adm 3 4 /var/adm /sbin/nologin
lp 4 7 /var/spool/lpd /sbin/nologin
sync 5 0 /sbin /bin/sync
shutdown 6 0 /sbin /sbin/shutdown
halt 7 0 /sbin /sbin/halt
mail 8 12 /var/spool/mail /sbin/nologin
news 9 13 /var/spool/news
uucp 10 14 /var/spool/uucp /sbin/nologin
operator 11 0 /root /sbin/nologin
games 12 100 /usr/games /sbin/nologin
gopher 13 30 /usr/lib/gopher-data /sbin/nologin
ftp 14 50 /var/ftp /sbin/nologin
nobody 99 99 / /sbin/nologin
vcsa 69 69 /dev /sbin/nologin
rpm 37 37 /var/lib/rpm /bin/bash
wnn 49 49 /var/lib/wnn /bin/bash
ntp 38 38 /etc/ntp /sbin/nologin
nscd 28 28 / /bin/false
apache 48 48 /var/www /bin/false
mysql 27 27 /var/mysql /bin/bash
mailnull 47 47 /var/spool/mqueue /sbin/nologin
smmsp 51 51 /var/spool/mqueue /sbin/nologin
rpc 32 32 / /sbin/nologin
xfs 43 43 /etc/X11/fs /sbin/nologin
gdm 42 42 /var/gdm /sbin/nologin
rpcuser 29 29 /var/libs/nfs /sbin/nologin
nsfnobody 65534 65534 /var/libs/nfs /sbin/nologin
ident 98 98 / /sbin/nologin
radvd 75 75 / /sbin/nologin
sshd 74 74 /var/empty/sshd /sbin/login
postgres 26 26 /var/lib/pgsql /bin/bash
squid 23 23 /var/spool/quid /dev/null
named 25 25 /var/named /bin/false
pcap 77 77 /var/arpwatch /sbin/bash
amanda 33 6 /var/lib/amanda /bin/bash
mailman 41 41 /var/mailman /bin/false
netdump 34 34 /var/crash /bin/bash
ldap 55 55 /var/lib/ldap /bin/false
postfix 89 89 /var/spool/postfix /bin/true
privoxy 100 101 /etc/privoxy
Pvm 24 24 /usr/share/pvm3 /bin/bash

Añadir

El comando para añadir usuarios es useradd

En el ejemplo hemos creado al usuario patxi que pertenece al grupo users y ftp, tiene como shell /bin/shell, asignamos la clave password y su carpeta home será /home/patxi

Este comando admite los siguientes parámetros:

-d Directorio home del usuario
-s Shell del usuario
-p Password
-g Grupo primario al que asignamos el usuario
-G Grupos a los que también pertenece el usuario
-m Forzamos la creación del directorio en su home

En el fichero /etc/default/useradd se guardan parámetros por defecto para el comando useradd y en el directorio /etc/skel están los ficheros y directorios que por defecto se pondrán en el home del usuario al crearlo

Modificar

El comando para modificar usuarios es usermod

En el ejemplo hemos modificado al usuario patxi que pertenecía al grupo users y ftp, ahora su grupo principal es server, aunque sigue perteneciendo a los grupos users y ftp

Este comando admite los siguientes parámetros:

-d Modificar directorio home del usuario
-s Modificar shell del usuario
-p Modificar Password
-g Modificar grupo primario al que asignamos el usuario
-G Modificar grupos a los que también pertenece el usuario

Borrar

El comando para borrar usuarios es userdel

En el ejemplo borrado al usuario patxi y adicionalmente le hemos forzado a borrar el contenido de su home al usar el parámetro -r, si no lo hubiéramos usado, seguiría existiendo

Cambiar la clave

El comando para cambiar la clave de un usuario es passwd. Hay que tener en cuenta que hay que tener permisos suficientes para poder realizar el cambio, ya sea porque quien ejecuta el comando es el propio usuario o el superusuario root

Si lo que queremos es cambiar la clave del usuario root y tenemos permisos suficientes, puede hacerse dejando el parámetro usuario vacío

shadow

La estructura del fichero shadow es la siguiente:

usuario Nombre del usuario
contraseña encriptada La contraseña con un cifrado seguro
1 Días transcurridos desde 1-1-1970 donde el password fue cambiado por última vez
2 El mínimo número de días entre cambios de contraseña
3 Días máximos de validez de la cuenta
4 Días que avisa antes de caducar la contraseña
5 Días después de que un password caduque para deshabilitar la cuenta
6 Fecha de caducidad. días desde 1-1-1970, donde la cuenta es deshabilatada y el usuario no podrá iniciar sesión

Grupos Linux

Los usuarios se agrupan en grupos. Los grupos también se identifican por un nombre y el sistema les asocia un número identificativo (GID). Todo usuario tiene un grupo principal, pero puede pertenecer a varios grupos, con lo cual hereda sus privilegios. Los grupos permiten dar derechos y restringir opciones de forma global a múltiples usuarios

La relación de los grupos se guarda en el fichero /etc/group. Existe también el fichero /etc/gshadow para contraseñas cifradas de grupo, aunque no es muy utilizado

Estructura

La estructura del fichero group es la siguiente:

grupo El nombre del grupo (es recomendable que no tenga más de 8 caracteres)
x Una “x” indica que el password está almacenado en /etc/gshadow
gid Cada grupo tiene asignado un número identificador (gid) entre 0 (root) y 65535 (los gid 0 a 499 están reservados por el sistema), por lo que empezarán a numerar a partir del 500
lista miembros Lista de los miembros del grupo, separados por comas (sin espacios)

Algunos de los grupos más comunes pueden encontrarse en la siguiente tabla:

Grupo GID Miembros
root 0 root
bin 1 root, bin, daemon
daemon 2 root, bin, daemon
sys 3 root, bin, adm
adm 4 root, adm, daemon
tty 5
disk 6 root
lp 7
mem 8
kmem 9
wheel 10 root
mail 12 mail
news 13 news
uucp 14 uucp
man 15
games 20
gopher 30
dip 40
ftp 50
lock 54
nobody 99
users 100
slocate 21
floppy 19
vcsa 69
rpm 37 rpm
utmp 22
wnn 49
ntp 38
nscd 28
apache 48
mysql 27
mailnull 47
smmsp 51
rpc 32
xfs 43
gdm 42
rpcuser 29
nfsnobody 65534
ident 98
radvd 75
sshd 74
postgres 26
squid 23
named 25
pcap 77
wine 66
Mailman 41
netdump 34
ldap 55
postdrop 90
postfix 89
privoxy 101
pvm 24

Añadir

El comando para añadir grupos es groupadd

En el ejemplo hemos creado el grupo server con un gid 500, en caso de no poner nada usaría el mayor de 500 no usado por otro grupo. Se pude usar el parámetro -g para fijar el gid de forma manual

Si queremos añadir usuarios existentes al grupo recién creado usaremos el comando gpasswd

En el ejemplo hemos añadido el usuario patxi con el parámetro -a al grupo server

Modificar

El comando para modificar grupos es groupmod

En el ejemplo hemos modificado el gid a 501 del grupo server

Este comando admite los siguientes parámetros:

-g Modificar gid del grupo
-n Modificar nombre del grupo

Este comando únicamente realiza cambios en el archivo /etc/group, por lo tanto el resto de
modificaciones implicadas en el cambio del gid de un grupo, se han de hacer manualmente en los archivos /etc/passwd y /etc/gshadow

Borrar

El comando para borrar un grupo es groupdel

En el ejemplo borrado el grupo server

No se puede eliminar un grupo que sea grupo inicial de algún usuario, sin eliminar primero el usuario

El comando no recorre el sistema de ficheros en busca de archivos propiedad del grupo. Si
deseamos eliminarlos, hemos manualmente o con comandos de borrado de archivos

Si queremos eliminar usuarios existentes al grupo recién creado usaremos el comando gpasswd

En el ejemplo hemos eliminado el usuario patxi con el parámetro -d del grupo server. Pero no se borrará el directorio de home del grupo