You are on page 1of 5

Montando hosting en FreeBSD

Autor: GorristeR
Fecha: 12 de mayo de 2002
Primera revisin: 18 de mayo de 2002
Introduccin
Al intentar seguir este COMO, debers tener ya en tu UNIX funcionado el Apache, creo que ya
hay suficiente informacin en la red para que lo hagis sin mayor dificultad. Aqu mostrar como
crear cuentas de usuario "seguras" con un uso limitado de espacio de disco y que slo puedan
acceder al sistema por FTP. El servidor FTP que utilizar es el proftpd, aunque slo indicar
unas opciones puntuales que no tendrn dificultad de pasarse a cualquier otro.
Lo que aqu muestro es posible que sea polticamente incorrecto o que haya otras formas ms
fciles de realizarlo. Mi intencin es montar un servidor web para los amiguetes ( S, esos que
usan Windbugs ;-) ) y de paso aprender mientras lo hago. Cualquier crtica sea constructiva o
destructiva, ser bien recibida y si alguien sabe hacer esto de una forma ms segura fcil pues
que me lo comunique con un emilio.
Este COMO est dividido en los siguientes apartados:
Crear cuentas de usuario "seguras".
Cuotas de disco para limitar el espacio usado.
Activar cuentas FTP.
Accediendo a las webs de los users.
Creando un area web "privada"
Cuidado con PHP
Mejoras
Crear cuentas de usuario "seguras"
Antes de nada lo principal es la ORGANIZACIN. Es importante ver dnde vamos a poner a
estos usuario en /home. Yo personalmente prefiero dividir los usuario "normales" osea, con su
shell, a los que slo tendrn acceso por FTP para actualizar su Web. Estos ltimos los suelo
poner en /home/web, de tal manera que los usuario visente y juan, quedaran as:
/home/web/visente y /home/web/juan. Tambin podis usar unos UID dentro de unos rangos
determinados pero como ya digo, es cuestin de ORGANIZACIN y un tema PERSONAL.
NOTA: Si a alguno le gusta ms poner /home/www en vez de /home/web, ha de saber
que si tiene Apache ya existe un usuario www con UID GID 80. No es que haya ningn
error, pero logicamente no es una manera "limpia" de hacerlo, sera como poner el
HOME de un user dentro de otro.
Cread a los usuarios como hacis normalmente pero en su shell ponis /sbin/nologin de esta
forma no podr acceder nunca al shell ;-). Para evitar futuros mensajes de error de diversas
aplicaciones con esto, aadir dicha shell fantasma en /etc/shells. Deberis crear un grupo llamado
preferente web. Por ltimo es aconsejable eliminar todos los ficheros .* que hubiera en el home,
puesto que estos son creados por las shells y los usuarios del grupo web no los van a usar nunca.
Cuotas de disco para limitar el espacio usado
Si no tuvieras quotas de disco sera necesario activarlas, para ello tenis que realizar los
siguientes pasos:
Aadir en vuestro fichero de conf. del kernel la siguiente linea: options QUOTA
Indicar que queremos activarlas en /etc/rc.conf poniendo check_quotas=YES
Modificar /etc/fstab indicando la(s) particion(es) que usarn las quotas. Ejemplo:
/dev/ad0s2a /home/web ufs rw,userquota 1 1

