Archivo

Entradas Etiquetadas ‘seguridad’

Permisos de archivos en Linux

Jueves, 4 de Febrero de 2010

Sin profundizar demasiado en el tema, voy a explicar como maneja Linux los permisos de archivos, para entender como funciona, y poder configurarlo fácilmente.

Si lo que queréis es la versión extendida, aquí os dejo un par de enlaces, en los que se explica de una manera más completa:
http://www.ant.org.ar/cursos/curso_intro/x1439.html

Voy a empezar, explicándolo de una manera gráfica, que seguro que es algo más intuitiva. Cuando abrimos las propiedades con el botón derecho del ratón, en cualquier archivo o directorio, veremos una pantalla como esta:

En nautilus: (a mi parecer, un poco complicada su forma de visualización)

En pcmanfm: (más sencillo imposible)

Bien, ahora vamos a ver que significa cada parte:

Hay tres secciones, el propietario, el grupo, y los otros usuarios que no pertenecen al grupo marcado. Cada uno de estos colectivos, tiene tres clases de permisos. Lectura (poder leer el archivo), escritura (editar, y borrar el archivo), y ejecución (el archivo podrá ser ejecutado). Estas opciones pueden aplicarse a un archivo, o a un directorio.

En las imágenes mostradas arriba, podemos ver un directorio que se encuentra en mi partición de datos, que alberga música. El propietario soy yo, con permisos de lectura, escritura, y ejecución, mientras que los demás usuarios, pueden escuchar esa música, pero no borrarla o editarla, de manera que podemos estar tranquilos.

Solo podremos cambiar los permisos, de los archivos y directorios que seamos dueños (a no ser que los editemos como root), lógico no? Bien, ahora que ya hemos entendido como funcionan los permisos, vamos a profundizar un poco, y ver como gestionarlos desde la terminal (puede sernos muy útil).

Con el comando, ls -la (ls para listar, -l para mostrar los permisos, y -a para mostrar archivos ocultos), veremos una lista como esta en cualquier directorio (cojo los ejemplos de ant.org):

[shrek@pantano:~]$ ls -la
total 13
drwxr-sr-x   2 shrek    user        1024 May  2 09:04 .
drwxrwsr-x   4 root     staff       1024 Apr 17 21:08 ..
-rw-------   1 shrek    user        2541 May  2 22:04 .bash_history
-rw-r--r--   1 shrek    user         164 Apr 23 14:57 .bash_profile
-rw-r--r--   1 shrek    user          55 Apr 23 14:44 .bashrc
-rwxrwxr-x   1 shrek    user           0 Apr 14 19:29 a.out
-rwxrwxr-x   1 shrek    user          40 Apr 30 12:14 hello.pl
-r--------   1 shrek    user          64 Apr 29 14:04 hola
-rwxrw-r--   1 shrek    user         337 Apr 29 13:57 lista
-rw-rw-r--   1 shrek    user         40  Apr 30 12:31 listador
-rw-rw-r--   1 shrek    user           0 May  2 09:04 null
-rwxrwxr-x   1 shrek    user         175 Apr 30 12:30 prue.pl
-rwxrwxr-x   1 shrek    user          56 Apr 23 15:08 que.sh

Vemos, que se listan 10 caracteres, que nos dan la información que necesitamos, vamos a verlo uno por uno, una vez entendido, es muy fácil de interpretar. El primero, nos dice que tipo de archivo o directorio es:

Contenido Significado
- Archivo común
d Directorio
c Dispositivo de caracteres (tty o impresora)
b Dispositivo de Bloque (usualmente disco rígido o CD-ROM)
l Enlace simbólico
s Socket
p Pipe

Ahora vamos, a ver que significan los siguientes caracteres, que son los que nos importan:

Como veis, es lo mismo que nos mostraba la interface gráfica, 3 subgrupos, de 3 caracteres, el primero es permiso de lectura (r de read), el segundo escritura (w de write), y el tercero de ejecución (x execute).

Para cambiar los permisos, usaremos el comando chmod en una terminal. Agregaremos permisos con el símbolo mas “+” y los quitaremos con el símbolo “-”. También tenemos que especificar a que grupo se los estamos aplicando, al propietario:

a: aplicar a todos

u: aplicar al propietario

g: aplicar al grupo

o: aplicar a terceros

Pongo un par de ejemplos, para que se entienda mejor:

chmod a+x archivo

Le estaremos agregando permisos de ejecución (x), para todos.

chmod go-w archivo

Ahora en cambio, le estamos quitando los permisos de escritura (w), a los miembros del grupo, y a terceros

De todas, maneras, hay una manera más sencilla, de hacer estos cambios, y es usando el sistema octal. Para los que sepáis un poco de matemáticas, o tengáis curiosidad, os explico de donde salen los números que vamos a ver a continuación. Con este sistema, a cada privilegio, se le aplica un número, siguiendo el sistema octal: el bit x es 20 = 1, el bit w es 21 = 2, el bit r es 22 = 4.

