Los permisos del sistema de archivos de GNU/Linux

Escrito por el , actualizado el .
gnu-linux planeta-codigo
Enlace permanente Comentarios

El sistema de permisos de GNU/Linux por defecto es menos capaz que el de Windows basado en listas de control o ACLs pero es más sencillo y suficiente para muchos casos y usuarios. Cada archivo o directorio tiene unos bits de control que determinan los permisos de lectura, escritura y ejecución para el propietario, grupo y el resto de usuarios. Los comandos ls, chmod y chown permiten listar los permisos de los archivos y cambiarlos.

GNU

Linux

En un sistema multiprogramado como son cualquiera de los actuales modernos que son utilizados por varios usuarios y programas es necesario que tengan algún mecanismo de seguridad y permisos para proteger los recursos. En el caso del sistema de archivos GNU/Linux usa un sistema simple pero suficiente para una buena parte de casos de uso.

En GNU/Linux implemenan un control de acceso discrecional o DAC en el que los permisos de cada archivo se dividen en lectura, escritura y ejecución, identificados por las letras rwx respectivamente, para el propietario del archivo, el grupo de usuarios al que pertenece y para el resto de usuarios, identificados estos grupos con las letras ugo respectivamente. Para saber si se posee el permiso de lectura, escritura y ejecución se utiliza un bit para cada uno de ellos. Para el conjunto de usuario, grupo y resto de usuarios en total se utilizan 9 bits. Estos 9 bits forman la cadena rwxrwxrwx que para escribirlos de forma numérica y más simple se pueden utilizar base octal, por ejemplo 744 se traduce a binario en 111100100 significando que el usuario tiene permisos para leer, escribir y ejecutar el archivo, dados los tres primeros bits, y el grupo de usuario y resto de usuarios solo tienen el permiso de lectura.

Con el comando para listar el contenido de un directorio ls -lha se muestra el listado en formato largo con la opción -l que incluye los permisos, las unidades de tamaño en formato legible para humanos con la opción -h, con la opción -a incluye los archivos ocultos que son los que empiezan por . y con la opción --group-directories-first los directorios primero.

En los listados del comando ls el primer caracter indica si el archivo es un archivo regular o un directorio que se identifican por la letra d como el directorio Descargas, si fuese una l indicaría que es un enlace como el enlace .steampath. El propietario de los archivos es mi usuario picodotdev, salvo en el caso del directorio superior referenciado con .. que es el superusuario root.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ ls -lha --group-directories-first
total 376K
drwx------ 39 picodotdev picodotdev 4,0K ene 15 22:27 .
drwxr-xr-x  3 root       root       4,0K nov 28  2018 ..
drwx------ 48 picodotdev picodotdev 4,0K ene 13 19:22 .cache
drwx------ 45 picodotdev picodotdev 4,0K ene 13 23:49 .config
drwxr-xr-x  2 picodotdev picodotdev 4,0K ene  6 01:57 Descargas
drwxr-xr-x  3 picodotdev picodotdev 4,0K sep 25 23:00 Documentos
drwxr-xr-x  2 picodotdev picodotdev 4,0K dic 19  2018 Escritorio
drwxr-xr-x  2 picodotdev picodotdev 4,0K mar 18  2019 Grabaciones
drwxr-xr-x  8 picodotdev picodotdev 4,0K abr 18  2019 .gradle
drwxr-xr-x  2 picodotdev picodotdev 4,0K dic 29  2018 Imágenes
drwxr-xr-x  4 picodotdev picodotdev 4,0K nov 29  2018 .java
drwx------  3 picodotdev picodotdev 4,0K nov 28  2018 .local
drwxr-xr-x  4 picodotdev picodotdev 4,0K feb 22  2019 .m2
drwx------  5 picodotdev picodotdev 4,0K nov 28  2018 .mozilla
drwxr-xr-x  2 picodotdev picodotdev 4,0K dic 20  2018 Música
drwxr-xr-x  2 picodotdev picodotdev 4,0K nov 28  2018 Plantillas
drwxr-xr-x  2 picodotdev picodotdev 4,0K nov 28  2018 Público
drwxr-xr-x  5 picodotdev picodotdev 4,0K ene 11 00:58 Software
drwx------  2 picodotdev picodotdev 4,0K may  3  2019 .ssh
drwxr-xr-x  2 picodotdev picodotdev 4,0K sep 24 23:20 .steam
drwxr-xr-x  2 picodotdev picodotdev 4,0K nov 30  2018 Vídeos
drwxr-xr-x  2 picodotdev picodotdev 4,0K feb  1  2019 .vim
-rw-------  1 picodotdev picodotdev 8,9K ene 15 22:27 .bash_history
-rw-r--r--  1 picodotdev picodotdev   21 jun  4  2018 .bash_logout
-rw-r--r--  1 picodotdev picodotdev   57 jun  4  2018 .bash_profile
-rw-r--r--  1 picodotdev picodotdev  541 nov 28 22:14 .bashrc
-rw-r--r--  1 picodotdev picodotdev   73 dic  1  2018 .gitconfig
-rw-r--r--  1 picodotdev picodotdev  16K dic  1  2018 .git-prompt.sh
lrwxrwxrwx  1 picodotdev picodotdev   35 sep 24 23:19 .steampath -> /home/picodotdev/.steam/sdk32/steam
lrwxrwxrwx  1 picodotdev picodotdev   33 sep 24 23:19 .steampid -> /home/picodotdev/.steam/steam.pid
ls.sh

