Los permisos de archivos en Linux explicados de manera sencilla

Si usas GNU/Linux conocer los sistemas de permisos de este sistema operativo es algo básico, importante y ahora sencillo!!

permisos_Linux

Una de las cosas básicas en GNU/Linux es el tema de los permisos de los archivos. Comprender esto debería considerarse como algo esencial. El tema de los permisos de archivos en GNU/Linux suele creerse que es algo complicado, pero veremos que no es así, y trataremos de verlo de manera sencilla y clara.

El sistema de permisos que utiliza GNU/Linux está directamente tomado de los permisos de archivos que utiliza UNIX. Un sistema potente que apenas ha sufrido variaciones durante todos estos años y que sigue siendo totalmente vigente. Por tanto esto hace pensar que es algo importante, y bien hecho.

Entender el sistema de archivos de GNU/Linux no es algo que sea para gurús, ni algo que te vaya a llevar varios días de estudio. Es un sistema sencillo que trataremos de aprender a usarlo y comprenderlo en lo que lees este artículo.

Este artículo es una traducción de uno escrito en inglés por Jack Wallen para la web Linux.com. Me pareció muy interesante e instructivo, y después de pensármelo unos días, decidí traducirlo, adaptarlo y publicarlo en mi blog.

El enlace del artículo original lo puedes verlo en este enlace:

Gracias por permitir la traducción y la publicación. Empezamos!!

consola-linux-tux

Echando un vistazo a las piezas

La primera cosa que necesitas entender es a qué se aplican los permisos de archivos. Efectivamente lo que haces con esto es aplicar permisos a un grupo. Pero ¿qué permisos son y a qué grupos se refieren?

Existen tres tipos de permisos que se pueden aplicar, estos son:

  • lectura: otorga al grupo el permiso de poder leer el archivo. Se indica con la letra r (inicial de read, que significa leer en inglés)
  • escritura: otorga al grupo el permiso de poder editar el archivo pudiendo escribir en él. Se indica con la letra w (inicial de write, que significa escribir en inglés)
  • ejecución: otorga al grupo el permiso de poder ejecutar el archivo. Se indica con la tecla x (que viene de la palabra execute, que significa ejecutar en inglés)

Para entender mejor cómo esto es aplicado a un grupo, podrías, por ejemplo, darle a un grupo de usuarios el permiso de leer y escribir en un fichero, pero no la capacidad de poder ejecutarlo (si se trata por ejemplo de un script). O podrías darle los permisos de poder leer y ejecutar un archivo, pero no de poder modificarlo. Incluso puedes darle a un grupo todos los permisos de lectura, escritura y ejecución de un archivo,o ningún permiso quitándoselos todos.

Visto el tema de los tres permisos, veamos ahora el tema de los grupos, del que has estado leyendo. Los grupos a los que nos podremos referir son cuatro:

  • usuario: el propietario actual del archivo (nos referimos a este grupo con la letra u)
  • grupo: un grupo de usuarios de un archivo (nos referimos a este grupo con la letra g)
  • otros: otros usuarios distintos que no se encuentran en el grupo (nos referimos a este grupo con la letra o)
  • todos: todos los usuarios (nos referimos a este grupo con la letra a de all, que significa todos en inglés)

En términos generales, sólo tendremos que trabajar con los tres primero grupos. El grupo de usuarios todos es sólo utilizado como un atajo (después veremos qué quiero decir con esto).

Si abres una terminal, y en la línea de comandos, escribes el comando ls -l, verás un listado de todos los archivos y directorios que hay dentro del directorio de trabajo actual en el que nos encontremos. Yo he hecho eso y puedes ver el resultado en la imagen que encabeza el artículo.

Vemos varios directorios y un archivo de texto. Fijémonos en los permisos de este último. Están representados con las siguientes letras:

- rw- r-- r--

El primer guión lo vamos a desestimar. Si te fijas los directorios están marcados con una d inicial para indicar que son directorios, y el archivo no, ya que evidentemente no es un directorio. Centrémonos en las letras posteriores, y dividámoslas en tres apartados de tres letras/guiones cada uno:

  • rw-
  • r–
  • r–

El orden en el que se muestran es siempre el mismo y muy a tener en cuenta tanto en los permisos como en los grupos. El orden es siempre el siguiente:

  • lectura / escritura / ejecución | para los permisos
  • usuario / grupo / otros | para los grupos

Con lo explicado hasta ahora podemos ya saber que en el ejemplo del archivo que se muestra en la captura el usuario tiene otorgados los permisos de lectura y escritura, el grupo al que pertenece el usuario tiene otorgado el permiso de lectura y otros tiene también permiso sólo de lectura. Si alguno de los grupos tuviera el permiso de ejecutar ese archivo (en el caso de que se pudiera porque fuera un script) entonces como hemos visto estaría representado con una x. ¿Sencillo, verdad?

Equivalente numérico

Hagámoslo ahora un poco más complejo (no te asustes, que verás que no es para tanto). Cada permiso que hemos expresado con letras, también puede ser representado con números, lo que en algún caso nos puede resultar útil. Estas equivalencias son:

  • lectura = 4
  • escritura = 2
  • ejecución = 1

En el ejemplo del archivo que hemos visto anteriormente, la sustitución de las letras de los permisos por números serían la siguiente:

- 42- 4-- 4--