Resumiendo:
r = 4
w = 2
x = 1

Ahora haciendo simples sumas, podemos nombrar cualquier permisos mediante números de 3 dígitos (el primero para el propietario, el segundo para el grupo, y el tercero para terceros).

Valor Descripción
700 El propietario tiene permisos de lectura, escritura y ejecución; los demás no pueden ni acceder (ejemplo, la home)
744 El propietario lectura, escritura y ejecución, el grupo y otros solo ejecución lectura
755 El propietario lectura, escritura y ejecución, el grupo y otros pueden leer y ejecutar el archivo.
777 El archivo puede ser leído, escrito y ejecutado por quien sea.
640 El usuario propietario puede leer y escribir, el grupo puede leer el archivo y otros no pueden hacer nada.

Solo tenemos que sumar los ingredientes que queramos, para saber el número que debemos aplicar, es bastante sencillo y fácil de recordar. Luego aplicamos el valor, con el comando chmod:

chmod 755 archivo

Ahora, por últimos, vamos a ver como cambiar el propietario o el grupo al que pertenece un archivo. Lo haremos con el comando chown. Indicaremos el nombre del propietario nuevo, y también podemos agregar seguido de un punto, el nombre del grupo, si queremos cambiarlo.

chown pepito archivo.txt

Nombra a pepito propietario del archivo

chown pepito.amigos archivo.txt

Nombra a pepito propietario del archivo y además cambia el grupo a “amigos”.

chown .amigos archivo.txt

Cambia el grupo a “amigos”, pero mantiene el mismo propietario de archivo.

Eso es todo. Esto nos servirá para entender mejor como maneja linux los permisos, y poder solucionar pequeños errores que nos encontremos, o administrar mejor nuestro sistema, sobretodo si hay más de un usuario en el mismo, y no queremos llevarnos sorpresas.

Tepes Linux , , , ,

Analisis de la Seguridad en Linux

Viernes, 3 de Julio de 2009

Linux, tiene muy buena fama en cuanto a seguridad. A nivel de virus, está totalmente libre de virus (bueno, alguno hay, pero es tan remota la posibilidad de que se infecte un sistema bien administrado, que no lo tendremos en cuenta), pero eso no quiere decir que podemos descuidar las conexiones.
Para empezar, podemos visitar esta página, que sirve para hacer un escáner online, y comprobar que tal andamos: puertos, respuestas a ping, servicios… mira prácticamente de todo, muy recomendable: https://www.grc.com

Después de pulsar en el botón PROCEED, accederemos al menú principal

Estas son las opciones más interesantes:

: escáner de los puertos más habituales.

: escanéa los primeros 1056 puertos.

:escanea los puertos que le especifiquemos nosotros.

: nos dirá como se ve nuestro sistema desde el exterior.

Aclarar que todo esto se puede hacer con programas desde mapeo de redes (nnamp), pero es más cómodo así, y no hace falta tener ningún conocimiento especial.

Para mejora la seguridad, podemos hacer las siguiente tareas.

Configurar el firewall

La mayoría de sistemas, usan Iptables como firewall. Es un simple y robusto programa compuesto por normas, que interpreta rigurosamente para aceptar o denegar conexiones. Hay numerosos manuales para configurarlo, e incluso webs que te escriben uno a partir de las opciones que le digas, así que no voy a entrar en eso. Yo lo configuro mediante Firestarter. Firestarter es una interface gráfica para manejar Iptables. En un par de pasos estará operativo, y solo tenemos que especificar que programas queremos usar, para que se abran sus respectivos puertos. Cuando acabemos, tecleamos en consola:

sudo iptables-save > /etc/iptables/iptables.rules

Con ello escribiremos las reglas que hemos configurado con FIrestarter. Para que Iptables funcione, NO es necesario tener arrancado Firestarter.

No responder a Ping

Cuando una máquina nos hace ping, si nuestro sistema está encendido, este contestará al ping, dejando claro que está encendido nuestro ordenador. Si no queremos dar esa información, tenemos que editar el archivo sysctl.conf:

sudo nano /etc/sysctl.conf

Al final del archivo, añadimos estas dos lineas (la primera es meramente informativa, por si algún día volvemos a editar el archivo).

#NO RESPONDER A PING REQUEST
net.ipv4.icmp_echo_ignore_all = 1

Ahora si volvemos a hacer el test de la página web, en el apartado

, nos dirá que no se puede determinar si nuestra máquina está encendida.

Evitar Fork Bombs

Una bomba fork funciona creando una gran cantidad de procesos muy rápidamente con el objetivo de saturar el espacio disponible en la lista de procesos mantenida por el sistema operativo del computador (fuente: wikipedia).

Podéis leer más sobre el tema si os interesa: http://es.wikipedia.org/wiki/Bomba_fork

