¿Te ha gustado el artículo?
0
¿Te ha gustado el artículo?
0

Introducción a la asignación de permisos de directorio en Linux

Linux es una de las opciones más populares para administradores de servidores web. Una característica de los derivados Unix es que es posible asignar permisos y derechos de acceso personalizados a archivos y directorios. Los usuarios tienen la posibilidad de gestionarlos implementando “chmod”, un programa de línea de comandos que se activa por la orden del mismo nombre en el terminal de Linux.

¿Qué es chmod?

La abreviación de “Change Mode” (chmod), es decir, un programa de línea de comandos desarrollado en los años setenta, justamente cuando AT&T lanzó la primera versión de Unix. chmod se encarga de la asignación de permisos y derechos de acceso a carpetas y directorios en sistemas operativos multiusuario. Esto también afecta a todos los sistemas estándar de archivos en derivaciones Linux destinados a garantizar el correcto funcionamiento del servidor. Los permisos de sistemas de archivos en Unix están basados en las clases de usuario, asignando permisos Unix individualmente. chmod es compatible con dos sistemas diferentes: la notación simbólica por medio de letras y la asignación de derechos de archivos a través de códigos octales basados en dígitos. Un cambio en los derechos de acceso a través de chmod solo puede ser realizada por el propietario del fichero o por el usuario raíz. La ejecución de tales procesos siempre debe ajustarse a la sintaxis:

$ chmod options mode file

El comando chmod es seguido por el elemento options –este permite definir sus opciones avanzadas. El elemento mode representa la umask aplicada a file, que puede ser un archivo o un directorio. Esta máscara de usuario contiene la información responsable de determinar si una clase de usuario debe o no recibir permisos de acceso o, dado el caso, si los permisos con los que cuenta deben ser retirados.

Clases de usuarios

De acuerdo con el sistema de archivos de Unix, cada archivo en un servidor Linux, como también los directorios, cuenta con permisos de acceso individuales. La regulación de los derechos de acceso se hace a través de tres clases diferentes de usuarios:

  • Propietario (user): por lo general, cualquier usuario que crea un archivo en un sistema Unix se define automáticamente como “user” de ese archivo. Los derechos de propiedad pueden ser gestionados con el comando “chown”. En la notación simbólica, el propietario o dueño de un archivo es reconocido con la letra “u”.
  • Grupo (group): el tipo de usuario “group” reúne varias cuentas de usuario en un mismo servidor. Esto se debe a que, en los sistemas de archivos Unix, cada cuenta de usuario se asocia automáticamente con un grupo principal –aunque también es posible que pertenezca a otros grupos. Tanto el propietario como el usuario raíz pueden gestionar la asignación de grupos valiéndose del comando “chgrp”. La letra utilizada para su notación simbólica es la “g”.
  • Otros (others): la clase de usuario “others” abarca todos los usuarios que no son propietarios de archivos ni miembros de un grupo con derechos de acceso. La clase de usuarios “otros” se denota con una “o”.

En caso de que un comando se refiera a todas las clases de usuario (user, group y other) se usará la letra “a” como notación simbólica para “all” (todos).

Derechos de acceso

El sistema de archivos Unix cuenta con tres tipos de permisos básicos. Cada uno de los usuarios mencionados anteriormente tendría derecho a las siguientes opciones:

  • Leer (read): este le concede al usuario un permiso de lectura de un archivo o un directorio. El derecho de acceso “read” no le permite a los usuarios escribir o modificar el archivo. Su notación simbólica se hace mediante la letra “r”, por lo que es común hablar de R-bit. 
  • Escribir (write): los usuarios con el derecho “write” pueden modificar el contenido de un archivo. En el caso de un directorio, los usuarios con este permiso pueden crear subdirectorios y archivos. Se representa simbólicamente con una “w”, también conocido como W-bit.
  • Ejecutar (execute): el permiso “execute” permite ejecutar un archivo si se trata de un programa, así como modificar un directorio para acceder a subdirectorios o ficheros. El proceso de ejecución se asocia a la letra “x”. Aquí se habla entonces de X-bit.

Cabe señalar que en los sistemas Unix, los derechos de acceso asignados no se heredan. Si se crea un archivo en un directorio, este no hereda automáticamente los derechos de acceso definidos para el directorio en el que se encuentra. Los permisos de archivo individuales se derivan de la umask del programa a través del cual fue creado cada fichero.

La representación de los permisos de acceso al terminal

La manera en la que se muestran los permisos de acceso a archivos y directorios en sistemas Unix es fundamental. El contenido en las carpetas se puede visualizar en el terminal con el comando „ls“. Propietarios y administradores pueden obtener información sobre los permisos de acceso usando „-l“. A continuación se muestra la asignación de permisos para el directorio “carpetaXYZ”:

