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:
r (read). Si se trata de un directorio, se refiere a poder ver lo que contiene.w (write). Si se trata de un directorio, se refiere a poder crear archivos y subdirectorios en él.x (execute). Si se trata de un directorio, se refiere a poder ingresar en él.| 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 |
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 | ||
-) 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).rwx y si alguno de ellos está denegado se indica con un guion (-):
1 para archivos y 2 o más para directorios.-h (human readable).->), significa que es un enlace simbólico.prueba e ingresar a él.ejemplo.sh cuyo código sea el siguiente:
#! bin/bash echo "¡Hola, mundo!"
ls -l y ejecutarlo.prueba para que no se pueda leer.-ls -l.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 |
compgen -u y compgen -g.groups.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]
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]
tty (teletypewriter), se trata de una consola local; si es pts, es una consola que se ha conectado remotamente.(:0).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.