Permisos de archivos

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio aprenderá a administrar los permisos de archivos en Linux. Explorará tres comandos esenciales: chown, touch y chmod. Estas herramientas son fundamentales para gestionar el acceso a archivos y directorios en un sistema Linux. Al finalizar, sabrá crear archivos, cambiar su propietario y modificar sus permisos. Comprender estos comandos le permitirá controlar quién puede leer, escribir y ejecutar archivos en su sistema.

Crear un archivo nuevo

Comience por crear un archivo nuevo con el comando touch. Este comando versátil puede crear archivos nuevos y vacíos, así como actualizar las marcas de tiempo de archivos existentes. Puede considerarlo una forma rápida de «tocar» un archivo: hacerlo existir o actualizar la hora de su último acceso.

Primero, asegúrese de encontrarse en el directorio correcto. Trabajará en el directorio project:

cd ~/project

El comando cd significa «change directory» (cambiar de directorio). El símbolo ~ representa su directorio personal y /project especifica el subdirectorio al que desea acceder. Si el directorio project no existe, es probable que este comando falle. Si no está seguro, normalmente conviene crear primero el directorio. Sin embargo, en este entorno de laboratorio el directorio ya debería existir.

Ahora cree un archivo nuevo llamado example.txt:

touch example.txt

Este comando crea un archivo vacío llamado example.txt en el directorio actual. Para confirmar que se creó, use el comando ls:

ls

ls significa «list» (listar). Muestra los archivos y directorios de la ubicación actual. Debería ver example.txt en la salida. Si no aparece, compruebe que ejecutó correctamente el comando touch y que se encuentra en el directorio ~/project.

Cambiar el propietario de un archivo

Ahora que ha creado un archivo, aprenderá a cambiar su propietario. El comando chown permite modificar tanto el propietario de usuario como el propietario de grupo de un archivo. El propietario determina quién tiene el control sobre el archivo.

Primero, compruebe la propiedad actual del archivo example.txt:

ls -l example.txt

El comando ls -l (listar con formato largo) proporciona información detallada sobre el archivo, incluidos sus permisos, propietario y grupo. Debería ver una salida similar a esta:

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

Analice esta salida:

  1. -rw-rw-r-- representa los permisos del archivo (los estudiará con más detalle en el paso 4). El primer carácter indica el tipo de archivo (- para un archivo normal, d para un directorio, etc.). Los caracteres restantes representan los permisos de lectura, escritura y ejecución del propietario, el grupo y los demás usuarios.
  2. El primer labex es el propietario actual del archivo. Es el nombre de usuario que posee el archivo.
  3. El segundo labex es el grupo actual del archivo. Un grupo es un conjunto de usuarios que pueden compartir permisos.
  4. 0 es el tamaño del archivo en bytes. Como el archivo está vacío, su tamaño es cero.
  5. Jul 29 15:11 es la fecha y hora de la última modificación.
  6. example.txt es el nombre del archivo.

Ahora cambie el propietario del archivo al usuario root. root es la cuenta de administrador de los sistemas Linux y tiene privilegios especiales.

sudo chown root:root example.txt

Esto es lo que hace el comando:

  • sudo ejecuta el comando con privilegios de root. Probablemente se le solicitará su contraseña. chown requiere privilegios elevados porque es un comando potente que puede afectar a la seguridad del sistema. Sin sudo, aparecerá un error «Permission denied».
  • chown es el comando que cambia la propiedad.
  • root:root especifica el nuevo propietario y grupo, ambos establecidos como root. La sintaxis es owner:group.
  • example.txt es el archivo de destino.

Compruebe el cambio:

ls -l example.txt

Ahora debería ver que tanto el propietario como el grupo cambiaron a root:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Si todavía aparece labex en lugar de root, asegúrese de haber usado sudo al ejecutar chown y de haber introducido correctamente su contraseña.

Cambiar el propietario de un directorio

El comando chown también puede cambiar el propietario de directorios completos y de su contenido. Compruébelo a continuación. Esto resulta especialmente útil para administrar estructuras de directorios complejas cuando necesita asegurarse de que todos los archivos y subdirectorios tengan el mismo propietario.

Primero, cree un directorio nuevo con algunos archivos:

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

Analice estos comandos:

  • mkdir -p new-dir/subdir crea el directorio new-dir y su subdirectorio subdir. La opción -p indica a mkdir que cree los directorios padre necesarios. Sin -p, si new-dir no existiera, la creación de new-dir/subdir fallaría.
  • echo "Hello, world" > new-dir/file1.txt crea un archivo llamado file1.txt dentro del directorio new-dir y escribe en él el texto "Hello, world". El símbolo > se usa para la redirección: toma la salida del comando echo y la redirige al archivo especificado.
  • echo "Another file" > new-dir/subdir/file2.txt hace algo similar: crea un archivo llamado file2.txt dentro del directorio new-dir/subdir y escribe en él el texto "Another file".

Ahora compruebe la propiedad actual:

ls -lR new-dir

