viernes, 13 de abril de 2018

06 - Permisos Linux

Usuario y Grupo propietario

En Linux todos los archivos pertenecen a un usuario y a un grupo. Cuando un usuario crea un nuevo archivo, el propietario del archivo será el usuario que lo ha creado y el grupo del archivo será el grupo principal de dicho usuario.

Por ejemplo si el usuario pepe cuyo grupo principal es profesores crea un nuevo archivo, el propietario será pepe y el grupo propietario será profesores.

Nota
Se puede cambiar el usuario y el grupo propietario de un archivo o carpeta con el comando chown. Para ello hay que disponer de permisos de escritura sobre el archivo o carpeta.

La sintaxis : # chown nuevo_usuario[.nuevo_grupo] nombre_archivo

Visualizar los permisos

Con el comando ls -l podemos visualizar el usuario y el grupo propietario y también los permisos de los archivos o carpetas. Al ejecutar el comando aparece una línea por cada archivo y el primer campo de cada línea corresponde a un bloque de 10 caracteres.



El primer carácter indica de qué tipo de archivo se trata. Lo más habitual es que sea un guión - que representa un fichero regular, una d que representa un directorio o una l que significa que se trata de un enlace. Pueden aparecer otros valores que corresponden a ficheros especiales como sockets (s), tuberías (p) y dispositivos de bloque (b) entre otros.

Tipos de permisos

En los Sistemas Linux, la gestión de los permisos que los usuarios y los grupos de usuarios tienen sobre los archivos y las carpetas, se realiza mediante un sencillo esquema de tres tipos de permisos que son:
  • Lectura (r)
  • Escritura (w)
  • Ejecución (x)
El significado de éstos permisos difiere si se tienen sobre archivos o sobre carpetas. 

LECTURA (r)

Cuando un usuario tiene permiso de lectura de un archivo significa que puede leerlo o visualizarlo, bien sea con una aplicación o mediante comandos. 

Cuando un usuario tiene permiso de lectura de una carpeta, significa que puede visualizar el contenido de la carpeta, es decir, puede ver los archivos y carpetas que contiene, bien sea con el comando ls o con un explorador de archivos. Si el usuario no tiene permiso de lectura sobre la carpeta, no podrá ver lo que contiene.

ESCRITURA (w)

Cuando un usuario tiene permiso de escritura sobre un archivo significa que puede modificar su contenido, e incluso borrarlo. También le da derecho a cambiar los permisos del archivo mediante el comando chmod así como cambiar su propietario y el grupo propietario mediante el comando chown. Si el usuario no tiene permiso de escritura, no podrá modificar el contenido del archivo.

Cuando un usuario tiene permiso de escritura sobre una carpeta, puede crear y eliminar archivos y otras carpetas dentro de ella. 

EJECUCIÓN (x)

Cuando un usuario tiene permiso de ejecución de un archivo significa que puede ejecutarlo. Si el usuario no dispone de permiso de ejecución, no podrá ejecutarlo aunque sea una aplicación.

Cuando un usuario tiene permiso de ejecución sobre una carpeta, significa que puede entrar en ella, bien sea con el comando cd o con un explorador de archivos. Si no dispone del permiso de ejecución significa que no puede ir a dicha carpeta.

Nota: Los únicos archivos ejecutables son las aplicaciones y los archivos de comandos (scripts). Si tratamos de ejecutar un archivo no ejecutable, dará errores.


¿A quién se puede otorgar permisos?

Los permisos pueden ser otorgados a tres tipos o grupos de usuarios:
  • Usuario propietario
  • Grupo propietario
  • Resto de usuarios

Ejemplo

Supongamos que pepe que pertenece al grupo principal profesores tiene los permisos abajo descritos sobre examen.txt eso significa que pepe podrá leer y escribir en el fichero, los miembros del grupo profesores podrán solo leerlo y el resto no podrá hacer nada. 


Si quiero que otros usuarios tengan permisos sobre examen.txt, no me quedará más remedio que incluirlos en el grupo profesores u otorgar permisos al resto de usuarios pero si hago esto último, todos los usuarios del sistema tendrían permisos, por lo que no se recomienda salvo que esa sea nuestra intención.

Importante
  • Para poder cambiar permisos sobre un archivo, es necesario ser el propietario o poseer el permiso de escritura sobre el mismo.
  • El superusuario root puede modificar los permisos  de cualquier archivo ya que tiene acceso total sin restricciones a la administración del sistema.
  • Existe un mecanismo que implementa una extensión del clásico sistema de permisos permitiendo asignar permisos a usuarios o grupos concretos, este mecanismo se conoce como Listas de control de Acceso (ACL)

Modificar permisos

Se utiliza el comando chmod cuya sintaxis es: #chmod permiso(s) archivo(s)

Los permisos se pueden representar de dos formas:

  • Notación simbólica: empleando los símbolos u g o a para referise a los usuarios, r w x para referirse a los permisos y los operadores + - , =
Ejemplos
  # chmod g+x examen.txt
  # chmod ugo-r examen.txt
  # chmod a=rw examen.txt
  # chmod u+w,go-w examen.txt
  • Notación octal: La segunda forma de representar los permisos es mediante la transformación de los permisos a su valor en octal aprovechando su localización posicional.
Equivalencia de permisos en Notación octal
Ejemplos
  # chmod 700 examen.txt
  # chmod 550 examen.txt
  # chmod 744 *
  # chmod -R 744 *
La Máscara

Cuando se crea un archivo en Linux el sistema le asigna unos permisos por defecto que son siempre 666 para el caso de ficheros y 777 para el caso de directorios. Estos permisos de salida se ven alterados por la máscara de usuario, un número que viene a enmascarar los permisos por defecto y que da como resultado lo permisos efectivos reales con los que se crean los ficheros o directorios.

La máscara es un parámetro que el usuario puede definir en cualquier momento con el comando umask, en Ubuntu 14.04 la máscara se encuentra definida a 002.


Calcular los permisos efectivos a partir de la máscara
  1. Expresar la máscara en octal
  2. Hacer el complemento a 1 de la máscara (negarla)
  3. Hacer un AND lógico entre el punto anterior y los permisos por defecto, 666 si es un fichero o 777 si es un directorio
Ejemplo

Calcular los permisos efectivos para ficheros y directorios sabiendo que la máscara está definida en 136
- La máscara 136 en octal es 001 011 110
- Hacemos complemento a 1 de la máscara 110 100 001
- Hacemos un AND lógico entre el complemento a 1 y los permisos por defecto de ficheros 666=110 110 110 y directorios 777=111 111 111  
- ficheros:    110 110 110 && 110 100 001 = 110 100 000 = 640
- directorios: 111 111 111 && 110 100 001 = 110 100 001 = 641


Como se puede observar en la imagen con una máscara de 136 los ficheros al crearse salen con permisos 640 y los directorios con permisos 641

Se puede fijar la máscara por defecto para todos los usuarios en el archivo /etc/profile o para cada usuario en el archivo /home/usuario/.bashrc