Gestionar un hosting por ftp

Introducción

Tenemos que desarrollar la página del instituto www.iesgn.org, y queremos que sea gestionada por medio de un servidor ftp. Tendremos las siguientes funcionalidades:

Procedimiento

1. Queremos ofrecer una colección de documentos, y lo vamos a hacer mediante http y ftp anónimo, de esta forma se accederá al mismo directorio si accedo a las siguientes URL:

  • http://www.iesgn.org/documentos

  • ftp://ftp.iesgn.org

Para empezar instalamos apache2 para montar el servidor web:

root@servicios-ftp:/home/debian# apt-get install apache2

Procedemos a deshabilitar el sitio por defecto y a crear un nuevo sitio llamado «iesgn»

root@servicios-ftp:/home/debian# cd /etc/apache2/sites-available/
root@servicios-ftp:/etc/apache2/sites-available# a2dissite default
Site default disabled.
To activate the new configuration, you need to run:
  service apache2 reload
root@servicios-ftp:/etc/apache2/sites-available# cp default iesgn

Modificamos el fichero de configuración del sitio creado y lo dejamos así:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName  www.iesgn.org
        Alias /documentos /var/www/documentos
        <Directory /var/www/documentos>
                Options Indexes SymLinksIfOwnerMatch
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Creamos el directorio especificado en el fichero de configuración y creamos algún archivo

root@servicios-ftp:/etc/apache2/sites-available# mkdir /var/www/documentos
root@servicios-ftp:/etc/apache2/sites-available# touch /var/www/documentos/fichero.tx


Activamos el sitio creado y reiniciamos el servidor apache:

root@servicios-ftp:/etc/apache2/sites-available# a2ensite iesgn
root@servicios-ftp:/etc/apache2/sites-available# service apache2 restart

Accedemos desde un cliente para comprobar que el sitio está correctamente creado:

Selección_013

Instalamos «proftpd» para configurar ftp:

root@servicios-ftp:/etc/apache2/# aptitude install proftpd-basic proftpd-doc

Ahora modificamos el fichero de configuración de proftpd para ofrecer el directorio creado anteriormente, debemos descomentar las lineas de anonymous e indicar la ruta del directorio:

root@servicios-ftp:~# nano /etc/proftpd/proftpd.conf

<Anonymous /var/www/documentos>
 User                         ftp
 Group                                nogroup
 # We want clients to be able to login with "anonymous" as well as "ftp"
 UserAlias                    anonymous ftp
 # Cosmetic changes, all files belongs to ftp user
 DirFakeUser  on ftp
 DirFakeGroup on ftp

RequireValidShell            off

# Limit the maximum number of anonymous logins
 MaxClients                   10

# We want 'welcome.msg' displayed at login, and '.message' displayed
 # in each newly chdired directory.
 DisplayLogin                 welcome.msg
 DisplayChdir         .message

# Limit WRITE everywhere in the anonymous chroot
 <Directory *>
 <Limit WRITE>
 DenyAll
 </Limit>
 </Directory>

# Uncomment this if you're brave.
 # <Directory incoming>
 #   # Umask 022 is a good standard umask to prevent new files and dirs
 #   # (second parm) from being group and world writable.
 #   Umask                            022  022
 #            <Limit READ WRITE>
 #            DenyAll
 #            </Limit>
 #            <Limit STOR>
 #            AllowAll
 #            </Limit>
 # </Directory>
</Anonymous>

También desactivamos la opción IPv6:

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
 UseIPv6                         off

Reiniciamos el servicio y vemos como nos lanza los siguientes warnings y errores:

root@servicios-ftp:~# service proftpd restart
 [ ok ] Stopping ftp server: proftpd.
 [....] Starting ftp server: proftpdservicios-ftp proftpd[3634]: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled
 servicios-ftp proftpd[3634]: warning: unable to determine IP address of 'servicios-ftp'
 servicios-ftp proftpd[3634]: error: no valid servers configured
 servicios-ftp proftpd[3634]: Fatal: error processing configuration file '/etc/proftpd/proftpd.conf'
 failed!

Para solucionar esto definimos el nombre de la máquina y su ip en el fichero «/etc/hosts«.

10.0.0.50       servicios-ftp

Volvemos a reiniciar el servicio y comprobamos que arranca correctamente.

root@servicios-ftp:~# service proftpd restart
 [ ok ] Stopping ftp server: proftpd.
 [....] Starting ftp server: proftpdservicios-ftp proftpd[3751]: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled
 . ok

Para comprobar que está bien configurado accedemos por ftp desde un cliente:

root@servicios-cliente:/home/debian# ftp ftp.iesgn.org
 Connected to ftp.iesgn.org.
 220 ProFTPD 1.3.4a Server (Debian) [10.0.0.50]
 Name (ftp.iesgn.org:debian): anonymous
 331 Anonymous login ok, send your complete email address as your password
 Password:
 230 Anonymous access granted, restrictions apply
 Remote system type is UNIX.
 Using binary mode to transfer files.
 ftp> ls
 200 PORT command successful
 150 Opening ASCII mode data connection for file list
 -rw-r--r--   1 ftp      ftp             0 Jun 11 11:14 fichero.txt
 226 Transfer complete
 ftp>

 

