educación, informática y demás

Servidor FTP en GNU/Linux – vsftpd

Configuraciones

Para más información sobre parámetros de configuración de vsfpd podemos consultar la página de manual de vsftpd.conf o visitar el sitio web de vsftpd. Podemos acceder directamente a la documentación en formato HTML.

Permitir conexiones de usuarios anónimos

Para permitir que usuarios anónimos se conecten a nuestro servidor utilizamos la opción de configuración anonymous_enable, estableciendo el valor yes.

Ya que estamos en modo gráfico, vamos a utilizar gedit como editor de ficheros de texto.

Podemos utilizar la herramienta de búsqueda si queremos encontrar algún parámetro de configuración que no veamos a simple vista.

Una vez encontrado el parámetro lo configuramos como queramos, en este caso con el valor YES, guardamos los cambios y para que el servidor los tenga en cuenta debemos reiniciarlo.


También podríamos tratar de usar la opción reload del servicio vsfptd, sin embargo esta opción puede dar algún problema. La ventaja que tiene es que el servicio no se cierra.

Para comprobar que el ftp funciona podemos ejecutar la acción status en el script de control.

Además, lo ideal es que nos conectemos a nuestro servidor FTP para comprobar que realmente está funcionando. Para ello, podemos utilizar el navegador web (firefox) o el navegador de ficheros (nautilus) utilizando la URL adecuada:

  • ftp://localhost

Mensaje de bienvenida

# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.

En este parámetro se puede personalizar el mensaje de bienvenida que envía el servidor FTP a los clientes FTP que se conectan.

Utilizar usuarios locales

# Uncomment this to allow local users to log in.
local_enable=YES

Permite conectarse al servidor FTP a los usuarios que tengamos en el sistema. Estos usuarios tendrán, salvo que se configure de otra forma, como directorio de trabajo su propio directorio de trabajo o inicio.

El comentario nos indica que si quitamos el comentario se permitirá acceso a los usuarios locales a través del FTP. Por tanto, la opción por defecto para este parámetro es NO.

Hay que tener cuidado, puesto que los usuarios podrán moverse por los directorios del sistema de ficheros siempre que tengan permiso para ello. Estos permisos están definidos en el sistema de ficheros del sistema.

Permitir subida de ficheros

# Uncomment this to enable any form of FTP write command.
write_enable=YES

Permite que los usuarios del servidor FTP puedan escribir a través del servidor FTP, es decir, que se puedan subir ficheros al servidor FTP.

Este parámetro debe estar habilitado para que se pueda realizar cualquier tipo de operación de escritura en el FTP. Si no está habilitado, no se podrá realizar ninguna operación de escritura – subida de ficheros, creación de directorios, etc. – en el servidor.

Máscara para usuarios locales

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022

Establece la máscara para usuarios locales a través del acceso de ftp. La máscara por defecto en los sistemas Unix-Like suele ser 022. Por defecto, el servidor FTP vsftpd utiliza como umask 077, es decir cuando se cree un directorio los permisos que se aplicarán serán 700 (drwx——) lo cuál no es lo más indicado para compartir ficheros en el servidor FTP.

El valor asignado a umask es utilizado como una máscara para determinar el modo o permisos que se proporcionarán a los ficheros recien creados en el sistema. Realmente se utilizará la siguiente operación para obtener los modos: mode & ~umask = permisos.

Al utilizar 022, si se le aplica una operación NOT se obtiene 755, si se realiza una operación AND binaria con estos valores siempre se obtendrá en el primer dígito el modo especificado inicialmente, y en los dos segundos siempre se obtendrá un 0 en la posición central. Con esto se consigue asegurar que ni el grupo ni el resto de usuarios puedan escribir en el fichero creado.

Por ejemplo, si el modo al crear el fichero en el sistema es 766 y la umask del servidor ftp es 022 se obtendría el siguiente modo:

766 & ~022 = 766 & 755 = 744 = rwxr–r–

Permitir operaciones a usuarios anonimos

# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES

Permite que el usuario anónimo pueda subir ficheros al servidor, siempre y cuando esté habilitada la opción general de permitir subir ficheros (write_enable).

# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES

Permite al usuario anónimo crear directorios.

Hay que usar estas opciones de configuración con prudencia, puesto que los usuarios anónimos, cualquier usuario, podría crear y borrar datos – ficheros y directorios – a través del FTP, por supuesto siempre y cuando tengan permiso para hacerlo en el sistema de ficheros subyacente (permisos aplicados en el directorio raíz público y sus subdirectorios).

Permitir escrituras en la jaula de los usuarios

Hay que añadir un parámetro que permita estas operaciones: allow_writeable_chroot=YES.

Este parámetro no está en el fichero de configuración, así que debemos escribirlo.

Propietario de las subidas anónimas

# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever

Permite configurar al servidor FTP para que los ficheros subidos utilizando el usuario anónimo se les establezca como usuario propietario el propietario que se defina en chown_username. Por supuesto, ese usuario debe existir en el sistema.