Una vez hecho esto tendremos que reiniciar.
NOTA: Tambin se pueden usar cuotas de grupo aadiendo groupquota en el fstab, si
ests interesado deberas leerte el HANDBOOK
Ahora vamos a ponerle limitaciones de espacio a juan y a visente. Se puede poner tambin
limitacin de nmero de ficheros pero no lo veremos aqu. Para editar la quota de juan
teclearemos lo siguiente:
# edquota -u juan
Se nos abrir un fichero con nuestro editor definido ms o menos con estas lneas:
Quotas for user juan:
/home/web: blocks in use: 0, limits (soft = 0, hard = 0)
inodes in use: 1, limits (soft = 0, hard = 0)
.
.
.
Si no sabemos cuandos Kbs es un bloque podremos verlo por ejemplo con el comando df. En mi
caso es equivalente a 1 Kb. Hay dos clases de lmites el hard y el soft, el primero no puede
nunca sobrepasarse, mientras que el segundo puede sobrepasarse por un tiempo limitado (por
defecto una semana). Pero aqu vamos a tratarlos por igual para no complicarlo. Poniendo un
espacio de 10 Megas a juan teniendo en cuenta que cada bloque ocupa 1 Kb, quedara as:
Quotas for user juan:
/home/web: blocks in use: 0, limits (soft = 10240, hard = 10240)
inodes in use: 1, limits (soft = 0, hard = 0)
.
.
.
Con quota -v juan comprobaremos que todo est correcto.
NOTA: Sera aconsejable tener /home/web en una particin separada, o como mnimo,
no tenerlo en / puesto que si el sistema usa algn fichero temporal del usuario en /tmp,
ste formara parte de la cuota de disco.
Activar cuentas FTP
Como estos usuarios no queremos que tengan acceso al shell ni tampoco puedan urgar nuestro
directorio raiz y descendientes, aadiremos la siguiente linea en /usr/local/etc/proftpd.conf
dentro de la seccin "Global".
DefaultRoot ~ web
Con esto le indicamos al proftpd que los usuarios que estn en el grupo web, tendrn el directorio
raz en su home y no podrn subir de nivel ;-). Si no ponis ningn grupo NADIE tendr acceso
por encima de su home.
Accediendo a las webs de los users
Si disponis de IP fija, sera interesante que os dirais de alta en un redireccionador. De esta
forma la gente no tendra que recordar vuestra IP. Os recomiendo no-ip.com, que permite varios
subdominios del tipo loquesea.no-ip.com y loquesea.no-ip.org entre otros. Una vez dados de alta,
slo tendris que bajaros el fuente de un programa en C y compilarlo o a travs de su web
poniendo la IP directamente en un formulario.
Ahora, seguiremos con nuestro amigo Juan, queremos que se pueda acceder a su pgina
mediante loquesa.no-ip.org/lapeichdejuan.
# cd /usr/local/www
# ln -s /home/web/juan lapeichdejuanker
Con cada usuario tendremos que hacer lo mismo, como vis, no tiene que coincidir el nombre de
usuario de vuestra mquina con el subdominio que tendr su web. De hecho, ponerle otro
nombre es mejor para el tema de seguridad puesto que no se conocer realmente el nombre real
del usuario. Para comprobar que todo funciona con el Internet Exp.. er con vuestro navegador
favorito comprobis: http://loquesea.no-ip.org/lapeichdejuanker.
Creando un area web "privada"
Podis crear un area privada para cada usuario, muy til si nuestros "clientes" quieren dejar cosas
personales para que slo los que ellos quieran puedan acceder.
Primero es necesario activar esta particularidad en el Apache y reiniciarlo despus. Editamos
/usr/local/etc/apache/httpd.conf
#Esta ruta cambiar si usamos otro "DocumentRoot", pero es la que
#viene por defecto
<Directory "/usr/local/www/data">
.
.
AllowOverride AuthConfig
.
.
</Directory>
Reiniciamos con apachectl restart. Hay que crear un directorio dentro del HOME del
usuario y realizar ah unas operaciones, veamos un ejemplo con nuestro amigo Juan:
# cd /home/web/juan
# mkdir privado
# cd privado
# htdigest -c .htdigest juan juan
Una vez introducido un password, este se guardar en el fichero .htdigest con la clave cifrada en
MD5. Es posible introducir ms de un usuario, para ello ejecutamos el comando sin el parmetro
"-c". Vamos a aadir a la novia de Juan que tambin quiere acceder a ese directorio: htdigest
.htdigest juan susana.
Una vez tengamos el usuario o usuarios introducidos podemos verlos haciendo un cat
.htdigest.
Para acabar, es necesario crear el fichero .htaccess y escribir en l lo siguiente:
AuthUserFile /home/web/juan/privado/.htpasswd
AuthDigestFile /home/web/juan/privado/.htdigest
#No usaremos autentificacin de grupos
AuthGroupFile /dev/null
AuthName juan
AuthType Digest
<Limit GET POST>
#Aqu hay que poner los usuarios que hayamos aadido con htdigest
require user juan susana
<Limit>
Cuidado con PHP
Haciendo pruebas con el servidor y el PHP, me di cuenta de lo siguiente; una instruccin en PHP
del tipo echo `cat /etc/passwd` (con las comillas invertidas), tena una bonita web de
mi fichero passwd :O. Me puse a indagar sobre el tema y descubr que hay que editar el fichero
php.ini y cambiar la linea safe_mode off a on. Me parece algo importante puesto que en
la instalacin por defecto de PHP que realiza FreeBSD a m me lo tena activado. De esta forma
no se ejecutar ningn comando de la shell.
Mejoras
No he conseguido hacer un sistema de cuotas individual para cada user por FTP, el problema de
las cuotas de disco es que el servidor FTP no las tiene en cuenta y el usuario no puede saber
cuanto espacio tiene disponible hasta que le salga el error de disco lleno :(. Igual se puede hacer,
pero yo no he encontrado informacin sobre esto.
Sera interesante que algn "Scripter" se currara un script que hiciera todos estos pasos de
manera automtica. Si alguien se decide a hacerlo, le ruego que me lo mande.
Despedida
Agradezco la ayuda de AfterNet que me hech un cable con el proftpd y sobre todo con
la ADSL ;-). Tambin a Koji por su "pequeo" consejo sobre crear un grupo web.

You might also like