Instalación de Servidor FTP PureFTPd en Debian
Ventajas del servidor PureFTPd
Algunas de sus características más notables son:
- Usuarios virtuales
- Gestión del ancho de banda y de espacio en disco por usuario
- Directorios personales Chroot()
- Estadísticas en tiempo real en Texto, HTML ó XML
- Autentificación de usuarios con MySQL, PostgreSQL, LDAP, ...
- Opciones avanzadas de seguridad
Podríamos citar que se utiliza mucho, por ejemplo en el FTP público de RedIris (ftp://ftp.rediris.es).
Instalación del servidor FTP PureFTPd
Descarga e instalación de la aplicación
# Instalación de la aplicación
apt-get install pure-ftpd
Rutas y ficheros de configuración
# Directorio de configuraciones del servidor
/etc/pure-ftpd/conf
# Fichero de contraseñas de usuarios virtuales.
/etc/pure-ftpd/pureftpd.pdb
# Fichero de configuración de funcionamiento del PureFTPd
/etc/default/pure-ftpd-common
Acceso Anónimo
Para dar acceso anónimo al FTP deberemos tener una cuenta del sistema llamada 'ftp'. No le daremos ningún shell válido, simplemente un directorio home. Ese directorio será el que se usará como directorio anónimo. Véanse también las directivas NoAnonymous y AnonymousOnly en el directorio /etc/pure-ftpd/conf.
# Creamos un usuario llamado ftp sin shell y con directorio /var/ftp.
# El directorio home de este usuario, será el directorio de los anónimos.
adduser ftp --shell /sbin/nologin --home /var/ftp
# Revisaremos las directivas:
/etc/pure-ftpd/conf/AnonymousOnly
# Si está a yes sólo permite accesos anónimos.
/etc/pure-ftpd/conf/NoAnonymous
# Si está a yes sólo permite acceso a usuarios autenticado.
# Si está a no permitirá el acceso a usuario anónimos también.
# Para acelerar la conexión al servidor FTP, podemos desactivar la resolución inversa
# Para ello creamos una directiva DontResolve
echo "yes" >/etc/pure-ftpd/conf/DontResolve
Directivas de configuración
- Para introducir las directivas de configuración se pueden crear una a una en la carpeta /etc/pure-ftpd/conf creando un fichero con el nombre de la directiva (comienzo de cada palabra en mayúsculas) y el contenido correspondiente.
- Otra opción es meter la directiva dentro del fichero /etc/default/pure-ftpd-common. La directiva tendrá que ir en mayúsculas y con el valor correpondiente. Por ejemplo: DONTRESOLVE=true
Autenticación
En el servidor pureftpd podremos configurar los modos de autenticación disponibles para acceder al mismo. Algo que tenemos que hacer es configurar si queremos usar los usuarios virtuales, y para ello tenemos que indicarle que utilice en autenticación el fichero de base de datos que contiene esos usuarios.
# Atención: esta configuración la haremos cuando vayamos a trabajar con usuarios virtuales.
# Si no hemos creado usuarios virtuales la base de datos no existirá y dará error al arrancar pureftpd.
# Accedemos al directorio de autenticación:
cd /etc/pure-ftpd/auth
# Creamos un enlace simbólico a la información de dónde se encuentra la DB.
# Al indicar 50... estamos indicando la prioridad en la autenticación.
ln -s ../conf/PureDB 50pure
Otras directivas
Directivas de configuración más importantes que vamos a utilizar.
Las directivas de configuración, son ficheros que se encuentran en el directorio:
/etc/pure-ftpd/conf
Si alguna de las directivas mencionadas a continuación no existe tendremos que crear un fichero con el nombre de esa directiva y almacenar dentro de él, los parámetros correspondiente a esa directiva.
Una de las características que queremos, es que los usuarios no puedan salir de su directorio home:
ChrootEveryone yes
# Si esta directiva no está creada la crearemos con:
nano /etc/pure-ftpd/conf/ChrootEveryone
# Y como contenido del fichero escribiremos:
yes
# O tambiém podemos hacer lo mismo con las instrucción:
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
Otra de las características que debe poseer el servidor ftp es que disponga de una zona de descarga pública (usuarios anonymous). Para ello debemos aceptar conexiones anónimas, con lo que deberá existir la siguiente línea: NoAnonymous no
echo "no" > /etc/pure-ftpd/conf/NoAnonymous
Si deseamos que sólo permita el acceso a usuarios anónimos tendremos que poner también la directiva:
echo "yes" > /etc/pure-ftpd/conf/AnonymousOnly
Si queremos tener usuarios virtuales (serán usuarios registrados, pero que no tienen cuenta de shell en el sistema), debemos asegurarnos que la línea a continuación existe y no está comentada.
Esta línea indica la localización del fichero de usuarios PureDB:
more /etc/pure-ftpd/conf/PureDB
#Mostrará la ruta de la base de datos de usuarios virtuales:
/etc/pure-ftpd/pureftpd.pdb
Para evitar que algún usuario por descuido (o maliciosamente) nos pueda llenar el servidor de ficheros, activaremos unos límites máximos:
Por ejemplo podríamos poner una Quota límite de 400 ficheros y 50 MB:
echo "400 50" > /etc/pure-ftpd/conf/Quota
Si queremos que automáticamente se creen los directorios home de los usuarios, la primera vez que se loguean lo haremos con:
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir
Para poner máscaras por defecto se utiliza la directiva Umask. En esta directiva se indica mediante dos números separados por un espacio los permisos para ficheros y para directorios.
Para calcularlos se resta a 777-umask=permisos finales
Por ejemplo:
# 220 -> umask para ficheros
# 444 -> umask para directorios
echo "220 444" > /etc/pure-ftpd/conf/Umask
# Nos da por defecto:
Ficheros: -r-xr-xrwx
Directorios: d-wx-wx-wx
Más Directivas de configuración
Se muestran aquí dos enlaces a páginas con información de directivas de configuración para Pure-FTPd:
Usuarios
Los usuarios virtuales es un simple mecanismo que nos permitirá almacenar una lista de usuarios, sus contraseñas, nombres, uid, directorios, etc. Es como el fichero /etc/passwd de Linux, pero en este caso, es solamente para el uso del servicio FTP.
Ésto quiere decir que fácilmente podemos crear cuentas de FTP, sin mezclarlas con los usuarios del sistema.
Adicionalmente, los usuarios virtuales pueden disponer de cuotas individuales, ratios, ancho de banda, etc. Las cuentas del sistema no permiten hacer ésto.
Creación de usuarios virtuales
Cuando creamos un usuario virtual tendremos que asociarle un uid: identificador de usuario en el sistema, y para ello lo mejor es crear una cuenta de usuario que sea compartida por todos los usuarios virtuales. Una buena práctica para hacer ésto, antes de crear usuarios virtuales, es crear un usuario del sistema, como por ejemplo ftpuser que no tenga acceso al mismo:
Para crear esa cuenta lo haremos de la siguiente forma:
# Primero creamos un grupo ftpgroup para los usuarios FTP:
groupadd ftpgroup
# A continuación creamos la cuenta ftpuser:
useradd -g ftpgroup -d /dev/null -s /bin/nologin ftpuser
A partir de ahora cuando añadimos usuarios al pure-ftpd, le podremos indicar que el usuario del sistema asociado es ftpuser, y decirle que haga la carpeta personal de ese usuario dentro de /home/ftpusuarios/.
Deberemos crear la carpeta /home/ftpusuarios/ previamente. Las carpetas de cada usuario individual se crearán automáticamente si tenemos la directiva CreateHomedir a yes.
# Creamos la carpeta para los usuarios virtuales:
mkdir /home/ftpusuarios
# Le ponemos como usuario y propietario ftpuser.ftpgroup:
chown ftpuser.ftpgroup /home/ftpusuarios
# Damos permisos para que pure-ftpd pueda escribir en ese directorio y crear los home:
chmod 777 /home/ftpusuarios
La gestión de los usuarios se realiza con el comando pure-pw. Éste nos permite crear, modificar, borrar y mostrar los usuarios virtuales. También se puede hacer lo mismo editando directamente el fichero /etc/pure-ftpd/pureftpd.passwd, pero se recomienda el uso del comando por su mayor sencillez.
Para ver todos los parámetros disponibles, ejecutaremos:
pure-pw --help
Por ejemplo podríamos crear un usuario "adolfo" cuyo directorio fuese /home/adolfo:
# -u: para indicar el uid de ese usuario
# -d: indica la carpeta home de ese usuario
pure-pw useradd adolfo -u ftpuser -d /home/ftpusuarios/adolfo
# Tendremos que escribir la password para ese usuario adolfo 2 veces.
# Con el parámetro -d el usuario adolfo estará chrooted.
# Si queremos que tenga acceso a todo el sistema escribiremos -D en lugar de -d.
Recordaros que no es necesario crear el directorio de ese usuario si tenemos la directiva CreateHomeDir a yes en la configuración de pure-ftpd .
Hay que recordar que después de haber realizado cualquier cambio relativo a los usuarios, deberemos aplicar los cambios en la base de datos. Para ello ejecutaremos:
pure-pw mkdb
Modificación de usuarios virtuales
Una vez que tenemos los usuarios virtuales creados, podremos editar su información. Por ejemplo modificarles su ancho de banda, cambiar quota, su ratio, nombre completo, etc.
El comando pure-pw usermod funciona como pure-pw useradd, excepto que modifica la información existente de una cuenta en lugar de crear otra nueva.Por ejemplo, queremos añadirle a adolfo una quota. Adolfo va a tener limitado a 30 ficheros y 10 Megabytes de capacidad.
# -n: número máximo de ficheros
# -N: espacio máximo en MBytes
pure-pw usermod adolfo -n 30 -N 10
Reseteado de atributos
To disable file quotas, use pure-pw usermod <user> -n ''
To disable size quotas, use pure-pw usermod <user> -N ''
To disable ratios, use pure-pw usermod <user> -q '' -Q ''
To disable download bandwidth throttling, use pure-pw usermod <user> -t ''
To disable upload bandwidth throttling, use pure-pw usermod <user> -T ''
To disable IP filtering, use pure-pw usermod <user> <-i,-I,-r or -R> ''
To disable time restrictions, use pure-pw usermod <user> -z ''
To disable the number of concurrent sessions, use pure-pw usermod <user> -y''
Borrado de usuarios virtuales
Para borrar un usuario tendremos que ejecutar:
pure-pw userdel <login> [-f <passwd file>] [-m]# Si queremos borrar adolfo:
pure-pw userdel adolfo
# Atención: su directorio personal no se borrará.
# Tendremos que borrarlo a mano:
rm -rf /home/ftpusuarios/adolfo
Modificación de contraseñas
Para modificar la contraseña de un usuario:
pure-pw passwd <login> [-f <passwd file>] [-m]
# Por ejemplo para adolfo:
pure-pw passwd adolfo
# Recordar que para aplicar cambios haremos:
pure-pw mkdb
Consulta de información de usuario
Para consultar la información de un usuario lo haremos con:
pure-pw show login
# Por ejemplo para adolfo:
pure-pw show adolfo
Más parámetros sobre la gestión de usuarios
Se recomienda consultar la ayuda en la linea de comandos con:
man pure-pw
Gestión del servicio
Para reiniciar el servicio pure-ftpd:
service pure-ftpd restart
Para ver la lista de usuarios que están conectados al FTP:
pure-ftpwho