ls -lR muestra recursivamente el contenido de new-dir. La opción -R (recursiva) hace que ls enumere todos los archivos y subdirectorios dentro de new-dir, incluido su contenido.

Debería ver algo similar a esto:

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

Esto muestra que el directorio new-dir, su subdirectorio subdir y los archivos file1.txt y file2.txt pertenecen a labex.

Ahora cambie la propiedad de new-dir y de todo su contenido al usuario root:

sudo chown -R root:root new-dir

En este comando:

  • La opción -R indica a chown que opere de forma recursiva y cambie la propiedad de todos los archivos y subdirectorios dentro de new-dir. Esto es fundamental: sin -R, solo cambiaría la propiedad del directorio new-dir, mientras que los archivos y subdirectorios internos seguirían perteneciendo a labex.

Compruebe el cambio:

ls -lR new-dir

Ahora debería ver:

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

Como puede observar, la propiedad del directorio y de todo su contenido cambió a root. Esto demuestra la utilidad de la opción -R para aplicar cambios amplios de propiedad dentro de una estructura de directorios.

Cambiar los permisos de un archivo

En Linux, los permisos de los archivos se representan mediante una serie de letras o números. Aprenda a leer y cambiar estos permisos. Comprenderlos es fundamental para proteger sus archivos y evitar accesos no autorizados.

Primero, consulte los permisos actuales del archivo example.txt:

ls -l example.txt

Podría ver algo similar a esto:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

La parte -rw-rw-r-- representa los permisos del archivo. Aquí entran en juego las notaciones numérica y simbólica. Analícela:

  • El primer carácter (-) indica que se trata de un archivo normal. Otros indicadores comunes son d para un directorio y l para un enlace simbólico.
  • Los tres caracteres siguientes (rw-) representan los permisos del propietario: lectura y escritura, pero no ejecución.
    • r representa el permiso de lectura: el propietario puede abrir y leer el archivo.
    • w representa el permiso de escritura: el propietario puede modificar el archivo.
    • x representa el permiso de ejecución: el propietario puede ejecutar el archivo si es un programa o script. Un - significa que el permiso está denegado.
  • Los tres caracteres siguientes (rw-) corresponden al grupo. Tienen el mismo significado, pero se aplican a los miembros del grupo del archivo.
  • Los tres últimos (r--) corresponden a los demás usuarios. También tienen el mismo significado, pero se aplican a los usuarios que no son el propietario ni miembros del grupo del archivo.

Ahora cambie estos permisos con el comando chmod. chmod significa «change mode» (cambiar modo) y permite modificar los permisos. Comenzará con la notación numérica.

sudo chmod 700 example.txt

En este comando:

  • 700 es una representación numérica de los permisos:
    • El primer dígito (7) representa los permisos del propietario.
    • El segundo dígito (0) representa los permisos del grupo.
    • El tercer dígito (0) representa los permisos de los demás usuarios.

Cada dígito es un número del 0 al 7, calculado mediante la suma de los valores de los permisos de lectura (4), escritura (2) y ejecución (1):

  • 4: permiso de lectura
  • 2: permiso de escritura
  • 1: permiso de ejecución
  • 0: sin permisos

Por lo tanto, 7 (primer dígito) concede al propietario permisos de lectura (4), escritura (2) y ejecución (1): 4+2+1=7.
0 (segundo dígito) concede al grupo ningún permiso (0+0+0=0).
0 (tercer dígito) concede a los demás usuarios ningún permiso (0+0+0=0).

Por tanto, 700 significa: propietario: lectura, escritura y ejecución; grupo: ninguno; demás usuarios: ninguno.

Compruebe el cambio:

ls -l example.txt

Ahora debería ver:

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

El propietario tiene permisos rwx (lectura, escritura y ejecución), mientras que el grupo y los demás usuarios no tienen ningún permiso.

Cambiar los permisos de un directorio

El cambio de permisos de los directorios funciona de forma similar al cambio de permisos de los archivos. Practique creando un directorio nuevo y modificando sus permisos. Los permisos de un directorio controlan quién puede listar su contenido, crear archivos nuevos dentro de él y acceder a los archivos que ya contiene.

Primero, cree un directorio nuevo y establezca permisos no estándar:

mkdir ~/test-dir
chmod 700 ~/test-dir

Ahora compruebe los permisos actuales:

ls -ld ~/test-dir

La opción -d de ls -l indica a ls que muestre el propio directorio en lugar de su contenido. Sin -d, ls mostraría los archivos y subdirectorios dentro de test-dir, que actualmente está vacío. Debería ver:

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

La d inicial indica que se trata de un directorio. rwx------ indica que el propietario tiene permisos de lectura, escritura y ejecución, mientras que el grupo y los demás usuarios no tienen permisos. En los directorios:

  • El permiso de lectura (r) permite listar el contenido del directorio mediante ls.
  • El permiso de escritura (w) permite crear archivos y subdirectorios nuevos dentro del directorio.
  • El permiso de ejecución (x) permite acceder a los archivos y subdirectorios dentro del directorio, es decir, usar cd para entrar en él.

