El sistema de seguridad de archivos

En un sistema multiusuario como Linux es muy importante establecer mecanismos de seguridad de los ficheros para controlar quién puede acceder a ellos y que tipos de acceso puede llevar a cabo. Por ejemplo, si intentamos eliminar el directorio personal del usuario ‘ec2-user’ obtendremos un mensaje de error:

$ rmdir /home/ec2-user
rmdir: failed to remove '/home/root': Permision denied

Evidentemente sería muy arriesgado permitir que cualquier usuario pudiera realizar una acción que perjudicara al funcionamiento del sistema o al trabajo de otros usuarios. Pero el sistema de seguridad también tiene que tener en cuenta la organización de los usuarios en grupos de Linux que permite compartir ficheros y directorios entre distintos usuarios. Seguidamente veremos los mecanismos que ofrece el sistema para solucionar estos aspectos.

Tipos de permisos

El sistema de permisos de Linux que se aplica a cada fichero o directorio divide los usuarios en tres categorías:

  • Propietario: Usuario que creó el fichero (aunque puede ser otro si ha sido modificado por algún usuario con los privilegios suficientes).
  • Grupo al que pertenece el fichero (inicialmente el del propietario).
  • Otros: resto de usuarios distintos del propietario y los miembros de su grupo.

Para cada fichero y cada una de estas categorías, es posible establecer tres tipos de permisos:

  • Lectura: Para un fichero determina si podemos visualizarlo. Para un directorio, si podemos visualizar su contenido.
  • Escritura: Para un fichero determina si podemos modificarlo, eliminarlo o cambiarlo de nombre. Para un directorio indica lo mismo pero afecta también a su contenido.
  • Ejecución: Para un fichero determina si podemos ejecutarlo. Para un directorio, indica si podemos entrar en él y ejecutar su contenido.

El conjunto de todas las combinaciones posibles forma lo que denominamos la máscara de permisos de un fichero como muestra la siguiente figura:

Permisos

Para visualizar el conjunto de permisos de un fichero podemos utilizar el comando ls con la opción -l. Por ejemplo, veamos los permisos del directorio personal del usuario ‘ec2-user’ (añadimos también la opción d para listar el directorio y no el contenido del directorio):

$ ls -ld /home/ec2-user
drwx------    3 ec2-user     ec2-user        4096  2003-01-26 02:05  /home/ec2-user

La primera cadena de caracteres contiene el tipo de fichero (la ‘d’ indica que es un directorio) y los permisos actuales. Cuando aparece un guión, significa que el permiso no está activado. Seguidamente se indica el tamaño, el propietario y el grupo al que pertenece. Como vemos, sólo el propietario tiene permisos de escritura, que son los que nos permitirían eliminar el directorio. Como el propietario es ‘ec2-user’, sólo este usuario puede hacerlo.