Para cambiar los permisos de un archivo se utiliza el comando chmod pudiendo utilizarse de varias formas. El primer caso establece todos los bits dando permisos de lectura, escritura y ejecución al usuario propietario de archivo, y de lectura para los usuarios del grupo y para el resto de usuarios. El segundo caso da permisos de lectura al usuario en el archivo indicado. El tercer caso quita los permisos de escritura al resto de usuarios. El cuarto caso da permisos de ejecución a todos, al propietario del archivo, a los usuarios de su grupo y al resto de usuarios.

1
2
3
4
$ chmod 644 README.md
$ chmod r+u README.md
$ chmod r-o README.md
$ chmod x-a README.md
chmod.sh

El comando chown permite cambiar el propietario del archivo. En este caso se establece como propietario del archivo el usuario root.

1
2
$ chmod root README.md
$ chmod root:root README.md
chown.sh

En el caso de los directorios tener el permiso de lectura significa poder listar el contenido del directorio (ls), el permiso de escritura poder crear archivos, renombrar y eliminar archivos (por ejemplo con touch, mkdir) y el de ejecución en un directorio otorga acceso al contenido de los archivos (se concede dependiendo de los propios permisos del archivo).

En el permiso de ejecución en vez de una x puede aparecer una s en en los permisos de grupos de usuario y grupo y significa que al ejecutar el archivo en vez de tomar como usuario de ejecución el del usuario o grupo del usuario que lo ejecuta se toma el usuario y grupo del archivo, estos son los setuid y setgid. Si en en el bit de ejecución del grupo otros aparece una t indica que el directorio es sticky y solo el dueño del directorio o el usuario root pueden renombrar o eliminar archivos.

  • r: lectura.
  • w: escritura.
  • x: ejecución.
  • u: usuario.
  • g: grupo.
  • o: otros.
  • a: todos (usuario, grupo y otros).
  • +: añadir permisos.
  • -: quitar permisos.
  • d: directorio.
  • l: enlace simbólico.
  • s: setuid y setgid.
  • t: sticky.

Estos son algunos ejemplos de permisos en directorios.

El usuario archie tiene acceso al directorio Documents. Puede listar, crear archivos, renombrar y eliminar cualquier archivo en Documents independientemente de los permisos de esos archivos. Su posibilidad de acceder al contenido de los archivos dependen de los permisos del archivo.

1
2
drwx------ 6 archie users  4096 Jul  5 17:37 Documents

permissions-1.sh

En este caso sin el permiso de lectura en el directorio archie tiene acceso completo pero no puede crear, renombrar ni eliminar archivos. Puede listar los archivos y acceder al contenido de los archivos si los permisos de ese archivo lo permiten.

1
2
dr-x------ 6 archie users  4096 Jul  5 17:37 Documents

permissions-2.sh

archie no puede listar los archivos del directorio pero si conocer el nombre de un archivo existente puede listarlo, renombrarlo, eliminarlo y acceder a su contenido (si los permisos del archivo lo permiten). También puede creer nuevos archivos.

1
2
d-wx------ 6 archie users  4096 Jul  5 17:37 Documents

permissions-3.sh

archie solo es capaz de acceder a los archivos que conoce (si los permisos de ese archivo lo permiten). No puede listar archivos existentes ni crear, renombrar o eliminar ninguno de ellos.

1
2
d--x------ 6 archie users  4096 Jul  5 17:37 Documents

permissions-4.sh

Debe tenerse en cuenta que los anteriores son permisos sobre directorios y son independientes de los permisos de los archivos individuales. Cuando se crea un nuevo archivo es el directorio el que cambia, este es el por qué se necesitan permisos en el directorio.

Otro ejemplo, en este caso para un archivo, no un directorio. La primera letra no es una d sino un -, con lo que foobar es un archivo, no un directorio. Los permisos del propietario son rw- de modo que el propietario (archie) tiene la capacidad de leer y escribir pero no de ejecutarlo. El permiso de ejecución no es necesario si los archivos son de texto o datos. Los permisos de grupo son r--, de modo que el grupo tiene la habilidad de leer el archivo pero no de escribir en él de ninguna forma, esencialmente es un archivo de solo lectura para el grupo. Los permisos para el grupo de otros es el mismo.

1
2
-rw-r--r-- 1 archie users  5120 Jun 27 08:28 foobar

permissions-5.sh

Otros esquemas más flexibles pero más complejos son las listas de control de acceso o ACL y los sistemas de control de acceso obligatorio o MAC, GNU/Linux también soporta este tipo de seguridades activando ACL o activando SELinux. Las ACL permiten dar permisos específicos a cualquier usuario o grupo para cualquier archivo.

En la wiki de Arch Linux sobre permisos de archivo y atributos se explica detalladamente y con ejemplos el sistema de permisos en GNU/Linux.


Comparte el artículo: