Permisos de Archivos

LinuxBeginner
Practicar Ahora

Introducción

En esta sesión, nos sumergiremos en el mundo de los permisos de archivos en Linux. Exploraremos tres comandos esenciales: chown, touch y chmod. Estas herramientas son cruciales para gestionar quién puede acceder a los archivos y directorios en un sistema Linux. Al finalizar esta práctica, tendrás un conocimiento sólido sobre cómo crear archivos, cambiar la propiedad de los mismos y modificar sus permisos. Comprender estos comandos te permitirá controlar quién puede leer, escribir y ejecutar archivos en tu sistema.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y ganar experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 92%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Creación de un Nuevo Archivo

Comencemos creando un nuevo archivo utilizando el comando touch. Este comando versátil puede crear archivos nuevos y vacíos, así como actualizar las marcas de tiempo de los ya existentes. Piénsalo como una forma rápida de "tocar" un archivo, ya sea para darle vida o para actualizar su última hora de acceso.

Primero, asegúrate de estar en el directorio correcto. Trabajaremos en tu directorio project:

cd ~/project

El comando cd significa "change directory" (cambiar directorio). El símbolo ~ representa tu directorio personal (home), y /project especifica el subdirectorio al que queremos movernos. Si el directorio project no existe, es probable que este comando falle. Por lo general, es una buena práctica crear el directorio primero si no estás seguro. Sin embargo, en este entorno de laboratorio, el directorio ya debería estar allí.

Ahora, vamos a crear un nuevo archivo llamado example.txt:

touch example.txt

Este comando crea un archivo vacío llamado example.txt en tu directorio actual. Para confirmar que el archivo se ha creado, utiliza el comando ls:

ls

ls significa "list" (listar). Muestra los archivos y directorios en tu ubicación actual. Deberías ver example.txt en la salida. Si no lo ves, verifica que hayas ejecutado el comando touch correctamente y que realmente te encuentres en el directorio ~/project.

Cambio de la Propiedad de un Archivo

Ahora que hemos creado un archivo, aprendamos cómo cambiar su propietario. El comando chown nos permite modificar tanto el usuario como el grupo propietario de un archivo. La propiedad determina quién tiene el control sobre el archivo.

Primero, verifiquemos la propiedad actual de nuestro archivo example.txt:

ls -l example.txt

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

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

Desglosemos esta información:

  1. -rw-rw-r-- representa los permisos del archivo (exploraremos esto más a fondo en el Paso 4). El primer carácter indica el tipo de archivo (- para un archivo regular, d para un directorio, etc.). Los caracteres restantes representan los permisos de lectura, escritura y ejecución para el propietario, el grupo y otros.
  2. El primer labex es el propietario actual del archivo. Este es el nombre de usuario al que pertenece el archivo.
  3. El segundo labex es el grupo actual del archivo. Un grupo es una colección 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, cambiemos la propiedad del archivo al usuario root. root es la cuenta de administrador en los sistemas Linux y tiene privilegios especiales.

sudo chown root:root example.txt

Esto es lo que hace este comando:

  • sudo ejecuta el comando con privilegios de superusuario. Es probable que se te pida tu contraseña. chown requiere privilegios elevados porque es un comando potente que puede afectar la seguridad del sistema. Sin sudo, recibirás un error de "Permiso denegado".
  • chown es el comando para cambiar la propiedad (change owner).
  • root:root especifica el nuevo propietario y grupo (ambos establecidos como root). La sintaxis es propietario:grupo.
  • example.txt es el archivo de destino.

Verifiquemos el cambio:

ls -l example.txt

Ahora deberías ver que tanto el propietario como el grupo han cambiado a root:

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

Si todavía ves labex en lugar de root, asegúrate de haber usado sudo al ejecutar el comando chown y de haber introducido tu contraseña correctamente.

Cambio de la Propiedad de un Directorio

El comando chown también puede cambiar la propiedad de directorios completos y su contenido. Veamos esto en acción. Esto es particularmente útil para gestionar estructuras de directorios complejas donde quieres asegurar que todos los archivos y subdirectorios tengan el mismo propietario.

Primero, vamos a crear un nuevo directorio con algunos archivos:

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

