Montando hosting en FreeBSD

Autor: GorristeR
Fecha: 12 de mayo de 2002
Primera revisión: 18 de mayo de 2002


Introducción

Al intentar seguir este COMO, deberás tener ya en tu UNIX funcionado el Apache, creo que ya hay suficiente información en la red para que lo hagáis sin mayor dificultad. Aquí mostraré como crear cuentas de usuario "seguras" con un uso limitado de espacio de disco y que sólo puedan acceder al sistema por FTP. El servidor FTP que utilizaré es el proftpd, aunque sólo indicaré unas opciones puntuales que no tendrán dificultad de pasarse a cualquier otro.

Lo que aquí muestro es posible que sea políticamente incorrecto o que haya otras formas más fáciles de realizarlo. Mi intención es montar un servidor web para los amiguetes ( Sí, esos que usan Windbugs ;-) ) y de paso aprender mientras lo hago. Cualquier crítica sea constructiva o destructiva, será bien recibida y si alguien sabe hacer esto de una forma más segura ó fácil 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"


Website templates are pre-designed websites all you need to do is add your own personal content and you're ready to jump start your own website. Website templates by Vooweb

Antes de nada lo principal es la ORGANIZACIÓN. Es importante ver dónde vamos a poner a estos usuario en /home. Yo personalmente prefiero dividir los usuario "normales" osea, con su shell, a los que sólo tendrán acceso por FTP para actualizar su Web. Estos últimos los suelo poner en /home/web, de tal manera que los usuario visente y juan, quedarían así: /home/web/visente y /home/web/juan. También podéis usar unos UID dentro de unos rangos determinados pero como ya digo, es cuestión de ORGANIZACIÓN y un tema PERSONAL.

NOTA: Si a alguno le gusta más 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 ningún error, pero logicamente no es una manera "limpia" de hacerlo, sería como poner el HOME de un user dentro de otro.

Cread a los usuarios como hacéis normalmente pero en su shell ponéis /sbin/nologin de esta forma no podrá acceder nunca al shell ;-). Para evitar futuros mensajes de error de diversas aplicaciones con esto, añadir dicha shell fantasma en /etc/shells. Deberéis 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 sería necesario activarlas, para ello tenéis que realizar los siguientes pasos:

  • Añadir 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 usarán las quotas. Ejemplo:
      /dev/ad0s2a  /home/web   ufs   rw,userquota   1   1
     

Una vez hecho esto tendremos que reiniciar.

NOTA: También se pueden usar cuotas de grupo añadiendo groupquota en el fstab, si estás interesado deberías leerte el HANDBOOK

Ahora vamos a ponerle limitaciones de espacio a juan y a visente. Se puede poner también limitación de número 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 más o menos con estas líneas:

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 límites 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, quedaría 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: Sería aconsejable tener /home/web en una partición separada, o como mínimo, no tenerlo en / puesto que si el sistema usa algún fichero temporal del usuario en /tmp, éste formaría 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, añadiremos la siguiente linea en /usr/local/etc/proftpd.conf dentro de la sección "Global".

DefaultRoot                     ~  web

Con esto le indicamos al proftpd que los usuarios que estén en el grupo web, tendrán el directorio raíz en su home y no podrán subir de nivel ;-). Si no ponéis ningún grupo NADIE tendrá acceso por encima de su home.

Accediendo a las webs de los users

Si disponéis de IP fija, sería interesante que os diérais de alta en un redireccionador. De esta forma la gente no tendría 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, sólo tendréis que bajaros el fuente de un programa en C y compilarlo o a través de su web poniendo la IP directamente en un formulario.

Ahora, seguiremos con nuestro amigo Juan, queremos que se pueda acceder a su página 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 véis, no tiene que coincidir el nombre de usuario de vuestra máquina 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 comprobáis: http://loquesea.no-ip.org/lapeichdejuanker.

Creando un area web "privada"

Podéis crear un area privada para cada usuario, muy útil si nuestros "clientes" quieren dejar cosas personales para que sólo los que ellos quieran puedan acceder.

Primero es necesario activar esta particularidad en el Apache y reiniciarlo después. 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 más de un usuario, para ello ejecutamos el comando sin el parámetro "-c". Vamos a añadir a la novia de Juan que también 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 autentificación de grupos
AuthGroupFile   /dev/null
AuthName juan
AuthType Digest
<Limit GET POST>
#Aquí hay que poner los usuarios que hayamos añadido 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 instrucción en PHP del tipo echo `cat /etc/passwd` (con las comillas invertidas), tenía 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 instalación por defecto de PHP que realiza FreeBSD a mí me lo tenía activado. De esta forma no se ejecutará ningún 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 información sobre esto.

Sería interesante que algún "Scripter" se currara un script que hiciera todos estos pasos de manera automática. 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 ;-). También a Koji por su "pequeño" consejo sobre crear un grupo web.


eldemonio.org El site BSD en Castellano Articles catalogue

Website templates are pre-designed websites all you need to do is add your own personal content and you're ready to jump start your own website. Website templates by Vooweb

eldemonio.org v 4_2