martes, 19 de octubre de 2010

Servidor FTP en Ubuntu: Servidor ProFTPD

1.- Instalación de ProFTPD en Ubuntu
Para realizar la instalación:
sudo apt-get install proftpd

Juan Nieto Actividad 9 Servidor Proftpd_htm_m5401bf8c 
Esto lanzará un asistente que únicamente preguntará si queremos ejecutar proftpd como un servicio independiente o desde inetd. Para que sea más eficiente es recomendable ejecutarlo de modo independiente. 

Tras esto instalará una serie de paquetes adicionales que permitirán conexiones con servicios SQL o LDAP por ejemplo.

Durante la instalación se crea el usuario “proftpd” perteneciente al grupo “nogroup

Para comprobar algún error en la configuración:
proftpd -td10
or you can run (less noise):
proftpd -td5


La página del proyecto es http://www.proftpd.org dónde se pueden encontrar además numerosos documentos y manuales. Juan Nieto González http://tecnoloxiaxa.blogspot.com

2.- Configuración de Proftpd

En primer lugar y para que proftpd arranque automáticamente con el servidor ejecutaremos:
sudo update-rc.d proftpd defaults

Tras realizar la instalación podremos conectarnos ya al servidor con alguna de las cuentas locales existentes en el mismo, pero podremos/deberemos realizar algunas modificaciones como pueden ser directorio de conexión al inicio, permitir la conexión de usuarios anónimos -por defecto no están permitidas-, uso de la autentificación LDAP,...

Las distintas opciones de configuración del servidor las encontraremos en los ficheros incluidos en el directorio /etc/proftpd/:
  • proftpd.conf: Fichero de configuración de las opciones del servidor FTP.
  • ldap.conf: fichero dónde configuraremos el acceso al servidor LDAP
  • sql.conf: en el caso de usar para la autenticación una base de datos SQL deberíamos configurarlo aquí.
  • tls.conf: para configurar conexiones ftps, en el caso de emplear conexiones encriptdas (TLS) basadas en certificados modificaremos en este fichero las opciones necesarias.

2.1- Configuración de las opciones del servidor: proftpd.conf

Para la configuración del servidor editaremos el fichero proftpd.conf. La estructura de las líneas del archivo es la siguiente:
directiva valor
donde directiva es el nombre de la propiedad que vamos a configurar y valor es el valor que se le asigna. Por ejemplo:
ServerName “FTP Servidor mczones”
especificar que los usuarios que se conecten verán el nombre del servidor como FTP Servidor mczones.

El fichero tiene distintas secciones dentro de las cuales podemos observar distintas directivas, algunas de las más interesantes -agrupadas por funcionalidad- son:
  • ServerType: podremos especificar el modo standalone -para que funcione de modo independiente- o inetd – dependiente de este demonio.
  • ServerName: nombre del servidor
  • DisplayLogin: podemos especificar el fichero con el mensaje de bienvenida que se mostrará a los usuarios al conectarse. Puede ser una ruta absoluta -el mismo para todos- o relativa -en este caso buscará el fichero en el directorio de inicio del usuario no dando ningún error en caso de no existir-.
  • DisplayChdir: nombre del fichero con mensaje que se mostrará cada vez que cambiemos de directorio.
  • DeferWelcome: si lo ponemos a “on”, no mostaremos el Servername hasta que el usuario se autentifique.
  • DefaultRoot: se emplea para asignar a los usuarios un directorio de conexión por defecto. Si además empleamos “~ “ bloqueamos a todos los usuarios al directorio home que les definamos.
  • Port: para especificar el puerto FTP, por defecto es el estándar 21
  • User y Group: especifican el nombre de usuario y grupo que ejecutará el servidor, por defecto son proftpd y nogroup respectivamente.
  • UseFtpUsers: si la ponemos a “on”, el sistema no permitirá el acceso a los usuarios listados en el fichero /etc/ftpusers.
  • Umask: por defecto 022: previene que los ficheros y directorios tengan permisos de ejecución.
  • AllowStoreRestart: si le ponemos el valo “on” permitirá reiniciar las descargas cuando, por ejemplo se caiga la conexión.
  • AllowOverwrite: si queremos permitir que sean reescritos los ficheros, por defecto on.
  • AuthOrder: en caso de querer emplear las librerías PAM y las cuentas locales para la autentificación podemos especificar el orden en el que las emplearemos
  • TransferLog /var/log/proftpd/xferlog: fichero de logs de transferencias
  • SystemLog /var/log/proftpd/proftpd.log: fichero de logs del sistema.