Ahora podemos sumar los número de los distintos grupos entre sí. Los permisos del usuario sería 4+2 lo que da 6. Los permisos de grupo y otros son simplemente 4, por tanto no hay nada que sumar. El equivalente numérico quedaría tal que así:

644

Manipulando los permisos

Para añadir, o quitar permisos a un archivo se utiliza el comando chmod, te aconsejo que leas la página man de este comando. Para otorgar o quitar derechos podremos utilizar tanto las letras referidas a permisos y grupos que hemos visto como las equivalencias numéricas, lo que nos sea más fácil o lo que necesitemos en cada momento.

Y ahora veamos cómo poder manipular esos permisos. Lo primero aclarar que para poder manipular los permisos de un archivo debes ser el propietario de ese archivo o debes tener el permiso de poder editar el archivo, o tener acceso de superusuario con poderes totales (recuerda que un gran poder conlleva una gran responsabilidad) mediante los comandos su o sudo.

Debido a eso, no puedes ir de directorio en directorio cambiando los permisos de todo lo que te apetezca! 😉

Sigamos con nuestro archivo del ejemplo, y supongamos que ahora le llamaremos script.sh y que es un script en bash y necesita poder ejecutarse… pero que sólo quieres darte a ti mismo permiso de ejecución.

Con todo lo que has leido quizás pienses “necesito añadir una x de ejecución al primer grupo que es el usuario, osea, yo mismo.” Correcto, ahora veamos cómo añadir esa x a nosotros mismos mediante la línea de comandos. Para ello tan simple como:

chmod u+x script.sh

Así de simple. Indicándole con la u de user que queremos añadir el permiso de ejecución con la x al archivo. Pruébalo con un archivo tuyo, y verás que no es difícil de entender y de ejecutar.

Ahora hagámoslo un poco más interesante. Supongamos que por alguna razón un archivo tiene el permiso de ejecución para todos los grupos algo parecido a: -rwx-r-x-r-x. Si quieres quitar el permiso de ejecutarlo al grupo de otros tan sencillo como

chmod ugo-x script.sh

Efectivamente ugo=usuario/grupo/otros y con -x eliminas este permiso. Otra manera de hacerlo sería con el siguiente atajo (¿te acuerdas lo que comenté al inicio del artículo?):

chmod a-x script.sh

Ten cuidado al quitar o dar permisos a un archivo si utilizas este método.

Permisos a directorios

También puedes otorgar o quitar permisos a directorios con el comando chmod. Cuando creas un nuevo directorio como usuario, lo normal es crearlo con los siguientes permisos

drwxrwxr-x

Cabe señalar que los archivos que creemos dentro del directorio no tienen porque heredar estos permisos, pudiendo tener otros distintos.

Como ya hemos visto, la d inicial indica que es un directorio. Como puedes ver en este ejemplo tanto el usuario como el grupo tienen plenos poderes sobre el directorio. Pero supongamos que dentro de un directorio queremos darles a todos los archivos que contiene unos permisos iguales para eso añadiremos al comando chmod el parámetro -R que indica que efectuará de manera recursiva la asignación de permisos que estipulemos.

Imaginemos que tenemos un directorio llamando Pruebas con un montón de scripts dentro. Todos esos archivos y el directorio en sí tiene los siguientes permisos -rwxrwxr-x. Si queremos quitar al grupo el permiso de escritura tendremos que utilizar el siguiente comando:

chmod -R g-w TEST

Es decir de manera recursiva (-R) al grupo (g) le quitaremos el permiso de escribir (-w) en los archivos que contiene el directorio (Pruebas).

Concluyendo

Espero que este pequeño tutorial básico te sea útil, y te haya servido para conocer un poco más al respecto. Así podrás “descifrar” el significado de esas letras que veías y no entendías muy bien. También comprobarás cómo poder eliminar o otorgar derechos.

Te toca a tí hacer tus pruebas, y seguir investigando, pero este es un pequeño paso que puede ser útil.

keep-calm-and-learn-linux

—————————————————-

15 pensamientos en “Los permisos de archivos en Linux explicados de manera sencilla

  1. Gracias por tu aporte Victor. Muy instructivo. Lo guardaré para estudiarlo con mas detenimiento.Observo o al menos así me lo parece, despues de tirar el comando “ls” y previamente a habernos metido mediante “cd” en cualquier carpeta de nuestro home que algunos archivos aparecen con distintos colores ¿Archivos en color morado? ¿Carpetas en color blanco?

  2. Pingback: Los permisos de archivos en Linux explicados de...

  3. por fin entiendo el equivalente de números en los permisos, excelente información la del post, ya que realmente lo explicas de manera sencilla 🙂

  4. Yo prácticamente manejo los permisos con números, porque con letras me complico demasiado con los guiones y esas cosas, aunque de vez en cuando las uso para casos puntuales para ciertos ejecutables de instaladores de aplicaciones privativas.

    En fin, gestionar los permisos a través de terminal en GNU/Linux y otros SO’s tipo UNIX resultan ser bastante cómodos que con Windows.

  5. Que sepas que aparte aclararme perfectamente el tema – junto a la página de Debian -, me ha servido para reestabilizar mi equipo, o al menos eso parece.
    Muchas gracias.

  6. Gracias por tus aportes, están explicados de manera sencilla. Aclaro que estoy en la condición de novato en Linux y apruebo todo artículo explicatorio del mismo.

  7. A su vez estoy aprendiendo a leer y escribir en inglés, todavía no lo hago con fluidez por ello valoro todo artículo en español.

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s