2. Cada departamento tendrá su página web en la URL www.iesgn.org/nombredeldepartamento, veamos un ejemplo:

  • El departamento de matemáticas tendrá su página en www.iesgn.org/matematicas

Modificamos el fichero de configuración del sitio «iesgn» y añadimos un virtual host para el departamento de matematicas.

        Alias /matematicas /var/www/matematicas
        <Directory /var/www/matematicas>
                Options Indexes SymLinksIfOwnerMatch
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

Creamos el directorio especificado en el fichero de configuración y le ponemos una página principal.

root@servicios-ftp:/etc/apache2/sites-available# mkdir /var/www/matematicas
root@servicios-ftp:/etc/apache2/sites-available# cp /var/www/index.html /var/www/matematicas/
root@servicios-ftp:/etc/apache2/sites-available# nano /var/www/matematicas/index.html

Accedemos desde el cliente al sitio creado:

Selección_014

  • Se creará un usuario user_matematicas, que tendrá una contraseña, para que accediendo a ftp.iesgn.org, pueda gestionar los ficheros de su página web.

Creamos un nuevo usuario «user_matematicas«:

root@servicios-ftp:/etc/apache2/sites-available# adduser user_matematicas
Adding user `user_matematicas' ...
Adding new group `user_matematicas' (1001) ...
Adding new user `user_matematicas' (1001) with group `user_matematicas' ...
Creating home directory `/home/user_matematicas' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for user_matematicas
Enter the new value, or press ENTER for the default
 Full Name []: Usuario Matematicas
 Room Number []: 
 Work Phone []: 
 Home Phone []: 
 Other []: 
Is the information correct? [Y/n] Y

Dentro del directorio del sitio creamos directorios y ficheros prueba y cambiamos el propietario del directorio a «user_matematicas«:

root@servicios-ftp:/var/www/matematicas# mkdir Examenes
root@servicios-ftp:/var/www/matematicas# touch Examenes/tema1.txt
root@servicios-ftp:/var/www/matematicas# touch Notas
root@servicios-ftp:/var/www/matematicas# chown -R user_matematicas:user_matematicas ../matematicas/*

Modificamos el fichero de configuración de «proftpf» y añadimos el DefaultRoot del usuario «user_matematicas«:

root@servicios-ftp:~# nano /etc/proftpd/proftpd.conf
DefaultRoot /var/www/matematicas user_matematicas

Reiniciamos el servicio proftpf y apache2 y comprobamos el funcionamiento.

root@servicios-cliente:/home/debian# ftp ftp.iesgn.org
Connected to ftp.iesgn.org.
220 ProFTPD 1.3.4a Server (Debian) [10.0.0.50]
Name (ftp.iesgn.org:debian): user_matematicas
331 Password required for user_matematicas
Password:
230 User user_matematicas logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x 2 user_matematicas user_matematicas 4096 Jun 12 17:19 Examenes
-rw-r--r-- 1 user_matematicas user_matematicas 88 Jun 12 17:15 index.html
-rw-r--r-- 1 user_matematicas user_matematicas 0 Jun 12 17:19 Notas
226 Transfer complete

3. Instala la aplicación web net2ftp en el servidor por si tenemos problemas de acceso por el puerto 20/21.

Instalamos «php5« y descargamos «net2ftp» desde su web por wget y lo descomprimimos:

root@servicios-ftp:~# aptitude install php5
root@servicios-ftp:/var/www# wget http://www.net2ftp.com/download/net2ftp_v1.0.zip
--2015-06-12 19:32:22-- http://www.net2ftp.com/download/net2ftp_v1.0.zip
Resolving www.net2ftp.com (www.net2ftp.com)... 78.47.143.141
Connecting to www.net2ftp.com (www.net2ftp.com)|78.47.143.141|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4460502 (4.3M) [application/zip]
Saving to: `net2ftp_v1.0.zip'

100%[====================================================>] 4,460,502 3.25M/s in 1.3s

