Hackers use Bash III – Permissions and owners

Colaborador: Hackbier

En esta nueva entrada de la serie Hackers use Bash escribiré sobre un tema muy importante en la seguridad de un sistema, concretamente GNU/Linux. Una mala configuración y gestión de permisos y/o propietarios puede resultar fatal durante un posible ataque, afectando a la integridad y la confidencialidad de la información (en ocasiones incluso a la disponibilidad).  En la entrada Hackers use Bash II conocimos los usuarios y grupos de usuarios, lo que asentará las bases para explicar los permisos.

 

Estructura de permisos

Cada fichero o directorio tiene unos determinados permisos asociados a él que limitan qué pueden y no pueden hacer determinados usuarios y grupos de usuarios. Estos permisos son:

Para ficheros:

  1. Lectura (read – r): un usuario con permiso de lectura sobre un archivo podrá ver su contenido, pero no editarlo.
  2. Escritura (write – w): un usuario con permiso de escritura podrá editar, añadir o eliminar su contenido.
  3. Ejecución (execute – x): un usuario que intente ejecutar un programa deberá tener el permiso de ejecuciñon.

Para directorios:

  1. Lectura (read – r): un usuario con permiso de lectura sobre un directorio podrá listar el contenido del mismo. Esto no quiere decir poder ver el contenido de cada archivo; para ello deberemos tener permiso de lectura sobre él.
  2. Escritura (write – w): un usuario con permiso de escritura podrá crear, eliminar o mover archivos del mismo.
  3. Ejecución (execute – x): este permiso te permite usar el nombre del directorio cuando estas accediendo a archivos en ese mismo directorio, es decir, este permiso habilita el directorio en búsquedas realizadas por un programas.

Para comprobar los permisos asociados a un archivo o directorio, podremos usar el comando ls -l.

Lo primero quenos puede llamar la atención es la secuencia de caracteres (rwx) y guiones. Esta cadena es la representación de los permisos, donde lo dividiremos en 4 grupos.

  1. El primer punto indica de qué tipo de archivo se trata. Será vacío (-) si es un fichero y el caracter d si es un directorio.
  2. Los siguientes rwx pertenecen al propietario del archivo o directorio, al usuario.
  3. Al igual que el anterior, pero son los permisos que pertenecen al grupo al que pertenece el propietario del fichero o directorio.
  4. Permisos de otros, el resto de usuarios.

Como vimos anteriormente, los permisos se representan con rwx (todos los permisos). Será vacío (-) en caso de carecer de ese permiso. Por ejemplo, la cadena drwxr-xr– nos indica que se trata de un directorio, con todos los permisos para el usuario, permisos de lectura y ejecución para el grupo y únicamente lectura para el resto de usuarios.

 

 

Métodos de cambio de permisos

Podemos definir dos métodos que nos permiten personalizar los permisos tanto de directorios como de carpetas con chmod (change mode), método modo y método octal.

 

Método modo

Este método puede parecer, a priori, más sencillo. Consiste en utilizar operadores para añadir o quitar los diferentes modos de los permisos. Existen 3 operadores:

  1. (+): añade un modo.
  2. (): elimina un modo.
  3. (=): especifica un modo.

Los usuarios los indicaremos de la siguiente forma:

  1. u: (user) usuario (primer grupo).
  2. g: (group) grupo (segundo grupo).
  3. o: (others) otros (tercer grupo).
  4. a: (all) todos los anteriores.

De esta forma podemos utilizar la utilidad chmod de la siguiente forma:

1. Añade permisos de ejecución al fichero.

chmod +x nombre_del_fichero

2. Elimina permisos de escritura.

chmod -w nombre_del_fichero

3. Elimina permisos de lectura a otros.

chmod o-r nombre_del_fichero

4. Únicamente deja permisos de ejecución.

chmod =x nombre_del_fichero

5. Añade todos los permisos al usuario pero vacía el resto, dejando únicamente permiso de ejecución para otros.

chmod u+rwx,g-rwx,o=x nombre_del_fichero

Esto son sólo 5 ejemplos del uso de chmod en este modo, podemos realizar todas las combinaciones que necesitemos.

 

Método octal

Como mencioné anteriormente, este método puede resultar más complicado de entender al principio; o al menos un poco más dificil de recordar. Los permisos (rwx) son representaciones de un valor binario que, por supuesto, entiende nuestra máquina. Entendiendo entonces que cada trío de permisos tendría un valor binario (rwx == 111, r-x == 101, r– == 100…) que siendo convertido a octal, nos daría un dígito entre 0 y 7.

De esta forma, es posible indicar con sólo 3 dígitos octales los permisos de un fichero o directorio y pudiendo traducir el modo anterior a modo octal fácilmente.

De esta forma:

1. Asigna únicamente permisos de ejecución al fichero.

chmod 111 nombre_del_fichero

2. Asigna todos los permisos para el usuario, únicamente ejecución para el grupo y ninguno para el resto.

chmod 710 nombre_del_fichero

3. Asigna todos los permisos para el usuario, únicamente lectura para el grupo y ejecución y escritura para el resto.

chmod 743 nombre_del_fichero

Permisos por defecto con umask

Ya conocemos cómo interpretar y editar permisos. A continuación veremos cómo configurar los permisos por defecto con umask. Volvemos al octal; por defecto, los directorios tienen una base octal de 777 (111 111 111)(rwx rwx rwx) mientras que los ficheros de 666 (110 110 110)(rw- rw- rw-). La razón por la que los ficheros carecen de permisos de ejecución es sencilla, por seguridad, no conviene que le demos este permiso a todo archivo nuevo. Partiendo de esta base, la operación para determinar los permisos de creación de nuevos archivos y directorios es la resta del valor dado por umask al permiso base.

Para personalizar la máscara tenemos 3 opciones. La primera de ellas consiste en cambiar la máscara en la sesión que tenemos. Para ello simplemente deberemos lanzar el comando umask seguido de la máscara deseada. Una vez reiniciemos, iniciemos otra sesión o cerremos la consola, esta configuración desaparecerá.

La segunda y tercera opción son «permanentes»; se mantendrá mientras se mantengan los ficheros de configuración. La segunda opción afectará al usuario propietario del fichero de configuración .bashrc. En este caso sólo afectará al usuario hombre mientras que el usuario mujre tendrá su propio fichero .bashrc en su directorio personal, aunque de estos ficheros y directorios hablaremos más adelante.

Finalmente la tecera opción consiste en editar el fichero de configuración /etc/profile. Este fichero pertece a root, por lo que necesitaremos provilegios para poder editarlo.

Cabe destacar que si que, el sistema (/etc/profile) tiene una máscara de -por ejemplo- 026 y el usuario (.bashrc) de 002 la prioridad del usuario siempre será la de su configuración propia. De hecho su funcionamiento es el siguiente: el usuario busca en su fichero de configuración la línea umask, en caso de no haber busca en el sistema. Por lo que en el caso de no configurar umask en el usuario, la configuración del mismo será la del sistema.

Posdata: para corroborar la umask que estamos utilizando en este preciso momento, simplemente deberemos teclear el comando umask, que te devolverá el valor.

 

Propietarios de archivos y directorios

Como vimos anteriormente, para cada archivo o directorio no sólo tenemos unos permisos asociados, sino un usuario y un grupo propietarios del mismo. Para cambiar el propietario utilizaremos chown. Como vemos a continuación, podemos ir cambiando el propietario de nuestro ‘secreto’. De la misma forma si quisiéramos cambiar propietarios a los directorios.

Para cambiar el grupo propietario, simplemente deberemos utilizar chgrp, el cual funciona exactamente igual que chown.