Ahora cambie los permisos:

chmod -R 755 ~/test-dir

En este comando:

  • -R aplica el cambio de forma recursiva a todos los archivos y subdirectorios, aunque en este caso el directorio está vacío. Es una buena práctica incluirla al trabajar con directorios, incluso si están vacíos, por si después añade archivos.
  • 755 concede al propietario permisos de lectura, escritura y ejecución, y al grupo y a los demás usuarios permisos de lectura y ejecución.

Desglose de 755:

  • Propietario (7): lectura (4) + escritura (2) + ejecución (1) = 7
  • Grupo (5): lectura (4) + ejecución (1) = 5
  • Demás usuarios (5): lectura (4) + ejecución (1) = 5

Compruebe el cambio:

ls -ld ~/test-dir

Ahora debería ver:

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Esto muestra claramente el cambio de permisos: antes solo el propietario tenía acceso (700); ahora el propietario tiene acceso completo y los demás usuarios pueden leer y ejecutar (755). Cualquiera puede listar el contenido de test-dir y acceder a los archivos que contiene, pero solo el propietario puede crear archivos nuevos o modificar los existentes.

Usar la notación simbólica para los permisos

Aunque la notación numérica es concisa, la notación simbólica puede resultar más intuitiva, especialmente cuando solo desea cambiar un permiso. La notación simbólica utiliza letras para representar al usuario, el grupo y los demás usuarios, además de operadores para añadir o quitar permisos.

En este paso creará un pequeño script de shell y le añadirá el permiso de ejecución.

Primero, cree un archivo de script nuevo con contenido:

cd ~/project
echo '#!/bin/bash' > script.sh
echo 'echo "Hello, World"' >> script.sh

Estos comandos hacen dos cosas:

  • El primer comando echo crea script.sh y escribe en él la primera línea, #!/bin/bash. Esta línea se denomina shebang e indica a Linux que ejecute el script con Bash.
  • El segundo comando echo añade una línea al final del archivo mediante >>. Escribe echo "Hello, World", que mostrará Hello, World cuando se ejecute el script.

Confirme que el archivo contiene ahora dos líneas separadas mediante:

cat script.sh

Debería ver:

#!/bin/bash
echo "Hello, World"

Ahora compruebe sus permisos iniciales:

ls -l script.sh

Debería ver algo similar a esto:

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Como puede observar, al principio el script solo tiene permisos de lectura y escritura para el propietario y el grupo, y permiso de lectura para los demás usuarios. No tiene permiso de ejecución, que es necesario para ejecutarlo como programa.

Intente ejecutar el script:

./script.sh

Debería ver un error «Permission denied» porque el script todavía no tiene permisos de ejecución. La parte ./ indica al intérprete de comandos que ejecute el script ubicado en el directorio actual.

Ahora añada el permiso de ejecución para el propietario mediante la notación simbólica:

chmod u+x script.sh

En este comando:

  • u se refiere al usuario (el propietario). Las otras opciones son g para el grupo, o para los demás usuarios y a para todos (usuario, grupo y demás usuarios).
  • +x añade el permiso de ejecución. El símbolo + añade un permiso y el símbolo - lo elimina.

Por tanto, u+x significa «añadir el permiso de ejecución al propietario».

Compruebe el cambio:

ls -l script.sh

Ahora debería ver:

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

El propietario tiene ahora permisos rwx (lectura, escritura y ejecución).

Vuelva a ejecutar el script:

./script.sh

Esta vez debería ver la salida:

Hello, World

Este ejemplo muestra claramente por qué es necesario añadir permisos de ejecución a los scripts, así como la diferencia entre el estado anterior y posterior al cambio. La notación simbólica permite modificar permisos específicos sin tener que recalcular toda la representación numérica.

Resumen

En este laboratorio ha explorado comandos esenciales de Linux para administrar los permisos de archivos:

  1. Usó touch para crear archivos nuevos y actualizar archivos existentes.
  2. Aprendió a usar chown para cambiar la propiedad de archivos y directorios, incluidos los cambios recursivos para estructuras de directorios completas.
  3. Practicó el uso de chmod con notación numérica y simbólica para modificar los permisos de archivos y directorios, y comprendió los distintos niveles de permisos del propietario, el grupo y los demás usuarios.
  4. Vio ejemplos prácticos de la importancia de los permisos, como la necesidad de contar con permisos de ejecución para ejecutar scripts.
  5. Aclaró las diferencias entre la notación numérica y simbólica de chmod, así como cuándo puede ser más adecuada cada una.

Estos comandos son fundamentales para mantener la seguridad y controlar el acceso en sistemas Linux. Recuerde actuar con precaución al cambiar permisos, especialmente al usar sudo, ya que los cambios incorrectos pueden tener consecuencias importantes para la seguridad y el funcionamiento del sistema. Compruebe siempre los comandos antes de ejecutarlos y asegúrese de comprender las implicaciones de los cambios que realiza.