Como siempre tras modificar alguna opción debemos reiniciar el servicio, las opciones para iniciar, consultar estado, forzar inicio, parar, forzar parada, recargar valores, reinicicar, forzar reinicio o comprobar estado los valores serán start, status, force-start, stop, force-stop, reload, restart, force-reload, check-config respectivamente. Por ejemplo:
/etc/init.d/proftpd start

El resto de opciones de configuración del fichero las veremos en los siguientes apartados.

2.2- Permitir conexiones anónimas.

Por defecto cuando nos conectamos al servidor sólo permitirá conexiones a los usuarios que tengan una cuenta local en el servidor. Para permitir conexiones anónimas, debemos modificar el final del fichero proftpd.conf o, directamente, añadir las siguientes líneas, que harán que, por defecto, permitamos las conexiones anónimas al directorio /home/ftp de nuestro servidor:
<Anonymous ~ftp>
User ftp
Group nogroup
# # Queremos que los clientes se conecten tanto como "anonymous" como con "ftp"
UserAlias anonymous ftp
# # Todos los ficheros pertenecerán al usuario ftp
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
# # Limitamos el número máximo de conexiones anónimas a 10
MaxClients 10
# # Queremos que se muestre un mensaje de bienvenida 'welcome.msg' al conectarnos y
# # un mensaje '.message' en cada subdirectorio en el que entremos
DisplayLogin welcome.msg
DisplayFirstChdir .message
# # Quitamos los permisos de escritura al usuario anónimo, sólo podrá leer
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
# # Si quisiéramos dar permisos de escritura y lectura al usuario anónimo
# # descomentaríamos también las siguientes líneas “AllowAll”
# # <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>

Tras hacer los cambios deberíamos reiniciar el servidor: sudo /etc/init.d/proftpd restart

En la siguiente imagen podemos ver una conexión de un cliente anónimo al servidor (directorio /home/ftp por defecto) dónde existe un fichero listadoraiz.txt que podemos ver, pero nos muestra un mensaje de error en cuanto intentamos subir -escribir- un fichero a ese servidor (el fichero escritorio.txt).
Juan Nieto Actividad 9 Servidor Proftpd_htm_m1aba564c

2.3- Autentificación contra el directorio LDAP.

Suponiendo que tenemos un servidor LDAP instalado podremos hacer que los usuarios se autenfiquen contra el mismo. Para ello nos debemos asegurar de que en la instalación del paquete proftpd se han instalado los paquetes de los que depende (en la versión 1.3.1-12 que es la que he instalado lo hace por defecto): apt-get install proftpd-mod-ldap.
Editamos el fichero /etc/proftpd/ldap.conf y tras modificar el dominio (mczones.es) y la unidad organizativa dónde tenemos nuestros usuarios, lo dejamos del siguiente modo:
<IfModule mod_ldap.c>
LDAPServer “localhost”
#nombre del administrador y contraseña del servidor LDAP
LDAPDNInfo "cn=admin,dc=mczones,dc=es" "ldapadmin"
#Unidad organizativa dónde están los usuarios del directorio.
LDAPDoAuth on "ou=usuarios,dc=mczones,dc=es"
</IfModule>
Editamos el fichero /etc/profptd/modules.conf y descomentamos las siguientes líneas
LoadModule mod_ldap.c
LoadModule mod_quotatab_ldap.c
Editamos el fichero /etc/proftpd/proftpd.conf y nos aseguramos de que las siguientes directivas tengan el valor adecuado:
#permitimos las conexiones de usuarios ldap y locales
AuthOrder mod_ldap.c mod_auth_pam.c mod_auth_unix.c
Include /etc/proftpd/ldap.conf
PersistentPasswd off
#si queremos permitir la conexión de usuarios anónimos debemos poner la siguiente #directiva a “off” o bien añadir al fichero /etc/shells la linea /bin/false
RequireValidShell off
En algunos sistemas debemos modificar también el fichero /etc/nsswitch.conf para que permitamos la autentificación mediante ldap:
passwd: compat ldap
group: compat ldap
shadow: compat ldap
Tras hacer los cambios deberíamos reiniciar el servidor:
/etc/init.d/proftpd restart
Para comprobar que funciona habilitamos los logs de conexión en el servidor ldap, para ello editamos el archivo es /etc/ldap/slapd.d/cn\=config.ldif y cambiamos el valor de la directiva olcLogLevel a 256, el cambio sería: olcLogLevel: 256 .
Tras esto nos conectamos desde el cliente -en mi caso realizo una conexión desde la consola y otra desde el programa Filezilla- y consultamos el fichero de logs del sistema /var/log/syslog:
Juan Nieto Actividad 9 Servidor Proftpd_htm_53f27f2fJuan Nieto Actividad 9 Servidor Proftpd_htm_m4be0fea3

