Linux es un clon de UNIX, un sistema operativo multiusuario que puede ser accedido por varios usuarios al mismo tiempo. Esto plantea problemas de seguridad pues un usuario no solicitado puede corromper, cambiar o eliminar datos importantes.

La seguridad de linux divide la autorización en 2 niveles, Propiedad y Permisos, conocer y entender estos conceptos es crucial.

Propiedad de los archivos en linux

Cada directorio y cada archivo en el sistema está asignado a 3 tipos de propietario

1. Usuario

De forma predeterminada, cada vez que un usuario crea un archivo, este se vuelve su propietario.

2. Grupo

Un grupo puede contener a varios usuarios, todos los usuarios que pertenecen al mismo grupo, tendrán los mismos permisos para acceder a ese archivo.

Digamos que tenemos un proyecto que involucra a varios usuarios, en lugar de darle permisos por separado a cada usuario, podemos agregarlos a todos al mismo grupo y asignar los permisos a este, de modo que solo los miembros del grupo en cuestión podrán leer y modificar dicho archivo.

3. Otro

El usuario que no creó el archivo y tampoco pertenece al grupo que puede modificarlo. Este prácticamente significa, todos los demás. En linux cuando establecemos los permisos para otros se le denomina permisos establecidos para el mundo.

Esto nos hace pensar, ¿cómo distingue linux en estos tres tipos de usuario?, aquí es donde entran los permisos.

Cada archivo y cada directorio tiene 3 permisos definidos, para cada uno de los propietarios mencionados anteriormente.

1. Lectura

En un directorio este permiso significa que podemos ver su contenido.

En un archivo significa que podemos abrirlo y verlo mas no modificarlo.

2. Escritura

En un directorio significa que, tenemos la autoridad para agregar, eliminar y cambiar el nombre de los archivos almacenados en ese directorio.

En un archivo significa que podemos modificar su contenido.

Si tenemos permiso de escritura en el archivo, pero no en el directorio que lo contiene, podremos modificar el contenido del archivo, pero no modificar su nombre, moverlo o eliminarlo del directorio.

3. Ejecución

En linux no podemos ejecutar un archivo a menos que este tenga explícitamente permiso de ejecución; si este no está establecido podremos ver su contenido y modificarlo (siempre y cuando se establezcan los permisos de lectura y escritura), pero no ejecutarlo.

Usuario Grupo Todos
Lectura
Escritura
Ejecución

Ejemplos prácticos

user@hostname:~/prueba$ ls -l
-rw-rw-r-- 1 user user 0 Aug  9 16:21 prueba.txt

-rw- rw- r- -, permisos dados al propietario, al usuario y al mundo.

El primer bit o ’-’ implica que hemos seleccionado un archivo, si en su lugar seleccionáramos un directorio veríamos algo como esto drw- rw- r- -.

user@hostname:~/prueba$ ls -l
drwxr-xr-x 2 user user 4096 Aug  9 16:27 directorio

Nomenclatura

r = Permiso de lectura

w = Permiso de escritura

x = Permiso de ejecución

- = Sin permiso

Por default, muchas distribuciones de linux, agregaran al usuario a un grupo con el mismo nombre que el usuario, si creamos un usuario juan automáticamente se creara el grupo juan y el usuario será agregado.

Veámoslo de esta manera

La primera parte de los permisos es rw-, esto nos dice que el propietario de este archivo prueba.txt puede:

  • Leer el archivo
  • Modificarlo
  • Pero no puede ejecutarlo, ya que ese último bit es ’-’

La segunda parte es rw-, lo que significa que los usuarios del grupo user pueden:

  • Leer el archivo
  • Modificarlo

La última parte es la de todos, r- -’ esto significa que cualquier otro usuario sólo puede:

  • Leer el archivo

Cambiar los permisos de los archivos/directorio con chmod

Podemos utilizar el comando chmod o change mode para cambiar los permisos (lectura, escritura, ejecución) a los archivos y directorios del usuario, grupo y todos.

Sintaxis

chmod permisos nombre del archivo/directorio

Existen 2 formas para utilizar este comando.

1. Modo Absoluto

En el Modo Absoluto o Numérico, los permisos no son representados por letras, sino por 3 dígitos en números octales. La siguiente tabla nos muestra los números para todos los tipos de permisos.

Número Tipo de Permiso Símbolo
0 Sin permiso - - -
1 Ejecución - - x
2 Escritura - w -
3 Ejecución + Escritura - w x
4 Lectura r - -
5 Lectura + Ejecución r - x
6 Lectura + Escritura r w -
7 Lectura + Escritura + Ejecución r w x

Ejemplo

user@hostname:~/prueba$ ls -l
-rw-rw-r-- 1 user user 0 Aug  9 16:21 prueba.txt
user@hostname:~/prueba$ chmod 764 prueba.txt
user@hostname:~/prueba$ ls -l
-rwxrw-r-- 1 user user 0 Aug  9 16:55 prueba.txt

En este ejemplo cambiamos los permisos de prueba.txt a 764, lo que nos dice lo siguiente:

  • El propietario puede leer, escribir y ejecutar
  • El grupo puede leer y escribir el archivo
  • Todos los demás sólo pueden leer

2. Modo Simbólico

En el modo numérico podemos modificar los permisos de los 3 usuarios al mismo tiempo, en el Modo Simbólico se modifican los permisos de un propietario en específico. Este modo hace uso de los símbolos matemáticos de UNIX.

Operador Descripción
+ Agrega permiso a un archivo o directorio
- Quita el permiso
= Establece el permiso y anula los permisos dados anteriormente

Los diferentes propietarios se representan como:

Denotaciones Afecta a:
u usuario/propietario
g grupo
o otros
a todos

Ejemplo

user@hostname:~/prueba$ ls -l
-rw-rw-r-- 1 user user 0 Aug  9 16:21 prueba.txt
user@hostname:~/prueba$ chmod o=rwx prueba.txt
user@hostname:~/prueba$ ls -l
-rw-rw-rwx 1 user user 0 Aug  9 16:55 prueba.txt

En este ejemplo podemos ver como le dimos permisos de Lectura, escritura y ejecución a todos los usuarios.

Cambiar la propiedad y el grupo

Para cambiar el propietario de un archivo podemos utilizar el comando chown o change owner.

Sintaxis

chown usuario nombre de archivo

Si queremos cambiar también el grupo utilizamos

chown usuario:grupo nombre de archivo

Veámoslo en acción

user@hostname:~/prueba$ ls -l
-rw-rw-r-- 1 user user 0 Aug  9 16:21 prueba.txt
user@hostname:~/prueba$ sudo chown root:root prueba.txt
user@hostname:~/prueba$ ls -l
-rw-rw-rwx 1 root root 0 Aug  9 16:55 prueba.txt

En este ejemplo podemos ver como cambiamos el usuario y grupo de user a root

Si sólo queremos cambiar el grupo podemos usar el comando chgrp o change group, es importante resaltar que no puede haber 2 grupos propietarios del mismo archivo, así mismo no puede haber grupos anidados, es decir un grupo no puede ser un sub-grupo de otro.

Hasta la próxima.