Una fork bomb se puede colar en nuestro sistema si la ejecutamos por consola, o en algún script maligno, produciendo el cuelgue del sistema. Para impedirlo, podemos restringir el número de procesos máximos que se ejecutarán en el sistema, editando el archivo limits.conf:

sudo nano /etc/security/limits.conf

Y al final del archivo, añadimos las siguientes lineas:

#Limite para evitar Fork Bombs:
@users soft nproc 100
@users hard nproc 150

Eso es todo. Cuando pueda ampliaré la información.

Tepes Archlinux, Linux , , , , , , , ,

Configurar .htaccess

Jueves, 14 de Mayo de 2009

El archivo .htaccess, es un archivo de configuración que permanece oculto, y puede contener numerosas directivas de uso y seguridad de cualquier servidor Apache. Es muy configurable, y tiene muchas opciones, pero aquí voy a explicar las que me han parecido de utilidad, y muchas deberíamos usarlas en cualquier página web personal, o blog que montemos. Este archivo, lo encontraremos en la raíz de nuestro servidor. Todo lo que escribamos en el, afectara a esa carpeta, y todas las subcarpetas (en este caso todo lo contenido en el servidor). También podemos crear archivos htaccess adicionales en cualquier directorio que queramos aplicar normas específicas. Para editarlo, solo necesitamos permisos de escritura en el servidor, y un editor de textos. Vamos a ver lo que podemos escribir:

-Personalizar mensajes de error
Indicaremos la ruta de la página la queremos redireccionar a los navegantes que tengan uno de los siguientes errores.
ErrorDocument 403 /forbidden.html
ErrorDocument 404 /notfound.html
ErrorDocument 500 /servererror.html

-Deshabilitar la navegación del directorio
Con este comando, evitaremos que al entrar en un directorio que no tenga un index, el servidor muestre una lista con los archivos contenidos en ese directorio, para que no puedan fisgar. Es recomendable aplicar esta regla como medida de seguridad.
Options All -Indexes

-Cambiar la página por defecto del directorio
Cuando tecleamos el nombre de un directorio en la barra del navegador, el servidor abrirá un archivo llamadao index.html, index.php… Si queremos que nuestra página inicial sea otro archivo, se lo indicaremos, escribiendo en el orden que queramos que busque (formando una lista):
DirectoryIndex lapaginaquequeramos.php myblog.php index.html index.php

-Redirigir a los visitantes a una página concreta (ideal para tareas de mantenimiento)
Si queremos que todos los visitantes, no puedan ver el contenido de nuestra página, y que sean redireccionados a otro sitio, lo configuraremos así:
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L]

-Redireccionar visitantes a una nueva página o carpeta
Si cambiamos de sitio alguna página o carpeta, y no queremos perder los visitante que busquen en el antiguo lugar:
Redirect viejapagina.html http://www.midominio.com/nuevapagina.html
Redirect /viejacarpetahttp://www.midominio.com/nuevacarpeta/

Podéis sustituir el nombre de la página de mantenimiento (maintenance.html) por el que queráis, pero hay que subir al servidor una página con el mismo nombre.

-Evitar el acceso a un archivo determinado
<files nombre del archivo>
order allow,deny
deny from all
</files>

-Proteger directorio de un IP y/o dominio
Sirve para restringir el tráfico de nuestra web. Podemos usar números IP o dominios.
<Limit GET POST PUT>
order allow,deny
allow from all
deny from 12.345.67.110
deny from .*nombredeldominio\.com.*
</Limit>

También podemos dar permiso, o denegar el acceso a un rango de IPs:
order deny,allow
deny from all allow from 128.156

En este caso, bloquearemos las conexiones de todas las IP que empiecen por 128.156.xxx.xxx.

Podemos hacer todo lo contrario, bloquear a todos el acceso a un directorio, excepto a una IP, que será la única que tendrá acceso:
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 12.345.67.110
</Limit>

-Impedir el hotlinking
El hotlink, es una práctica muy extendida, se coge una imagen de otro servidor, aprovechándose de su ancho de banda. Esto es perjudicial, porque consume recursos, pero por otro lado genera tráfico, que siempre es positivo. Podéis hacer que en vez de la imágen del hotlink, se muestre una imagen con un mensaje:
# INICIO hotlinking
RewriteEngine On
#Reemplazar ?mysite\.com/ con la url de vuestra página
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Reemplazar /images/nohotlink.jpg con la imágen "don't hotlink" que hagáis
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
# FIN hotlinking

He usado las siguientes páginas como fuente para hacer esta recopilación. En ellas podréis encontrar más opciones:

http://www.carlosleopoldo.com/post/acordeon-chuleta-de-htaccess/
http://mangasverdes.es/2009/03/23/10-excelentes-trucos-htaccess-para-wordpress-y-una-recomendacion/
http://www.dwdpa.com/content/view/26/73/

Tepes Linux, Wordpress , , , , ,