Autor: Maximiliano E. Frisione (ipxmax [arroba] gmail.com)
Ver Primer Artículo: Introducción a la Seguridad en Linux (I)
En esta segunda entrega Maximiliano desarrolla la primera parte de los "Permisos de Archivos", haciendo hincapié en la importancia de su comprensión para luego seguir evolucionando en GNU/Linux.
Permisos de Archivos (Primera Parte)
En un sistema Linux, TODO es un archivo, los discos de
almacenamiento, el mouse, el teclado, la placa de red, etc.
Este diseño es, sin lugar a dudas, uno de los factores de mayor
éxito y potencia del estándar de Unix, pero así también, lo
convierten en uno de los más peligrosos. Dependiendo del tipo de
error en un permiso, se le podría permitir a un usuario, desde
modificar un simple archivo hasta obtener el control total del
sistema. Es por ello, que la correcta utilización de los permisos
sobre los archivos es fundamental para la seguridad del sistema.
Como mencioné en el informe anterior, la protección más básica que le brindamos a los archivos del sistema operativo son sus respectivos permisos, en donde se define quiénes pueden acceder a éstos y de que forma pueden hacerlo.
El sistema de archivos de Linux es uno de los más sólidos, conocido como ext2 y desde hace algún tiempo su nueva versión ext3. Los permisos a los que da soporte sobre los archivos son: lectura, escritura, ejecución, sticky bit, suid, guid, además maneja propiedades de un usuario (dueño), grupos y otros (resto de los usuarios), como así también otros estándares de Unix.
Todas estas características son almacenadas en una tabla de i-nodos, que es en donde Linux guarda información administrativa acerca de: fecha de creación del archivo, modificación, la fecha en que cambio el i-nodo y además los datos en los que radica la seguridad del estándar de Unix: el usuario o dueño del archivo, el grupo del archivo y los permisos.
Para listar los archivos con sus correspondientes permisos vamos a utilizar el comando:
ls ?l [Directorio], el nombre del directorio es opcional, de no llegar a colocarlo, nos listaría los archivos del directorio en el que estamos ubicado.
Para saber en qué directorio estamos parados podemos utilizar: pwd.
ipxmax:~# ls -l
- -rw-r--r-- 1 root sys 576 Nov 25 2006 agenda.txt
ipxmax:~#
Para ir entendiendo un poco mejor esto, voy a explicar el significado de los 10 primeros dígitos del ejemplo (-rw-r--r--) de izquierda a derecha.
El primer dígito es un guión, este nos indica el tipo de archivo
(archivo, directorio o dispositivo).
En la siguiente tabla se muestra los diversos caracteres que pueden
aparecer en esta posición con su correspondiente significado.
Caracter |
Significado |
- |
Archivo común |
b |
Dispositivo de bloque |
c |
Dispositivo de carácter |
d |
Directorio |
l |
Enlace simbólico |
p |
Pipe |
s |
Socket |
Los siguientes 9 dígitos, los dividimos en 3 bloques de 3 caracteres cada uno. En donde, en el primer bloque encontramos los permisos del Usuario o dueño, en el segundo los del Grupo o grupos a los cuales pertenece el usuario y en el tercero los de Otros.
La siguiente tabla muestra el significado de cada uno de los caracteres con su correspondiente valor en octal, el cuál lo explicaré más adelante.
Caracter |
Significado |
Valor |
r |
Lectura |
4 |
w |
Escritura |
2 |
x |
Ejecución |
1 |
En el ejemplo teníamos: -rw-r--r--
rw- Permisos para el Usuario o Dueño de lectura y escritura.
r-- Permisos para el Grupo de solo lectura
r-- Permisos para Otros (resto de los usuarios) de solo lectura
Para averiguar el valor de los permisos correspondientes a cada
grupo, sólo necesitamos reemplazar los caracteres por sus
respectivos valores y sumarlos.
En el ejemplo sería así:
rw- 4 + 2 + 0 = 6
r-- 4 + 0 + 0 = 4
r-- 4 + 0 + 0 = 4
Entonces el valor de los permisos del archivo del ejemplo "agenda.txt"
sería 644. El valor en octal es el que usaremos si quisiéremos
cambiarle los permisos a un archivo con el comando chmod.
Si deseáramos cambiar de dueño de un archivo y/o el grupo al que
pertenece, sería posible con el comando chown.
Cabe aclarar que podríamos utilizar chmod también en forma
simbólica, en el presente informe no será explicado, esto puede ser
consultado a través de la sentencia man chmod.
Algunos ejemplos:
ipxmax:~# ls -l
- -rw-r--r-- 1 root sys 576 Nov 25 2006 agenda.txt
ipxmax:~# chmod 400 agenda.txt (sólo lectura para el dueño)
ipxmax:~# ls -l
- -r-------- 1 root sys 576 Nov 25 2006 agenda.txt
ipxmax:~# chmod 666 agenda.txt (asigna Lectura y escritura para todos)
ipxmax:~# ls -l
- -rw-rw-rw- 1 root sys 576 Nov 25 2006 agenda.txt
ipxmax:~# chown maxi:segu agenda.txt (cambia el dueño y el grupo)
ipxmax:~# ls -l
- -rw-rw-rw- 1 maxi segu 576 Nov 25 2006 agenda.txt
Los archivos de configuración del sistema ubicados normalmente en
/etc tienen por lo general el modo 640 (-rw-r-----), y son propiedad del root.
Siempre dependiendo de los niveles de seguridad que se requieren en
el sistema, esto podría ser modificado.
Nunca debemos dejar un archivo del sistema con permiso de escritura
para un grupo o para otros.
Algunos archivos de configuración, como por ejemplo /etc/shadow,
sólo deberían tener permiso de lectura por root.
En la segunda parte correspondiente a este informe de "Permisos de
Archivos", explicaré los 3 permisos restantes: sticky bit, suid y guid.
Y en la tercer y última parte de éste, comentaré en detalle los
archivos críticos para la seguridad del sistema y cuáles deben ser
sus respectivos permisos.
Buenos Aires, 25 de noviembre de 2006