Objetivo
El objetivo es instalar y configurar el servidor FTP en Debian 9 Stretch Linux permitiendo el acceso de usuarios anónimos o locales.
Sistema operativo y versiones de software
- Sistema operativo: – Debian 9 Estiramiento
- Software: – vsFTPd versión 3.0.3
Requisitos
Acceso privilegiado a
Dificultad
MEDIO
Convenios
- # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de
sudo
comando - $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios
Instrucciones
El siguiente tutorial explicará cómo instalar y configurar un servidor FTP usando vsFTPd
demonio. También discutirá varias configuraciones para permitir el acceso de escritura o solo lectura a usuarios anónimos, así como a usuarios locales.
Instalación de vsFTPd
Comencemos por la instalación del servidor vsFPTd y el cliente FTP:
# apt install vsftpd ftp
De manera predeterminada, el servidor vsFTPd viene configurado para permitir que los usuarios del sistema accedan a sus directorios principales con acceso de solo lectura. El siguiente es un archivo de configuración vsFTPd predeterminado /etc/vsftpd.conf
:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO
Como ya se mencionó, el archivo de configuración anterior solo otorgará acceso de solo lectura a cualquier usuario del sistema que figure en /etc/passwd
expediente. Usar ftp
comando e intente conectarse usando el nombre de usuario y la contraseña de cualquiera de los usuarios del sistema local:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 550 Permission denied.
Si solo necesita acceso de solo lectura por parte de sus usuarios locales, ya ha terminado.
Permitir acceso de escritura de usuario
Para agregar acceso de escritura para todos los usuarios locales del sistema, elimine el comentario o agregue la siguiente estrofa write_enable=YES
. El nuevo archivo de configuración consta de:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES
A continuación, reinicie su vsFTPd:
# systemctl restart vsftpd
Realiza una nueva prueba con ftp
comando para confirmar el acceso de escritura:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 150 Ok to send data. 226 Transfer complete. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 1000 1000 0 Jun 07 12:45 FILE.TXT 226 Directory send OK.
Permitir solo usuarios específicos
Por el momento nuestro servidor FTP permite el acceso a cualquier usuario del sistema definido dentro de /etc/passwd
expediente. Para permitir que solo usuarios específicos puedan iniciar sesión, podemos incluir las siguientes líneas en nuestro archivo de configuración:
userlist_file=/etc/vsftpd.userlist userlist_enable=YES
Lo anterior habilitará una lista de usuarios predefinida en la que cualquier usuario aparece dentro de /etc/vsftpd.userlist
(un nombre de usuario por línea) tendrá acceso denegado a FTP, mientras que todos los demás usuarios del sistema podrán iniciar sesión. Vamos a crear un nuevo /etc/vsftpd.userlist
lista de usuarios que consta de un solo usuario linuxconfig
:
# echo linuxconfig > /etc/vsftpd.userlist
Reinicie el servidor vsFTPd:
# systemctl restart vsftpd
Realiza una nueva prueba con ftp
comando para confirmar el acceso denegado al servidor FTP para linuxconfig
usuario:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): linuxconfig 530 Permission denied. Login failed. ftp>
Sin embargo, si necesita poder iniciar sesión solo con los usuarios definidos en /etc/vsftpd.userlist
, agregue la siguiente opción de configuración userlist_deny=NO
en su archivo de configuración de vsFTPd /etc/vsftpd.conf
. A continuación se muestra nuestro /etc/vsftpd.conf
actual archivo de configuración:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO
Permitir anónimo
En esta etapa también vamos a permitir el acceso de solo lectura por parte de usuarios anónimos. Comencemos creando un nuevo directorio que se usará como directorio raíz para un usuario anónimo, por ejemplo. /var/ftp
. Para fines de prueba, también podemos colocar algún archivo de prueba arbitrario dentro de /var/ftp
:
# mkdir /var/ftp/ # chmod 555 /var/ftp/ # chown ftp.ftp /var/ftp/ # touch /var/ftp/ANONYMOUS.TXT
Además, incluya las siguientes líneas en /etc/vsftpd.conf
archivo de configuración para definir el directorio de inicio anónimo y el acceso anónimo:
anon_root=/var/ftp anonymous_enable=YES
Opcionalmente, agregue no_anon_password=YES
para indicarle a vsFTPd que permita que un usuario anónimo inicie sesión automáticamente sin la contraseña. Como ahora hemos definido la lista de usuarios, también debemos agregar el anonymous
usuario a la lista:
# echo anonymous >> /etc/vsftpd.userlist # cat /etc/vsftpd.userlist linuxconfig anonymous
Como de costumbre, reinicie su servidor FTP y realice una validación de su configuración actual:
# systemctl restart vsftpd
Probar inicio de sesión anónimo:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 07 13:29 ANONYMOUS.TXT 226 Directory send OK. ftp>
A continuación puede encontrar nuestro archivo de configuración vsFTPd actual:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO anon_root=/var/ftp anonymous_enable=YES no_anon_password=YES
Habilitar acceso de escritura anónimo
A continuación, permitamos que un usuario anónimo cargue archivos y cree nuevos directorios y más. Para hacerlo, crea un nuevo directorio upload
dentro del /var/ftp
directorio:
# mkdir /var/ftp/upload # chown ftp.ftp /var/ftp/upload/
A continuación, agregue las siguientes líneas en su archivo de configuración de vsFTPd:
anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Reinicie su servidor:
# systemctl restart vsftpd
Después del reinicio, el usuario anónimo podrá cargar archivos, crear directorios y renombrar archivos:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 07 13:29 ANONYMOUS.TXT drwxr-xr-x 2 108 112 4096 Jun 07 13:57 upload 226 Directory send OK. ftp> cd upload 250 Directory successfully changed. ftp> put FILE.TXT local: FILE.TXT remote: FILE.TXT 200 EPRT command successful. Consider using EPSV. 150 Ok to send data. 226 Transfer complete. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 108 112 0 Jun 07 13:57 FILE.TXT 226 Directory send OK. ftp> rename FILE.TXT NEW.TXT 350 Ready for RNTO. 250 Rename successful. ftp> ls 200 EPRT command successful. Consider using EPSV. 150 Here comes the directory listing. -rw------- 1 108 112 0 Jun 07 13:57 NEW.TXT 226 Directory send OK. ftp>
A continuación puede encontrar nuestro archivo de configuración final de vsFTPd:
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO write_enable=YES userlist_file=/etc/vsftpd.userlist userlist_enable=YES userlist_deny=NO anon_root=/var/ftp anonymous_enable=YES no_anon_password=YES anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES
Apéndice
Mensaje de error:
# ftp localhost Connected to localhost. 220 (vsFTPd 3.0.3) Name (localhost:root): anonymous 500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. ftp>
Lo anterior indica que su anon_root
El directorio es escribible. La solución es hacerlo de solo lectura. Ejemplo:
# chmod 555 /var/ftp
Alternativamente, intente agregar la siguiente línea en su archivo de configuración de vsFTPd:
allow_writeable_chroot=YES