sábado, 5 de abril de 2014

Permisos de ficheros nuevos en Linux

Esquema de seguridad en un sistema Ubuntu

Dentro de los sistemas Linux no se suele prestar especial atención a los permisos de los ficheros nuevos. Yo habitualmente trabajo con Ubuntu, y cuando creamos un  fichero o directorio, por defecto, estos son creados con acceso para el grupo y para el resto de usuarios, de forma que es imposible mantener la confidencialidad de los ficheros, ya que todos los ficheros son leibles por cualquier usuario. Este panorama se complica más todavía cuando vemos que Ubuntu por defecto permite el acceso como invitado al sistema: Cualquiera que pueda sentarse en el ordenador podrá iniciar sesión de invitado y rastrear ficheros en el disco duro.
La configuración de seguridad por defecto en Ubuntu es la siguiente:
  1. Al crear un usuario se crea su directorio de usuario en '/home/<usuario>'.
  2. Se crea un grupo con el mismo nombre que el usuario, siendo este grupo el grupo principal del usuario.
  3. Los permisos del directorio de usuario son los siguientes: rwx para el propietario, r-x para el grupo y r-x para el resto de usuarios: Una puerta abierta para que cualquiera que tenga acceso al sistema pueda ver mis ficheros.
  4. Cuando creamos ficheros, estos tienen los permisos rw-r--r--, de forma que cualquiera puede leer los ficheros.
  5. Cuando creamos directorios nuevos, tendremos los permisos rwxr-xr-x, manteniéndose el mismo problema.

Impedir manualmente el acceso a nuestro directorio de usuario

Para impedir que el resto de usuarios puedan acceder a nuestro directorio, nos basta usar el comando chmod para modificar los permisos de nuestro directorio de usuario, ya que en cuanto no tengan paso por el directorio, no podrán acceder a ninguno de los directorios contenidos:
  • Muestro los permisos para comprobar que son los permisos por defecto (rwxr-xr-x):
$ ls -ld
drwxr-xr-x 3 admon admon 4096 dic 25 10:53 .
  • Modifico los permisos para impedir el acceso a los usuarios que no formen parte de mi grupo (admon):
$ chmod o-rwx .
  • Muestro los permisos para comprobar que son correctos:
$ ls -ld
drwxr-x--- 3 admon admon 4096 dic 25 10:53 .
Con la configuración anterior, el resto de usuarios no podrán acceder a nuestro directorio de usuario, y con ello, ya tenemos cerrado el paso al mismo.

Permisos de los ficheros nuevos

Mostrar los permisos de los ficheros nuevos

El comando umask nos muestra los permisos que van a ser eliminados en los ficheros que se creen nuevos:
admon@ubuntupruebas:~$ umask
0002
En este ejemplo, vemos que el valor '0002' se corresponde con:
  1. Permisos especiales (0): No se eliminará ningún permiso especial.
  2. Usuario (0): No se eliminará ningún permiso para el propietario.
  3. Grupo (0): No se eliminará ningún permiso para el grupo.
  4. Otros (2): Se quitará el permiso 'w (escribir)' para el resto de usuarios, de forma que en el fichero o directorio el resto de usuarios no podrá escribir.
También podemos ver la máscara de permisos de forma simbólica:
admon@ubuntupruebas:~$ umask -S
u=rwx,g=rwx,o=rx
Los permisos de los ficheros nuevos están están fuertemente condicionados por la aplicación que ha creado el fichero: Por ejemplo, un editor de textos nunca dará permisos de ejecución a un fichero txt, ya que no lo necesita, mientras que un compilador si que dará permisos de ejecución al ejecutable que genera. Igualmente, al crear directorios es totalmente necesario que estos tengan el permiso x, ya que de lo contrario, no podremos entrar al directorio.

Modificar la máscara de permisos para la sesión en curso

Vamos a crear un fichero ordinario para ver que permisos se le asignan:
admon@ubuntupruebas:~$ touch nuevo_antes
admon@ubuntupruebas:~$ ls -l nuevo_antes 
-rw-rw-r-- 1 admon admon 0 dic 25 11:09 nuevo_antes
Son los esperables, el usuario y el grupo lectura y escritura, y el resto de usuarios solo lectura.
Puedo modificar la máscara para la sesión en curso con el comando umask:
admon@ubuntupruebas:~$ umask 0077
admon@ubuntupruebas:~$ touch nuevo_despues
admon@ubuntupruebas:~$ ls -l nuevo*
-rw-rw-r-- 1 admon admon 0 dic 25 11:09 nuevo_antes
-rw------- 1 admon admon 0 dic 25 11:10 nuevo_despues
Como puedes ver, hemos modificado la máscara con 'chmod 0077', quitando los permisos para el grupo y el resto de usuarios:
  1. Permisos especiales: Un cero, que indica que no se elimina ninguno.
  2. Usuario: Un '0' que no elimina ningun permiso.
  3. Grupo: Un '7', que eliminan todos los permisos (r=4,w=2 y x=1).
  4. Resto de usuario: Otro '7', que elimina todos los permisos.
Cuando creamos el fichero 'nuevo_despues' con el comando 'touch nuevo_despues', y luego mostramos sus permisos con 'ls -l', podemos observar que nuevo_despues tiene los permisos rw-------, lo cual nos indica que el grupo y resto de usuarios no tienen acceso al fichero, el cual es el comportamiento previsto.

Modificar la máscara de permisos para el usuario de forma permanente

Cuando se inicia un shell bash, se ejecutan por orden estos cuatro scripts:
  1. /etc/bash.bashrc
  2. /etc/profile
  3. ~/.bashrc
  4. ~/.profile
  • Tradicionalmente, en el shell sh se ejecutaba un único script (/etc/profile y .profile), el fichero bashrc lo introduce el shell bash para incluir caracteristicas propias.
  • Los dos primeros se ejecutan para todos los usuarios, mientras que los dos últimos son privativos del usuario, de forma que cada usuario tiene su propio fichero '.bashrc' y '.profile'.
  • Cuando iniciamos un shell de entrada (se denomina shell de entrada a cualquier shell que sea nuevo y se ejecutan los cuatro, pero cuando abrimos un shell ya habiendo iniciado sesión, solamente se ejecutan los scripts bashrc.
      Modificar la máscara de permisos para todos los usuarios