Permisos de archivos en Linux

En el artículo de hoy vamos a hablar de los permisos de archivos en Linux. A pesar de los años que tiene esta web, ya más de ocho, todavía no he dedicado un artículo en completo a esta parte tan importante de la administración de los sistemas informáticos, en concreto, de nuestros sistemas del Ñu y el Pingüino.

La idea para este artículo

La idea para elaborarlo la he extraído de un cartel del proyecto “Linux Pictures”, en el que el artista pone atención a los permisos de los ficheros, tal y como se muestra en la imagen:

Debo agradecer el trabajo de difusión del amigo Jose Tanhausser, ya que conocí el proyecto a raíz de un artículo en su web lamiradelreplicante.com

Una parte esencial: los permisos de archivos en Linux

Ya sabemos que existen muchas características que vienen incorporadas en los sistemas basados en GNU/Linux. Aunque tengamos los últimos parches de seguridad incorporados a nuestro núcleo o kernel, si no cuidamos los permisos en los ficheros de nuestra distribución favorita, de poca servirán. Por lo que veamos como tratar con los permisos.

Permisos de grupo

Cada archivo o directorio (aunque ya sabes que en UNIX todo es un fichero) tiene tres grupos de permisos basados en usuario:

    • Propietario: Los permisos de propietario solo aplican al propietario del archivo o directorio, no afectarán a las acciones de otros usuarios.
    • Grupo: Los permisos de grupo se aplican solo al grupo que se ha asignado al archivo o directorio, no afectarán las acciones de otros usuarios.
    • Todos los usuarios: Los permisos de “Todos los usuarios” se aplican a todos los demás usuarios del sistema, este es el grupo que más tenemos que vigilar.

Tipos de permisos

Cada archivo o directorio tiene tres tipos de permisos básicos:

  • Lectura: El permiso de lectura se refiere a la capacidad del usuario para leer el contenido del fichero.
  • Escritura: Los permisos de escritura hacen referencia a la capacidad de un usuario para escribir o modificar un archivo o directorio.
  • Ejecución: El permiso de ejecución afecta a la capacidad del usuario para ejecutar un archivo o ver el contenido de un directorio.

Visualización de permisos

Podemos ver los permisos verificando la información de los ficheros o directorios. Esto lo podemos realizar desde la consola de comandos o bien desde la interfaz gráfica. Desde la terminal, podemos utilizar el comando “ls -la” o bien el alias “ll

La información mostrada será: “_rwxrwxrwx 1 propietario:grupo”, es normal que esta información te resulto confusa si eres primerizo, más adelante aclararemos este enigma ?

Derechos de usuarios y permisos

Como diría Jack, vayamos por partes:

  • El primer carácter que hemos marcado en el párrafo anterior con un guion bajo es el distintivo de permiso especial, que puede variar.
  • El siguiente conjunto de tres caracteres (rwx) es para los permisos del propietario del fichero o carpeta.
  • El segundo conjunto de tres caracteres (rwx) es para los permisos de grupo.
  • Por último, el tercer conjunto de tres caracteres (rwx) es para los permisos del resto de usuarios del sistema.
  • La última parte nos muestra la asignación de propietario y grupo formateada como “Propietario:Grupo”

Modificación de permisos

Seguramente te sonará o ya habrás utilizado alguna vez el comando “chmod” Con él podemos editar los permisos de un fichero o carpeta. Se pueden asignar los permisos de manera explícita o bien utilizar una referencia binaria, como vamos a describir a continuación:

Definir los permisos de manera explícita

Para definir de esta manera los permisos, necesitaremos hacer referencia al grupo de permisos y tipos de permisos.

Los grupos de permisos utilizando son:

  • u – usuario propietario
  • g – grupo
  • o – otros
  • a – todos los usuarios

Además utilizamos los operadores + (más) y – (menos) ; estos se utilizan para decirle al sistema si agrega o elimina los permisos específicos.

Los tipos de permisos que se usan son:

  • r – leer
  • w – escribir
  • x – ejecutar

Entonces, a modo de ejemplo, digamos que tenemos un fichero llamado “fichero1” que actualmente tiene permisos establecidos en “_rw_rw_rw”, lo que significa que el propietario, el grupo y todos los usuarios tienen permisos de lectura y escritura, pero no de ejecución. Ahora, vamos a eliminar los permisos de lectura y escritura de todos los grupos de usuarios.