2015-06-12 19:32:24 (3.25 MB/s) - `net2ftp_v1.0.zip' saved [4460502/4460502]

root@servicios-ftp:/var/www# unzip net2ftp_v1.0.zip

Creamos un directorio llamado «webftp» e introducimos dentro de él el directorio de net2ftp, también cambiaremos el propietario:

root@servicios-ftp:~# mkdir /var/www/webftp
root@servicios-ftp:/var/www# mv net2ftp_v1.0 webftp/
root@servicios-ftp:/var/www# chown -R www-data:www-data webftp/*

Cambiamos los permisos a 777 del directorio «temp» dentro de «/var/www/webftp/net2ftp_v1.0/files_to_upload« para que se puedan subir ficheros.

root@servicios-ftp:/var/www/webftp/net2ftp_v1.0/files_to_upload# chmod 777 temp/

Ahora volvemos a la configuración del sitio «iesgn» y añadimos la configuración del nuevo directorio «webftp«:

root@servicios-ftp:~# nano /etc/apache2/sites-available/iesgn
Alias /webftp /var/www/webftp/net2ftp_v1.0/files_to_upload
<Directory /var/www/webftp/net2ftp_v1.0/files_to_upload>
        Options Indexes SymLinksIfOwnerMatch
        AllowOverride None
        Order allow,deny
        allow from all
</Directory>

Reiniciamos el servicio apache2 y accedemos al sitio para comprobar su correcto funcionamiento:

Selección_015Accedemos con el usuario creado anteriormente «user_matematicas«:

Selección_016

4. El uso de usuarios reales del sistema para el acceso FTP puede tener varias desventajas (gestión, seguridad,…). Modifica la configuración del sistema para que se usen usuarios virtuales para el acceso por FTP, cuya información este guardad en una tabla mysql o en un directorio ldap.

Instalamos un directorio ldap en nuestro servidor y lo poblamos mediante un fichero ldif con el siguiente contenido:

dn: ou=People,dc=iesgn,dc=org
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=iesgn,dc=org
ou: Group
objectClass: top
objectClass: organizationalUnit

dn: cn=asir,ou=Group,dc=iesgn,dc=org
objectClass: posixGroup
objectClass: top
cn: asir
gidNumber: 2000

dn: uid=manuel.luna,ou=People,dc=iesgn,dc=org
uid: manuel.luna
cn: Uusuario de prueba
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {MD5}+AMtXK494g/OyIfzleyaag==
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/manuel.luna
gecos: Usuario de prueba
host: *

Una vez creado el fichero ldif, lo añadimos:

debian@servicios-ftp:~$ ldapadd -x -D "cn=admin,dc=iesgn,dc=org" -W -f base.ldif
Enter LDAP Password: 
adding new entry "ou=People,dc=iesgn,dc=org"
adding new entry "ou=Group,dc=iesgn,dc=org"
adding new entry "cn=asir,ou=Group,dc=iesgn,dc=org"
adding new entry "uid=manuel.luna,ou=People,dc=iesgn,dc=org"

Instalamos el módulo de proftpd para poder utilizar ldap:

root@servicios-ftp:~# aptitude install proftpd-mod-ldap

Ahora modificamos el fichero de configuración de los módulos de proftpd y descomentamos la siguiente linea:

root@servicios-ftp:~# nano /etc/proftpd/modules.conf
LoadModule mod_ldap.c

También tendremos que descomentar las siguientes lineas en el fichero de configuración «/etc/proftpd/proftpd.conf«

Include /etc/proftpd/ldap.conf
RequireValidShell off

Ahora tendremos que modificar el fichero de configuración del módulo de ldap y especificar nuestro servidor ldap, así como la contraseña del administrador:

root@servicios-ftp:/home/debian# nano /etc/proftpd/ldap.conf

<IfModule mod_ldap.c>
#
# This is used for ordinary LDAP connections, with or without TLS
#
LDAPServer ldap://10.0.0.50/??sub
LDAPBindDN "cn=admin,dc=iesgn,dc=org" "root"
LDAPUsers "ou=People,dc=iesgn,dc=org" (uid=%u)

#
# To be set on only for LDAP/TLS on ordinary port, for LDAP+SSL see below
#LDAPUseTLS on
#

#
# This is used for encrypted LDAPS connections
#
#LDAPServer ldaps://ldap.example.com
#LDAPBindDN "cn=admin,dc=iesgn,dc=org" "admin_password"
#LDAPUsers dc=users,dc=iesgn,dc=org (uid=%u) (uidNumber=%u)
#
</IfModule>

Modificamos el fichero «/etc/nsswitch.conf«  para especificar que el sistema busque usuarios en el directorio ldap en caso de no encontrarlos en el sistema:

passwd: compat ldap
group: compat ldap
shadow: compat ldap

Creamos el directorio del usuario de prueba creado en ldap:

root@servicios-ftp:/home/debian# mkdir /home/manuel.luna
root@servicios-ftp:/home/debian# cp /etc/skel/.* /home/manuel.luna/
root@servicios-ftp:/home/debian# chown -R 2000:2000 /home/manuel.luna
root@servicios-ftp:/home/manuel.luna# touch prueba.txt

Comprobamos el acceso desde el cliente usando el usuario creado en ldap:

root@servicios-cliente:~# ftp ftp.iesgn.org
Connected to ftp.iesgn.org.
220 ProFTPD 1.3.4a Server (Debian) [10.0.0.50]
Name (ftp.iesgn.org:debian): manuel.luna
331 Password required for manuel.luna
Password:
230 User manuel.luna logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/manuel.luna" is the current directory
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 root root 0 Jun 12 20:06 prueba.txt
226 Transfer complete
ftp>

Como vemos, todo funciona correctamente.

 

Deja un comentario