PERMISOS DE ACCESO

Linux ha sido desde su concepción un sistema operativo con orientación a multiusuario, por lo tanto cuenta con medidas de seguridad para administrar y restringir la manipulación de directorios y archivos a usuarios específicos. Los dos conceptos fundamentales son la propiedad (es decir, quién es el creador y/o propietario del archivo o directorio) y los permisos que se aplican a quién o quiénes pueden acceder a él.

Existen tres tipos de propietarios:

Los permisos también son de tres tipos:

Comando Descripción
chmod +x archivo (change mode +execute) Permite ejecutar el archivo o los archivos en el directorio
chmod +r archivo (+read) Permite leer el archivo o directorio
chmod +w archivo (+write) Permite escribir el archivo o directorio
chmod -x archivo (-execute) Quita el permiso para ejecutar el archivo o los archivos en el directorio
chmod -r archivo (-read) Quita el permiso para leer el archivo o directorio
chmod -w archivo (-write) Quita el permiso para escribir el archivo o directorio

ls -l

Cuando se usa el comando ls -l, la terminal imprime una línea de información con estos detalles:

- rwx rwx rwx [enlaces] [propietario] [grupo] [tamaño] [fecha] [nombre]
1 2 3 4 5 6 7 8
  1. El primer caracter indica qué tipo de elemento es el que se está consultando: los más comunes son un guion (-) si es un archivo, d si es un directorio o l (link) si es un enlace simbólico (una especie de acceso directo). En la carpeta /dev del sistema se pueden encontrar también c (character device, dispositivos que envían datos caracter por caracter, como el teclado), b (block device, dispositivos que manejan datos en bloque, como un disco duro o un USB), s (socket, un punto de comunicación entre procesos, muy usado en redes locales) y p (pipe, un canal para enviar datos de un proceso a otro).
  2. Las 3 columnas siguientes tienen 3 caracteres. El orden de los permisos siempre es rwx y si alguno de ellos está denegado se indica con un guion (-):
    1. La primera columna especifica cuáles son los permisos que tiene el usuario.
    2. La segunda, los permisos del grupo.
    3. La tercera, los permisos de cualquiera que tenga acceso al elemento.
  3. Luego sigue la cantidad de enlaces físicos que apuntan a ese archivo o directorio. Generalmente es 1 para archivos y 2 o más para directorios.
  4. A continuación figura el usuario que creó el archivo o directorio, o bien el que es propietario.
  5. El siguiente es el grupo al que pertenece. Esto resulta útil cuando varias personas necesitan acceder a los mismos archivos o directorios.
  6. Le sigue el tamaño del archivo en bytes. Los directorios suelen mostrar 4096 bytes, no porque lo que pesan sino por el espacio que ocupa la “lista” o el índice de nombres de ese directorio. Se puede cambiar la manera en que se muestra el tamaño con la opción -h (human readable).
  7. Fecha y hora de la última modificación.
  8. Nombre del archivo o directorio. Si tiene una flechita (->), significa que es un enlace simbólico.

Ejercicios

  1. Crear el directorio prueba e ingresar a él.
  2. Crear el archivo ejecutable ejemplo.sh cuyo código sea el siguiente:
    #! bin/bash
    echo "¡Hola, mundo!"
    
  3. Habilitarle el permiso de ejecución.
  4. Verificar con ls -l y ejecutarlo.
  5. Subir un nivel de directorio y cambiarle el permiso a prueba para que no se pueda leer.
  6. Verificar nuevamente con -ls -l.

Usuarios y propietarios

Teniendo privilegios de superusuario, podemos gestionar usuarios y grupos y cambiar la propiedad de un archivo o directorio.

Comando Descripción
id usuario Muestra la información del usuario y a qué grupos pertenece
users Muestra la lista de usuarios conectados
w Muestra la información de los usuarios conectados y sus actividades
sudo useradd usuario Añade un usuario
sudo userdel usuario Borra un usuario
groups usuario Muestra la lista de grupos a los que pertenece un usuario
sudo groupadd grupo Añade un grupo
sudo groupdel grupo Borra un grupo
sudo usermod -aG grupo usuario (-append -Group) Añade un usuario a un determinado grupo
sudo usermod -rG grupo usuario (-remove -Group) Elimina un usuario de un determinado grupo
sudo chown usuario archivo (change ownership) Asigna la propiedad del archivo o directorio a un usuario
sudo chgrp grupo archivo (change group) Asigna la propiedad del archivo o directorio a un grupo
compgen -u (-users) Muestra un listado de todos los usuarios disponibles
compgen -g (-groups) Muestra un listado de todos los grupos disponibles
lastlog Muestra la información del último inicio de sesión de cada usuario

