Propiedades y permisos de archivos y directorios en Linux

En sistemas operativos como Linux, los archivos y directorios poseen atributos esenciales que gestionan el acceso y las operaciones. Estos incluyen el nodo inode, el tipo de archivo, los permisos de lectura, escritura y ejecución, así como la pertenencia a usuarios y grupos.

Atributos básicos de archivos

Al listar archivos con el comando ls -lh, se muestran detalles como el inode, tipo, permisos, enlaces duros, propietario, grupo, tamaño y fecha de modificación. Por ejemplo:

$ ls -lh ejemplo.txt
-rw-r--r-- 1 admin usuarios 45 12:30 ejemplo.txt

Esta salida indica que el archivo ejemplo.txt es un archivo regular, con permisos rw-r--r-- (lectura y escritura para el propietario, solo lectura para el grupo y otros), pertenece al usuario admin y al grupo usuarios, y tiene un tamaño de 45 bytes.

El concepto de inode

Cada archivo o directorio en Linux está representado por un inode, que almacena metadatos como permisos, propietario, tamaño y ubicación de bloques de datos. El inode actúa como un índice, permitiendo al sistema acceder rápidamente a la información del archivo. Se puede ver el inode con ls -i:

$ ls -i ejemplo.txt
12345 ejemplo.txt

Enlaces duros comparten el mismo inode, lo que significa que apuntan a los mismos datos en disco.

Enlaces duros y simbólicos

Enlaces duros se crean con ln y comparten el inode. Por ejemplo:

$ ln ejemplo.txt enlace_duro.txt
$ ls -i ejemplo.txt enlace_duro.txt
12345 ejemplo.txt
12345 enlace_duro.txt

Modificar uno afecta al otro, y eliminar uno no elimina los datos hasta que no queden enlaces.

Enlaces simbólicos (o soft links) se crean con ln -s y son referencias a la ruta del archivo original. Tienen su propio inode. Ejemplo:

$ ln -s ejemplo.txt enlace_simbolico.txt
$ ls -l enlace_simbolico.txt
lrwxrwxrwx 1 admin usuarios 12 12:30 enlace_simbolico.txt -> ejemplo.txt

Si el archivo original se elimina, el enlace simbólico queda roto.

Permisos de archivos y directorios

Los permisos se dividen en tres grupos: propietario (owner), grupo (group) y otros (others). Cada grupo tiene permisos de lectura (r), escritura (w) y ejecución (x). Para archivos:

  • Lectura (r): Permite ver el contenido.
  • Escritura (w): Permite modificar el contenido.
  • Ejecución (x): Permite ejecutar el archivo como programa.

Para directorios:

  • Lectura (r): Permite listar el contenido.
  • Escritura (w): Permite crear, eliminar o renombrar archivos dentro.
  • Ejecución (x): Permite acceder al directorio.

Los permisos se visualizan en formato octal o con caracteres. Por ejemplo, 755 en octal equivale a rwxr-xr-x.

Modificación de permisos con chmod

El comando chmod cambia permisos. Se puede usar notación octal o simbólica. Ejemplo con octal:

$ chmod 644 ejemplo.txt
$ ls -l ejemplo.txt
-rw-r--r-- 1 admin usuarios 45 12:30 ejemplo.txt

Con notación simbólica para añadir ejecución al propietario:

$ chmod u+x ejemplo.txt
$ ls -l ejemplo.txt
-rwxr--r-- 1 admin usuarios 45 12:30 ejemplo.txt

Para aplicar cambios recursivamente en directorios, usar -R.

Umask y permisos predeterminados

La umask establece permisos por defecto al crear archiovs o directorios. Se calcula restando la umask de los pemrisos base (666 para archivos, 777 para directorios). Ejemplo con umask 022:

Archivo: 666 - 022 = 644 (rw-r--r--)
Directorio: 777 - 022 = 755 (rwxr-xr-x)

Se puede ver la umask actual con umask y modificarla temporalmente.

Bits especiales: setuid, setgid y sticky bit

setuid permite ejecutar un archivo con los permisos del propietario. Se activa con chmod u+s o en octal 4000. Ejemplo:

$ chmod 4755 programa.bin
$ ls -l programa.bin
-rwsr-xr-x 1 root usuarios 1024 12:30 programa.bin

setgid hace que los archivos creados en un directorio hereden el grupo. Se activa con chmod g+s o en octal 2000.

Sticky bit restringe la eliminación de archivos en directorios compartidos. Se activa con chmod o+t o en octal 1000, como en /tmp.

Propiedad de archivos con chown y chgrp

chown cambia el propietario y grupo de archivos. Ejemplo:

$ chown nuevo_usuario:nuevo_grupo ejemplo.txt
$ ls -l ejemplo.txt
-rw-r--r-- 1 nuevo_usuario nuevo_grupo 45 12:30 ejemplo.txt

chgrp cambia solo el grupo. Ambos comandos soportan la opción -R para cambios recursivos.

Tiempos de modificación y acceso

Los archivos tienen marcas de tiempo: modificación, acceso y cambio de inode. Se pueden ver con stat:

$ stat ejemplo.txt
  Fichero: ejemplo.txt
  Tamaño: 45          Bloques: 8          Bloque E/S: 4096   fichero regular
Acceso: (0644/-rw-r--r--)  Uid: ( 1000/  admin)   Gid: ( 1000/ usuarios)
Cambiar: 2023-10-05 12:30:00.000000000 +0200
Modificar: 2023-10-05 12:30:00.000000000 +0200
Acceso: 2023-10-05 12:30:00.000000000 +0200

El comando touch puede actualizar estos tiempos.

Atriubtos del sistema de archivos

Algunos sistemas de archivos soportan atributos extendidos con chattr. Por ejemplo, el flag +i hace un archivo inmutable:

$ chattr +i ejemplo.txt
$ rm ejemplo.txt
rm: no se puede borrar 'ejemplo.txt': Operación no permitida

Estos atributos dependen del sistema de archivos subyacente.

Etiquetas: linux permisos archivos directorios inode

Publicado el 6-15 04:02