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:
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:
-
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:
Accedemos con el usuario creado anteriormente «user_matematicas«:
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.