Desglosemos estos comandos:

  • mkdir -p new-dir/subdir crea el directorio new-dir y su subdirectorio subdir. La opción -p le indica a mkdir que cree los directorios padres según sea necesario. 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 el texto "Hello, world" en él. El símbolo > se utiliza para la redirección; toma la salida del comando echo y la dirige al archivo especificado.
  • echo "Another file" > new-dir/subdir/file2.txt crea de manera similar un archivo llamado file2.txt dentro del directorio new-dir/subdir y escribe el texto "Another file" en él.

Ahora, verifiquemos la propiedad actual:

ls -lR new-dir

ls -lR lista el contenido de new-dir de forma recursiva. La opción -R (recursiva) hace que ls muestre todos los archivos y subdirectorios dentro de new-dir junto con su contenido.

Deberías ver algo como 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 todos a labex.

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

sudo chown -R root:root new-dir

En este comando:

  • La opción -R le indica a chown que opere de forma recursiva, cambiando 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, pero los archivos y subdirectorios internos seguirían perteneciendo a labex.

Verifiquemos el cambio:

ls -lR new-dir

Ahora deberías 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 puedes observar, la propiedad del directorio y de todo su contenido ha cambiado a root. Esto demuestra el poder de la opción -R para realizar cambios masivos de propiedad dentro de una estructura de directorios.

Cambio de los Permisos de un Archivo

En Linux, los permisos de archivos se representan mediante una serie de letras o números. Exploremos cómo leer y cambiar estos permisos. Comprender los permisos es vital para asegurar tus archivos y evitar accesos no autorizados.

Primero, veamos los permisos actuales de nuestro archivo example.txt:

ls -l example.txt

Podrías ver algo como 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í es donde entran en juego las notaciones numérica y simbólica. Desglosemos su significado:

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

Ahora, cambiemos estos permisos usando el comando chmod. chmod significa "change mode" (cambiar modo) y te permite modificar estos permisos. Comenzaremos 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 otros.

Cada dígito es un número del 0 al 7, calculado sumando 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 permiso

Por lo tanto, 7 (primer dígito) otorga al propietario permisos de lectura (4), escritura (2) y ejecución (1): 4+2+1=7.
0 (segundo dígito) no otorga permisos al grupo (0+0+0=0).
0 (tercer dígito) no otorga permisos a otros (0+0+0=0).

En consecuencia, 700 significa: Propietario: lectura, escritura, ejecución. Grupo: ninguno. Otros: ninguno.

Verifiquemos el cambio:

ls -l example.txt

Ahora deberías ver:

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

El propietario ahora tiene permisos rwx (lectura, escritura y ejecución), mientras que el grupo y otros no tienen permisos.

Cambio de los Permisos de un Directorio

Cambiar los permisos de los directorios funciona de manera similar a los archivos. Practiquemos creando un nuevo directorio y modificando sus permisos. Los permisos de directorio controlan quién puede listar el contenido del directorio, crear nuevos archivos dentro de él y acceder a los archivos que ya existen.

Primero, vamos a crear un nuevo directorio y establecer algunos permisos no estándar:

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

Ahora, verifiquemos los permisos actuales:

ls -ld ~/test-dir

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

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

La d al principio indica que es un directorio. El rwx------ indica que el propietario tiene permisos de lectura, escritura y ejecución, mientras que el grupo y otros no tienen permisos. Para los directorios:

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

Ahora, cambiemos los permisos:

chmod -R 755 ~/test-dir

En este comando:

  • -R aplica el cambio de forma recursiva a todos los archivos y subdirectorios (aunque nuestro directorio esté vacío en este caso). Es una buena práctica incluirlo al tratar con directorios, incluso si están vacíos, por si añades archivos más tarde.
  • 755 otorga permisos de lectura, escritura y ejecución al propietario, y permisos de lectura y ejecución al grupo y a otros.

Desglosemos 755:

  • Propietario (7): Lectura (4) + Escritura (2) + Ejecución (1) = 7
  • Grupo (5): Lectura (4) + Ejecución (1) = 5
  • Otros (5): Lectura (4) + Ejecución (1) = 5

Verifiquemos el cambio:

ls -ld ~/test-dir

Ahora deberías ver:

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