2.4 Permisos en Directorios

Juan Nieto Actividad 9 Servidor Proftpd_htm_59686476 Al final del fichero podemos especificar los permisos de los usuarios sobre los distintos directorios que hayamos dado de alta, por ejemplo, suponiendo que hemos establecido el directorio /home/ftp como directorio de inicio, podríamos añadir las siguientes líneas al fichero /etc/proftpd/proftpd.conf:
DefaultRoot /home/ftp #direcotorio base
DefaultRoot ~ #limitamos al directorio base
#Las siguientes líneas las añadimos al final del fichero para los permisos, el #directorio base será ftp dónde habrá dos subdirectorios download que sólo permitirá #leer y upload que permite crear directorios y escritura
<Directory /home/ftp>
Umask 022 022
AllowOverwrite off
<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>
DenyAll
</Limit>
</Directory>


<Directory /home/ftp/download/*>
Umask 022 022
AllowOverwrite off
<Limit MKD STOR DELE XMKD RNEF RNTO RMD XRMD>
DenyAll
</Limit>
</Directory>


<Directory /home/ftp/upload/>
Umask 022 022
AllowOverwrite on
<Limit READ RMD DELE>
DenyAll
</Limit>
<Limit STOR CWD MKD>
AllowAll
</Limit>
</Directory>


2.5 Hosts Virtuales



Juan Nieto Actividad 9 Servidor Proftpd_htm_m5b9f9c53 

Un servidor puede albergar más de un servidor FTP, para ello se emplean los hosts virtuales que basándose en la información de la ip y puerto dirigirá las peticiones hacia uno u otro servidor o “Virtual Host”.

En el ejemplo creo dos hosts virtuales básicos que permitirán la conexión a uno u otro servidor en función del puerto. El uso de directorios y su configuración es compatible con el de los hosts virtuales como se puede ver.

Para ello lo único que hay que hacer es editar el fichero /etc/proftpd/proftpd.conf y añadir las líneas de la imagen.


3. Configuración gráfica con Webmin

Además de realizar la configuración mediante la edición de ficheros podremos realizarla en un entorno gráfico web usando webmin, tal y cómo se puede apreciar en la siguiente imagen.

Juan Nieto Actividad 9 Servidor Proftpd_htm_m21bca09e

para continuar viendo el resto de manuales Linux siga el enlace:administración de servidores con Linux

4.- Bibliografía

Proftpd: Http://www.proftpd.org
Certificados con proftpd :http://www.howtoforge.com/setting-up-proftpd-tls-on-ubuntu-8.10
Solución errores: http://unix.stackexchange.com/questions/207471/unable-to-start-proftpd-server-debian-8

2 comentarios:

Adrian dijo...

Muy buen aporte

Anónimo dijo...

Muchas gracias, buen trabajo y de mucha ayuda