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:
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.