usuario@equipo:~$ ls -l  
drwxrw-r-- 0 usuarioXYZ grupoXYZ 0000 2016-01-01 carpetaXYZ  

La parte más importante de la secuencia de código es:

drwxrw-r--

Esta codifica el tipo de archivo y los permisos para las tres clases de usuario. La primera parte indica de qué tipo de archivo se trata. En este caso se trata de un “directorio” (directory), pues comienza con la letra “d”. A continuación siguen tres bloques con tres caracteres, cada bloque es una clase de usuario de acuerdo a la secuencia estándar (usuario, grupo, otros), denotadas simbólicamente a su vez, con letras:

Código: d rwx rw- r--
Significado: d = directory user group other
    r = read r = read r = read
    w = white w = write -
    x = execute - -

Así, los permisos de archivo para el directorio “carpetaXYZ” están definidos de la siguiente manera: el propietario del archivo “user” puede leer el fichero (r), tiene permiso para modificarlo (w) y derecho a ejecutarlo (x); es decir, tiene permitido obtener información sobre la totalidad de los archivos contenidos en el directorio. Los miembros del grupo “grupoXYZ” tienen derechos de lectura y escritura (r, w), así como también se les permite guardar archivos en el directorio. Los otros usuarios solo pueden abrir los archivos y subdirectorios contenidos en el directorio si conocen su nombre (r). Sin embargo, aquí se observa que los derechos de acceso definidos solo se aplican a la “carpetaXYZ” y no a las subcarpetas u otros ficheros en el directorio. Para acceder a un archivo de texto dentro de esta carpeta, el código para su acceso sería completamente diferente:

-rw------- 0 usuarioXYZ grupoXYZ 0000 2016-01-01 ejemplo.txt  

En este ejemplo, el guion inicial (-) indica que se trata de un archivo normal, no de un directorio o de un enlace. Las letras rw- se encargan de garantizar los derechos de lectura y escritura. Debido a que se trata de un archivo de texto y no de un programa, el derecho de ejecución pierde validez, y por lo tanto se marca con un (-). El guion también se encuentra en los bloques de caracteres asignados a las clases de usuario “group” y “others”. De esta forma, se especifica que tales usuarios no cuentan con los permisos de acceso necesarios. 

Cambio de permisos en el terminal

En caso de que sea necesario adaptar o modificar los permisos Unix de acceso a un directorio o a un archivo en el sistema, chmod para Linux es una de las soluciones más apropiadas. Para esto, el propietario de un fichero o el usuario root deberá introducir el siguiente comando incluyendo la umask (mode) y el nombre de archivo (file):

$ chmod options mode file  

La umask puede ser creada como máscara simbólica o como código octal.

Notación simbólica

Si la creación de los derechos se hace mediante una máscara simbólica, los siguientes operadores se utilizan para vincular las clases de usuario con sus respectivos permisos: 

+ Con el operador “+” se asignan derechos de acceso a las diferentes clases de usuario. Este sobrescribe únicamente los derechos del archivo implicado.
- El operador “-“ le quita derechos de acceso a una determinada clase de usuario.
= Si los permisos de archivo recientemente utilizados por una clase de usuario deben ser renovados independientemente de sus derechos anteriores se usa el operador “=”.

Si, por ejemplo, el archivo “ejemplo.txt” tiene que ser modificado de tal manera que no solo su propietario (user), sino también todos los demás usuarios (group, other), tengan derechos de lectura y escritura, el comando chmod se verá de la siguiente manera:

$ chmod ugo+rw ejemplo.txt  

Alternativamente se podría hacer referencia a todas las clases de usuario posibles:

$ chmod a+rw ejemplo.txt  

Ahora, el archivo “ejemplo.txt” tendrá los siguientes derechos en sustitución de los permisos anteriores:

-rw------- a+rw -rw-rw-rw-
Derechos de acceso antes del cambio: Comando chmod: Derechos de acceso después del cambio:
user: read, write a = all user: read, write
group: keine Rechte + = Zugriffsrecht hinzufügen group: read, write
other: keine Rechte r = read other: read, write
  w = write  

Notación octal

Aunque la notación simbólica es una de las más utilizadas, su uso frecuente puede hacerla inmanejable. Por esta razón, muchos administradores recurren a la creación de una máscara en octal. Se trata de un número de tres dígitos en la que cada punto representa una clase de usuario del servidor. La notificación octal cuenta con un orden determinado:

Primer valor Corresponde a la clase de usuario “propietario” (user).
Segundo valor Corresponde a la clase de usuario “grupo” (group).
Tercer valor Corresponde a la clase de usuario “otros” (others).

Para saber qué derechos se asignan a las clases individuales de usuario, basta con verificar el valor de cada dígito. Esto se calcula con la suma de los valores individuales que están asociados con los respectivos derechos:

Derechos de acceso Valor
Leer "4"
Escribir "2"
Ejecutar "1"
Sin permisos "0"

*los valores se introducen sin comillas

La notación octal en el archivo “ejemplo.txt” antes del cambio de los derechos de acceso a través del comando chmod se puede representar de la siguiente manera:

Derecho(s) de acceso Valor
Ninguno "0"
Solo ejecutar "1"
Solo escribir "2"
Escribir / Ejecutar "3"
Solo leer "4"
Leer / Ejecutar "5"
Leer / Escribir "6"
Todos los permisos "7"

*los valores se introducen sin comillas

La notación octal en el archivo “ejemplo.txt” antes del cambio de los derechos de acceso a través del comando chmod se puede representar de la siguiente manera:

-rw------- 0 usuarioXYZ grupoXYZ 0000 2016-01-01 ejemplo.txt  

Aquí solo el propietario (user) cuenta con los derechos “read” (r) y “write” (w). Los demás usuarios no tienen permisos de acceso al archivo. En caso de que el propietario le quiera asignar derechos de lectura al “grupoXYZ”, tendrá que usar el siguiente código octal:

$ chmod 640 ejemplo.txt  

El valor 6 se encarga de agrupar los derechos de acceso mencionados anteriormente: 4 (Leer) + 2 (Escribir). El segundo valor de la máscara de derechos especifica los derechos de acceso del grupo: 4 (Leer). No se especificaron más valores para otros usuarios, por lo que se codifica con un 0.

Ahora bien, si la clase de usuarios “others” estuviera equipada con derechos de lectura, se aplicaría el siguiente código:

$ chmod 644 ejemplo.txt  

El número 4 en la tercera posición del código octal define el acceso de lectura para otros usuarios en el servidor.

Opciones del comando chmod

Independientemente de si se usa la notación simbólica o la notación octal, el usuario siempre tendrá a su disposición una amplia gama de opciones para la asignación de derechos de acceso a archivos y directorios. Estos siempre se insertarán en la línea de comandos entre el comando y la umask.

Código Opción Descripción
-R recursive El cambio de los derechos de acceso se aplica a todos los archivos y subdirectorios dentro de una carpeta.
-v verbose Después de la línea de comandos se emite un diagnóstico de todos los archivos procesados.
-c changes Después de la línea de comandos se muestra un diagnóstico para todos los archivos que han sido modificados.
-f silent Se suprimen todos los mensajes de error.

El siguiente ejemplo muestra una línea de comandos en el que el cambio de los derechos de acceso se refiere recursivamente a subdirectorios y archivos dentro de una carpeta:

$ chmod -R 744 carpetaXYZ  

Para todos los archivos y subcarpetas en la “carpetaXYZ” se aplican los siguientes permisos: el propietario recibe derechos de acceso completos (7), los miembros del grupo y los demás usuarios solo tienen permisos de lectura (4).

Una gran ventaja del sistema de datos Unix es su sencilla estructura. Con poco esfuerzo es posible resolver complejos problemas en sus sistemas operativos multiusuario. Además, la aplicación y mantenimiento de sus sistemas informáticos es fácil e intuitiva. Quien no se sienta lo suficientemente seguro de asignar y gestionar por sí mismo este tipo de permisos, siempre tendrá como alternativa un administrador de archivos externo. Los clásicos programas FTP cuentan con una interfaz gráfica de usuario muy agradable para el usuario y facilitarán en gran manera este proceso.  

Para todos los archivos y subcarpetas en la “carpetaXYZ” se aplican los siguientes permisos: el propietario recibe derechos de acceso completos (7), los miembros del grupo y los demás usuarios solo tienen permisos de lectura (4).

Una gran ventaja del sistema de datos Unix es su sencilla estructura. Con poco esfuerzo es posible resolver complejos problemas en sus sistemas operativos multiusuario. Además, la aplicación y mantenimiento de sus sistemas informáticos es fácil e intuitiva. Quien no se sienta lo suficientemente seguro de asignar y gestionar por sí mismo este tipo de permisos, siempre tendrá como alternativa un administrador de archivos externo. Los clásicos programas FTP cuentan con una interfaz gráfica de usuario muy agradable para el usuario y facilitarán en gran manera este proceso.  

FTP Linux Protección de Datos