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 guión ' - ' (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 de ese 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 (read),
- la w de escritura (write)
- la x de ejecución (exec)
- y el guión (-) indica que no tiene ningún 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 (otros usuarios) 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, con la opción -R. 

La opción  -R se usa para dar permisos, recursivamente, a todas las carpetas y ficheros que contenga ese directorio, y con una sola orden cambiamos los permisos a la carpeta, y a todo su contenido (subcarpetas, archivos...).
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..., a todas las carpetas y ficheros que contenga ese directorio
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 (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 ejemplos
-rw-rw-r-- indica que es un 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 (es un archivo en el que solo solo tiene permisos el propietario, y solo de lectura y ejecución).
 

NOTA FINAL: en un PC al que pueden acceder varios usuarios que interesa discriminar con distintos permisos, lectura, escritura y ejecución, para propietario, lectura, para el grupo del usuario, y lectura, para otros usuarios, es decir 744 (o 644) puede ser suficiente.
(Y 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. 

Por cierto, como PostData:
Podemos cambiar fácilmente los permisos por consola (por supuesto, de root) de esta forma
a) cambiar de usuario y/o grupo con el comando chown ('change owner'/cambia propietario)
chown nuevo_usuario ruta_archivo
chown nuevo_usuario -R ruta_carpeta
(con esto, por ejemplo, podríamos cambiar el propietario de un archivo o carpeta, de root a usuario)
NOTA: Para cambiar el grupo además del propietario, podemos poner dos puntos despues del nuevo propietario y a continuación añadir el nombre del nuevo grupo. Por ejemplo para cambiar de usuario y grupo a un archivo lo haríamos de la siguiente manera:
chown nuevo_usuario:nuevo_grupo ruta_archivo
b) cambiar (añadir o quitar permisos) con el comando chmod
Como la notación es 
- u (user) para el propietario
- g (group) para su grupo
- o (other) para el resto de usuarios
La orden (por ejemplo)
chmod o-r ruta_nombre_archivo 
quitaría el permiso de lectura del archivo 'nombre_archivo' a 'otros' (demás usuarios) , y (otro ejemplo)
chmod g+rwx  -R ruta_carpeta
daría al grupo del propietario todos los permisos (lectura, escritura/modificación y ejecución) en el directorio 'carpeta' y, recursivamente, a todo su contenido.  

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