[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: (pero la seguridad?) Páginas web de mis usuarios en apache



> >     ¿Que tengo que configurar para que un usuario pueda poner su
> > página web y que el apache lo ceda a internet?
>
> si tienes cargado el módulo user (creo que es así), basta con que el
> usuario tenga la carpeta public_html en el directorio raiz y con
> permisos 755 tanto su home como el public_html. Más gráfico:
>
> ls -l /home
> drwxr-xr-x   33 paco    usuarios     4096 nov 20 14:23 paco
>
> ls -l /home/paco
> drwxr-xr-x    9 paco    usuarios     4096 nov 14 19:09 public_html
>
> 	Pues sí que funciona y muy bien por cierto, pero esto genera un
> problema de seguridad, ya que cualquier usuario que tenga acceso al
> sistema puede ver las capetas personales de los demás usuarios.
>
> 	Así como por ejemplo, yo soy usuario del servidor y quiero tener
> una página web, pero eso implica que el resto de los usuarios pueden
> acceder a los archivos que guardo.

Simple.

Apache corre como el usuario www-data. Como puedes ver, el usuario
www-data pertenece al grupo www-data:

$ grep www /etc/passwd
www-data:x:33:33:www-data:/var/www:/bin/sh
$ grep 33 /etc/group
www-data:x:33:

----------------
Con esta información en mente, pasemos un poquito a hablar de los permisos
de tu directorio. Qué significan los permisos de lectura (r, valor octal
4) y ejecución (x, valor octal 1) en un directorio? El de lectura
significa que puedo pedir el listado de archivos. El de ejecución
significa que puedo entrar al directorio en cuestión, y trabajar en él
siempre que sepa el nombre del archivo que busco. Te pongo un ejemplo:

Primero que nada, creo un directorio y le pongo un archivo dentro:

/tmp$ mkdir prueba
/tmp$ cat > prueba/prueba.txt
Esta es una prueba.
/tmp$ ls -la prueba
total 12
drwxr-xr-x    2 gwolf    gwolf        4096 Nov 21 09:56 .
drwxrwxrwt    6 root     root         4096 Nov 21 09:55 ..
-rw-r--r--    1 gwolf    gwolf          20 Nov 21 09:56 prueba.txt

Ahora, lo pongo en un modo restrictivo, permitiéndome sólo la ejecución
del directorio:

/tmp$ chmod 100 prueba/
/tmp$ ls -la prueba
ls: prueba: Permission denied
/tmp$ cat prueba/prueba.txt
Esta es una prueba.

Como puedes ver, ejecutar el directorio no me permite ver el listado de
archivos, pero sí usarlos. Ahora, veamos si doy únicamente lectura:

/tmp$ chmod 400 prueba/
/tmp$ ls -la prueba
ls: prueba/.: Permission denied
ls: prueba/..: Permission denied
ls: prueba/prueba.txt: Permission denied
total 0
/tmp$ cat prueba/prueba.txt
cat: prueba/prueba.txt: Permission denied

Suena curioso, verdad? Pues no, es bastante lógico: Pude ver el contenido
del directorio, pero no pude tocar nada de lo que está dentro - El comando
ls hace un 'stat' a cada archivo para ver su modo, tamaño, fecha de
modificación y demás atributos. Con estos mismos permisos, puedo emular un
ls básico perfectamente (meto un poco de mano para que maneje los
archivos iniciados en '.':

/tmp$ for arch in prueba/.* prueba/*; do echo $arch; done
prueba/.
prueba/..
prueba/prueba.txt

----------------
Ahora, apliquemos esto a tu directorio: Quieres que ningún usuario pueda
entrar a tu directorio, y que el usuario www-data pueda entrar hasta tu
public_html. Para ello, yo te sugiero:

~$ su
Password:
/home/gwolf# ls -ld .
drwxr-xr-x   35 gwolf    gwolf        4096 Nov 21 08:53 .
/home/gwolf# chgrp www-data .
/home/gwolf# chmod 710 .
/home/gwolf# ls -ld .
drwx--x---   35 gwolf    www-data     4096 Nov 21 08:53 .
/home/gwolf# ls -ld public_html/
drwxr-xr-x    7 gwolf    gwolf        4096 Nov 21 09:11 public_html/


De este modo:
1. Ningún usuario que no pertenezca a www-data (o no seas tú) puede hacer
   nada en tu home
2. Los miembros del grupo www-data pueden ejecutar tu home, pero no
   listarlo.
3. Todo quien tenga derecho de llegar a tu public_html tiene acceso de
   lectura y ejecución

Claro, podrías acá también limitar a tu public_html a www-data únicamente.
Podrías usar varios esquemas diferentes, se me ocurrieron ya varios, pero
es hora de que siga trabajando ;-)

Saludos,

-- 
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF



Reply to: