Permisos en ficheros y directorios

En GNU/Linux los ficheros y directorios necesitan permisos para ser leídos, escritos, y ejecutados. A veces cuando compartimos la computadora nos gustaría tener nuestra privacidad. Por lo tanto podemos otorgar o negar permisos a nuestros ficheros y directorios.

Los permisos son:

  • read = se puede leer
  • write = se puede modificar (escribir)
  • execute = se puede ejecutar o acceder en el caso que sea un directorio

Los objetos que reciben permisos son:

  • user = usuario
  • group = grupo
  • others = otros
  • all = todos los usuarios y grupos

Aquí les voy a explicar cómo leer y modificar los diferentes tipos de permisos.

Si nosotros hacemos en consola "ls -l", nos devolverá un resultado similar al siguiente:

$ ls -l
-rwxr-x--- 1 pablo admin 59146 2009-07-03 20:26 test.jpg

En el caso que nosotros queramos ver los permisos de un directorio específico, sólo tenemos que hacer:

ls -ld «direcorio»

Esto es porque si hacemos ls -l «directorio» nos devolvería los permisos de todo que hay dentro en el directorio especificado.

La primer columna es una cadena de diez caracteres, el cual está divida en cuatro partes:

  1. La primer parte es de un solo carácter, que puede ser d si es directorio o - en caso de que sea un fichero o el directorio. En este ejemplo es un guión porque es un fichero test.jpg.
  2. La segunda parte es una cadena de tres caracteres (user) y significa qué permisos tiene el dueño del fichero o el directorio. En este ejemplo es rwx y eso se debe a que se puede leer, escribir y ejecutar.
  3. La tercera parte es una cadena de tres caracteres (group) y significa qué permisos tiene el grupo al que le pertenece el fichero o el directorio. En este ejemplo es r-x y se debe a que se puede leer y ejecutar, pero no escribir el fichero test.jpg.
  4. La cuarta parte es una cadena de tres caracteres (others) y significa qué permisos tienen todos los otros usuarios, es decir, que no son el dueño ni pertenecen al grupo. En este ejemplo son tres guiones (---) y se debe a que ningún otro usuario tiene acceso al fichero test.jpg.

La tercer columna es el usuario al que pertenece el fichero o directorio, en este caso pablo

La cuarta columna es el grupo al que pertenece el fichero o directorio, en este caso admin

La quinta columna es el tamaño del fichero o directorio.

La sexta columna es la fecha y hora de modificación del fichero o directorio.

Y la última columna es el nombre del fichero.


Ahora que ya sabemos visualizar los detalles del fichero o directorio, les explicaré cómo modificarlos.

Para eso están los comandos:

- chmod (change modes) cambia permisos de lectura, escritura y ejecución
- chown (change owner) cambia el dueño
- chgrp (change group) cambia el grupo.

Para agregar o quitar permisos de lectura, escritura y/o ejecución, lo que hay que hacer es aclarar qué objeto quiero modificar (user, group, others, all), el signo de adición (+) si le agrego permisos adicionales a los que ya tiene, el signo de sustracción (-) si quiero quitar alguno de los permisos que ya tiene, el signo de igual (=) si quiero quitar todos los permisos anteriores y sólo dejar los nuevos especificados, y finalmente el tipo de permiso.

Por ejemplo, aquí agrego permisos de escritura a cualquier otro usuario:

$ chmod o+w test.jpg

Aquí le quitaré los permisos de lectura, escritura y ejecución al grupo admin, ya que mi usuario pablo pertenece al grupo admin como se observó anteriormente, y por lo tanto puedo modificar permisos para el grupo al que pertenezco:

$ chmod g-rwx test.jpg

Ahora daré permisos de escritura a todos los usuarios y grupos, adicionalmente a los permisos que ya tengan:

$ chmod a+w test.jpg

Aquí le quitaré todos los permisos actuales al usuario y sólo estableceré permisos lectura y escritura; y al mismo tiempo separando con una coma (,) quitaré todos los permisos actuales al grupo y a todos los demás usuarios, dejaádoles únicamente permisos de lectura.

$ chmod u=rw,go=r test.jpg

El sistema anterior se denomina notación simbólica, ya que las letras simbolizan los permisos en el sistema.


El otro sistema se llama notación octal, y se utilizan 8 números para representar los permisos y los objetos, respetando la misma posición de usuario, grupo, otros:

--- = 0
--x = 1
-w- = 2
-wx = 3
r-- = 4
r-x = 5
rw- = 6
rwx = 7

Entonces para que vuelva a quedar rwxr-x--- se necesitará hacer:

chmod 750 test.jpg

Lo anterior significa:

el 7 es para el usuario, quien tendrá permisos de lectura, escritura, ejecución
el 5 es para el grupo, cuyos miembros tendrán permisos de lectura y ejecución
el 0 es para otros, quienes no tendrán ningún permiso.

Los permisos, de manera binaria, se pueden visualizar mediante la siguiente tabla, sólo como referencia ya que como se ha explicado anteriormente las notaciones usadas son la simbólica y la octal:

--- = 000
--x = 001
-w- = 010
-wx = 011
r-- = 100
r-x = 101
rw- = 110
rwx = 111

Para cambiar el dueño del fichero o directorio (a veces quizás se necesite tener privilegios de superusuario o root), sólo hay que hacer:

# chown root test.jpg

Para cambiar el grupo del fichero o directorio, sólo hay que hacer:

$ chgrp otro-grupo test.jpg

Más información en la terminal:

man chmod
man chown
man chgrp

Un truco para cambiarle los permisos únicamente a los directorios y subdirectorios de nuestra /home:
$ find $HOME -type d -exec chmod 700 '{}' \;

Agradecimientos especiales a Siddharta.