Very Secure FTP Daemon (Español)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Tango-preferences-desktop-locale.pngEste artículo o sección necesita ser traducido.Tango-preferences-desktop-locale.png

Notas: desactualizada (Discusión en Talk:Very Secure FTP Daemon (Español)#)

vsftpd es el "very secure ftp daemon" (demonio ftp muy seguro) , un pequeño pero eficiente servidor FTP.

Como puede correr con o sin xinetd, serán explicados los dos métodos.

Sin xinetd (simple)

En primer lugar, instala el paquete necesario con pacman:

# pacman -S vsftpd

/etc/vsftpd.conf es un archivo de configuración muy bien documentado, pero estas son las cosas básicas para configurar (leer el resto del archivo):

listen=YES          # Permite a vsftpd actuar como un servidor independiente
anonymous_enable=NO # Si lo deseas, puedes acceder al servidor de forma anónima
local_enable=YES    # Esto permite a los usuarios acceso al servidor FTP local
write_enable=YES    # Sea muy cuidadoso usando anonymous_enable=YES

Luego anexar 'vsftpd: ALL' a tu archivo /etc/hosts.allow. Luego puedes iniciar el servidor con el comando /etc/rc.d/vsftpd start. Agregalo a su lista de DAEMONS en /etc/rc.conf si quieres que inice cuando el sistema operativo lo haga.

Usando xinetd

Primero, instala con pacman los paquetes que vas a necesitar:

# pacman -S xinetd vsftpd

Los siguientes archivos de configuración necesitarán ser modificados:

/etc/xinetd.d/vsftpd:

service ftp
{
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/vsftpd
        log_on_success  += HOST DURATION
        log_on_failure  += HOST
        disable                 = no
}

/etc/vsftpd.conf es un archivo de configuracion muy bien documentado, pero hay cosas básicas que probablemente querras establecer:

anonymous_enable=NO      # Assuming you do not want anonymous ftp
local_enable=YES         # This lets local machine users log in
write_enable=YES    # Be really careful using this with anonymous_enable=YES
tcp_wrappers=YES    # Use tcp_wrappers to control connections. Then allow in hosts.allow
pam_service_name=vsftpd

/etc/hosts.allow - agrega las siguientes entradas (por razones de seguridad hosts.allow puede ser configurado de otra forma. /etc/hosts.deny y /etc/hosts.allow

vsftpd: ALL

Finalmente, agrega xinetd a tu lista de daemons o demonios en /etc/rc.conf. No necesitas agregarvsftpd, ya que será llamado por xinetd siempre que sea necesario.

Si obtienes errores como

500 OOPS: cap_set_proc

cuando te conectes al servidor, necesitas agregar capability en la línea MODULES= en /etc/rc.conf.

Cuando actualizas a version 2.1.0 podrías obtener un error como estecuando te estés conectando al servidor desde un cliente:

500 OOPS: could not bind listening IPv4 socket

En versiones anteriores ha sido suficiente con dejar comentadas las siguientes líneas:

# Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd
# listen=YES

En esta nueva versión, y probablemente en las futuras, es necesario configurarlo explícitamente para que no fncione en forma independiente, asi:

# Use this to use vsftpd in standalone mode, otherwise it runs through (x)inetd
listen=NO

PAM con usuarios virtuales

Al usar usuarios virtuales está la ventaja de no requerir una sesion real del usuario en el sistema. Mantener el ambiente en un recipiente es, por supuesto, una opción mas segura.

Una base de datos de usuarios virtuales debe ser creada primero haciendo un simple archivo de texto como el siguiente:

user1
password1
user2
password2

Incluye el número de usuarios virtuales que desees de acuerdo con la estructura del ejemplo. Guárdalo como logins.txt; el nombre del archivo no tiene ningun significado. El siguiente paso depende del sistema de base de datos de Berkeley, que se incluye en el sistema base de Arch. Como root crea la actual base de datos con la ayuda del archivo logins .txt , o el nombre que haya elegido:

# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db

Es recomendado restringir permisos al nuevo archivo creado vsftpd_login.db :

# chmod 600 /etc/vsftpd_login.db
Advertencia: Tenga en cuenta que guardar passwords en un archivo de texto plano no es seguro. No olvides borrar tu archivo temporal con rm logins.txt.

PAM debe ser ahora configurado para que use vsftpd_login.db. Para hacer que PAM compruebe la autenticación de usuarios crea un archivo llamado ftp en el directorio /etc/pam.d/ con la siguiente información:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash 
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login crypt=hash

Atención! Usamos /etc/vsftpd_login sin la extension .db en PAM-config! Ahora es la hora de crear un home para los usuarios virtuales. En el ejemplo /srv/ftp es usada para alojar datos para los usuarios virtuales, lo que refleja tambien la estructura de directorios por defecto de Arch. Primero crea el usuario virtual general y haz que su home sea /srv/ftp :

# useradd -d /srv/ftp virtual

Hacer vitual al propietario:

# chown virtual:virtual /srv/ftp

Configura vsftpd para usar el entorno creado editando /etc/vsftpd.conf. Estas son los ajustes necesarios para hacer que vsftpd restrinja el acceso a usuarios virtuales, a traves de usuario y contraseña, y restringir su acceso al area especificada /srv/ftp:

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
virtual_use_local_privs=YES

Si el método xinetd es usado, inicia el servicio ej: '/etc/rc.d/xinetd start'. Ahra deberías estar permitido de iniciar sesión a traves de un usuario y una contraseña de acuerdo con la base de datos creada.

Para agregar carpetas privadas para los usuarios virtuales

Primero crea sus directorios

# mkdir /srv/ftp/usuario1
# mkdir /srv/ftp/usuario2
# chown virtual:virtual /srv/ftp/user?/

Nuevamente, en tu archivo vsftpd.conf , agrega lo siguiente.

local_root=/srv/ftp/$USER
user_sub_token=$USER