viernes, 20 de abril de 2012

Los permisos, y cómo cambiarlos por consola

Cierto que con botón derecho ratón entras en 'Propiedades' de un archivo o carpeta, y ahí puedes ver los permisos, incluso cambiarlos, pero un linuxero (y con mayor razón, un debianita) que se precie tiene que saber hacerlo desde consola... o al menos saber de qué va el asunto ese del comando chmod, porque lo va a ver en muchos sitios.

Estaba dudando si meter esta entrada en la serie 'Comanditos de consola' pero, como es monográfica, la titularé aparte. Así que, como diría un dermatólogo... 'vayamos, ya, al grano'.


Para conocer los permisos de un archivo o de una carpeta, o directorio, basta escribir  
ls -l [ruta_del_fichero_o_de_la_carpeta]
y te da una información con esta pinta:
-rwxr-xr-- 1 doc doc 552 mar 26 21:47 fichero

Vamos a 'destriparlo': 
El primer carácter identifica de qué estamos hablando: puede ser un - (si es un fichero), una d (si es un directorio, o sea una carpeta), una s si es un socket, etc. Normalmente será un - o una d.
Ahora viene lo realmente importante. A partir del primer carácter se leen de tres en tres: 
los tres primeros caracteres describen los permisos del propietario sobre el fichero, 
los 3 siguientes los permisos del grupo al que pertenece el usuario y 
los 3 últimos los permisos del resto de usuarios. 
¿Y qué significan...? Pues muy sencillo: La letra r indica permiso de lectura, la w de escritura, la x de ejecución, y el guión (-) indica que no tiene ese permiso. 
Así, en el ejemplo anterior tendríamos:
rwx para el propietario: puede leerlo, escribir en él (modificarlo) y ejecutarlo.
r-x para el grupo: los miembros del grupo pueden leerlo y ejecutarlo, pero no modificarlo.
r-- el resto de gente sólo puede leerlo. 

Y cuando hablamos de carpetas (empieza por d...) el significado cambia un poco:
r significa poder leer su contenido, es decir, poder hacer un ls y ver los archivos que contiene.
w significa poder modificar el contenido del directorio (carpeta), por ej. poder borrar.
x significa poder entrar en el directorio.
Así, por ejemplo, si no quisiéramos que alguien entrara en una carpeta, bastaría con quitarle el permiso de ejecución al resto de usuarios.
O sea que, en esencia, la cosa va así:

Bien... ¿Y cómo modificar estos permisos?
Pues puedes cambiar los permisos de acceso de un archivo o directorio con el comando chmod ("change mode"). 

chmod se aplica tanto sobre archivos individuales como sobre carpetas y su sintaxis es 
chmod [opciones] XXX ruta_del_fichero_o_de_la_carpeta
En [opciones] podemos especificar cosas como, por ejemplo, aplicar los permisos a todo el contenido de un directorio. Es decir, en el caso de que por ejemplo sean carpetas, podemos usar la opción -R para dar permisos, recursivamente, a todas las carpetas y ficheros que contenga ese directorio.
Asi que un comando típico para modificar los permisos de una carpeta, y sus archivos, sería
chmod -R XXX ruta_de_la_carpeta

En XXX es donde especificamos los permisos del Propietario, su Grupo, y del resto de usuarios. Podemos usar la nomenclatura tradicional ("r", "w", "x" o '-') para cada caso, pero alguien 'inventó' un sencillo código numérico para establecer los permisos, que lo simplifica mucho. 
Es este:
4 = Permiso de Lectura
2 = Permiso de Escritura
1 = Permiso de Ejecución
0 = Ningún permiso
Y además...
3 = Permiso de Escritura y Ejecución (suma de Lectura = 0, Escritura = 2, Ejecución = 1)
5 = Permiso de Lectura y Ejecución (suma de Lectura = 4 + Escritura = 0 + Ejecución = 1)
6 = Permiso de Lectura y Escritura (suma de Lectura = 4 + Escritura = 2 + Ejecución = 0)
7 = Permiso de Lectura, Escritura y Ejecución (suma de Lectura = 4 + Escritura = 2 + Ejecución = 1)
Por tanto, para cada identidad podemos obtener un número comprendido entre "0" y "7" que especifica los permisos de cada usuario. Así, todos los permisos de los tres niveles, Usuario propietario, Grupo (del usuario) y Otros usuarios se pueden representar por un número de 3 cifras
Por ejemplo, -rwxr-xr--... sería un archivo con permisos de lectura, escritura y ejecución para el propietario, de lectura y ejecución (pero no de escritura) para el grupo al que pertenece el usuario propietario, y sin permisos para el resto de usuarios. En la 'notación octal de tres dígitos', que es como se llama el invento, esto estaría representado por el número 754, es decir, (4+2+1) para el usuario propietario, (4+0+1) para su grupo y (4+0+0) para el resto y para fijar estos permisos bastaría escribir, en consola
chmod 754 ruta_archivo
(o chmod -R 754 ruta_carpeta, si se trata de dar estos permisos a una carpeta, y a su contenido) 
Otros, por ejemplo 
-rw-rw-r-- (archivo con permiso de escritura y lectura para el usuario propietario y su grupo, y solo de lectura para el resto de usuarios) se representa como 664 en notación octal de tres dígitos.
-r-x------ se representa como 500 (solo tiene permisos el propietario, y solo de lectura y ejecución).
En un PC con varios usuarios, Lectura, escritura y ejecución, para propietario, lectura, para grupo del usuario, y lectura, para otros usuarios, es decir 744) (o 644) puede ser suficiente. 
(Si eres usuario único de tu ordenador, chmod -R 777 'te libera' de problemas de permisos) 

Queda más o menos claro ¿no?. Bueno, pues el que quiera profundizar más, siempre tiene el comando man chmod... o San Google.


 


2 comentarios:

  1. Sencillamente increíble.
    No se si es por la forma de exponer o que, pero suelo encontrar lo que busco. Llevo años en esto, la verdad es que no conozco otro SO y aparte del Genio que me inició en los pc que lo hizo hace años en UBUNTU, luego XUBUNTU, bueno todos son muy similares, no suelo encontrar mucho que merezca la pena en español, en ingles si pero no es mi fuerte. La pena es que no tengo mucho tiempo.
    Hace bastante tiempo que sigo el blog, y la verdad, aclaran mis dudas.
    Sólo quiero darte las gracias y que sigas adelante.
    Un saludo, gracias.

    ResponderEliminar
  2. pues no sabes, Juan, cuanto me alegro de que te sea útil.
    Porque (como he dicho muchas veces) mi primera idea al crear el Blog fue tener un cómodo 'repositorio' para mis propios apuntes de 'novato'. Y 'me llena de orgullo y satisfacción' que pueda servir para algo más.

    ResponderEliminar