Esto muestra claramente el cambio en los permisos: de tener acceso solo el propietario (700) a que el propietario tenga acceso total mientras que los demás pueden leer y ejecutar (755). Ahora, cualquier persona puede listar el contenido de test-dir y acceder a los archivos dentro de él, pero solo el propietario puede crear nuevos archivos o modificar los existentes.

Uso de la Notación Simbólica para Permisos

Aunque la notación numérica es concisa, la notación simbólica puede ser más intuitiva, especialmente cuando solo quieres cambiar un único permiso. La notación simbólica utiliza letras para representar al usuario, al grupo y a otros, y operadores para añadir o quitar permisos.

Primero, vamos a crear un nuevo archivo de script con algo de contenido:

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

Este comando hace dos cosas:

  1. Crea un nuevo archivo llamado script.sh. La extensión .sh se usa comúnmente para scripts de shell. Los scripts de shell son archivos ejecutables que contienen una serie de comandos que se ejecutan en secuencia.
  2. Escribe dos líneas en este archivo:
    • #!/bin/bash (llamado shebang) le indica al sistema que este es un script de bash. La línea shebang especifica el intérprete que debe usarse para ejecutar el script. En este caso, es /bin/bash, que es la ruta al intérprete de Bash.
    • echo "Hello, World" es un comando que imprimirá "Hello, World" cuando el script se ejecute. El comando echo simplemente muestra el texto que le sigue.
    • \n es un carácter de nueva línea, asegurando que los comandos estén en líneas separadas en el archivo.

Ahora, verifiquemos sus permisos iniciales:

ls -l script.sh

Deberías ver algo como:

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

Como puedes ver, inicialmente, el script solo tiene permisos de lectura y escritura para el propietario y el grupo, y permiso de lectura para otros. No tiene permiso de ejecución, el cual es necesario para correrlo como un programa.

Intentemos ejecutar el script:

./script.sh

Deberías ver un error de "Permiso denegado" porque el script aún no tiene permisos de ejecución. La parte ./ le indica a la shell que ejecute el script ubicado en el directorio actual.

Ahora, añadamos el permiso de ejecución para el propietario usando la notación simbólica:

chmod u+x script.sh

En este comando:

  • u se refiere al usuario (user/owner). Otras opciones son g para el grupo, o para otros y a para todos (all: usuario, grupo y otros).
  • +x añade el permiso de ejecución. El símbolo + añade un permiso, mientras que el símbolo - lo elimina.

Por lo tanto, u+x significa "añadir permiso de ejecución para el propietario".

Verifiquemos el cambio:

ls -l script.sh

Ahora deberías ver:

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

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

Ahora, intentemos ejecutar el script de nuevo:

./script.sh

Esta vez, deberías ver la salida: "Hello, World"

Este ejemplo demuestra claramente por qué necesitamos añadir permisos de ejecución a los scripts, y la diferencia antes y después de añadir estos permisos. La notación simbólica facilita la modificación de permisos específicos sin tener que recalcular toda la representación numérica.

Resumen

En esta práctica de laboratorio, hemos explorado comandos esenciales de Linux para gestionar los permisos de archivos:

  1. Utilizamos touch para crear nuevos archivos y actualizar los existentes.
  2. Aprendimos a usar chown para cambiar la propiedad de archivos y directorios, incluyendo cambios recursivos para estructuras de directorios completas.
  3. Practicamos el uso de chmod con notación tanto numérica como simbólica para modificar permisos de archivos y directorios, comprendiendo los diferentes niveles de permisos para el propietario, el grupo y otros.
  4. Vimos ejemplos prácticos de por qué los permisos son importantes, como la necesidad de permisos de ejecución para correr scripts.
  5. Aclaramos las diferencias entre la notación numérica y simbólica para chmod y cuándo podría ser más apropiado usar cada una.

Estos comandos son fundamentales para mantener la seguridad y controlar el acceso en los sistemas Linux. Recuerda ser siempre cauteloso al cambiar permisos, especialmente cuando uses sudo, ya que los cambios incorrectos pueden tener consecuencias significativas para la seguridad y funcionalidad del sistema. Verifica siempre tus comandos antes de ejecutarlos y comprende las implicaciones de los cambios que estás realizando.