Ejercicios

  1. Crear un usuario y un grupo con nombres cualesquiera.
  2. Verificar la creación de ambos con los comandos compgen -u y compgen -g.
  3. Agregar el usuario al grupo.
  4. Verificar la pertenencia del usuario al grupo con el comando groups.
  5. Borrar el usuario y el grupo.

Comando chmod

Con el comando chmod también se pueden cambiar los permisos de acceso para un usuario, un grupo u otro (todo aquel que tenga acceso al elemento). La sintaxis es:

chmod ugo [archivo]

donde u, g y o son dígitos en sistema octal que representan distintas combinaciones de permisos:

Octal Binario Permisos
0 000 Ninguno
1 001 --x (sólo ejecución)
2 010 -w- (sólo escritura)
3 011 -wx (escritura y ejecución)
4 100 r-- (sólo lectura)
5 101 r-x (lectura y ejecución)
6 110 rw- (lectura y escritura)
7 111 rwx (todos: lectura, escritura y ejecución)

Por ejemplo, el comando chmod 205 indica que se otorga permiso sólo de escritura (2) al usuario, ninguno (0) al grupo y de lectura y ejecución (5) a cualquiera. Los códigos más usados son 755 (todos los permisos al usuario, sólo lectura y ejecución al grupo y a otros) y 750 (todos los permisos al usuario, lectura y ejecución al grupo y ningún permiso a otros).

Otra manera de administrar permisos es con los ya mencionados r, w y x más las siguientes letras y signos algebraicos:

Caracter Permisos
u (user) Usuario
g (group) Grupo
o (other) Otros
a (all) Todos
+ Otorgar permiso
- Quitar permiso
= Borra todos los permisos y establece sólo los que se indican

En este caso, un comando podría ser:

chmod g+rx [archivo]

donde se le brindaría (+) acceso de lectura (r) y ejecución (x) al grupo (g). También se pueden otorgar o quitar permisos a más de uno simultáneamente, por ejemplo al grupo y a otros:

chmod go-w

En este otro ejemplo, sobreescribimos los permisos para que el usuario tenga únicamente acceso de escritura y ejecución, y (separando con una coma) que todos puedan tener acceso de lectura:

chmod u=wx,a=r

Cada archivo o directorio puede ser accedido a la vez por un usuario individual o bien por un grupo y los derechos de propiedad también se pueden asignar a un usuario o a un grupo. La autoría se puede asignar a cierto usuario o a cierto grupo:

chown [usuario] [archivo]
chgrp [grupo] [archivo]

Por ejemplo, si se tiene un archivo de texto note.txt y le queremos asignar el derecho de propiedad al usuario Juan, se debe escribir:

chown Juan note.txt

Y para el grupo "Editores":

chgrp Editores note.txt

También se puede asignar la propiedad a un usuario y a un grupo a la vez separándolos con dos puntos (:), con la sintaxis:

chown [usuario]:[grupo] [archivo]

Comando who

El comando who muestra detalles sobre los usuarios que están activos en este momento.

Comando Descripción
who -a (-all) Muestra toda la información sobre los usuarios conectados, incluyendo información como la fecha de inicio del sistema, entre otros
who -b Muestra únicamente la fecha de inicio del sistema
who -H (-Human) Muestra los encabezados de cada columna
who -u (-users) Muestra el tiempo de inactividad de los usuarios actuales
who -q Muestra la cantidad y los nombres de los usuarios conectados

Esta información se compone de cuatro columnas:

[usuario]:[conexión]:[tiempo]:[ubicación]
  1. La primera indica quiénes están conectados ahora.
  2. La segunda nos indica de qué tipo de conexión se trata: si es tty (teletypewriter), se trata de una consola local; si es pts, es una consola que se ha conectado remotamente.
  3. La tercera nos muestra la fecha y hora desde que ha iniciado la conexión.
  4. La cuarta nos dice la ubicación desde dónde se ha conectado: si es remota, se muestra la dirección IP, y si es local se muestra como (:0).

Ejercicios

  1. Crear un archivo llamado ejemplo.sh y, utilizando dígitos, otorgar permiso de escritura y ejecución al usuario, de ejecución al grupo y de sólo lectura a cualquier otro. Verificar el resultado con ls -l.
  2. Borrar todos los permisos y, esta vez usando caracteres, otorgarle de sólo lectura al usuario, de escritura y ejecución al grupo y todos a cualquier otro. Verificar en cada paso.
  3. Agregar un usuario y un grupo con nombres cualesquiera y asignarles la propiedad del archivo.
  4. Borrar dicho usuario y grupo.