Esto se puede hacer para proporcionar un propietario concreto a los ficheros que se suban a través del FTP de forma anónima diferente al establecido por defecto.

Restringir los usuarios locales a sus directorios

# You may restrict local users to their home directories. See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
#chroot_local_user=YES

Permite restringir a los usuarios locales a su directorio local, de esta forma no podrán acceder al directorio padre de su directorio de trabajo. Sin embargo, esta opción puede conllevar ciertos riesgos que se expresan en las “preguntas más frecuentes”.

Por defecto este parámetro está desactivado de forma que los usuarios locales que inician sesión a través de FTP (con nombre de usuario y contraseña) podrán moverse por el sistema de ficheros como si estuvieran navegando efectivamente por él utilizando el navegador de sistema de ficheros.

Es decir, al entrar en el servidor FTP se encontrará en su directorio personal (/home/usuario) y podrán cambiar de directorio a cualquier otro directorio del sistema de ficheros, siempre que tengan permiso para hacerlo, exactamente igual que si estuvieran trabajando con el sistema en local.

Sin embargo, puede que no interese que un usuario que accede a su directorio personal de forma remota pueda moverse y acceder libremente por el sistema de ficheros del servidor. Precisamente por este motivo se puede activar este parámetro de configuración.

Cuando está activo, lo que sucede es que el usuario al conectarse al servidor FTP se encontrará en su directorio personal, pero como si éste (/home/usuario), fuera el directorio ráiz del sistema de ficheros. De esta forma, no podrá salirse de su directorio personal.

Esto también tiene sus contrapartidas, puesto que un usuario “enjaulado” en su directorio personal no podrá, por ejemplo, acceder al directorio público o compartido para anónimos utilizando la sesión con su cuenta de usuario.

Lista de usuarios locales en su directorio permitidos / no permitidos

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list

Este parámetro permite establecer una lista de usuarios que tendrán un comportamiento excepcional en cuanto al enjaulamiento en sus directorios personales.

La función de este parámetro es más simple de lo que parece. Con el parámetro chroot_local_user se decide si TODOS los usuarios del sistema estarán enjaulados o no. Con el parámetro chroot_list_enable se decide si hay excepciones para dicho enjaulamiento. Se puede considerar como una lista de excepciones a la norma general de chroot_local_user.

Así, si se desea tener una lista de usuarios a los que no se le aplique la configuración de chroot_local_user se configura la directiva chroot_list_enables con el valor YES.

Ahora se deben especificar los usuarios excepcionales a los que no se les aplicará la configuración de chroot_local_user. Estos usuarios serán aquellos cuyos nombres de usuario se encuentren en el fichero definido en chroot_list_file.

De esta forma, si chroot_local_user = YES todos los usuarios locales del sistema estarán enjaulados. Al activar la lista de excepciones con chroot_list_enable = YES, se configura el servidor para que los usuarios en la lista no estén enjaulados (son la excepción).

Por el contrario, si chroot_local_user = NO, todos los usuarios locales del sistema no estarán enjaulados, pudiendo moverse por el sistema de ficheros cuando acceden a través de FTP. Al activar la lista de excepciones con chroot_list_enable = YES, se configura el servidor para que los usuarios en la lista estén enjaulados en su directorio personal, no pudiendo salir de éste (de nuevo, son la excepción al comportamiento general).

man

chroot_list_enable

If activated, you may provide a list of local users who are placed in a chroot() jail in their home directory upon login. The meaning is slightly different if chroot_local_user is set to YES. In this case, the list becomes a list of users which are NOT to be placed in a chroot() jail. By default, the file containing this list is /etc/vsftpd.chroot_list, but you may override this with the chroot_list_file setting. Default: NO.

Directorio base de vsftp – jaula

# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd

Directorio utilizado por el servidor FTP como directorio de trabajo para aquellos usuarios que no tengan definido un directorio de trabajo propio. Si se desea realizar operaciones de escritura, el usuario utilizado por vsftp deberá tener privilegios de escritura sobre este directorio.

Mensaje al entrar en directorios

# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES

Permite activar el envío de mensajes a usuarios remotos cuando acceden a determinados directorios.

Activa el log de las operaciones de subida y descarga.

# Activate logging of uploads/downloads.
xferlog_enable=YES

Si se activa, se almacenan en un fichero las operaciones de subida y descarga de ficheros. Por defecto, este fichero será /var/log/vsftpd.log, aunque se puede cambiar el fichero utilizando la opción xferlog_file.

Establecer el fichero de log del servidor FTP.

# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log

Utilizando esta directiva se puede especificar el fichero donde se almacenará el log de las operaciones de subida y descarga, si está activa la directiva xferlog_enable

Uso de un usuario sin privilegios

# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure

Se recomienda que se cree en el sistema un único usuario para el servidor ftp, de forma que esté aislado y sin privilegios en el sistema. De esta forma, las operaciones realizadas por el servidor FTP serán llevadas a cabo por este usuario sin privilegios.