Para hacer esta modificación, utilizaríamos el comando y parámetros:

  1. chmod a-rw fichero1

En cambio, para agregar otra vez los permisos, los haríamos así:

  1. chmod a+rw fichero1

Tal y como hemos explicado, si deseamos otorgar permisos, sólo debemos añadir tras los operadores más o menos, los atributos que queramos.

Definir los permisos utilizando referencias binarias

Ahora que ya comprendemos que son los grupos y los tipos de permisos podemos pasar al siguiente nivel. Para establecer los permisos utilizando referencias binarias, debemos entender que para ello vamos a utilizar una serie de números, que según la cantidad significará un tipo de permiso diferente.

Una cadena de permiso de muestra sería “chmod 640 fichero1”, lo que significa que el propietario tiene permisos de lectura y escritura, el grupo tiene permisos de lectura y el resto de los usuarios no tienen ningún tipo de derecho sobre el fichero.

El primero dígito representa el permiso de propietario; el segundo representa los permisos del grupo y por último el último número representa los permisos para todos los demás usuarios.

Los números son una representación binaria de la cadena “rwx”, de la que ya hemos hablado antes:

  • r = 4
  • w = 2
  • x = 1

Los números se suman o se restan para obtener el número entero que va a representar los permisos que deseamos establecer. Deberemos incluir los permisos binarios para cada u no de los tres grupos de permisos.

Por ejemplo, vamos a otorgar todos los permisos al usuario propietario, incluido el de ejecución; al grupo le daremos permisos de lectura y ejecución; y al resto de usuarios no les daremos ningún permiso, sería así:

  1. chmod 750 fichero1

Permisos especiales

El indicador de permiso especial se puede marcar con cualquier de los siguientes:

  • _ – sin permisos especiales
  • d – directorio
  • l – El archivo o directorio es un enlace sinbólico
  • s – Esto indica los permisos “setuid / setgid”. Esto no se establece en la parte de permisos especiales de la pantalla de permisos, sino que se representa como una s en la parte de lectura de los permisos de propietario o grupo.
  • t – Esto indica los permisos de bit adhesivo. Esto no se establece en la parte de permiso especial de la pantalla de permisos, sino que se representa como una t en la parte ejecutable de todos los permisos de los usuarios.

Lo permisos “setuid / setgid” se utilizan para indicar al sistema que ejecute un ejecutable como el propietario con los permisos de propietario.

Tenemos que tener cuidado al utilizar “setuid / setgid” en los permisos. Si asignamos permisos incorrectamente a un archivo propiedad del usuario root con “setguid / setgid bit set” podemos abrir el sistema a posibles intrusiones.

A modo de resumen, veamos alguno ejemplo de lo visto hasta ahora:

Cadena de permisos Código octal Significado
rwxrwxrwx 777 Permisos de lectura, escritura y ejecución para todos los usuarios.
rwxr-xr-x 755 Permisos de lectura y escritura para todos los usuarios. El propietario del fichero también tiene permisos de ejecución.
rwxr-x— 750 Permisos de lectura y ejecución para el propietario y el grupo. El propietario del fichero también posee permiso de escritura. Los usuarios que no son propietarios del fichero o miembros del grupo no tienen acceso a éste.
rwx—— 700 Permisos de lectura, escritura y ejecución sólo para el propietario del fichero; los demás no tendrán acceso.
rw-rw—- 660 Permisos de lectura y escritura para el propietario y el grupo. No hay permisos globales.
rw-r–r– 644 Permisos de lectura y escritura para el propietario. Permiso de sólo lectura para el resto.
rw——- 600 Permisos de lectura y escritura para el propietario. Nadie más tiene permisos.

Heredar permisos

Si nos interesa que todos los ficheros y carpetas que estén por debajo de una carpeta en concreto, tengamos los mismos permisos que la carpeta “madre”, lo lograremos como sigue, esto es, de manera recursiva:

  1. chmod 750 carpeta1 -R

El artículo ya ha quedado bastante extenso por lo que lo dejamos aquí. Espero que os sea de utilidad en algún momento. Nos vamos leyendo ^.^

Fuentes consultadas:

Linux.com – Understanding Linux File Permissions